Page MenuHomeCode

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/js/dojo/dijit/Calendar.js b/js/dojo/dijit/Calendar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/Calendar.js
@@ -0,0 +1,252 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Calendar"]){
+dojo._hasResource["dijit.Calendar"]=true;
+dojo.provide("dijit.Calendar");
+dojo.require("dojo.cldr.supplemental");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.Calendar",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/Calendar.html","<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" waiRole=\"presentation\">\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div class=\"dijitVisible\">\n\t\t\t\t\t<div class=\"dijitPopup dijitMenu dijitMenuPassive dijitHidden\" dojoAttachPoint=\"monthDropDown\" dojoAttachEvent=\"onmouseup: _onMonthSelect, onmouseover: _onMenuHover, onmouseout: _onMenuHover\">\n\t\t\t\t\t\t<div class=\"dijitCalendarMonthLabelTemplate dijitCalendarMonthLabel\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel dijitInline dijitVisible\" dojoAttachEvent=\"onmousedown: _onMonthToggle\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" waiRole=\"presentation\">\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),value:new Date(),datePackage:"dojo.date",dayWidth:"narrow",tabIndex:"0",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{tabIndex:"domNode"}),setValue:function(_1){
+dojo.deprecated("dijit.Calendar:setValue() is deprecated. Use attr('value', ...) instead.","","2.0");
+this.attr("value",_1);
+},_getValueAttr:function(){
+var _2=new this.dateClassObj(this.value);
+_2.setHours(0,0,0,0);
+if(_2.getDate()<this.value.getDate()){
+_2=this.dateFuncObj.add(_2,"hour",1);
+}
+return _2;
+},_setValueAttr:function(_3){
+if(!this.value||this.dateFuncObj.compare(_3,this.value)){
+_3=new this.dateClassObj(_3);
+_3.setHours(1);
+this.displayMonth=new this.dateClassObj(_3);
+if(!this.isDisabledDate(_3,this.lang)){
+this.value=_3;
+this.onChange(this.attr("value"));
+}
+dojo.attr(this.domNode,"aria-label",this.dateLocaleModule.format(_3,{selector:"date",formatLength:"full"}));
+this._populateGrid();
+}
+},_setText:function(_4,_5){
+while(_4.firstChild){
+_4.removeChild(_4.firstChild);
+}
+_4.appendChild(dojo.doc.createTextNode(_5));
+},_populateGrid:function(){
+var _6=this.displayMonth;
+_6.setDate(1);
+var _7=_6.getDay(),_8=this.dateFuncObj.getDaysInMonth(_6),_9=this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(_6,"month",-1)),_a=new this.dateClassObj(),_b=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+if(_b>_7){
+_b-=7;
+}
+dojo.query(".dijitCalendarDateTemplate",this.domNode).forEach(function(_c,i){
+i+=_b;
+var _d=new this.dateClassObj(_6),_e,_f="dijitCalendar",adj=0;
+if(i<_7){
+_e=_9-_7+i+1;
+adj=-1;
+_f+="Previous";
+}else{
+if(i>=(_7+_8)){
+_e=i-_7-_8+1;
+adj=1;
+_f+="Next";
+}else{
+_e=i-_7+1;
+_f+="Current";
+}
+}
+if(adj){
+_d=this.dateFuncObj.add(_d,"month",adj);
+}
+_d.setDate(_e);
+if(!this.dateFuncObj.compare(_d,_a,"date")){
+_f="dijitCalendarCurrentDate "+_f;
+}
+if(this._isSelectedDate(_d,this.lang)){
+_f="dijitCalendarSelectedDate "+_f;
+}
+if(this.isDisabledDate(_d,this.lang)){
+_f="dijitCalendarDisabledDate "+_f;
+}
+var _10=this.getClassForDate(_d,this.lang);
+if(_10){
+_f=_10+" "+_f;
+}
+_c.className=_f+"Month dijitCalendarDateTemplate";
+_c.dijitDateValue=_d.valueOf();
+var _11=dojo.query(".dijitCalendarDateLabel",_c)[0],_12=_d.getDateLocalized?_d.getDateLocalized(this.lang):_d.getDate();
+this._setText(_11,_12);
+},this);
+var _13=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang);
+this._setText(this.monthLabelNode,_13[_6.getMonth()]);
+var y=_6.getFullYear()-1;
+var d=new this.dateClassObj();
+dojo.forEach(["previous","current","next"],function(_14){
+d.setFullYear(y++);
+this._setText(this[_14+"YearLabelNode"],this.dateLocaleModule.format(d,{selector:"year",locale:this.lang}));
+},this);
+var _15=this;
+var _16=function(_17,_18,adj){
+_15._connects.push(dijit.typematic.addMouseListener(_15[_17],_15,function(_19){
+if(_19>=0){
+_15._adjustDisplay(_18,adj);
+}
+},0.8,500));
+};
+_16("incrementMonth","month",1);
+_16("decrementMonth","month",-1);
+_16("nextYearLabelNode","year",1);
+_16("previousYearLabelNode","year",-1);
+},goToToday:function(){
+this.attr("value",new this.dateClassObj());
+},constructor:function(_1a){
+var _1b=(_1a.datePackage&&(_1a.datePackage!="dojo.date"))?_1a.datePackage+".Date":"Date";
+this.dateClassObj=dojo.getObject(_1b,false);
+this.datePackage=_1a.datePackage||this.datePackage;
+this.dateFuncObj=dojo.getObject(this.datePackage,false);
+this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);
+},postMixInProperties:function(){
+if(isNaN(this.value)){
+delete this.value;
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.domNode,false);
+var _1c=dojo.hitch(this,function(_1d,n){
+var _1e=dojo.query(_1d,this.domNode)[0];
+for(var i=0;i<n;i++){
+_1e.parentNode.appendChild(_1e.cloneNode(true));
+}
+});
+_1c(".dijitCalendarDayLabelTemplate",6);
+_1c(".dijitCalendarDateTemplate",6);
+_1c(".dijitCalendarWeekTemplate",5);
+var _1f=this.dateLocaleModule.getNames("days",this.dayWidth,"standAlone",this.lang);
+var _20=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_21,i){
+this._setText(_21,_1f[(i+_20)%7]);
+},this);
+var _22=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang);
+_1c(".dijitCalendarMonthLabelTemplate",_22.length-1);
+dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(_23,i){
+dojo.attr(_23,"month",i);
+this._setText(_23,_22[i]);
+dojo.place(_23.cloneNode(true),this.monthLabelSpacer);
+},this);
+var _24=this.value;
+this.value=null;
+this.attr("value",new this.dateClassObj(_24));
+},_onMenuHover:function(e){
+dojo.stopEvent(e);
+dojo.toggleClass(e.target,"dijitMenuItemHover");
+},_adjustDisplay:function(_25,_26){
+this.displayMonth=this.dateFuncObj.add(this.displayMonth,_25,_26);
+this._populateGrid();
+},_onMonthToggle:function(evt){
+dojo.stopEvent(evt);
+if(evt.type=="mousedown"){
+var _27=dojo.position(this.monthLabelNode);
+var dim={width:_27.w+"px",top:-this.displayMonth.getMonth()*_27.h+"px"};
+if((dojo.isIE&&dojo.isQuirks)||dojo.isIE<7){
+dim.left=-_27.w/2+"px";
+}
+dojo.style(this.monthDropDown,dim);
+this._popupHandler=this.connect(document,"onmouseup","_onMonthToggle");
+}else{
+this.disconnect(this._popupHandler);
+delete this._popupHandler;
+}
+dojo.toggleClass(this.monthDropDown,"dijitHidden");
+dojo.toggleClass(this.monthLabelNode,"dijitVisible");
+},_onMonthSelect:function(evt){
+this._onMonthToggle(evt);
+this.displayMonth.setMonth(dojo.attr(evt.target,"month"));
+this._populateGrid();
+},_onDayClick:function(evt){
+dojo.stopEvent(evt);
+for(var _28=evt.target;_28&&!_28.dijitDateValue;_28=_28.parentNode){
+}
+if(_28&&!dojo.hasClass(_28,"dijitCalendarDisabledDate")){
+this.attr("value",_28.dijitDateValue);
+this.onValueSelected(this.attr("value"));
+}
+},_onDayMouseOver:function(evt){
+var _29=evt.target;
+if(_29&&(_29.dijitDateValue||_29==this.previousYearLabelNode||_29==this.nextYearLabelNode)){
+dojo.addClass(_29,"dijitCalendarHoveredDate");
+this._currentNode=_29;
+}
+},_onDayMouseOut:function(evt){
+if(!this._currentNode){
+return;
+}
+for(var _2a=evt.relatedTarget;_2a;){
+if(_2a==this._currentNode){
+return;
+}
+try{
+_2a=_2a.parentNode;
+}
+catch(x){
+_2a=null;
+}
+}
+dojo.removeClass(this._currentNode,"dijitCalendarHoveredDate");
+this._currentNode=null;
+},_onKeyPress:function(evt){
+var dk=dojo.keys,_2b=-1,_2c,_2d=this.value;
+switch(evt.keyCode){
+case dk.RIGHT_ARROW:
+_2b=1;
+case dk.LEFT_ARROW:
+_2c="day";
+if(!this.isLeftToRight()){
+_2b*=-1;
+}
+break;
+case dk.DOWN_ARROW:
+_2b=1;
+case dk.UP_ARROW:
+_2c="week";
+break;
+case dk.PAGE_DOWN:
+_2b=1;
+case dk.PAGE_UP:
+_2c=evt.ctrlKey?"year":"month";
+break;
+case dk.END:
+_2d=this.dateFuncObj.add(_2d,"month",1);
+_2c="day";
+case dk.HOME:
+_2d=new Date(_2d).setDate(1);
+break;
+case dk.ENTER:
+this.onValueSelected(this.attr("value"));
+break;
+case dk.ESCAPE:
+default:
+return;
+}
+dojo.stopEvent(evt);
+if(_2c){
+_2d=this.dateFuncObj.add(_2d,_2c,_2b);
+}
+this.attr("value",_2d);
+},onValueSelected:function(_2e){
+},onChange:function(_2f){
+},_isSelectedDate:function(_30,_31){
+return !this.dateFuncObj.compare(_30,this.value,"date");
+},isDisabledDate:function(_32,_33){
+},getClassForDate:function(_34,_35){
+}});
+}
diff --git a/js/dojo/dijit/CheckedMenuItem.js b/js/dojo/dijit/CheckedMenuItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/CheckedMenuItem.js
@@ -0,0 +1,24 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.CheckedMenuItem"]){
+dojo._hasResource["dijit.CheckedMenuItem"]=true;
+dojo.provide("dijit.CheckedMenuItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_1){
+dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_1);
+dijit.setWaiState(this.domNode,"checked",_1);
+this.checked=_1;
+},onChange:function(_2){
+},_onClick:function(e){
+if(!this.disabled){
+this.attr("checked",!this.checked);
+this.onChange(this.checked);
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/DialogUnderlay.js b/js/dojo/dijit/DialogUnderlay.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/DialogUnderlay.js
@@ -0,0 +1,41 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.DialogUnderlay"]){
+dojo._hasResource["dijit.DialogUnderlay"]=true;
+dojo.provide("dijit.DialogUnderlay");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){
+dojo.attr(this.node,"id",id+"_underlay");
+},_setClassAttr:function(_1){
+this.node.className="dijitDialogUnderlay "+_1;
+},postCreate:function(){
+dojo.body().appendChild(this.domNode);
+},layout:function(){
+var is=this.node.style,os=this.domNode.style;
+os.display="none";
+var _2=dijit.getViewport();
+os.top=_2.t+"px";
+os.left=_2.l+"px";
+is.width=_2.w+"px";
+is.height=_2.h+"px";
+os.display="block";
+},show:function(){
+this.domNode.style.display="block";
+this.layout();
+this.bgIframe=new dijit.BackgroundIframe(this.domNode);
+},hide:function(){
+this.bgIframe.destroy();
+this.domNode.style.display="none";
+},uninitialize:function(){
+if(this.bgIframe){
+this.bgIframe.destroy();
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/MenuBar.js b/js/dojo/dijit/MenuBar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/MenuBar.js
@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuBar"]){
+dojo._hasResource["dijit.MenuBar"]=true;
+dojo.provide("dijit.MenuBar");
+dojo.require("dijit.Menu");
+dojo.declare("dijit.MenuBar",dijit._MenuBase,{templateString:dojo.cache("dijit","templates/MenuBar.html","<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\" waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),_isMenuBar:true,constructor:function(){
+this._orient=this.isLeftToRight()?{BL:"TL"}:{BR:"TR"};
+},postCreate:function(){
+var k=dojo.keys,l=this.isLeftToRight();
+this.connectKeyNavHandlers(l?[k.LEFT_ARROW]:[k.RIGHT_ARROW],l?[k.RIGHT_ARROW]:[k.LEFT_ARROW]);
+},focusChild:function(_1){
+var _2=this.focusedChild,_3=_2&&_2.popup&&_2.popup.isShowingNow;
+this.inherited(arguments);
+if(_3&&_1.popup&&!_1.disabled){
+this._openPopup();
+}
+},_onKeyPress:function(_4){
+if(_4.ctrlKey||_4.altKey){
+return;
+}
+switch(_4.charOrCode){
+case dojo.keys.DOWN_ARROW:
+this._moveToPopup(_4);
+dojo.stopEvent(_4);
+}
+},onItemClick:function(_5,_6){
+if(_5.popup&&_5.popup.isShowingNow){
+_5.popup.onCancel();
+}else{
+this.inherited(arguments);
+}
+}});
+}
diff --git a/js/dojo/dijit/MenuBarItem.js b/js/dojo/dijit/MenuBarItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/MenuBarItem.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuBarItem"]){
+dojo._hasResource["dijit.MenuBarItem"]=true;
+dojo.provide("dijit.MenuBarItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit._MenuBarItemMixin",null,{templateString:dojo.cache("dijit","templates/MenuBarItem.html","<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"'\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"}})});
+dojo.declare("dijit.MenuBarItem",[dijit.MenuItem,dijit._MenuBarItemMixin],{});
+}
diff --git a/js/dojo/dijit/MenuItem.js b/js/dojo/dijit/MenuItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/MenuItem.js
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuItem"]){
+dojo._hasResource["dijit.MenuItem"]=true;
+dojo.provide("dijit.MenuItem");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\">\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_1){
+if(_1&&!("label" in this.params)){
+this.attr("label",_1.innerHTML);
+}
+},postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+var _2=this.id+"_text";
+dojo.attr(this.containerNode,"id",_2);
+if(this.accelKeyNode){
+dojo.attr(this.accelKeyNode,"id",this.id+"_accel");
+_2+=" "+this.id+"_accel";
+}
+dijit.setWaiState(this.domNode,"labelledby",_2);
+},_onHover:function(){
+dojo.addClass(this.domNode,"dijitMenuItemHover");
+this.getParent().onItemHover(this);
+},_onUnhover:function(){
+dojo.removeClass(this.domNode,"dijitMenuItemHover");
+this.getParent().onItemUnhover(this);
+},_onClick:function(_3){
+this.getParent().onItemClick(this,_3);
+dojo.stopEvent(_3);
+},onClick:function(_4){
+},focus:function(){
+try{
+if(dojo.isIE==8){
+this.containerNode.focus();
+}
+dijit.focus(this.focusNode);
+}
+catch(e){
+}
+},_onFocus:function(){
+this._setSelected(true);
+this.getParent()._onItemFocus(this);
+this.inherited(arguments);
+},_setSelected:function(_5){
+dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_5);
+},setLabel:function(_6){
+dojo.deprecated("dijit.MenuItem.setLabel() is deprecated. Use attr('label', ...) instead.","","2.0");
+this.attr("label",_6);
+},setDisabled:function(_7){
+dojo.deprecated("dijit.Menu.setDisabled() is deprecated. Use attr('disabled', bool) instead.","","2.0");
+this.attr("disabled",_7);
+},_setDisabledAttr:function(_8){
+this.disabled=_8;
+dojo[_8?"addClass":"removeClass"](this.domNode,"dijitMenuItemDisabled");
+dijit.setWaiState(this.focusNode,"disabled",_8?"true":"false");
+},_setAccelKeyAttr:function(_9){
+this.accelKey=_9;
+this.accelKeyNode.style.display=_9?"":"none";
+this.accelKeyNode.innerHTML=_9;
+dojo.attr(this.containerNode,"colSpan",_9?"1":"2");
+}});
+}
diff --git a/js/dojo/dijit/MenuSeparator.js b/js/dojo/dijit/MenuSeparator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/MenuSeparator.js
@@ -0,0 +1,19 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuSeparator"]){
+dojo._hasResource["dijit.MenuSeparator"]=true;
+dojo.provide("dijit.MenuSeparator");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td colspan=\"4\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+}
diff --git a/js/dojo/dijit/PopupMenuBarItem.js b/js/dojo/dijit/PopupMenuBarItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/PopupMenuBarItem.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.PopupMenuBarItem"]){
+dojo._hasResource["dijit.PopupMenuBarItem"]=true;
+dojo.provide("dijit.PopupMenuBarItem");
+dojo.require("dijit.PopupMenuItem");
+dojo.require("dijit.MenuBarItem");
+dojo.declare("dijit.PopupMenuBarItem",[dijit.PopupMenuItem,dijit._MenuBarItemMixin],{});
+}
diff --git a/js/dojo/dijit/PopupMenuItem.js b/js/dojo/dijit/PopupMenuItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/PopupMenuItem.js
@@ -0,0 +1,42 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.PopupMenuItem"]){
+dojo._hasResource["dijit.PopupMenuItem"]=true;
+dojo.provide("dijit.PopupMenuItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){
+if(this.srcNodeRef){
+var _1=dojo.query("*",this.srcNodeRef);
+dijit.PopupMenuItem.superclass._fillContent.call(this,_1[0]);
+this.dropDownContainer=this.srcNodeRef;
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.popup){
+var _2=dojo.query("[widgetId]",this.dropDownContainer)[0];
+this.popup=dijit.byNode(_2);
+}
+dojo.body().appendChild(this.popup.domNode);
+this.popup.domNode.style.display="none";
+if(this.arrowWrapper){
+dojo.style(this.arrowWrapper,"visibility","");
+}
+dijit.setWaiState(this.focusNode,"haspopup","true");
+},destroyDescendants:function(){
+if(this.popup){
+if(!this.popup._destroyed){
+this.popup.destroyRecursive();
+}
+delete this.popup;
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/ToolbarSeparator.js b/js/dojo/dijit/ToolbarSeparator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/ToolbarSeparator.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.ToolbarSeparator"]){
+dojo._hasResource["dijit.ToolbarSeparator"]=true;
+dojo.provide("dijit.ToolbarSeparator");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\"></div>",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+}
diff --git a/js/dojo/dijit/TooltipDialog.js b/js/dojo/dijit/TooltipDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/TooltipDialog.js
@@ -0,0 +1,66 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.TooltipDialog"]){
+dojo._hasResource["dijit.TooltipDialog"]=true;
+dojo.provide("dijit.TooltipDialog");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form._FormMixin");
+dojo.require("dijit._DialogMixin");
+dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:dojo.cache("dijit","templates/TooltipDialog.html","<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),postCreate:function(){
+this.inherited(arguments);
+this.connect(this.containerNode,"onkeypress","_onKey");
+this.containerNode.title=this.title;
+},orient:function(_1,_2,_3){
+var c=this._currentOrientClass;
+if(c){
+dojo.removeClass(this.domNode,c);
+}
+c="dijitTooltipAB"+(_3.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_3.charAt(0)=="T"?"Below":"Above");
+dojo.addClass(this.domNode,c);
+this._currentOrientClass=c;
+},onOpen:function(_4){
+this.orient(this.domNode,_4.aroundCorner,_4.corner);
+this._onShow();
+if(this.autofocus){
+this._getFocusItems(this.containerNode);
+dijit.focus(this._firstFocusItem);
+}
+},onClose:function(){
+this.onHide();
+},_onKey:function(_5){
+var _6=_5.target;
+var dk=dojo.keys;
+if(_5.charOrCode===dk.TAB){
+this._getFocusItems(this.containerNode);
+}
+var _7=(this._firstFocusItem==this._lastFocusItem);
+if(_5.charOrCode==dk.ESCAPE){
+setTimeout(dojo.hitch(this,"onCancel"),0);
+dojo.stopEvent(_5);
+}else{
+if(_6==this._firstFocusItem&&_5.shiftKey&&_5.charOrCode===dk.TAB){
+if(!_7){
+dijit.focus(this._lastFocusItem);
+}
+dojo.stopEvent(_5);
+}else{
+if(_6==this._lastFocusItem&&_5.charOrCode===dk.TAB&&!_5.shiftKey){
+if(!_7){
+dijit.focus(this._firstFocusItem);
+}
+dojo.stopEvent(_5);
+}else{
+if(_5.charOrCode===dk.TAB){
+_5.stopPropagation();
+}
+}
+}
+}
+}});
+}
diff --git a/js/dojo/dijit/_Contained.js b/js/dojo/dijit/_Contained.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_Contained.js
@@ -0,0 +1,31 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Contained"]){
+dojo._hasResource["dijit._Contained"]=true;
+dojo.provide("dijit._Contained");
+dojo.declare("dijit._Contained",null,{getParent:function(){
+var _1=dijit.getEnclosingWidget(this.domNode.parentNode);
+return _1&&_1.isContainer?_1:null;
+},_getSibling:function(_2){
+var _3=this.domNode;
+do{
+_3=_3[_2+"Sibling"];
+}while(_3&&_3.nodeType!=1);
+return _3&&dijit.byNode(_3);
+},getPreviousSibling:function(){
+return this._getSibling("previous");
+},getNextSibling:function(){
+return this._getSibling("next");
+},getIndexInParent:function(){
+var p=this.getParent();
+if(!p||!p.getIndexOfChild){
+return -1;
+}
+return p.getIndexOfChild(this);
+}});
+}
diff --git a/js/dojo/dijit/_DialogMixin.js b/js/dojo/dijit/_DialogMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_DialogMixin.js
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._DialogMixin"]){
+dojo._hasResource["dijit._DialogMixin"]=true;
+dojo.provide("dijit._DialogMixin");
+dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_1){
+},onCancel:function(){
+},onExecute:function(){
+},_onSubmit:function(){
+this.onExecute();
+this.execute(this.attr("value"));
+},_getFocusItems:function(_2){
+var _3=dijit._getTabNavigable(dojo.byId(_2));
+this._firstFocusItem=_3.lowest||_3.first||_2;
+this._lastFocusItem=_3.last||_3.highest||this._firstFocusItem;
+if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){
+dojo.attr(_2,"tabIndex","0");
+this._firstFocusItem=_2;
+}
+}});
+}
diff --git a/js/dojo/dijit/_HasDropDown.js b/js/dojo/dijit/_HasDropDown.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_HasDropDown.js
@@ -0,0 +1,221 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._HasDropDown"]){
+dojo._hasResource["dijit._HasDropDown"]=true;
+dojo.provide("dijit._HasDropDown");
+dojo.require("dijit._base.place");
+dojo.require("dijit._Widget");
+dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouse:function(e){
+if(e.type=="click"&&!this._seenKeydown){
+return;
+}
+this._seenKeydown=false;
+if(e.type=="mousedown"){
+this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseup");
+}
+if(this.disabled||this.readOnly){
+return;
+}
+if(this._stopClickEvents){
+dojo.stopEvent(e);
+}
+this.toggleDropDown();
+if(e.type=="click"||e.type=="keypress"){
+this._onDropDownMouseup();
+}
+},_onDropDownMouseup:function(e){
+if(e&&this._docHandler){
+this.disconnect(this._docHandler);
+}
+var _1=this.dropDown,_2=false;
+if(e&&this._opened){
+var c=dojo.position(this._buttonNode,true);
+if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){
+var t=e.target;
+while(t&&!_2){
+if(dojo.hasClass(t,"dijitPopup")){
+_2=true;
+}else{
+t=t.parentNode;
+}
+}
+if(_2){
+t=e.target;
+if(_1.onItemClick){
+var _3;
+while(t&&!(_3=dijit.byNode(t))){
+t=t.parentNode;
+}
+if(_3&&_3.onClick&&_3.getParent){
+_3.getParent().onItemClick(_3,e);
+}
+}
+return;
+}
+}
+}
+if(this._opened&&_1.focus){
+window.setTimeout(dojo.hitch(_1,"focus"),1);
+}
+},_setupDropdown:function(){
+this._buttonNode=this._buttonNode||this.focusNode||this.domNode;
+this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;
+this._aroundNode=this._aroundNode||this.domNode;
+this.connect(this._buttonNode,"onmousedown","_onDropDownMouse");
+this.connect(this._buttonNode,"onclick","_onDropDownMouse");
+this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");
+this.connect(this._buttonNode,"onblur","_onDropDownBlur");
+this.connect(this._buttonNode,"onkeypress","_onKey");
+if(this._setStateClass){
+this.connect(this,"openDropDown","_setStateClass");
+this.connect(this,"closeDropDown","_setStateClass");
+}
+var _4={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";
+dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_4+"ArrowButton");
+},postCreate:function(){
+this._setupDropdown();
+this.inherited(arguments);
+},destroyDescendants:function(){
+if(this.dropDown){
+if(!this.dropDown._destroyed){
+this.dropDown.destroyRecursive();
+}
+delete this.dropDown;
+}
+this.inherited(arguments);
+},_onDropDownKeydown:function(e){
+this._seenKeydown=true;
+},_onKeyPress:function(e){
+if(this._opened&&e.charOrCode==dojo.keys.ESCAPE&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){
+this.toggleDropDown();
+dojo.stopEvent(e);
+return;
+}
+this.inherited(arguments);
+},_onDropDownBlur:function(e){
+this._seenKeydown=false;
+},_onKey:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+var d=this.dropDown;
+if(d&&this._opened&&d.handleKey){
+if(d.handleKey(e)===false){
+return;
+}
+}
+if(d&&this._opened&&e.keyCode==dojo.keys.ESCAPE){
+this.toggleDropDown();
+return;
+}
+if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.charOrCode==" "){
+this._onDropDownMouse(e);
+}
+},_onBlur:function(){
+this.closeDropDown();
+this.inherited(arguments);
+},isLoaded:function(){
+return true;
+},loadDropDown:function(_5){
+_5();
+},toggleDropDown:function(){
+if(this.disabled||this.readOnly){
+return;
+}
+this.focus();
+var _6=this.dropDown;
+if(!_6){
+return;
+}
+if(!this._opened){
+if(!this.isLoaded()){
+this.loadDropDown(dojo.hitch(this,"openDropDown"));
+return;
+}else{
+this.openDropDown();
+}
+}else{
+this.closeDropDown();
+}
+},openDropDown:function(){
+var _7=this.dropDown;
+var _8=_7.domNode;
+var _9=this;
+if(!this._preparedNode){
+dijit.popup.moveOffScreen(_8);
+this._preparedNode=true;
+if(_8.style.width){
+this._explicitDDWidth=true;
+}
+if(_8.style.height){
+this._explicitDDHeight=true;
+}
+}
+if(this.maxHeight||this.forceWidth||this.autoWidth){
+var _a={display:"",visibility:"hidden"};
+if(!this._explicitDDWidth){
+_a.width="";
+}
+if(!this._explicitDDHeight){
+_a.height="";
+}
+dojo.style(_8,_a);
+var mb=dojo.marginBox(_8);
+var _b=(this.maxHeight&&mb.h>this.maxHeight);
+dojo.style(_8,{overflow:_b?"auto":"hidden"});
+if(this.forceWidth){
+mb.w=this.domNode.offsetWidth;
+}else{
+if(this.autoWidth){
+mb.w=Math.max(mb.w,this.domNode.offsetWidth);
+}else{
+delete mb.w;
+}
+}
+if(_b){
+mb.h=this.maxHeight;
+if("w" in mb){
+mb.w+=16;
+}
+}else{
+delete mb.h;
+}
+delete mb.t;
+delete mb.l;
+if(dojo.isFunction(_7.resize)){
+_7.resize(mb);
+}else{
+dojo.marginBox(_8,mb);
+}
+}
+var _c=dijit.popup.open({parent:this,popup:_7,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){
+_9.closeDropDown(true);
+},onCancel:function(){
+_9.closeDropDown(true);
+},onClose:function(){
+dojo.attr(_9._popupStateNode,"popupActive",false);
+dojo.removeClass(_9._popupStateNode,"dijitHasDropDownOpen");
+_9._opened=false;
+_9.state="";
+}});
+dojo.attr(this._popupStateNode,"popupActive","true");
+dojo.addClass(_9._popupStateNode,"dijitHasDropDownOpen");
+this._opened=true;
+this.state="Opened";
+return _c;
+},closeDropDown:function(_d){
+if(this._opened){
+dijit.popup.close(this.dropDown);
+if(_d){
+this.focus();
+}
+this._opened=false;
+this.state="";
+}
+}});
+}
diff --git a/js/dojo/dijit/_KeyNavContainer.js b/js/dojo/dijit/_KeyNavContainer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_KeyNavContainer.js
@@ -0,0 +1,95 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._KeyNavContainer"]){
+dojo._hasResource["dijit._KeyNavContainer"]=true;
+dojo.provide("dijit._KeyNavContainer");
+dojo.require("dijit._Container");
+dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1,_2){
+var _3=(this._keyNavCodes={});
+var _4=dojo.hitch(this,this.focusPrev);
+var _5=dojo.hitch(this,this.focusNext);
+dojo.forEach(_1,function(_6){
+_3[_6]=_4;
+});
+dojo.forEach(_2,function(_7){
+_3[_7]=_5;
+});
+this.connect(this.domNode,"onkeypress","_onContainerKeypress");
+this.connect(this.domNode,"onfocus","_onContainerFocus");
+},startupKeyNavChildren:function(){
+dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));
+},addChild:function(_8,_9){
+dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);
+this._startupChild(_8);
+},focus:function(){
+this.focusFirstChild();
+},focusFirstChild:function(){
+var _a=this._getFirstFocusableChild();
+if(_a){
+this.focusChild(_a);
+}
+},focusNext:function(){
+var _b=this._getNextFocusableChild(this.focusedChild,1);
+this.focusChild(_b);
+},focusPrev:function(){
+var _c=this._getNextFocusableChild(this.focusedChild,-1);
+this.focusChild(_c,true);
+},focusChild:function(_d,_e){
+if(this.focusedChild&&_d!==this.focusedChild){
+this._onChildBlur(this.focusedChild);
+}
+_d.focus(_e?"end":"start");
+this.focusedChild=_d;
+},_startupChild:function(_f){
+_f.attr("tabIndex","-1");
+this.connect(_f,"_onFocus",function(){
+_f.attr("tabIndex",this.tabIndex);
+});
+this.connect(_f,"_onBlur",function(){
+_f.attr("tabIndex","-1");
+});
+},_onContainerFocus:function(evt){
+if(evt.target!==this.domNode){
+return;
+}
+this.focusFirstChild();
+dojo.attr(this.domNode,"tabIndex","-1");
+},_onBlur:function(evt){
+if(this.tabIndex){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+this.inherited(arguments);
+},_onContainerKeypress:function(evt){
+if(evt.ctrlKey||evt.altKey){
+return;
+}
+var _10=this._keyNavCodes[evt.charOrCode];
+if(_10){
+_10();
+dojo.stopEvent(evt);
+}
+},_onChildBlur:function(_11){
+},_getFirstFocusableChild:function(){
+return this._getNextFocusableChild(null,1);
+},_getNextFocusableChild:function(_12,dir){
+if(_12){
+_12=this._getSiblingOfChild(_12,dir);
+}
+var _13=this.getChildren();
+for(var i=0;i<_13.length;i++){
+if(!_12){
+_12=_13[(dir>0)?0:(_13.length-1)];
+}
+if(_12.isFocusable()){
+return _12;
+}
+_12=this._getSiblingOfChild(_12,dir);
+}
+return null;
+}});
+}
diff --git a/js/dojo/dijit/_editor/html.js b/js/dojo/dijit/_editor/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/html.js
@@ -0,0 +1,147 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.html"]){
+dojo._hasResource["dijit._editor.html"]=true;
+dojo.provide("dijit._editor.html");
+dijit._editor.escapeXml=function(_1,_2){
+_1=_1.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
+if(!_2){
+_1=_1.replace(/'/gm,"&#39;");
+}
+return _1;
+};
+dijit._editor.getNodeHtml=function(_3){
+var _4;
+switch(_3.nodeType){
+case 1:
+var _5=_3.nodeName.toLowerCase();
+if(_5.charAt(0)=="/"){
+return "";
+}
+_4="<"+_5;
+var _6=[];
+var _7;
+if(dojo.isIE&&_3.outerHTML){
+var s=_3.outerHTML;
+s=s.substr(0,s.indexOf(">")).replace(/(['"])[^"']*\1/g,"");
+var _8=/(\b\w+)\s?=/g;
+var m,_9;
+while((m=_8.exec(s))){
+_9=m[1];
+if(_9.substr(0,3)!="_dj"){
+if(_9=="src"||_9=="href"){
+if(_3.getAttribute("_djrealurl")){
+_6.push([_9,_3.getAttribute("_djrealurl")]);
+continue;
+}
+}
+var _a,_b;
+switch(_9){
+case "style":
+_a=_3.style.cssText.toLowerCase();
+break;
+case "class":
+_a=_3.className;
+break;
+case "width":
+if(_5==="img"){
+_b=/width=(\S+)/i.exec(s);
+if(_b){
+_a=_b[1];
+}
+break;
+}
+case "height":
+if(_5==="img"){
+_b=/height=(\S+)/i.exec(s);
+if(_b){
+_a=_b[1];
+}
+break;
+}
+default:
+_a=_3.getAttribute(_9);
+}
+if(_a!=null){
+_6.push([_9,_a.toString()]);
+}
+}
+}
+}else{
+var i=0;
+while((_7=_3.attributes[i++])){
+var n=_7.name;
+if(n.substr(0,3)!="_dj"){
+var v=_7.value;
+if(n=="src"||n=="href"){
+if(_3.getAttribute("_djrealurl")){
+v=_3.getAttribute("_djrealurl");
+}
+}
+_6.push([n,v]);
+}
+}
+}
+_6.sort(function(a,b){
+return a[0]<b[0]?-1:(a[0]==b[0]?0:1);
+});
+var j=0;
+while((_7=_6[j++])){
+_4+=" "+_7[0]+"=\""+(dojo.isString(_7[1])?dijit._editor.escapeXml(_7[1],true):_7[1])+"\"";
+}
+if(_5==="script"){
+_4+=">"+_3.innerHTML+"</"+_5+">";
+}else{
+if(_3.childNodes.length){
+_4+=">"+dijit._editor.getChildrenHtml(_3)+"</"+_5+">";
+}else{
+switch(_5){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+_4+=" />";
+break;
+default:
+_4+="></"+_5+">";
+}
+}
+}
+break;
+case 4:
+case 3:
+_4=dijit._editor.escapeXml(_3.nodeValue,true);
+break;
+case 8:
+_4="<!--"+dijit._editor.escapeXml(_3.nodeValue,true)+"-->";
+break;
+default:
+_4="<!-- Element not recognized - Type: "+_3.nodeType+" Name: "+_3.nodeName+"-->";
+}
+return _4;
+};
+dijit._editor.getChildrenHtml=function(_c){
+var _d="";
+if(!_c){
+return _d;
+}
+var _e=_c["childNodes"]||_c;
+var _f=!dojo.isIE||_e!==_c;
+var _10,i=0;
+while((_10=_e[i++])){
+if(!_f||_10.parentNode==_c){
+_d+=dijit._editor.getNodeHtml(_10);
+}
+}
+return _d;
+};
+}
diff --git a/js/dojo/dijit/_editor/nls/ar/FontChoice.js b/js/dojo/dijit/_editor/nls/ar/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ar/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"صغير جدا جدا","2":"صغير جدا","formatBlock":"النسق","3":"صغير","4":"متوسط","5":"كبير","6":"كبير جدا","7":"كبير جدا جدا","fantasy":"خيالي","serif":"serif","p":"فقرة","pre":"منسق بصفة مسبقة","sans-serif":"sans-serif","fontName":"طاقم طباعة","h1":"عنوان","h2":"عنوان فرعي","h3":"فرعي-عنوان فرعي","monospace":"أحادي المسافة","fontSize":"الحجم","cursive":"كتابة بحروف متصلة"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ar/LinkDialog.js b/js/dojo/dijit/_editor/nls/ar/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ar/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"تحديد","text":"الوصف:","insertImageTitle":"خصائص الصورة","url":"عنوان URL:","createLinkTitle":"خصائص الوصلة","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ar/commands.js b/js/dojo/dijit/_editor/nls/ar/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ar/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","underline":"تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","italic":"مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","fontSize":"حجم طاقم الطباعة","systemShortcut":"يكون التصرف \"${0}\" متاحا فقط ببرنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"اعادة","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عريض","tabIndent":"ازاحة علامة الجدولة للداخل","justifyRight":"محاذاة الى اليمين","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ca/FontChoice.js b/js/dojo/dijit/_editor/nls/ca/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ca/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-petit","2":"x-petit","formatBlock":"Format","3":"petit","4":"mitjà","5":"gran","6":"x-gran","7":"xx-gran","fantasy":"Fantasia","serif":"serif","p":"Paràgraf","pre":"Format previ","sans-serif":"sans-serif","fontName":"Tipus de lletra","h1":"Títol","h2":"Subtítol","h3":"Subsubtítol","monospace":"monoespai","fontSize":"Mida","cursive":"Cursiva"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ca/LinkDialog.js b/js/dojo/dijit/_editor/nls/ca/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ca/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Defineix","text":"Descripció:","insertImageTitle":"Propietats de la imatge","url":"URL:","createLinkTitle":"Propietats de l'enllaç","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ca/commands.js b/js/dojo/dijit/_editor/nls/ca/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ca/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","insertHorizontalRule":"Regle horitzontal","delete":"Suprimeix","insertUnorderedList":"Llista de vinyetes","tableProp":"Propietat de taula","insertImage":"Insereix imatge","superscript":"Superíndex","subscript":"Subíndex","createLink":"Crea un enllaç","undo":"Desfés","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","ctrlKey":"control+${0}","fontSize":"Cos de la lletra","systemShortcut":"L'acció \"${0}\" és l'única disponible al navegador utilitzant una drecera del teclat. Utilitzeu ${1}.","indent":"Sagnat","redo":"Refés","strikethrough":"Ratllat","justifyFull":"Justifica","justifyCenter":"Centra","hiliteColor":"Color de fons","deleteTable":"Suprimeix la taula","outdent":"Sagna a l'esquerra","cut":"Retalla","plainFormatBlock":"Estil de paràgraf","toggleDir":"Inverteix la direcció","bold":"Negreta","tabIndent":"Sagnat","justifyRight":"Alinea a la dreta","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/cs/FontChoice.js b/js/dojo/dijit/_editor/nls/cs/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/cs/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"extra malé","2":"velmi malé","formatBlock":"Formát","3":"malé","4":"střední","5":"velké","6":"velmi velké","7":"extra velké","fantasy":"fantasy","serif":"serif","p":"Odstavec","pre":"Předformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Nadpis","h2":"Podnadpis","h3":"Podnadpis 2","monospace":"monospace","fontSize":"Velikost","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/da/FontChoice.js b/js/dojo/dijit/_editor/nls/da/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/da/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Afsnit","pre":"Forudformateret","sans-serif":"sans-serif","fontName":"Skrifttype","h1":"Overskrift","h2":"Underoverskrift","h3":"Underunderoverskrift","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/da/LinkDialog.js b/js/dojo/dijit/_editor/nls/da/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/da/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Definér","text":"Beskrivelse:","insertImageTitle":"Billedegenskaber","url":"URL:","createLinkTitle":"Linkegenskaber","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/da/commands.js b/js/dojo/dijit/_editor/nls/da/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/da/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","insertHorizontalRule":"Vandret linje","delete":"Slet","insertUnorderedList":"Punktliste","tableProp":"Tabelegenskab","insertImage":"Indsæt billede","superscript":"Hævet skrift","subscript":"Sænket skrift","createLink":"Opret link","undo":"Fortryd","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i your browser med en tastaturgenvej. Brug ${1}.","indent":"Indrykning","redo":"Annullér Fortryd","strikethrough":"Gennemstreget","justifyFull":"Lige margener","justifyCenter":"Centreret","hiliteColor":"Baggrundsfarve","deleteTable":"Slet tabel","outdent":"Udrykning","cut":"Klip","plainFormatBlock":"Afsnitstypografi","toggleDir":"Skift retning","bold":"Fed","tabIndent":"Indrykning med tabulator","justifyRight":"Højrejusteret","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/de/FontChoice.js b/js/dojo/dijit/_editor/nls/de/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/de/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"XXS","2":"XS","formatBlock":"Format","3":"S","4":"M","5":"L","6":"XL","7":"XXL","fantasy":"Fantasie","serif":"Serife","p":"Absatz","pre":"Vorformatiert","sans-serif":"Serifenlos","fontName":"Schriftart","h1":"Überschrift","h2":"Unterüberschrift","h3":"Unterunterüberschrift","monospace":"Monospaceschrift","fontSize":"Größe","cursive":"Kursiv"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/el/FontChoice.js b/js/dojo/dijit/_editor/nls/el/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/el/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-μικρά","2":"x-μικρά","formatBlock":"Μορφή","3":"μικρά","4":"μεσαία","5":"μεγάλα","6":"x-μεγάλα","7":"xx-μεγάλα","fantasy":"φαντασίας","serif":"με πατούρες (serif)","p":"Παράγραφος","pre":"Προ-μορφοποιημένο","sans-serif":"χωρίς πατούρες (sans-serif)","fontName":"Γραμματοσειρά","h1":"Επικεφαλίδα","h2":"Δευτερεύουσα επικεφαλίδα","h3":"Δευτερεύουσα επικεφαλίδα τρίτου επιπέδου","monospace":"σταθερού πλάτους","fontSize":"Μέγεθος","cursive":"πλάγιοι"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/el/LinkDialog.js b/js/dojo/dijit/_editor/nls/el/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/el/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Ορισμός","text":"Περιγραφή:","insertImageTitle":"Ιδιότητες εικόνας","url":"Διεύθυνση URL:","createLinkTitle":"Ιδιότητες διασύνδεσης","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/el/commands.js b/js/dojo/dijit/_editor/nls/el/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/el/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Αφαίρεση μορφοποίησης","copy":"Αντιγραφή","paste":"Επικόλληση","selectAll":"Επιλογή όλων","insertOrderedList":"Αριθμημένη λίστα","insertTable":"Εισαγωγή/Τροποποίηση πίνακα","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία διασύνδεσης","undo":"Αναίρεση","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση διασύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/es/FontChoice.js b/js/dojo/dijit/_editor/nls/es/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/es/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-pequeño","2":"x-pequeño","formatBlock":"Formato","3":"pequeño","4":"medio","5":"grande","6":"x-grande","7":"xx-grande","fantasy":"fantasía","serif":"serif","p":"Párrafo","pre":"Preformateado","sans-serif":"sans-serif","fontName":"Font","h1":"Cabecera","h2":"Subcabecera","h3":"Sub-subcabecera","monospace":"espacio sencillo","fontSize":"Tamaño","cursive":"cursiva"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/fi/FontChoice.js b/js/dojo/dijit/_editor/nls/fi/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/fi/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Muoto","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Kappale","pre":"Esimuotoiltu","sans-serif":"sans-serif","fontName":"Fontti","h1":"Otsikko","h2":"Alatason otsikko","h3":"Alimman tason otsikko","monospace":"monospace","fontSize":"Koko","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/fi/LinkDialog.js b/js/dojo/dijit/_editor/nls/fi/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/fi/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Aseta","text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","url":"URL-osoite:","createLinkTitle":"Linkin ominaisuudet","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/fi/commands.js b/js/dojo/dijit/_editor/nls/fi/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/fi/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Korotettu","subscript":"Alennettu","createLink":"Luo linkki","undo":"Kumoa","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/fr/FontChoice.js b/js/dojo/dijit/_editor/nls/fr/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/fr/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xxs","2":"xs","formatBlock":"Mise en forme","3":"s","4":"m","5":"l","6":"xl","7":"xxl","fantasy":"fantaisie","serif":"serif","p":"Paragraphe","pre":"Pré-mise en forme","sans-serif":"sans serif","fontName":"Police","h1":"En-tête","h2":"Sous-en-tête","h3":"Sous-sous-en-tête","monospace":"espacement fixe","fontSize":"Taille","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/he/FontChoice.js b/js/dojo/dijit/_editor/nls/he/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/he/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"קטן ביות","2":"קטן מאוד","formatBlock":"עיצוב","3":"קטן","4":"בינוני","5":"גדול","6":"גדול מאוד","7":"גדול ביותר","fantasy":"fantasy","serif":"serif","p":"פיסקה","pre":"מעוצב מראש","sans-serif":"sans-serif","fontName":"גופן","h1":"כותרת","h2":"תת-כותרת","h3":"תת-תת-כותרת","monospace":"monospace","fontSize":"גודל","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/he/LinkDialog.js b/js/dojo/dijit/_editor/nls/he/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/he/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"הגדרה","text":"תיאור:","insertImageTitle":"תכונות תמונה","url":"URL:‏","createLinkTitle":"תכונות קישור","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/he/commands.js b/js/dojo/dijit/_editor/nls/he/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/he/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"סילוק עיצוב","copy":"העתקה","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","insertHorizontalRule":"קו אופקי","delete":"מחיקה","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/hu/FontChoice.js b/js/dojo/dijit/_editor/nls/hu/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/hu/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-kicsi","2":"x-kicsi","formatBlock":"Formátum","3":"kicsi","4":"közepes","5":"nagy","6":"x-nagy","7":"xx-nagy","fantasy":"fantázia","serif":"talpas","p":"Bekezdés","pre":"Előformázott","sans-serif":"talpatlan","fontName":"Betűtípus","h1":"Címsor","h2":"Alcím","h3":"Al-alcím","monospace":"rögzített szélességű","fontSize":"Méret","cursive":"kurzív"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/it/FontChoice.js b/js/dojo/dijit/_editor/nls/it/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/it/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragrafo","pre":"Preformattato","sans-serif":"sans-serif","fontName":"Carattere","h1":"Intestazione","h2":"Sottointestazione","h3":"Sottointestazione secondaria","monospace":"spaziatura fissa","fontSize":"Dimensione","cursive":"corsivo"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ja/FontChoice.js b/js/dojo/dijit/_editor/nls/ja/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ja/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"超極小","2":"極小","formatBlock":"フォーマット","3":"小","4":"標準","5":"大","6":"特大","7":"超特大","fantasy":"fantasy","serif":"serif","p":"段落","pre":"事前フォーマット済み","sans-serif":"sans-serif","fontName":"フォント","h1":"見出し","h2":"副見出し","h3":"副見出しの副見出し","monospace":"monospace","fontSize":"サイズ","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ko/FontChoice.js b/js/dojo/dijit/_editor/nls/ko/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ko/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"가장 작게","2":"조금 작게","formatBlock":"서식","3":"작게","4":"중간","5":"크게","6":"조금 크게","7":"가장 크게","fantasy":"fantasy","serif":"serif","p":"단락","pre":"서식이 지정됨","sans-serif":"sans-serif","fontName":"글꼴","h1":"제목","h2":"부제목","h3":"하위 부제목","monospace":"monospace","fontSize":"크기","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nb/FontChoice.js b/js/dojo/dijit/_editor/nls/nb/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nb/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-liten","2":"x-liten","formatBlock":"Format","3":"liten","4":"middels","5":"stor","6":"x-stor","7":"xx-stor","fantasy":"fantasi","serif":"serif","p":"Avsnitt","pre":"Forhåndsformatert","sans-serif":"sans-serif","fontName":"Skrift","h1":"Overskrift","h2":"Undertittel","h3":"Under-undertittel","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nb/LinkDialog.js b/js/dojo/dijit/_editor/nls/nb/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nb/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Definer","text":"Beskrivelse:","insertImageTitle":"Bildeegenskaper","url":"URL:","createLinkTitle":"Koblingsegenskaper","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nb/commands.js b/js/dojo/dijit/_editor/nls/nb/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nb/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","fontSize":"Skriftstørrelse","systemShortcut":"Handlingen \"${0}\" er bare tilgjengelig i nettleseren ved hjelp av en tastatursnarvei. Bruk ${1}.","indent":"Innrykk","redo":"Gjør om","strikethrough":"Gjennomstreking","justifyFull":"Juster","justifyCenter":"Midtstill","hiliteColor":"Bakgrunnsfarge","deleteTable":"Slett tabell","outdent":"Fjern innrykk","cut":"Klipp ut","plainFormatBlock":"Avsnittsstil","toggleDir":"Bytt retning","bold":"Fet","tabIndent":"Tabulatorinnrykk","justifyRight":"Høyrejuster","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nl/FontChoice.js b/js/dojo/dijit/_editor/nls/nl/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nl/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-klein","2":"x-klein","formatBlock":"Opmaak","3":"klein","4":"gemiddeld","5":"groot","6":"x-groot","7":"xx-groot","fantasy":"fantasy","serif":"serif","p":"Alinea","pre":"Vooraf opgemaakt","sans-serif":"sans-serif","fontName":"Lettertype","h1":"Kop","h2":"Subkop","h3":"Sub-subkop","monospace":"monospace","fontSize":"Grootte","cursive":"cursief"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nl/LinkDialog.js b/js/dojo/dijit/_editor/nls/nl/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nl/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Instellen","text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","url":"URL:","createLinkTitle":"Linkeigenschappen","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/nl/commands.js b/js/dojo/dijit/_editor/nls/nl/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/nl/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/pl/FontChoice.js b/js/dojo/dijit/_editor/nls/pl/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/pl/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"najmniejsza","2":"mniejsza","formatBlock":"Format","3":"mała","4":"średnia","5":"duża","6":"większa","7":"największa","fantasy":"fantazyjna","serif":"szeryfowa","p":"Akapit","pre":"Wstępnie sformatowane","sans-serif":"bezszeryfowa","fontName":"Czcionka","h1":"Nagłówek","h2":"Nagłówek 2-go poziomu","h3":"Nagłówek 3-go poziomu","monospace":"czcionka o stałej szerokości","fontSize":"Wielkość","cursive":"kursywa"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/pt-pt/FontChoice.js b/js/dojo/dijit/_editor/nls/pt-pt/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/pt-pt/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xxs","2":"xs","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"xl","7":"xxl","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Tipo de letra","h1":"Título","h2":"Sub-título","h3":"Sub-subtítulo","monospace":"monospace","fontSize":"Tamanho","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js b/js/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Definir","text":"Descrição:","insertImageTitle":"Propriedades da imagem","url":"URL:","createLinkTitle":"Propriedades da ligação","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","parentWindow":"Janela Pai","currentWindow":"Janela Atual"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/pt-pt/commands.js b/js/dojo/dijit/_editor/nls/pt-pt/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/pt-pt/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","insertHorizontalRule":"Régua horizontal","delete":"Eliminar","insertUnorderedList":"Lista marcada","tableProp":"Propriedades da tabela","insertImage":"Inserir imagem","superscript":"Superior à linha","subscript":"Inferior à linha","createLink":"Criar ligação","undo":"Anular","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","fontSize":"Tamanho do tipo de letra","systemShortcut":"A acção \"${0}\" apenas está disponível no navegador utilizando um atalho de teclado. Utilize ${1}.","indent":"Indentar","redo":"Repetir","strikethrough":"Rasurado","justifyFull":"Justificar","justifyCenter":"Alinhar ao centro","hiliteColor":"Cor de segundo plano","deleteTable":"Eliminar tabela","outdent":"Recuar","cut":"Cortar","plainFormatBlock":"Estilo de parágrafo","toggleDir":"Alternar direcção","bold":"Negrito","tabIndent":"Indentar com a tecla Tab","justifyRight":"Alinhar à direita","print":"Impressão","newPage":"Nova Página","fullScreen":"Comutar Tela Cheia","viewSource":"Visualizar Origem HTML","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/pt/FontChoice.js b/js/dojo/dijit/_editor/nls/pt/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/pt/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"extra-extra-pequeno","2":"extra-pequeno","formatBlock":"Formatar","3":"pequena","4":"médio","5":"grande","6":"extra-grande","7":"extra-extra-grande","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Fonte","h1":"Título","h2":"Subtítulo","h3":"Sub-subtítulo","monospace":"espaço simples","fontSize":"Tamanho","cursive":"cursiva"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/ru/FontChoice.js b/js/dojo/dijit/_editor/nls/ru/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/ru/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sk/FontChoice.js b/js/dojo/dijit/_editor/nls/sk/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sk/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Formát","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Odsek","pre":"Predformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Hlavička","h2":"Podhlavička","h3":"Pod-podhlavička","monospace":"monospace","fontSize":"Veľkosť","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sk/LinkDialog.js b/js/dojo/dijit/_editor/nls/sk/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sk/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Nastaviť","text":"Popis:","insertImageTitle":"Vlastnosti obrázku","url":"URL:","createLinkTitle":"Vlastnosti odkazu","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sk/commands.js b/js/dojo/dijit/_editor/nls/sk/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sk/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Odstrániť formát","copy":"Kopírovať","paste":"Nalepiť","selectAll":"Vybrať všetko","insertOrderedList":"Číslovaný zoznam","insertTable":"Vložiť/upraviť tabuľku","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","insertHorizontalRule":"Horizontálna čiara","delete":"Vymazať","insertUnorderedList":"Zoznam s odrážkami","tableProp":"Vlastnosť tabuľky","insertImage":"Vložiť obrázok","superscript":"Horný index","subscript":"Dolný index","createLink":"Vytvoriť prepojenie","undo":"Vrátiť späť","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","fontSize":"Veľkosť písma","systemShortcut":"Akcia \"${0}\" je vo vašom prehliadači dostupná len s použitím klávesovej skratky. Použite ${1}.","indent":"Odsadiť","redo":"Znova vykonať","strikethrough":"Prečiarknuť","justifyFull":"Zarovnať podľa okraja","justifyCenter":"Zarovnať na stred","hiliteColor":"Farba pozadia","deleteTable":"Vymazať tabuľku","outdent":"Predsadiť","cut":"Vystrihnúť","plainFormatBlock":"Štýl odseku","toggleDir":"Prepnúť smer","bold":"Tučné písmo","tabIndent":"Odsadenie tabulátora","justifyRight":"Zarovnať doprava","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sl/FontChoice.js b/js/dojo/dijit/_editor/nls/sl/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sl/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-majhno","2":"x-majhno","formatBlock":"Oblika","3":"majhno","4":"srednje","5":"veliko","6":"x-veliko","7":"xx-veliko","fantasy":"fantasy","serif":"serif","p":"Odstavek","pre":"Vnaprej oblikovano","sans-serif":"sans-serif","fontName":"Pisava","h1":"Naslov","h2":"Podnaslov","h3":"Pod podnaslov","monospace":"monospace","fontSize":"Velikost","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sl/LinkDialog.js b/js/dojo/dijit/_editor/nls/sl/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sl/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Nastavi","text":"Opis:","insertImageTitle":"Lastnosti slike","url":"URL:","createLinkTitle":"Lastnosti povezave","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sl/commands.js b/js/dojo/dijit/_editor/nls/sl/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sl/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/Uredi tabelo","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvor HTML","formatBlock":"Slog odstavka","insertHorizontalRule":"Horizontalno pravilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi obrobo tabele","fontSize":"Velikost pisave","systemShortcut":"Dejanje \"${0}\" lahko v vašem brskalniku uporabite samo z bližnjico na tipkovnici. Uporabite ${1}.","indent":"Zamik","redo":"Znova uveljavi","strikethrough":"Prečrtano","justifyFull":"Obojestranka poravnava","justifyCenter":"Sredinska poravnava","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Zamik navzven","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sv/FontChoice.js b/js/dojo/dijit/_editor/nls/sv/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sv/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"mycket, mycket litet","2":"mycket litet","formatBlock":"Format","3":"litet","4":"medelstort","5":"stort","6":"extra stort","7":"extra extra stort","fantasy":"fantasy","serif":"serif","p":"Stycke","pre":"Förformaterat","sans-serif":"sans-serif","fontName":"Teckensnitt","h1":"Rubrik","h2":"Underrubrik","h3":"Underunderrubrik","monospace":"monospace","fontSize":"Storlek","cursive":"kursivt"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sv/LinkDialog.js b/js/dojo/dijit/_editor/nls/sv/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sv/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Ange","text":"Beskrivning:","insertImageTitle":"Bildegenskaper","url":"URL-adress:","createLinkTitle":"Länkegenskaper","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/sv/commands.js b/js/dojo/dijit/_editor/nls/sv/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/sv/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Ta bort format","copy":"Kopiera","paste":"Klistra in","selectAll":"Markera allt","insertOrderedList":"Numrerad lista","insertTable":"Infoga/redigera tabell","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsarenmed hjälp av ett kortkommando. Använd ${1}.","indent":"Indrag","redo":"Gör om","strikethrough":"Genomstruken","justifyFull":"Marginaljustera","justifyCenter":"Centrera","hiliteColor":"Bakgrundsfärg","deleteTable":"Ta bort tabell","outdent":"Utdrag","cut":"Klipp ut","plainFormatBlock":"Styckeformat","toggleDir":"Växla riktning","bold":"Fetstil","tabIndent":"Tabbindrag","justifyRight":"Högerjustera","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/th/FontChoice.js b/js/dojo/dijit/_editor/nls/th/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/th/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"รูปแบบ","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"ย่อหน้า","pre":"การกำหนดรูปแบบล่วงหน้า","sans-serif":"sans-serif","fontName":"ฟอนต์","h1":"ส่วนหัว","h2":"ส่วนหัวย่อย","h3":"ส่วนย่อยของส่วนหัวย่อย","monospace":"monospace","fontSize":"ขนาด","cursive":"cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/th/LinkDialog.js b/js/dojo/dijit/_editor/nls/th/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/th/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"ตั้งค่า","text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","url":"URL:","createLinkTitle":"คุณสมบัติลิงก์","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/th/commands.js b/js/dojo/dijit/_editor/nls/th/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/th/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"ลบรูปแบบออก","copy":"คัดลอก","paste":"วาง","selectAll":"เลือกทั้งหมด","insertOrderedList":"ลำดับเลข","insertTable":"แทรก/แก้ไข ตาราง","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","fontSize":"ขนาดฟอนต์","systemShortcut":"แอ็กชัน \"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/tr/FontChoice.js b/js/dojo/dijit/_editor/nls/tr/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/tr/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"xx-küçük","2":"x-küçük","formatBlock":"Biçim","3":"küçük","4":"orta","5":"büyük","6":"x-büyük","7":"xx-büyük","fantasy":"fantazi","serif":"serif","p":"Paragraf","pre":"Önceden Biçimlendirilmiş","sans-serif":"sans-serif","fontName":"Yazı Tipi","h1":"Başlık","h2":"Alt Başlık","h3":"Alt Alt Başlık","monospace":"tek aralıklı","fontSize":"Boyut","cursive":"el yazısı"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/tr/LinkDialog.js b/js/dojo/dijit/_editor/nls/tr/LinkDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/tr/LinkDialog.js
@@ -0,0 +1,1 @@
+({"set":"Ayarla","text":"Açıklama:","insertImageTitle":"Resim Özellikleri","url":"URL:","createLinkTitle":"Bağlantı Özellikleri","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","parentWindow":"Parent Window","currentWindow":"Current Window"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/tr/commands.js b/js/dojo/dijit/_editor/nls/tr/commands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/tr/commands.js
@@ -0,0 +1,1 @@
+({"removeFormat":"Biçimi Kaldır","copy":"Kopyala","paste":"Yapıştır","selectAll":"Tümünü Seç","insertOrderedList":"Numaralı Liste","insertTable":"Tablo Ekle/Düzenle","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","insertHorizontalRule":"Yatay Kural","delete":"Sil","insertUnorderedList":"Madde İşaretli Liste","tableProp":"Tablo Özelliği","insertImage":"Resim Ekle","superscript":"Üst Simge","subscript":"Alt Simge","createLink":"Bağlantı Oluştur","undo":"Geri Al","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","fontSize":"Yazı Tipi Boyutu","systemShortcut":"\"${0}\" işlemi yalnızca tarayıcınızda bir klavye kısayoluyla birlikte kullanılabilir. Şunu kullanın: ${1}.","indent":"Girinti","redo":"Yinele","strikethrough":"Üstü Çizili","justifyFull":"Yasla","justifyCenter":"Ortaya Hizala","hiliteColor":"Arka Plan Rengi","deleteTable":"Tabloyu Sil","outdent":"Çıkıntı","cut":"Kes","plainFormatBlock":"Paragraf Stili","toggleDir":"Yönü Değiştir","bold":"Kalın","tabIndent":"Sekme Girintisi","justifyRight":"Sağa Hizala","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/zh-tw/FontChoice.js b/js/dojo/dijit/_editor/nls/zh-tw/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/zh-tw/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"最小","2":"較小","formatBlock":"格式","3":"小","4":"中","5":"大","6":"較大","7":"最大","fantasy":"Fantasy","serif":"新細明體","p":"段落","pre":"預先格式化","sans-serif":"新細明體","fontName":"字型","h1":"標題","h2":"子標題","h3":"次子標題","monospace":"等寬","fontSize":"大小","cursive":"Cursive"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/nls/zh/FontChoice.js b/js/dojo/dijit/_editor/nls/zh/FontChoice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/nls/zh/FontChoice.js
@@ -0,0 +1,1 @@
+({"1":"XXS 号","2":"XS 号","formatBlock":"格式","3":"S 号","4":"M 号","5":"L 号","6":"XL 号","7":"XXL 号","fantasy":"虚线","serif":"有衬线","p":"段落","pre":"预设有格式的","sans-serif":"无衬线","fontName":"字体","h1":"标题","h2":"子标题","h3":"二级子标题","monospace":"等宽字体","fontSize":"大小","cursive":"草书"})
\ No newline at end of file
diff --git a/js/dojo/dijit/_editor/plugins/FullScreen.js b/js/dojo/dijit/_editor/plugins/FullScreen.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/FullScreen.js
@@ -0,0 +1,198 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.FullScreen"]){
+dojo._hasResource["dijit._editor.plugins.FullScreen"]=true;
+dojo.provide("dijit._editor.plugins.FullScreen");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.FullScreen",dijit._editor._Plugin,{zIndex:500,_origState:null,_origiFrameState:null,_resizeHandle:null,isFullscreen:false,toggle:function(){
+this.button.attr("checked",!this.button.attr("checked"));
+},_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands");
+this.button=new dijit.form.ToggleButton({label:_1["fullScreen"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"FullScreen",tabIndex:"-1",onChange:dojo.hitch(this,"_setFullScreen")});
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+this.editor.addKeyHandler(dojo.keys.F11,true,true,dojo.hitch(this,function(e){
+this.toggle();
+dojo.stopEvent(e);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),250);
+return true;
+}));
+this.connect(this.editor.domNode,"onkeydown","_containFocus");
+},_containFocus:function(e){
+if(this.isFullscreen){
+var ed=this.editor;
+if(!ed.isTabIndent&&ed._fullscreen_oldOnKeyDown&&e.keyCode===dojo.keys.TAB){
+var f=dijit.getFocus();
+var _3=this._getAltViewNode();
+if(f.node==ed.iframe||(_3&&f.node===_3)){
+setTimeout(dojo.hitch(this,function(){
+ed.toolbar.focus();
+}),10);
+}else{
+if(_3&&dojo.style(ed.iframe,"display")==="none"){
+setTimeout(dojo.hitch(this,function(){
+dijit.focus(_3);
+}),10);
+}else{
+setTimeout(dojo.hitch(this,function(){
+ed.focus();
+}),10);
+}
+}
+dojo.stopEvent(e);
+}else{
+if(ed._fullscreen_oldOnKeyDown){
+ed._fullscreen_oldOnKeyDown(e);
+}
+}
+}
+},_resizeEditor:function(){
+var vp=dijit.getViewport();
+dojo.marginBox(this.editor.domNode,{w:vp.w,h:vp.h});
+var _4=dojo.marginBox(this.editor.toolbar.domNode);
+var _5=dojo._getPadBorderExtents(this.editor.domNode);
+var _6=vp.h-(_4.h+_5.h);
+dojo.marginBox(this.editor.iframe.parentNode,{h:_6});
+dojo.marginBox(this.editor.iframe,{h:_6});
+},_getAltViewNode:function(){
+},_setFullScreen:function(_7){
+var vp=dijit.getViewport();
+var ed=this.editor;
+var _8=dojo.body();
+var _9=ed.domNode.parentNode;
+this.isFullscreen=_7;
+if(_7){
+while(_9&&_9!==dojo.body()){
+dojo.addClass(_9,"dijitForceStatic");
+_9=_9.parentNode;
+}
+this._editorResizeHolder=this.editor.resize;
+ed.resize=function(){
+};
+ed._fullscreen_oldOnKeyDown=ed.onKeyDown;
+ed.onKeyDown=dojo.hitch(this,this._containFocus);
+this._origState={};
+this._origiFrameState={};
+var _a=ed.domNode,_b=_a&&_a.style||{};
+this._origState={width:_b.width||"",height:_b.height||"",top:dojo.style(_a,"top")||"",left:dojo.style(_a,"left")||"",position:dojo.style(_a,"position")||"static"};
+var _c=ed.iframe,_d=_c&&_c.style||{};
+var bc=dojo.style(ed.iframe,"backgroundColor");
+this._origiFrameState={backgroundColor:bc||"transparent",width:_d.width||"auto",height:_d.height||"auto",zIndex:_d.zIndex||""};
+dojo.style(ed.domNode,{position:"absolute",top:"0px",left:"0px",zIndex:this.zIndex,width:vp.w+"px",height:vp.h+"px"});
+dojo.style(ed.iframe,{height:"100%",width:"100%",zIndex:this.zIndex,backgroundColor:bc!=="transparent"&&bc!=="rgba(0, 0, 0, 0)"?bc:"white"});
+dojo.style(ed.iframe.parentNode,{height:"95%",width:"100%"});
+if(_8.style&&_8.style.overflow){
+this._oldOverflow=dojo.style(_8,"overflow");
+}else{
+this._oldOverflow="";
+}
+if(dojo.isIE&&!dojo.isQuirks){
+if(_8.parentNode&&_8.parentNode.style&&_8.parentNode.style.overflow){
+this._oldBodyParentOverflow=_8.parentNode.style.overflow;
+}else{
+this._oldBodyParentOverflow="scroll";
+}
+dojo.style(_8.parentNode,"overflow","hidden");
+}
+dojo.style(_8,"overflow","hidden");
+var _e=function(){
+var vp=dijit.getViewport();
+if("_prevW" in this&&"_prevH" in this){
+if(vp.w===this._prevW&&vp.h===this._prevH){
+return;
+}
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+this._resizer=setTimeout(dojo.hitch(this,function(){
+delete this._resizer;
+this._resizeEditor();
+}),10);
+};
+this._resizeHandle=dojo.connect(window,"onresize",this,_e);
+this._resizeEditor();
+var dn=this.editor.toolbar.domNode;
+setTimeout(function(){
+dijit.scrollIntoView(dn);
+},250);
+}else{
+if(this._editorResizeHolder){
+this.editor.resize=this._editorResizeHolder;
+}
+if(!this._origState&&!this._origiFrameState){
+return;
+}
+if(ed._fullscreen_oldOnKeyDown){
+ed.onKeyDown=ed._fullscreen_oldOnKeyDown;
+delete ed._fullscreen_oldOnKeyDown;
+}
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+this._resizeHandle=null;
+}
+if(this._rst){
+clearTimeout(this._rst);
+this._rst=null;
+}
+while(_9&&_9!==dojo.body()){
+dojo.removeClass(_9,"dijitForceStatic");
+_9=_9.parentNode;
+}
+var _f=this;
+setTimeout(function(){
+if(dojo.isIE&&!dojo.isQuirks){
+_8.parentNode.style.overflow=_f._oldBodyParentOverflow;
+delete _f._oldBodyParentOverflow;
+}
+dojo.style(_8,"overflow",_f._oldOverflow);
+delete _f._oldOverflow;
+dojo.style(ed.domNode,_f._origState);
+dojo.style(ed.iframe.parentNode,{height:"",width:""});
+dojo.style(ed.iframe,_f._origiFrameState);
+delete _f._origState;
+delete _f._origiFrameState;
+ed.resize();
+var _10=dijit.getEnclosingWidget(ed.domNode.parentNode);
+if(_10&&_10.resize){
+_10.resize();
+}
+dijit.scrollIntoView(_f.editor.toolbar.domNode);
+},100);
+}
+},destroy:function(){
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+this._resizeHandle=null;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+this._resizer=null;
+}
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _11=o.args.name.toLowerCase();
+if(_11==="fullscreen"){
+o.plugin=new dijit._editor.plugins.FullScreen({zIndex:("zIndex" in o.args)?o.args.zIndex:500});
+}
+});
+}
diff --git a/js/dojo/dijit/_editor/plugins/NewPage.js b/js/dojo/dijit/_editor/plugins/NewPage.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/NewPage.js
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.NewPage"]){
+dojo._hasResource["dijit._editor.plugins.NewPage"]=true;
+dojo.provide("dijit._editor.plugins.NewPage");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.NewPage",dijit._editor._Plugin,{content:"<br>",_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands");
+this.button=new dijit.form.Button({label:_1["newPage"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"NewPage",tabIndex:"-1",onClick:dojo.hitch(this,"_newPage")});
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_newPage:function(){
+this.editor.attr("value",this.content);
+this.editor.focus();
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _3=o.args.name.toLowerCase();
+if(_3==="newpage"){
+o.plugin=new dijit._editor.plugins.NewPage({content:("content" in o.args)?o.args.content:"<br>"});
+}
+});
+}
diff --git a/js/dojo/dijit/_editor/plugins/Print.js b/js/dojo/dijit/_editor/plugins/Print.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/Print.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.Print"]){
+dojo._hasResource["dijit._editor.plugins.Print"]=true;
+dojo.provide("dijit._editor.plugins.Print");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.Print",dijit._editor._Plugin,{_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands");
+this.button=new dijit.form.Button({label:_1["print"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Print",tabIndex:"-1",onClick:dojo.hitch(this,"_print")});
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+if(!this.editor.iframe.contentWindow["print"]){
+this.button.attr("disabled",true);
+}
+}));
+},_print:function(){
+var _3=this.editor.iframe;
+if(_3.contentWindow["print"]){
+if(!dojo.isOpera&&!dojo.isChrome){
+dijit.focus(_3);
+_3.contentWindow.print();
+}else{
+var _4=this.editor.document;
+var _5=this.editor.attr("value");
+_5="<html><head><meta http-equiv='Content-Type' "+"content='text/html; charset='UTF-8'></head><body>"+_5+"</body></html>";
+var _6=window.open("javascript: ''","","status=0,menubar=0,location=0,toolbar=0,"+"width=1,height=1,resizable=0,scrollbars=0");
+_6.document.open();
+_6.document.write(_5);
+_6.document.close();
+var _7=[];
+var _8=_4.getElementsByTagName("style");
+if(_8){
+var i;
+for(i=0;i<_8.length;i++){
+var _9=_8[i].innerHTML;
+var _a=_6.document.createElement("style");
+_a.appendChild(_6.document.createTextNode(_9));
+_6.document.getElementsByTagName("head")[0].appendChild(_a);
+}
+}
+_6.print();
+_6.close();
+}
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _b=o.args.name.toLowerCase();
+if(_b==="print"){
+o.plugin=new dijit._editor.plugins.Print({command:"print"});
+}
+});
+}
diff --git a/js/dojo/dijit/_editor/plugins/TabIndent.js b/js/dojo/dijit/_editor/plugins/TabIndent.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/TabIndent.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.TabIndent"]){
+dojo._hasResource["dijit._editor.plugins.TabIndent"]=true;
+dojo.provide("dijit._editor.plugins.TabIndent");
+dojo.experimental("dijit._editor.plugins.TabIndent");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.declare("dijit._editor.plugins.TabIndent",dijit._editor._Plugin,{useDefaultCommand:false,buttonClass:dijit.form.ToggleButton,command:"tabIndent",_initButton:function(){
+this.inherited(arguments);
+var e=this.editor;
+this.connect(this.button,"onChange",function(_1){
+e.attr("isTabIndent",_1);
+});
+this.updateState();
+},updateState:function(){
+this.button.attr("checked",this.editor.isTabIndent,false);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "tabIndent":
+o.plugin=new dijit._editor.plugins.TabIndent({command:o.args.name});
+}
+});
+}
diff --git a/js/dojo/dijit/_editor/plugins/ToggleDir.js b/js/dojo/dijit/_editor/plugins/ToggleDir.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/ToggleDir.js
@@ -0,0 +1,42 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.ToggleDir"]){
+dojo._hasResource["dijit._editor.plugins.ToggleDir"]=true;
+dojo.provide("dijit._editor.plugins.ToggleDir");
+dojo.experimental("dijit._editor.plugins.ToggleDir");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.declare("dijit._editor.plugins.ToggleDir",dijit._editor._Plugin,{useDefaultCommand:false,command:"toggleDir",buttonClass:dijit.form.ToggleButton,_initButton:function(){
+this.inherited(arguments);
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+var _1=this.editor.editorObject.contentWindow.document.documentElement;
+_1=_1.getElementsByTagName("body")[0];
+var _2=dojo.getComputedStyle(_1).direction=="ltr";
+this.button.attr("checked",!_2);
+this.connect(this.button,"onChange","_setRtl");
+}));
+},updateState:function(){
+},_setRtl:function(_3){
+var _4="ltr";
+if(_3){
+_4="rtl";
+}
+var _5=this.editor.editorObject.contentWindow.document.documentElement;
+_5=_5.getElementsByTagName("body")[0];
+_5.dir=_4;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "toggleDir":
+o.plugin=new dijit._editor.plugins.ToggleDir({command:o.args.name});
+}
+});
+}
diff --git a/js/dojo/dijit/_editor/plugins/ViewSource.js b/js/dojo/dijit/_editor/plugins/ViewSource.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/_editor/plugins/ViewSource.js
@@ -0,0 +1,300 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.ViewSource"]){
+dojo._hasResource["dijit._editor.plugins.ViewSource"]=true;
+dojo.provide("dijit._editor.plugins.ViewSource");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.ViewSource",dijit._editor._Plugin,{stripScripts:true,stripComments:true,stripIFrames:true,readOnly:false,_fsPlugin:null,toggle:function(){
+if(dojo.isWebKit){
+this._vsFocused=true;
+}
+this.button.attr("checked",!this.button.attr("checked"));
+},_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands");
+this.button=new dijit.form.ToggleButton({label:_1["viewSource"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ViewSource",tabIndex:"-1",onChange:dojo.hitch(this,"_showSource")});
+if(dojo.isIE==7){
+this._ieFixNode=dojo.create("div",{style:{opacity:"0",zIndex:"-1000",position:"absolute",top:"-1000px"}},dojo.body());
+}
+this.button.attr("readOnly",false);
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+this.editor.addKeyHandler(dojo.keys.F12,true,true,dojo.hitch(this,function(e){
+this.button.focus();
+this.toggle();
+dojo.stopEvent(e);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),100);
+}));
+},_showSource:function(_3){
+var ed=this.editor;
+var _4=ed._plugins;
+var _5;
+this._sourceShown=_3;
+var _6=this;
+try{
+if(!this.sourceArea){
+this._createSourceView();
+}
+if(_3){
+ed._sourceQueryCommandEnabled=ed.queryCommandEnabled;
+ed.queryCommandEnabled=function(_7){
+var _8=_7.toLowerCase();
+if(_8==="viewsource"){
+return true;
+}else{
+return false;
+}
+};
+this.editor.onDisplayChanged();
+_5=ed.attr("value");
+_5=this._filter(_5);
+ed.attr("value",_5);
+this._pluginList=[];
+this._disabledPlugins=dojo.filter(_4,function(p){
+if(p&&p.button&&!p.button.attr("disabled")&&!(p instanceof dijit._editor.plugins.ViewSource)){
+p._vs_updateState=p.updateState;
+p.updateState=function(){
+return false;
+};
+p.button.attr("disabled",true);
+if(p.command){
+switch(p.command){
+case "bold":
+case "italic":
+case "underline":
+case "strikethrough":
+case "superscript":
+case "subscript":
+p.button.attr("checked",false);
+break;
+default:
+break;
+}
+}
+return true;
+}
+});
+if(this._fsPlugin){
+this._fsPlugin._getAltViewNode=function(){
+return _6.sourceArea;
+};
+}
+this.sourceArea.value=_5;
+var is=dojo.marginBox(ed.iframe.parentNode);
+dojo.marginBox(this.sourceArea,{w:is.w,h:is.h});
+dojo.style(ed.iframe,"display","none");
+dojo.style(this.sourceArea,{display:"block"});
+var _9=function(){
+var vp=dijit.getViewport();
+if("_prevW" in this&&"_prevH" in this){
+if(vp.w===this._prevW&&vp.h===this._prevH){
+return;
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+this._resizer=setTimeout(dojo.hitch(this,function(){
+delete this._resizer;
+this._resize();
+}),10);
+};
+this._resizeHandle=dojo.connect(window,"onresize",this,_9);
+setTimeout(dojo.hitch(this,this._resize),100);
+this.editor.onNormalizedDisplayChanged();
+}else{
+if(!ed._sourceQueryCommandEnabled){
+return;
+}
+dojo.disconnect(this._resizeHandle);
+delete this._resizeHandle;
+ed.queryCommandEnabled=ed._sourceQueryCommandEnabled;
+if(!this._readOnly){
+_5=this.sourceArea.value;
+_5=this._filter(_5);
+ed.attr("value",_5);
+}
+dojo.forEach(this._disabledPlugins,function(p){
+p.button.attr("disabled",false);
+if(p._vs_updateState){
+p.updateState=p._vs_updateState;
+}
+});
+this._disabledPlugins=null;
+dojo.style(this.sourceArea,"display","none");
+dojo.style(ed.iframe,"display","block");
+delete ed._sourceQueryCommandEnabled;
+this.editor.onDisplayChanged();
+}
+}
+catch(e){
+}
+},_resize:function(){
+var ed=this.editor;
+var tb=dojo.position(ed.toolbar.domNode);
+var eb=dojo.position(ed.domNode);
+var _a=dojo._getPadBorderExtents(ed.domNode);
+var _b={w:eb.w-_a.w,h:eb.h-(tb.h+_a.h)};
+if(this._fsPlugin&&this._fsPlugin.isFullscreen){
+var vp=dijit.getViewport();
+_b.w=(vp.w-_a.w);
+_b.h=(vp.h-(tb.h+_a.h));
+}
+if(dojo.isIE){
+_b.h-=2;
+}
+if(this._ieFixNode){
+var _c=-this._ieFixNode.offsetTop/1000;
+_b.w=Math.floor((_b.w+0.9)/_c);
+_b.h=Math.floor((_b.h+0.9)/_c);
+}
+dojo.marginBox(this.sourceArea,{w:_b.w,h:_b.h});
+},_createSourceView:function(){
+var ed=this.editor;
+var _d=ed._plugins;
+this.sourceArea=dojo.create("textarea");
+if(this.readOnly){
+dojo.attr(this.sourceArea,"readOnly",true);
+this._readOnly=true;
+}
+dojo.style(this.sourceArea,{padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
+dojo.place(this.sourceArea,ed.iframe,"before");
+dojo.style(this.sourceArea.parentNode,{padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
+if(dojo.isIE&&ed.iframe.parentNode.lastChild!==ed.iframe){
+dojo.style(ed.iframe.parentNode.lastChild,{width:"0px",height:"0px",padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
+}
+ed._viewsource_oldFocus=ed.focus;
+var _e=this;
+ed.focus=function(){
+if(_e._sourceShown){
+_e.setSourceAreaCaret();
+}else{
+try{
+if(this._vsFocused){
+delete this._vsFocused;
+dijit.focus(ed.editNode);
+}else{
+ed._viewsource_oldFocus();
+}
+}
+catch(e){
+}
+}
+};
+var i,p;
+for(i=0;i<_d.length;i++){
+p=_d[i];
+if(p&&(p.declaredClass==="dijit._editor.plugins.FullScreen"||p.declaredClass===(dijit._scopeName+"._editor.plugins.FullScreen"))){
+this._fsPlugin=p;
+break;
+}
+}
+if(this._fsPlugin){
+this._fsPlugin._viewsource_getAltViewNode=this._fsPlugin._getAltViewNode;
+this._fsPlugin._getAltViewNode=function(){
+return _e._sourceShown?_e.sourceArea:this._viewsource_getAltViewNode();
+};
+}
+this.connect(this.sourceArea,"onkeydown",dojo.hitch(this,function(e){
+if(this._sourceShown&&e.keyCode==dojo.keys.F12&&e.ctrlKey&&e.shiftKey){
+this.button.focus();
+this.button.attr("checked",false);
+setTimeout(dojo.hitch(this,function(){
+ed.focus();
+}),100);
+dojo.stopEvent(e);
+}
+}));
+},_stripScripts:function(_f){
+if(_f){
+_f=_f.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig,"");
+_f=_f.replace(/<\s*script\b([^<>]|\s)*>?/ig,"");
+_f=_f.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig,"");
+}
+return _f;
+},_stripComments:function(_10){
+if(_10){
+_10=_10.replace(/<!--(.|\s){1,}?-->/g,"");
+}
+return _10;
+},_stripIFrames:function(_11){
+if(_11){
+_11=_11.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig,"");
+}
+return _11;
+},_filter:function(_12){
+if(_12){
+if(this.stripScripts){
+_12=this._stripScripts(_12);
+}
+if(this.stripComments){
+_12=this._stripComments(_12);
+}
+if(this.stripIFrames){
+_12=this._stripIFrames(_12);
+}
+}
+return _12;
+},setSourceAreaCaret:function(){
+var win=dojo.global;
+var _13=this.sourceArea;
+dijit.focus(_13);
+if(this._sourceShown&&!this.readOnly){
+if(dojo.isIE){
+if(this.sourceArea.createTextRange){
+var _14=_13.createTextRange();
+_14.collapse(true);
+_14.moveStart("character",-99999);
+_14.moveStart("character",0);
+_14.moveEnd("character",0);
+_14.select();
+}
+}else{
+if(win.getSelection){
+if(_13.setSelectionRange){
+_13.setSelectionRange(0,0);
+}
+}
+}
+}
+},destroy:function(){
+if(this._ieFixNode){
+dojo.body().removeChild(this._ieFixNode);
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+delete this._resizeHandle;
+}
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _15=o.args.name.toLowerCase();
+if(_15==="viewsource"){
+o.plugin=new dijit._editor.plugins.ViewSource({readOnly:("readOnly" in o.args)?o.args.readOnly:false,stripComments:("stripComments" in o.args)?o.args.stripComments:true,stripScripts:("stripScripts" in o.args)?o.args.stripScripts:true,stripIFrames:("stripIFrames" in o.args)?o.args.stripIFrames:true});
+}
+});
+}
diff --git a/js/dojo/dijit/form/ComboButton.js b/js/dojo/dijit/form/ComboButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/ComboButton.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ComboButton"]){
+dojo._hasResource["dijit.form.ComboButton"]=true;
+dojo.provide("dijit.form.ComboButton");
+dojo.require("dijit.form.Button");
+}
diff --git a/js/dojo/dijit/form/DropDownButton.js b/js/dojo/dijit/form/DropDownButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/DropDownButton.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.DropDownButton"]){
+dojo._hasResource["dijit.form.DropDownButton"]=true;
+dojo.provide("dijit.form.DropDownButton");
+dojo.require("dijit.form.Button");
+}
diff --git a/js/dojo/dijit/form/HorizontalRule.js b/js/dojo/dijit/form/HorizontalRule.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/HorizontalRule.js
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalRule"]){
+dojo._hasResource["dijit.form.HorizontalRule"]=true;
+dojo.provide("dijit.form.HorizontalRule");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.form.HorizontalRule",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH\"></div>",count:3,container:"containerNode",ruleStyle:"",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkH\" style=\"left:",_positionSuffix:"%;",_suffix:"\"></div>",_genHTML:function(_1,_2){
+return this._positionPrefix+_1+this._positionSuffix+this.ruleStyle+this._suffix;
+},_isHorizontal:true,postCreate:function(){
+var _3;
+if(this.count==1){
+_3=this._genHTML(50,0);
+}else{
+var i;
+var _4=100/(this.count-1);
+if(!this._isHorizontal||this.isLeftToRight()){
+_3=this._genHTML(0,0);
+for(i=1;i<this.count-1;i++){
+_3+=this._genHTML(_4*i,i);
+}
+_3+=this._genHTML(100,this.count-1);
+}else{
+_3=this._genHTML(100,0);
+for(i=1;i<this.count-1;i++){
+_3+=this._genHTML(100-_4*i,i);
+}
+_3+=this._genHTML(0,this.count-1);
+}
+}
+this.domNode.innerHTML=_3;
+}});
+}
diff --git a/js/dojo/dijit/form/HorizontalRuleLabels.js b/js/dojo/dijit/form/HorizontalRuleLabels.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/HorizontalRuleLabels.js
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){
+dojo._hasResource["dijit.form.HorizontalRuleLabels"]=true;
+dojo.provide("dijit.form.HorizontalRuleLabels");
+dojo.require("dijit.form.HorizontalRule");
+dojo.declare("dijit.form.HorizontalRuleLabels",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH\"></div>",labelStyle:"",labels:[],numericMargin:0,minimum:0,maximum:1,constraints:{pattern:"#%"},_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerH\" style=\"left:",_labelPrefix:"\"><span class=\"dijitRuleLabel dijitRuleLabelH\">",_suffix:"</span></div>",_calcPosition:function(_1){
+return _1;
+},_genHTML:function(_2,_3){
+return this._positionPrefix+this._calcPosition(_2)+this._positionSuffix+this.labelStyle+this._labelPrefix+this.labels[_3]+this._suffix;
+},getLabels:function(){
+var _4=this.labels;
+if(!_4.length){
+_4=dojo.query("> li",this.srcNodeRef).map(function(_5){
+return String(_5.innerHTML);
+});
+}
+this.srcNodeRef.innerHTML="";
+if(!_4.length&&this.count>1){
+var _6=this.minimum;
+var _7=(this.maximum-_6)/(this.count-1);
+for(var i=0;i<this.count;i++){
+_4.push((i<this.numericMargin||i>=(this.count-this.numericMargin))?"":dojo.number.format(_6,this.constraints));
+_6+=_7;
+}
+}
+return _4;
+},postMixInProperties:function(){
+this.inherited(arguments);
+this.labels=this.getLabels();
+this.count=this.labels.length;
+}});
+}
diff --git a/js/dojo/dijit/form/HorizontalSlider.js b/js/dojo/dijit/form/HorizontalSlider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/HorizontalSlider.js
@@ -0,0 +1,205 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalSlider"]){
+dojo._hasResource["dijit.form.HorizontalSlider"]=true;
+dojo.provide("dijit.form.HorizontalSlider");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit._Container");
+dojo.require("dojo.dnd.move");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.number");
+dojo.require("dojo._base.fx");
+dojo.declare("dijit.form.HorizontalSlider",[dijit.form._FormValueWidget,dijit._Container],{templateString:dojo.cache("dijit.form","templates/HorizontalSlider.html","<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${nameAttrSetting}\n\t\t\t/><div class=\"dijitReset dijitSliderBarContainerH\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableH\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\" style=\"right:0px;\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),value:0,showButtons:true,minimum:0,maximum:100,discreteValues:Infinity,pageIncrement:2,clickSelect:true,slideDuration:dijit.defaultDuration,widgetsInTemplate:true,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{id:""}),baseClass:"dijitSlider",_mousePixelCoord:"pageX",_pixelCount:"w",_startingPixelCoord:"x",_startingPixelCount:"l",_handleOffsetCoord:"left",_progressPixelSize:"width",_onKeyUp:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){
+return;
+}
+this._setValueAttr(this.value,true);
+},_onKeyPress:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){
+return;
+}
+switch(e.charOrCode){
+case dojo.keys.HOME:
+this._setValueAttr(this.minimum,false);
+break;
+case dojo.keys.END:
+this._setValueAttr(this.maximum,false);
+break;
+case ((this._descending||this.isLeftToRight())?dojo.keys.RIGHT_ARROW:dojo.keys.LEFT_ARROW):
+case (this._descending===false?dojo.keys.DOWN_ARROW:dojo.keys.UP_ARROW):
+case (this._descending===false?dojo.keys.PAGE_DOWN:dojo.keys.PAGE_UP):
+this.increment(e);
+break;
+case ((this._descending||this.isLeftToRight())?dojo.keys.LEFT_ARROW:dojo.keys.RIGHT_ARROW):
+case (this._descending===false?dojo.keys.UP_ARROW:dojo.keys.DOWN_ARROW):
+case (this._descending===false?dojo.keys.PAGE_UP:dojo.keys.PAGE_DOWN):
+this.decrement(e);
+break;
+default:
+return;
+}
+dojo.stopEvent(e);
+},_onHandleClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.sliderHandle);
+}
+dojo.stopEvent(e);
+},_isReversed:function(){
+return !this.isLeftToRight();
+},_onBarClick:function(e){
+if(this.disabled||this.readOnly||!this.clickSelect){
+return;
+}
+dijit.focus(this.sliderHandle);
+dojo.stopEvent(e);
+var _1=dojo.position(this.sliderBarContainer,true);
+var _2=e[this._mousePixelCoord]-_1[this._startingPixelCoord];
+this._setPixelValue(this._isReversed()?(_1[this._pixelCount]-_2):_2,_1[this._pixelCount],true);
+this._movable.onMouseDown(e);
+},_setPixelValue:function(_3,_4,_5){
+if(this.disabled||this.readOnly){
+return;
+}
+_3=_3<0?0:_4<_3?_4:_3;
+var _6=this.discreteValues;
+if(_6<=1||_6==Infinity){
+_6=_4;
+}
+_6--;
+var _7=_4/_6;
+var _8=Math.round(_3/_7);
+this._setValueAttr((this.maximum-this.minimum)*_8/_6+this.minimum,_5);
+},_setValueAttr:function(_9,_a){
+this.valueNode.value=this.value=_9;
+dijit.setWaiState(this.focusNode,"valuenow",_9);
+this.inherited(arguments);
+var _b=(_9-this.minimum)/(this.maximum-this.minimum);
+var _c=(this._descending===false)?this.remainingBar:this.progressBar;
+var _d=(this._descending===false)?this.progressBar:this.remainingBar;
+if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){
+this._inProgressAnim.stop(true);
+}
+if(_a&&this.slideDuration>0&&_c.style[this._progressPixelSize]){
+var _e=this;
+var _f={};
+var _10=parseFloat(_c.style[this._progressPixelSize]);
+var _11=this.slideDuration*(_b-_10/100);
+if(_11==0){
+return;
+}
+if(_11<0){
+_11=0-_11;
+}
+_f[this._progressPixelSize]={start:_10,end:_b*100,units:"%"};
+this._inProgressAnim=dojo.animateProperty({node:_c,duration:_11,onAnimate:function(v){
+_d.style[_e._progressPixelSize]=(100-parseFloat(v[_e._progressPixelSize]))+"%";
+},onEnd:function(){
+delete _e._inProgressAnim;
+},properties:_f});
+this._inProgressAnim.play();
+}else{
+_c.style[this._progressPixelSize]=(_b*100)+"%";
+_d.style[this._progressPixelSize]=((1-_b)*100)+"%";
+}
+},_bumpValue:function(_12,_13){
+if(this.disabled||this.readOnly){
+return;
+}
+var s=dojo.getComputedStyle(this.sliderBarContainer);
+var c=dojo._getContentBox(this.sliderBarContainer,s);
+var _14=this.discreteValues;
+if(_14<=1||_14==Infinity){
+_14=c[this._pixelCount];
+}
+_14--;
+var _15=(this.value-this.minimum)*_14/(this.maximum-this.minimum)+_12;
+if(_15<0){
+_15=0;
+}
+if(_15>_14){
+_15=_14;
+}
+_15=_15*(this.maximum-this.minimum)/_14+this.minimum;
+this._setValueAttr(_15,_13);
+},_onClkBumper:function(val){
+if(this.disabled||this.readOnly||!this.clickSelect){
+return;
+}
+this._setValueAttr(val,true);
+},_onClkIncBumper:function(){
+this._onClkBumper(this._descending===false?this.minimum:this.maximum);
+},_onClkDecBumper:function(){
+this._onClkBumper(this._descending===false?this.maximum:this.minimum);
+},decrement:function(e){
+this._bumpValue(e.charOrCode==dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);
+},increment:function(e){
+this._bumpValue(e.charOrCode==dojo.keys.PAGE_UP?this.pageIncrement:1);
+},_mouseWheeled:function(evt){
+dojo.stopEvent(evt);
+var _16=!dojo.isMozilla;
+var _17=evt[(_16?"wheelDelta":"detail")]*(_16?1:-1);
+this._bumpValue(_17<0?-1:1,true);
+},startup:function(){
+dojo.forEach(this.getChildren(),function(_18){
+if(this[_18.container]!=this.containerNode){
+this[_18.container].appendChild(_18.domNode);
+}
+},this);
+},_typematicCallback:function(_19,_1a,e){
+if(_19==-1){
+this._setValueAttr(this.value,true);
+}else{
+this[(_1a==(this._descending?this.incrementButton:this.decrementButton))?"decrement":"increment"](e);
+}
+},postCreate:function(){
+if(this.showButtons){
+this.incrementButton.style.display="";
+this.decrementButton.style.display="";
+this._connects.push(dijit.typematic.addMouseListener(this.decrementButton,this,"_typematicCallback",25,500));
+this._connects.push(dijit.typematic.addMouseListener(this.incrementButton,this,"_typematicCallback",25,500));
+}
+this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
+var _1b=dojo.declare(dijit.form._SliderMover,{widget:this});
+this._movable=new dojo.dnd.Moveable(this.sliderHandle,{mover:_1b});
+var _1c=dojo.query("label[for=\""+this.id+"\"]");
+if(_1c.length){
+_1c[0].id=(this.id+"_label");
+dijit.setWaiState(this.focusNode,"labelledby",_1c[0].id);
+}
+dijit.setWaiState(this.focusNode,"valuemin",this.minimum);
+dijit.setWaiState(this.focusNode,"valuemax",this.maximum);
+this.inherited(arguments);
+this._layoutHackIE7();
+},destroy:function(){
+this._movable.destroy();
+if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){
+this._inProgressAnim.stop(true);
+}
+this._supportingWidgets=dijit.findWidgets(this.domNode);
+this.inherited(arguments);
+}});
+dojo.declare("dijit.form._SliderMover",dojo.dnd.Mover,{onMouseMove:function(e){
+var _1d=this.widget;
+var _1e=_1d._abspos;
+if(!_1e){
+_1e=_1d._abspos=dojo.position(_1d.sliderBarContainer,true);
+_1d._setPixelValue_=dojo.hitch(_1d,"_setPixelValue");
+_1d._isReversed_=_1d._isReversed();
+}
+var _1f=e[_1d._mousePixelCoord]-_1e[_1d._startingPixelCoord];
+_1d._setPixelValue_(_1d._isReversed_?(_1e[_1d._pixelCount]-_1f):_1f,_1e[_1d._pixelCount],false);
+},destroy:function(e){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _20=this.widget;
+_20._abspos=null;
+_20._setValueAttr(_20.value,true);
+}});
+}
diff --git a/js/dojo/dijit/form/MappedTextBox.js b/js/dojo/dijit/form/MappedTextBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/MappedTextBox.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.MappedTextBox"]){
+dojo._hasResource["dijit.form.MappedTextBox"]=true;
+dojo.provide("dijit.form.MappedTextBox");
+dojo.require("dijit.form.ValidationTextBox");
+}
diff --git a/js/dojo/dijit/form/MultiSelect.js b/js/dojo/dijit/form/MultiSelect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/MultiSelect.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.MultiSelect"]){
+dojo._hasResource["dijit.form.MultiSelect"]=true;
+dojo.provide("dijit.form.MultiSelect");
+dojo.require("dijit.form._FormWidget");
+dojo.declare("dijit.form.MultiSelect",dijit.form._FormValueWidget,{size:7,templateString:"<select multiple='true' ${nameAttrSetting} dojoAttachPoint='containerNode,focusNode' dojoAttachEvent='onchange: _onChange'></select>",attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{size:"focusNode"}),reset:function(){
+this._hasBeenBlurred=false;
+this._setValueAttr(this._resetValue,true);
+},addSelected:function(_1){
+_1.getSelected().forEach(function(n){
+this.containerNode.appendChild(n);
+this.domNode.scrollTop=this.domNode.offsetHeight;
+var _2=_1.domNode.scrollTop;
+_1.domNode.scrollTop=0;
+_1.domNode.scrollTop=_2;
+},this);
+},getSelected:function(){
+return dojo.query("option",this.containerNode).filter(function(n){
+return n.selected;
+});
+},_getValueAttr:function(){
+return this.getSelected().map(function(n){
+return n.value;
+});
+},multiple:true,_setValueAttr:function(_3){
+dojo.query("option",this.containerNode).forEach(function(n){
+n.selected=(dojo.indexOf(_3,n.value)!=-1);
+});
+},invertSelection:function(_4){
+dojo.query("option",this.containerNode).forEach(function(n){
+n.selected=!n.selected;
+});
+this._handleOnChange(this.attr("value"),_4==true);
+},_onChange:function(e){
+this._handleOnChange(this.attr("value"),true);
+},resize:function(_5){
+if(_5){
+dojo.marginBox(this.domNode,_5);
+}
+},postCreate:function(){
+this._onChange();
+}});
+}
diff --git a/js/dojo/dijit/form/RadioButton.js b/js/dojo/dijit/form/RadioButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/RadioButton.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.RadioButton"]){
+dojo._hasResource["dijit.form.RadioButton"]=true;
+dojo.provide("dijit.form.RadioButton");
+dojo.require("dijit.form.CheckBox");
+}
diff --git a/js/dojo/dijit/form/RangeBoundTextBox.js b/js/dojo/dijit/form/RangeBoundTextBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/RangeBoundTextBox.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.RangeBoundTextBox"]){
+dojo._hasResource["dijit.form.RangeBoundTextBox"]=true;
+dojo.provide("dijit.form.RangeBoundTextBox");
+dojo.require("dijit.form.ValidationTextBox");
+}
diff --git a/js/dojo/dijit/form/Select.js b/js/dojo/dijit/form/Select.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/Select.js
@@ -0,0 +1,141 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Select"]){
+dojo._hasResource["dijit.form.Select"]=true;
+dojo.provide("dijit.form.Select");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.require("dijit._HasDropDown");
+dojo.require("dijit.Menu");
+dojo.requireLocalization("dijit.form","validate",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){
+this.inherited(arguments);
+var o=(this.menuTableNode=this.domNode);
+var n=(this.domNode=dojo.doc.createElement("div"));
+if(o.parentNode){
+o.parentNode.replaceChild(n,o);
+}
+dojo.removeClass(o,"dijitMenuTable");
+n.className=o.className+" dijitSelectMenu";
+o.className="dijitReset dijitMenuTable";
+dijit.setWaiRole(o,"listbox");
+dijit.setWaiRole(n,"presentation");
+n.appendChild(o);
+this.tabIndex=null;
+},resize:function(mb){
+if(mb){
+dojo.marginBox(this.domNode,mb);
+var w=dojo.contentBox(this.domNode).w;
+if(dojo.isMoz&&this.domNode.scrollHeight>this.domNode.clientHeight){
+w--;
+}else{
+if(dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)){
+w-=16;
+}
+}
+dojo.marginBox(this.menuTableNode,{w:w});
+}
+}});
+dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class='dijit dijitReset dijitInline dijitLeft'\n\tdojoAttachPoint=\"_buttonNode,tableNode\" cellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" dojoAttachPoint=\"focusNode\"\n\t\t\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\" />\n\t\t</td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\">&thinsp;</div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",tooltipPosition:[],emptyLabel:"",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){
+this.inherited(arguments);
+if(this.options.length&&!this.value&&this.srcNodeRef){
+var si=this.srcNodeRef.selectedIndex;
+this.value=this.options[si!=-1?si:0].value;
+}
+this.dropDown=new dijit.form._SelectMenu();
+dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");
+},_getMenuItemForOption:function(_1){
+if(!_1.value){
+return new dijit.MenuSeparator();
+}else{
+var _2=dojo.hitch(this,"_setValueAttr",_1);
+var _3=new dijit.MenuItem({option:_1,label:_1.label,onClick:_2,disabled:_1.disabled||false});
+dijit.setWaiRole(_3.focusNode,"listitem");
+return _3;
+}
+},_addOptionItem:function(_4){
+if(this.dropDown){
+this.dropDown.addChild(this._getMenuItemForOption(_4));
+}
+},_getChildren:function(){
+if(!this.dropDown){
+return [];
+}
+return this.dropDown.getChildren();
+},_loadChildren:function(_5){
+if(_5===true){
+if(this.dropDown){
+delete this.dropDown.focusedChild;
+}
+if(this.options.length){
+this.inherited(arguments);
+}else{
+dojo.forEach(this._getChildren(),function(_6){
+_6.destroyRecursive();
+});
+var _7=new dijit.MenuItem({label:"&nbsp;"});
+this.dropDown.addChild(_7);
+}
+}else{
+this._updateSelection();
+}
+var _8=this.options.length;
+this._isLoaded=false;
+this._childrenLoaded=true;
+if(!this._loadingStore){
+this._setValueAttr(this.value);
+}
+},_setValueAttr:function(_9){
+this.inherited(arguments);
+dojo.attr(this.valueNode,"value",this.attr("value"));
+},_setDisplay:function(_a){
+this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_a||this.emptyLabel||"&nbsp;")+"</span>";
+dijit.setWaiState(this.focusNode,"valuenow",(_a||this.emptyLabel||"&nbsp;"));
+},validate:function(_b){
+var _c=this.isValid(_b);
+this.state=_c?"":"Error";
+this._setStateClass();
+dijit.setWaiState(this.focusNode,"invalid",_c?"false":"true");
+var _d=_c?"":this._missingMsg;
+if(this._message!==_d){
+this._message=_d;
+dijit.hideTooltip(this.domNode);
+if(_d){
+dijit.showTooltip(_d,this.domNode,this.tooltipPosition);
+}
+}
+return _c;
+},isValid:function(_e){
+return (!this.required||!(/^\s*$/.test(this.value)));
+},reset:function(){
+this.inherited(arguments);
+dijit.hideTooltip(this.domNode);
+this.state="";
+this._setStateClass();
+delete this._message;
+},postMixInProperties:function(){
+this.inherited(arguments);
+this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;
+},postCreate:function(){
+this.inherited(arguments);
+if(this.tableNode.style.width){
+dojo.addClass(this.domNode,this.baseClass+"FixedWidth");
+}
+},isLoaded:function(){
+return this._isLoaded;
+},loadDropDown:function(_f){
+this._loadChildren(true);
+this._isLoaded=true;
+_f();
+},uninitialize:function(_10){
+if(this.dropDown&&!this.dropDown._destroyed){
+this.dropDown.destroyRecursive(_10);
+delete this.dropDown;
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/form/SimpleTextarea.js b/js/dojo/dijit/form/SimpleTextarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/SimpleTextarea.js
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.SimpleTextarea"]){
+dojo._hasResource["dijit.form.SimpleTextarea"]=true;
+dojo.provide("dijit.form.SimpleTextarea");
+dojo.require("dijit.form.TextBox");
+dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextArea",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{rows:"textbox",cols:"textbox"}),rows:"3",cols:"20",templateString:"<textarea ${nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",postMixInProperties:function(){
+if(!this.value&&this.srcNodeRef){
+this.value=this.srcNodeRef.value;
+}
+this.inherited(arguments);
+},filter:function(_1){
+if(_1){
+_1=_1.replace(/\r/g,"");
+}
+return this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+if(dojo.isIE&&this.cols){
+dojo.addClass(this.textbox,"dijitTextAreaCols");
+}
+},_previousValue:"",_onInput:function(e){
+if(this.maxLength){
+var _2=parseInt(this.maxLength);
+var _3=this.textbox.value.replace(/\r/g,"");
+var _4=_3.length-_2;
+if(_4>0){
+if(e){
+dojo.stopEvent(e);
+}
+var _5=this.textbox;
+if(_5.selectionStart){
+var _6=_5.selectionStart;
+var cr=0;
+if(dojo.isOpera){
+cr=(this.textbox.value.substring(0,_6).match(/\r/g)||[]).length;
+}
+this.textbox.value=_3.substring(0,_6-_4-cr)+_3.substring(_6-cr);
+_5.setSelectionRange(_6-_4,_6-_4);
+}else{
+if(dojo.doc.selection){
+_5.focus();
+var _7=dojo.doc.selection.createRange();
+_7.moveStart("character",-_4);
+_7.text="";
+_7.select();
+}
+}
+}
+this._previousValue=this.textbox.value;
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/form/ToggleButton.js b/js/dojo/dijit/form/ToggleButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/ToggleButton.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ToggleButton"]){
+dojo._hasResource["dijit.form.ToggleButton"]=true;
+dojo.provide("dijit.form.ToggleButton");
+dojo.require("dijit.form.Button");
+}
diff --git a/js/dojo/dijit/form/VerticalRule.js b/js/dojo/dijit/form/VerticalRule.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/VerticalRule.js
@@ -0,0 +1,13 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalRule"]){
+dojo._hasResource["dijit.form.VerticalRule"]=true;
+dojo.provide("dijit.form.VerticalRule");
+dojo.require("dijit.form.HorizontalRule");
+dojo.declare("dijit.form.VerticalRule",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkV\" style=\"top:",_isHorizontal:false});
+}
diff --git a/js/dojo/dijit/form/VerticalRuleLabels.js b/js/dojo/dijit/form/VerticalRuleLabels.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/VerticalRuleLabels.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){
+dojo._hasResource["dijit.form.VerticalRuleLabels"]=true;
+dojo.provide("dijit.form.VerticalRuleLabels");
+dojo.require("dijit.form.HorizontalRuleLabels");
+dojo.declare("dijit.form.VerticalRuleLabels",dijit.form.HorizontalRuleLabels,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerV\" style=\"top:",_labelPrefix:"\"><span class=\"dijitRuleLabel dijitRuleLabelV\">",_calcPosition:function(_1){
+return 100-_1;
+}});
+}
diff --git a/js/dojo/dijit/form/VerticalSlider.js b/js/dojo/dijit/form/VerticalSlider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/VerticalSlider.js
@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalSlider"]){
+dojo._hasResource["dijit.form.VerticalSlider"]=true;
+dojo.provide("dijit.form.VerticalSlider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.declare("dijit.form.VerticalSlider",dijit.form.HorizontalSlider,{templateString:dojo.cache("dijit.form","templates/VerticalSlider.html","<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n><tbody class=\"dijitReset\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper dijitSliderTopBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper dijitSliderBottomBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></tbody></table>\n"),_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_descending:true,startup:function(){
+if(this._started){
+return;
+}
+if(!this.isLeftToRight()&&dojo.isMoz){
+if(this.leftDecoration){
+this._rtlRectify(this.leftDecoration);
+}
+if(this.rightDecoration){
+this._rtlRectify(this.rightDecoration);
+}
+}
+this.inherited(arguments);
+},_isReversed:function(){
+return this._descending;
+},_rtlRectify:function(_1){
+var _2=[];
+while(_1.firstChild){
+_2.push(_1.firstChild);
+_1.removeChild(_1.firstChild);
+}
+for(var i=_2.length-1;i>=0;i--){
+if(_2[i]){
+_1.appendChild(_2[i]);
+}
+}
+}});
+}
diff --git a/js/dojo/dijit/form/_DateTimeTextBox.js b/js/dojo/dijit/form/_DateTimeTextBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/_DateTimeTextBox.js
@@ -0,0 +1,145 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){
+dojo._hasResource["dijit.form._DateTimeTextBox"]=true;
+dojo.provide("dijit.form._DateTimeTextBox");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.date.stamp");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.declare("dijit.form._DateTimeTextBox",dijit.form.RangeBoundTextBox,{regExpGen:dojo.date.locale.regexp,datePackage:"dojo.date",compare:dojo.date.compare,format:function(_1,_2){
+if(!_1){
+return "";
+}
+return this.dateLocaleModule.format(_1,_2);
+},parse:function(_3,_4){
+return this.dateLocaleModule.parse(_3,_4)||(this._isEmpty(_3)?null:undefined);
+},serialize:function(_5,_6){
+if(_5.toGregorian){
+_5=_5.toGregorian();
+}
+return dojo.date.stamp.toISOString(_5,_6);
+},value:new Date(""),_blankValue:null,popupClass:"",_selector:"",constructor:function(_7){
+var _8=_7.datePackage?_7.datePackage+".Date":"Date";
+this.dateClassObj=dojo.getObject(_8,false);
+this.value=new this.dateClassObj("");
+this.datePackage=_7.datePackage||this.datePackage;
+this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);
+this.regExpGen=this.dateLocaleModule.regexp;
+},postMixInProperties:function(){
+this.inherited(arguments);
+if(!this.value||this.value.toString()==dijit.form._DateTimeTextBox.prototype.value.toString()){
+this.value=null;
+}
+var _9=this.constraints;
+_9.selector=this._selector;
+_9.fullYear=true;
+var _a=dojo.date.stamp.fromISOString;
+if(typeof _9.min=="string"){
+_9.min=_a(_9.min);
+}
+if(typeof _9.max=="string"){
+_9.max=_a(_9.max);
+}
+},_onFocus:function(_b){
+this._open();
+this.inherited(arguments);
+},_setValueAttr:function(_c,_d,_e){
+if(_c instanceof Date&&!(this.dateClassObj instanceof Date)){
+_c=new this.dateClassObj(_c);
+}
+this.inherited(arguments);
+if(this._picker){
+if(!_c){
+_c=new this.dateClassObj();
+}
+this._picker.attr("value",_c);
+}
+},_open:function(){
+if(this.disabled||this.readOnly||!this.popupClass){
+return;
+}
+var _f=this;
+if(!this._picker){
+var _10=dojo.getObject(this.popupClass,false);
+this._picker=new _10({onValueSelected:function(_11){
+if(_f._tabbingAway){
+delete _f._tabbingAway;
+}else{
+_f.focus();
+}
+setTimeout(dojo.hitch(_f,"_close"),1);
+dijit.form._DateTimeTextBox.superclass._setValueAttr.call(_f,_11,true);
+},id:this.id+"_popup",lang:_f.lang,constraints:_f.constraints,datePackage:_f.datePackage,isDisabledDate:function(_12){
+var _13=dojo.date.compare;
+var _14=_f.constraints;
+return _14&&(_14.min&&(_13(_14.min,_12,_f._selector)>0)||(_14.max&&_13(_14.max,_12,_f._selector)<0));
+}});
+this._picker.attr("value",this.attr("value")||new this.dateClassObj());
+}
+if(!this._opened){
+dijit.popup.open({parent:this,popup:this._picker,orient:{"BL":"TL","TL":"BL"},around:this.domNode,onCancel:dojo.hitch(this,this._close),onClose:function(){
+_f._opened=false;
+}});
+this._opened=true;
+}
+dojo.marginBox(this._picker.domNode,{w:this.domNode.offsetWidth});
+},_close:function(){
+if(this._opened){
+dijit.popup.close(this._picker);
+this._opened=false;
+}
+},_onBlur:function(){
+this._close();
+if(this._picker){
+this._picker.destroy();
+delete this._picker;
+}
+this.inherited(arguments);
+},_getDisplayedValueAttr:function(){
+return this.textbox.value;
+},_setDisplayedValueAttr:function(_15,_16){
+this._setValueAttr(this.parse(_15,this.constraints),_16,_15);
+},destroy:function(){
+if(this._picker){
+this._picker.destroy();
+delete this._picker;
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.focusNode,"onkeypress",this._onKeyPress);
+this.connect(this.focusNode,"onclick",this._open);
+},_onKeyPress:function(e){
+var p=this._picker,dk=dojo.keys;
+if(p&&this._opened&&p.handleKey){
+if(p.handleKey(e)===false){
+return;
+}
+}
+if(this._opened&&e.charOrCode==dk.ESCAPE&&!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)){
+this._close();
+dojo.stopEvent(e);
+}else{
+if(!this._opened&&e.charOrCode==dk.DOWN_ARROW){
+this._open();
+dojo.stopEvent(e);
+}else{
+if(e.charOrCode===dk.TAB){
+this._tabbingAway=true;
+}else{
+if(this._opened&&(e.keyChar||e.charOrCode===dk.BACKSPACE||e.charOrCode==dk.DELETE)){
+setTimeout(dojo.hitch(this,function(){
+dijit.placeOnScreenAroundElement(p.domNode.parentNode,this.domNode,{"BL":"TL","TL":"BL"},p.orient?dojo.hitch(p,"orient"):null);
+}),1);
+}
+}
+}
+}
+}});
+}
diff --git a/js/dojo/dijit/form/_FormMixin.js b/js/dojo/dijit/form/_FormMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/_FormMixin.js
@@ -0,0 +1,157 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._FormMixin"]){
+dojo._hasResource["dijit.form._FormMixin"]=true;
+dojo.provide("dijit.form._FormMixin");
+dojo.declare("dijit.form._FormMixin",null,{reset:function(){
+dojo.forEach(this.getDescendants(),function(_1){
+if(_1.reset){
+_1.reset();
+}
+});
+},validate:function(){
+var _2=false;
+return dojo.every(dojo.map(this.getDescendants(),function(_3){
+_3._hasBeenBlurred=true;
+var _4=_3.disabled||!_3.validate||_3.validate();
+if(!_4&&!_2){
+dijit.scrollIntoView(_3.containerNode||_3.domNode);
+_3.focus();
+_2=true;
+}
+return _4;
+}),function(_5){
+return _5;
+});
+},setValues:function(_6){
+dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use attr('value', val) instead.","","2.0");
+return this.attr("value",_6);
+},_setValueAttr:function(_7){
+var _8={};
+dojo.forEach(this.getDescendants(),function(_9){
+if(!_9.name){
+return;
+}
+var _a=_8[_9.name]||(_8[_9.name]=[]);
+_a.push(_9);
+});
+for(var _b in _8){
+if(!_8.hasOwnProperty(_b)){
+continue;
+}
+var _c=_8[_b],_d=dojo.getObject(_b,false,_7);
+if(_d===undefined){
+continue;
+}
+if(!dojo.isArray(_d)){
+_d=[_d];
+}
+if(typeof _c[0].checked=="boolean"){
+dojo.forEach(_c,function(w,i){
+w.attr("value",dojo.indexOf(_d,w.value)!=-1);
+});
+}else{
+if(_c[0].multiple){
+_c[0].attr("value",_d);
+}else{
+dojo.forEach(_c,function(w,i){
+w.attr("value",_d[i]);
+});
+}
+}
+}
+},getValues:function(){
+dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use attr('value') instead.","","2.0");
+return this.attr("value");
+},_getValueAttr:function(){
+var _e={};
+dojo.forEach(this.getDescendants(),function(_f){
+var _10=_f.name;
+if(!_10||_f.disabled){
+return;
+}
+var _11=_f.attr("value");
+if(typeof _f.checked=="boolean"){
+if(/Radio/.test(_f.declaredClass)){
+if(_11!==false){
+dojo.setObject(_10,_11,_e);
+}else{
+_11=dojo.getObject(_10,false,_e);
+if(_11===undefined){
+dojo.setObject(_10,null,_e);
+}
+}
+}else{
+var ary=dojo.getObject(_10,false,_e);
+if(!ary){
+ary=[];
+dojo.setObject(_10,ary,_e);
+}
+if(_11!==false){
+ary.push(_11);
+}
+}
+}else{
+var _12=dojo.getObject(_10,false,_e);
+if(typeof _12!="undefined"){
+if(dojo.isArray(_12)){
+_12.push(_11);
+}else{
+dojo.setObject(_10,[_12,_11],_e);
+}
+}else{
+dojo.setObject(_10,_11,_e);
+}
+}
+});
+return _e;
+},isValid:function(){
+this._invalidWidgets=dojo.filter(this.getDescendants(),function(_13){
+return !_13.disabled&&_13.isValid&&!_13.isValid();
+});
+return !this._invalidWidgets.length;
+},onValidStateChange:function(_14){
+},_widgetChange:function(_15){
+var _16=this._lastValidState;
+if(!_15||this._lastValidState===undefined){
+_16=this.isValid();
+if(this._lastValidState===undefined){
+this._lastValidState=_16;
+}
+}else{
+if(_15.isValid){
+this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){
+return (w!=_15);
+},this);
+if(!_15.isValid()&&!_15.attr("disabled")){
+this._invalidWidgets.push(_15);
+}
+_16=(this._invalidWidgets.length===0);
+}
+}
+if(_16!==this._lastValidState){
+this._lastValidState=_16;
+this.onValidStateChange(_16);
+}
+},connectChildren:function(){
+dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));
+var _17=this;
+var _18=this._changeConnections=[];
+dojo.forEach(dojo.filter(this.getDescendants(),function(_19){
+return _19.validate;
+}),function(_1a){
+_18.push(_17.connect(_1a,"validate",dojo.hitch(_17,"_widgetChange",_1a)));
+_18.push(_17.connect(_1a,"_setDisabledAttr",dojo.hitch(_17,"_widgetChange",_1a)));
+});
+this._widgetChange(null);
+},startup:function(){
+this.inherited(arguments);
+this._changeConnections=[];
+this.connectChildren();
+}});
+}
diff --git a/js/dojo/dijit/form/_FormSelectWidget.js b/js/dojo/dijit/form/_FormSelectWidget.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/_FormSelectWidget.js
@@ -0,0 +1,307 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._FormSelectWidget"]){
+dojo._hasResource["dijit.form._FormSelectWidget"]=true;
+dojo.provide("dijit.form._FormSelectWidget");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dojo.data.util.sorter");
+dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_1){
+var _2=_1,_3=this.options||[],l=_3.length;
+if(_2===undefined){
+return _3;
+}
+if(dojo.isArray(_2)){
+return dojo.map(_2,"return this.getOptions(item);",this);
+}
+if(dojo.isObject(_1)){
+if(!dojo.some(this.options,function(o,_4){
+if(o===_2||(o.value&&o.value===_2.value)){
+_2=_4;
+return true;
+}
+return false;
+})){
+_2=-1;
+}
+}
+if(typeof _2=="string"){
+for(var i=0;i<l;i++){
+if(_3[i].value===_2){
+_2=i;
+break;
+}
+}
+}
+if(typeof _2=="number"&&_2>=0&&_2<l){
+return this.options[_2];
+}
+return null;
+},addOption:function(_5){
+if(!dojo.isArray(_5)){
+_5=[_5];
+}
+dojo.forEach(_5,function(i){
+if(i&&dojo.isObject(i)){
+this.options.push(i);
+}
+},this);
+this._loadChildren();
+},removeOption:function(_6){
+if(!dojo.isArray(_6)){
+_6=[_6];
+}
+var _7=this.getOptions(_6);
+dojo.forEach(_7,function(i){
+if(i){
+this.options=dojo.filter(this.options,function(_8,_9){
+return (_8.value!==i.value);
+});
+this._removeOptionItem(i);
+}
+},this);
+this._loadChildren();
+},updateOption:function(_a){
+if(!dojo.isArray(_a)){
+_a=[_a];
+}
+dojo.forEach(_a,function(i){
+var _b=this.getOptions(i),k;
+if(_b){
+for(k in i){
+_b[k]=i[k];
+}
+}
+},this);
+this._loadChildren();
+},setStore:function(_c,_d,_e){
+var _f=this.store;
+_e=_e||{};
+if(_f!==_c){
+dojo.forEach(this._notifyConnections||[],dojo.disconnect);
+delete this._notifyConnections;
+if(_c&&_c.getFeatures()["dojo.data.api.Notification"]){
+this._notifyConnections=[dojo.connect(_c,"onNew",this,"_onNewItem"),dojo.connect(_c,"onDelete",this,"_onDeleteItem"),dojo.connect(_c,"onSet",this,"_onSetItem")];
+}
+this.store=_c;
+}
+this._onChangeActive=false;
+if(this.options&&this.options.length){
+this.removeOption(this.options);
+}
+if(_c){
+var cb=function(_10){
+if(this.sortByLabel&&!_e.sort&&_10.length){
+_10.sort(dojo.data.util.sorter.createSortFunction([{attribute:_c.getLabelAttributes(_10[0])[0]}],_c));
+}
+if(_e.onFetch){
+_10=_e.onFetch(_10);
+}
+dojo.forEach(_10,function(i){
+this._addOptionForItem(i);
+},this);
+this._loadingStore=false;
+this.attr("value",(("_pendingValue" in this)?this._pendingValue:_d));
+delete this._pendingValue;
+if(!this.loadChildrenOnOpen){
+this._loadChildren();
+}else{
+this._pseudoLoadChildren(_10);
+}
+this._fetchedWith=_11;
+this._lastValueReported=this.multiple?[]:null;
+this._onChangeActive=true;
+this.onSetStore();
+this._handleOnChange(this.value);
+};
+var _11=dojo.mixin({onComplete:cb,scope:this},_e);
+this._loadingStore=true;
+_c.fetch(_11);
+}else{
+delete this._fetchedWith;
+}
+return _f;
+},_setValueAttr:function(_12,_13){
+if(this._loadingStore){
+this._pendingValue=_12;
+return;
+}
+var _14=this.getOptions()||[];
+if(!dojo.isArray(_12)){
+_12=[_12];
+}
+dojo.forEach(_12,function(i,idx){
+if(!dojo.isObject(i)){
+i=i+"";
+}
+if(typeof i==="string"){
+_12[idx]=dojo.filter(_14,function(_15){
+return _15.value===i;
+})[0]||{value:"",label:""};
+}
+},this);
+_12=dojo.filter(_12,function(i){
+return i&&i.value;
+});
+if(!this.multiple&&(!_12[0]||!_12[0].value)&&_14.length){
+_12[0]=_14[0];
+}
+dojo.forEach(_14,function(i){
+i.selected=dojo.some(_12,function(v){
+return v.value===i.value;
+});
+});
+var val=dojo.map(_12,function(i){
+return i.value;
+}),_16=dojo.map(_12,function(i){
+return i.label;
+});
+this.value=this.multiple?val:val[0];
+this._setDisplay(this.multiple?_16:_16[0]);
+this._updateSelection();
+this._handleOnChange(this.value,_13);
+},_getDisplayedValueAttr:function(){
+var val=this.attr("value");
+if(!dojo.isArray(val)){
+val=[val];
+}
+var ret=dojo.map(this.getOptions(val),function(v){
+if(v&&"label" in v){
+return v.label;
+}else{
+if(v){
+return v.value;
+}
+}
+return null;
+},this);
+return this.multiple?ret:ret[0];
+},_getValueDeprecated:false,getValue:function(){
+return this._lastValue;
+},undo:function(){
+this._setValueAttr(this._lastValueReported,false);
+},_loadChildren:function(){
+if(this._loadingStore){
+return;
+}
+dojo.forEach(this._getChildren(),function(_17){
+_17.destroyRecursive();
+});
+dojo.forEach(this.options,this._addOptionItem,this);
+this._updateSelection();
+},_updateSelection:function(){
+this.value=this._getValueFromOpts();
+var val=this.value;
+if(!dojo.isArray(val)){
+val=[val];
+}
+if(val&&val[0]){
+dojo.forEach(this._getChildren(),function(_18){
+var _19=dojo.some(val,function(v){
+return _18.option&&(v===_18.option.value);
+});
+dojo.toggleClass(_18.domNode,this.baseClass+"SelectedOption",_19);
+dijit.setWaiState(_18.domNode,"selected",_19);
+},this);
+}
+this._handleOnChange(this.value);
+},_getValueFromOpts:function(){
+var _1a=this.getOptions()||[];
+if(!this.multiple&&_1a.length){
+var opt=dojo.filter(_1a,function(i){
+return i.selected;
+})[0];
+if(opt&&opt.value){
+return opt.value;
+}else{
+_1a[0].selected=true;
+return _1a[0].value;
+}
+}else{
+if(this.multiple){
+return dojo.map(dojo.filter(_1a,function(i){
+return i.selected;
+}),function(i){
+return i.value;
+})||[];
+}
+}
+return "";
+},_onNewItem:function(_1b,_1c){
+if(!_1c||!_1c.parent){
+this._addOptionForItem(_1b);
+}
+},_onDeleteItem:function(_1d){
+var _1e=this.store;
+this.removeOption(_1e.getIdentity(_1d));
+},_onSetItem:function(_1f){
+this.updateOption(this._getOptionObjForItem(_1f));
+},_getOptionObjForItem:function(_20){
+var _21=this.store,_22=_21.getLabel(_20),_23=(_22?_21.getIdentity(_20):null);
+return {value:_23,label:_22,item:_20};
+},_addOptionForItem:function(_24){
+var _25=this.store;
+if(!_25.isItemLoaded(_24)){
+_25.loadItem({item:_24,onComplete:function(i){
+this._addOptionForItem(_24);
+},scope:this});
+return;
+}
+var _26=this._getOptionObjForItem(_24);
+this.addOption(_26);
+},constructor:function(_27){
+this._oValue=(_27||{}).value||null;
+},_fillContent:function(){
+var _28=this.options;
+if(!_28){
+_28=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(_29){
+if(_29.getAttribute("type")==="separator"){
+return {value:"",label:"",selected:false,disabled:false};
+}
+return {value:_29.getAttribute("value"),label:String(_29.innerHTML),selected:_29.getAttribute("selected")||false,disabled:_29.getAttribute("disabled")||false};
+},this):[];
+}
+if(!this.value){
+this.value=this._getValueFromOpts();
+}else{
+if(this.multiple&&typeof this.value=="string"){
+this.value=this.value.split(",");
+}
+}
+},postCreate:function(){
+dojo.setSelectable(this.focusNode,false);
+this.inherited(arguments);
+this.connect(this,"onChange","_updateSelection");
+this.connect(this,"startup","_loadChildren");
+this._setValueAttr(this.value,null);
+},startup:function(){
+this.inherited(arguments);
+var _2a=this.store,_2b={};
+dojo.forEach(["query","queryOptions","onFetch"],function(i){
+if(this[i]){
+_2b[i]=this[i];
+}
+delete this[i];
+},this);
+if(_2a&&_2a.getFeatures()["dojo.data.api.Identity"]){
+this.store=null;
+this.setStore(_2a,this._oValue,_2b);
+}
+},destroy:function(){
+dojo.forEach(this._notifyConnections||[],dojo.disconnect);
+this.inherited(arguments);
+},_addOptionItem:function(_2c){
+},_removeOptionItem:function(_2d){
+},_setDisplay:function(_2e){
+},_getChildren:function(){
+return [];
+},_getSelectedOptionsAttr:function(){
+return this.getOptions(this.attr("value"));
+},_pseudoLoadChildren:function(_2f){
+},onSetStore:function(){
+}});
+}
diff --git a/js/dojo/dijit/form/nls/ar/ComboBox.js b/js/dojo/dijit/form/nls/ar/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ar/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/ar/Textarea.js b/js/dojo/dijit/form/nls/ar/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ar/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"مساحة التحرير","iframeFocusTitle":"اطار مساحة التحرير"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/ar/validate.js b/js/dojo/dijit/form/nls/ar/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ar/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/ca/ComboBox.js b/js/dojo/dijit/form/nls/ca/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ca/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/ca/Textarea.js b/js/dojo/dijit/form/nls/ca/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ca/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"àrea d'edició","iframeFocusTitle":"Marc de l'àrea d'edició"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/ca/validate.js b/js/dojo/dijit/form/nls/ca/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/ca/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/da/ComboBox.js b/js/dojo/dijit/form/nls/da/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/da/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Forrige valg","nextMessage":"Flere valg"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/da/Textarea.js b/js/dojo/dijit/form/nls/da/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/da/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme om redigeringsområde"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/da/validate.js b/js/dojo/dijit/form/nls/da/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/da/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/el/ComboBox.js b/js/dojo/dijit/form/nls/el/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/el/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/el/Textarea.js b/js/dojo/dijit/form/nls/el/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/el/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"περιοχή επεξεργασίας","iframeFocusTitle":"πλαίσιο περιοχής επεξεργασίας"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/el/validate.js b/js/dojo/dijit/form/nls/el/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/el/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/fi/ComboBox.js b/js/dojo/dijit/form/nls/fi/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/fi/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/fi/Textarea.js b/js/dojo/dijit/form/nls/fi/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/fi/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"muokkausalue","iframeFocusTitle":"muokkausalueen kehys"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/fi/validate.js b/js/dojo/dijit/form/nls/fi/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/fi/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/he/ComboBox.js b/js/dojo/dijit/form/nls/he/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/he/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/he/Textarea.js b/js/dojo/dijit/form/nls/he/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/he/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"אזור עריכה","iframeFocusTitle":"מסגרת אזור עריכה"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/he/validate.js b/js/dojo/dijit/form/nls/he/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/he/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nb/ComboBox.js b/js/dojo/dijit/form/nls/nb/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nb/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Tidligere valg","nextMessage":"Flere valg"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nb/Textarea.js b/js/dojo/dijit/form/nls/nb/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nb/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme for redigeringsområde"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nb/validate.js b/js/dojo/dijit/form/nls/nb/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nb/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nl/ComboBox.js b/js/dojo/dijit/form/nls/nl/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nl/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Eerdere opties","nextMessage":"Meer opties"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nl/Textarea.js b/js/dojo/dijit/form/nls/nl/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nl/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"veld bewerken","iframeFocusTitle":"veldkader bewerken"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/nl/validate.js b/js/dojo/dijit/form/nls/nl/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/nl/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/pt-pt/ComboBox.js b/js/dojo/dijit/form/nls/pt-pt/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/pt-pt/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Opções anteriores","nextMessage":"Mais opções"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/pt-pt/Textarea.js b/js/dojo/dijit/form/nls/pt-pt/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/pt-pt/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"área de edição","iframeFocusTitle":"painel da área de edição"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/pt-pt/validate.js b/js/dojo/dijit/form/nls/pt-pt/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/pt-pt/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sk/ComboBox.js b/js/dojo/dijit/form/nls/sk/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sk/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sk/Textarea.js b/js/dojo/dijit/form/nls/sk/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sk/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"upraviť oblasť","iframeFocusTitle":"upraviť rám oblasti"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sk/validate.js b/js/dojo/dijit/form/nls/sk/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sk/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sl/ComboBox.js b/js/dojo/dijit/form/nls/sl/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sl/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sl/Textarea.js b/js/dojo/dijit/form/nls/sl/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sl/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"urejanje področja","iframeFocusTitle":"urejanje področja okvirja"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sl/validate.js b/js/dojo/dijit/form/nls/sl/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sl/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sv/ComboBox.js b/js/dojo/dijit/form/nls/sv/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sv/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sv/Textarea.js b/js/dojo/dijit/form/nls/sv/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sv/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"redigeringsområdesram"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/sv/validate.js b/js/dojo/dijit/form/nls/sv/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/sv/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/th/ComboBox.js b/js/dojo/dijit/form/nls/th/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/th/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/th/Textarea.js b/js/dojo/dijit/form/nls/th/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/th/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"แก้ไขพื้นที่","iframeFocusTitle":"แก้ไขกรอบพื้นที่"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/th/validate.js b/js/dojo/dijit/form/nls/th/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/th/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/tr/ComboBox.js b/js/dojo/dijit/form/nls/tr/ComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/tr/ComboBox.js
@@ -0,0 +1,1 @@
+({"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/tr/Textarea.js b/js/dojo/dijit/form/nls/tr/Textarea.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/tr/Textarea.js
@@ -0,0 +1,1 @@
+({"iframeEditTitle":"düzenleme alanı","iframeFocusTitle":"düzenleme alanı çerçevesi"})
\ No newline at end of file
diff --git a/js/dojo/dijit/form/nls/tr/validate.js b/js/dojo/dijit/form/nls/tr/validate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/form/nls/tr/validate.js
@@ -0,0 +1,1 @@
+({"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."})
\ No newline at end of file
diff --git a/js/dojo/dijit/layout/AccordionPane.js b/js/dojo/dijit/layout/AccordionPane.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/AccordionPane.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.AccordionPane"]){
+dojo._hasResource["dijit.layout.AccordionPane"]=true;
+dojo.provide("dijit.layout.AccordionPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){
+dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");
+},onSelected:function(){
+}});
+}
diff --git a/js/dojo/dijit/layout/BorderContainer.js b/js/dojo/dijit/layout/BorderContainer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/BorderContainer.js
@@ -0,0 +1,337 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.BorderContainer"]){
+dojo._hasResource["dijit.layout.BorderContainer"]=true;
+dojo.provide("dijit.layout.BorderContainer");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dojo.cookie");
+dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){
+if(!this.gutters){
+this.baseClass+="NoGutter";
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this._splitters={};
+this._splitterThickness={};
+},startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),this._setupChild,this);
+this.inherited(arguments);
+},_setupChild:function(_1){
+var _2=_1.region;
+if(_2){
+this.inherited(arguments);
+dojo.addClass(_1.domNode,this.baseClass+"Pane");
+var _3=this.isLeftToRight();
+if(_2=="leading"){
+_2=_3?"left":"right";
+}
+if(_2=="trailing"){
+_2=_3?"right":"left";
+}
+this["_"+_2]=_1.domNode;
+this["_"+_2+"Widget"]=_1;
+if((_1.splitter||this.gutters)&&!this._splitters[_2]){
+var _4=dojo.getObject(_1.splitter?this._splitterClass:"dijit.layout._Gutter");
+var _5=new _4({container:this,child:_1,region:_2,live:this.liveSplitters});
+_5.isSplitter=true;
+this._splitters[_2]=_5.domNode;
+dojo.place(this._splitters[_2],_1.domNode,"after");
+_5.startup();
+}
+_1.region=_2;
+}
+},_computeSplitterThickness:function(_6){
+this._splitterThickness[_6]=this._splitterThickness[_6]||dojo.marginBox(this._splitters[_6])[(/top|bottom/.test(_6)?"h":"w")];
+},layout:function(){
+for(var _7 in this._splitters){
+this._computeSplitterThickness(_7);
+}
+this._layoutChildren();
+},addChild:function(_8,_9){
+this.inherited(arguments);
+if(this._started){
+this.layout();
+}
+},removeChild:function(_a){
+var _b=_a.region;
+var _c=this._splitters[_b];
+if(_c){
+dijit.byNode(_c).destroy();
+delete this._splitters[_b];
+delete this._splitterThickness[_b];
+}
+this.inherited(arguments);
+delete this["_"+_b];
+delete this["_"+_b+"Widget"];
+if(this._started){
+this._layoutChildren(_a.region);
+}
+dojo.removeClass(_a.domNode,this.baseClass+"Pane");
+},getChildren:function(){
+return dojo.filter(this.inherited(arguments),function(_d){
+return !_d.isSplitter;
+});
+},getSplitter:function(_e){
+var _f=this._splitters[_e];
+return _f?dijit.byNode(_f):null;
+},resize:function(_10,_11){
+if(!this.cs||!this.pe){
+var _12=this.domNode;
+this.cs=dojo.getComputedStyle(_12);
+this.pe=dojo._getPadExtents(_12,this.cs);
+this.pe.r=dojo._toPixelValue(_12,this.cs.paddingRight);
+this.pe.b=dojo._toPixelValue(_12,this.cs.paddingBottom);
+dojo.style(_12,"padding","0px");
+}
+this.inherited(arguments);
+},_layoutChildren:function(_13){
+if(!this._borderBox||!this._borderBox.h){
+return;
+}
+var _14=(this.design=="sidebar");
+var _15=0,_16=0,_17=0,_18=0;
+var _19={},_1a={},_1b={},_1c={},_1d=(this._center&&this._center.style)||{};
+var _1e=/left|right/.test(_13);
+var _1f=!_13||(!_1e&&!_14);
+var _20=!_13||(_1e&&_14);
+if(this._top){
+_19=_20&&this._top.style;
+_15=dojo.marginBox(this._top).h;
+}
+if(this._left){
+_1a=_1f&&this._left.style;
+_17=dojo.marginBox(this._left).w;
+}
+if(this._right){
+_1b=_1f&&this._right.style;
+_18=dojo.marginBox(this._right).w;
+}
+if(this._bottom){
+_1c=_20&&this._bottom.style;
+_16=dojo.marginBox(this._bottom).h;
+}
+var _21=this._splitters;
+var _22=_21.top,_23=_21.bottom,_24=_21.left,_25=_21.right;
+var _26=this._splitterThickness;
+var _27=_26.top||0,_28=_26.left||0,_29=_26.right||0,_2a=_26.bottom||0;
+if(_28>50||_29>50){
+setTimeout(dojo.hitch(this,function(){
+this._splitterThickness={};
+for(var _2b in this._splitters){
+this._computeSplitterThickness(_2b);
+}
+this._layoutChildren();
+}),50);
+return false;
+}
+var pe=this.pe;
+var _2c={left:(_14?_17+_28:0)+pe.l+"px",right:(_14?_18+_29:0)+pe.r+"px"};
+if(_22){
+dojo.mixin(_22.style,_2c);
+_22.style.top=_15+pe.t+"px";
+}
+if(_23){
+dojo.mixin(_23.style,_2c);
+_23.style.bottom=_16+pe.b+"px";
+}
+_2c={top:(_14?0:_15+_27)+pe.t+"px",bottom:(_14?0:_16+_2a)+pe.b+"px"};
+if(_24){
+dojo.mixin(_24.style,_2c);
+_24.style.left=_17+pe.l+"px";
+}
+if(_25){
+dojo.mixin(_25.style,_2c);
+_25.style.right=_18+pe.r+"px";
+}
+dojo.mixin(_1d,{top:pe.t+_15+_27+"px",left:pe.l+_17+_28+"px",right:pe.r+_18+_29+"px",bottom:pe.b+_16+_2a+"px"});
+var _2d={top:_14?pe.t+"px":_1d.top,bottom:_14?pe.b+"px":_1d.bottom};
+dojo.mixin(_1a,_2d);
+dojo.mixin(_1b,_2d);
+_1a.left=pe.l+"px";
+_1b.right=pe.r+"px";
+_19.top=pe.t+"px";
+_1c.bottom=pe.b+"px";
+if(_14){
+_19.left=_1c.left=_17+_28+pe.l+"px";
+_19.right=_1c.right=_18+_29+pe.r+"px";
+}else{
+_19.left=_1c.left=pe.l+"px";
+_19.right=_1c.right=pe.r+"px";
+}
+var _2e=this._borderBox.h-pe.t-pe.b,_2f=_2e-(_15+_27+_16+_2a),_30=_14?_2e:_2f;
+var _31=this._borderBox.w-pe.l-pe.r,_32=_31-(_17+_28+_18+_29),_33=_14?_32:_31;
+var dim={top:{w:_33,h:_15},bottom:{w:_33,h:_16},left:{w:_17,h:_30},right:{w:_18,h:_30},center:{h:_2f,w:_32}};
+var _34=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_35){
+return _35.domNode.tagName=="TEXTAREA"||_35.domNode.tagName=="INPUT";
+});
+if(_34){
+var _36=function(_37,_38,_39){
+if(_37){
+(_37.resize?_37.resize(_38,_39):dojo.marginBox(_37.domNode,_38));
+}
+};
+if(_24){
+_24.style.height=_30;
+}
+if(_25){
+_25.style.height=_30;
+}
+_36(this._leftWidget,{h:_30},dim.left);
+_36(this._rightWidget,{h:_30},dim.right);
+if(_22){
+_22.style.width=_33;
+}
+if(_23){
+_23.style.width=_33;
+}
+_36(this._topWidget,{w:_33},dim.top);
+_36(this._bottomWidget,{w:_33},dim.bottom);
+_36(this._centerWidget,dim.center);
+}else{
+var _3a={};
+if(_13){
+_3a[_13]=_3a.center=true;
+if(/top|bottom/.test(_13)&&this.design!="sidebar"){
+_3a.left=_3a.right=true;
+}else{
+if(/left|right/.test(_13)&&this.design=="sidebar"){
+_3a.top=_3a.bottom=true;
+}
+}
+}
+dojo.forEach(this.getChildren(),function(_3b){
+if(_3b.resize&&(!_13||_3b.region in _3a)){
+_3b.resize(null,dim[_3b.region]);
+}
+},this);
+}
+},destroy:function(){
+for(var _3c in this._splitters){
+var _3d=this._splitters[_3c];
+dijit.byNode(_3d).destroy();
+dojo.destroy(_3d);
+}
+delete this._splitters;
+delete this._splitterThickness;
+this.inherited(arguments);
+}});
+dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});
+dojo.require("dijit._Templated");
+dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postCreate:function(){
+this.inherited(arguments);
+this.horizontal=/top|bottom/.test(this.region);
+dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));
+this._factor=/top|left/.test(this.region)?1:-1;
+this._cookieName=this.container.id+"_"+this.region;
+if(this.container.persist){
+var _3e=dojo.cookie(this._cookieName);
+if(_3e){
+this.child.domNode.style[this.horizontal?"height":"width"]=_3e;
+}
+}
+},_computeMaxSize:function(){
+var dim=this.horizontal?"h":"w",_3f=this.container._splitterThickness[this.region];
+var _40={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_41=this.container["_"+_40[this.region]];
+var _42=dojo.contentBox(this.container.domNode)[dim]-(_41?dojo.marginBox(_41)[dim]:0)-20-_3f*2;
+return Math.min(this.child.maxSize,_42);
+},_startDrag:function(e){
+if(!this.cover){
+this.cover=dojo.doc.createElement("div");
+dojo.addClass(this.cover,"dijitSplitterCover");
+dojo.place(this.cover,this.child.domNode,"after");
+}
+dojo.addClass(this.cover,"dijitSplitterCoverActive");
+if(this.fake){
+dojo.destroy(this.fake);
+}
+if(!(this._resize=this.live)){
+(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");
+dojo.addClass(this.domNode,"dijitSplitterShadow");
+dojo.place(this.fake,this.domNode,"after");
+}
+dojo.addClass(this.domNode,"dijitSplitterActive");
+dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");
+if(this.fake){
+dojo.removeClass(this.fake,"dijitSplitterHover");
+dojo.removeClass(this.fake,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover");
+}
+var _43=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_44=this.horizontal,_45=_44?"pageY":"pageX",_46=e[_45],_47=this.domNode.style,dim=_44?"h":"w",_48=dojo.marginBox(this.child.domNode)[dim],_49=this.region,_4a=parseInt(this.domNode.style[_49],10),_4b=this._resize,mb={},_4c=this.child.domNode,_4d=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc.body;
+this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_4e){
+var _4f=e[_45]-_46,_50=_43*_4f+_48,_51=Math.max(Math.min(_50,max),min);
+if(_4b||_4e){
+mb[dim]=_51;
+dojo.marginBox(_4c,mb);
+_4d(_49);
+}
+_47[_49]=_43*_4f+_4a+(_51-_50)+"px";
+}),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);
+dojo.stopEvent(e);
+},_onMouse:function(e){
+var o=(e.type=="mouseover"||e.type=="mouseenter");
+dojo.toggleClass(this.domNode,"dijitSplitterHover",o);
+dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);
+},_stopDrag:function(e){
+try{
+if(this.cover){
+dojo.removeClass(this.cover,"dijitSplitterCoverActive");
+}
+if(this.fake){
+dojo.destroy(this.fake);
+}
+dojo.removeClass(this.domNode,"dijitSplitterActive");
+dojo.removeClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");
+dojo.removeClass(this.domNode,"dijitSplitterShadow");
+this._drag(e);
+this._drag(e,true);
+}
+finally{
+this._cleanupHandlers();
+delete this._drag;
+}
+if(this.container.persist){
+dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});
+}
+},_cleanupHandlers:function(){
+dojo.forEach(this._handlers,dojo.disconnect);
+delete this._handlers;
+},_onKeyPress:function(e){
+this._resize=true;
+var _52=this.horizontal;
+var _53=1;
+var dk=dojo.keys;
+switch(e.charOrCode){
+case _52?dk.UP_ARROW:dk.LEFT_ARROW:
+_53*=-1;
+case _52?dk.DOWN_ARROW:dk.RIGHT_ARROW:
+break;
+default:
+return;
+}
+var _54=dojo.marginBox(this.child.domNode)[_52?"h":"w"]+this._factor*_53;
+var mb={};
+mb[this.horizontal?"h":"w"]=Math.max(Math.min(_54,this._computeMaxSize()),this.child.minSize);
+dojo.marginBox(this.child.domNode,mb);
+this.container._layoutChildren(this.region);
+dojo.stopEvent(e);
+},destroy:function(){
+this._cleanupHandlers();
+delete this.child;
+delete this.container;
+delete this.cover;
+delete this.fake;
+this.inherited(arguments);
+}});
+dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" waiRole=\"presentation\"></div>",postCreate:function(){
+this.horizontal=/top|bottom/.test(this.region);
+dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));
+}});
+}
diff --git a/js/dojo/dijit/layout/ScrollingTabController.js b/js/dojo/dijit/layout/ScrollingTabController.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/ScrollingTabController.js
@@ -0,0 +1,195 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){
+dojo._hasResource["dijit.layout.ScrollingTabController"]=true;
+dojo.provide("dijit.layout.ScrollingTabController");
+dojo.require("dijit.layout.TabController");
+dojo.require("dijit.Menu");
+dojo.declare("dijit.layout.ScrollingTabController",dijit.layout.TabController,{templateString:dojo.cache("dijit.layout","templates/ScrollingTabController.html","<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"menuBtn\" buttonClass=\"tabStripMenuButton\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_menuBtn\" showLabel=false>&darr;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"leftBtn\" buttonClass=\"tabStripSlideButtonLeft\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&larr;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\" buttonType=\"rightBtn\" buttonClass=\"tabStripSlideButtonRight\"\n\t\t\ttabPosition=\"${tabPosition}\" dojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&rarr;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'>\n\t\t</div>\n\t</div>\n</div>\n"),useMenu:true,useSlider:true,tabStripClass:"",widgetsInTemplate:true,_minScroll:5,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{"class":"containerNode"}),postCreate:function(){
+this.inherited(arguments);
+var n=this.domNode;
+this.scrollNode=this.tablistWrapper;
+this._initButtons();
+if(!this.tabStripClass){
+this.tabStripClass="dijitTabContainer"+this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"")+"None";
+dojo.addClass(n,"tabStrip-disabled");
+}
+dojo.addClass(this.tablistWrapper,this.tabStripClass);
+},onStartup:function(){
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","visible");
+this._postStartup=true;
+},onAddChild:function(_1,_2){
+this.inherited(arguments);
+var _3;
+if(this.useMenu){
+var _4=this.containerId;
+_3=new dijit.MenuItem({label:_1.title,onClick:dojo.hitch(this,function(){
+var _5=dijit.byId(_4);
+_5.selectChild(_1);
+})});
+this._menuChildren[_1.id]=_3;
+this._menu.addChild(_3,_2);
+}
+this.pane2handles[_1.id].push(this.connect(this.pane2button[_1.id],"attr",function(_6,_7){
+if(this._postStartup){
+if(arguments.length==2&&_6=="label"){
+if(_3){
+_3.attr(_6,_7);
+}
+if(this._dim){
+this.resize(this._dim);
+}
+}
+}
+}));
+dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");
+},onRemoveChild:function(_8,_9){
+var _a=this.pane2button[_8.id];
+if(this._selectedTab===_a.domNode){
+this._selectedTab=null;
+}
+if(this.useMenu&&_8&&_8.id&&this._menuChildren[_8.id]){
+this._menu.removeChild(this._menuChildren[_8.id]);
+this._menuChildren[_8.id].destroy();
+delete this._menuChildren[_8.id];
+}
+this.inherited(arguments);
+},_initButtons:function(){
+this._menuChildren={};
+this._btnWidth=0;
+this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(_b){
+if((this.useMenu&&_b==this._menuBtn.domNode)||(this.useSlider&&(_b==this._rightBtn.domNode||_b==this._leftBtn.domNode))){
+this._btnWidth+=dojo.marginBox(_b).w;
+return true;
+}else{
+dojo.style(_b,"display","none");
+return false;
+}
+},this);
+if(this.useMenu){
+this._menu=new dijit.Menu({id:this.id+"_menu",targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});
+this._supportingWidgets.push(this._menu);
+}
+},_getTabsWidth:function(){
+var _c=this.getChildren();
+if(_c.length){
+var _d=_c[this.isLeftToRight()?0:_c.length-1].domNode,_e=_c[this.isLeftToRight()?_c.length-1:0].domNode;
+return _e.offsetLeft+dojo.style(_e,"width")-_d.offsetLeft;
+}else{
+return 0;
+}
+},_enableBtn:function(_f){
+var _10=this._getTabsWidth();
+_f=_f||dojo.style(this.scrollNode,"width");
+return _10>0&&_f<_10;
+},resize:function(dim){
+if(this.domNode.offsetWidth==0){
+return;
+}
+this._dim=dim;
+this.scrollNode.style.height="auto";
+this._contentBox=dijit.layout.marginBox2contentBox(this.domNode,{h:0,w:dim.w});
+this._contentBox.h=this.scrollNode.offsetHeight;
+dojo.contentBox(this.domNode,this._contentBox);
+var _11=this._enableBtn(this._contentBox.w);
+this._buttons.style("display",_11?"":"none");
+this._leftBtn.layoutAlign="left";
+this._rightBtn.layoutAlign="right";
+this._menuBtn.layoutAlign=this.isLeftToRight()?"right":"left";
+dijit.layout.layoutChildren(this.domNode,this._contentBox,[this._menuBtn,this._leftBtn,this._rightBtn,{domNode:this.scrollNode,layoutAlign:"client"}]);
+if(this._selectedTab){
+var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());
+w.scrollLeft=sl;
+}
+this._setButtonClass(this._getScroll());
+},_getScroll:function(){
+var sl=(this.isLeftToRight()||dojo.isIE<8||dojo.isQuirks||dojo.isWebKit)?this.scrollNode.scrollLeft:dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width")+(dojo.isIE==8?-1:1)*this.scrollNode.scrollLeft;
+return sl;
+},_convertToScrollLeft:function(val){
+if(this.isLeftToRight()||dojo.isIE<8||dojo.isQuirks||dojo.isWebKit){
+return val;
+}else{
+var _12=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");
+return (dojo.isIE==8?-1:1)*(val-_12);
+}
+},onSelectChild:function(_13){
+var tab=this.pane2button[_13.id];
+if(!tab||!_13){
+return;
+}
+var _14=tab.domNode;
+if(_14!=this._selectedTab){
+this._selectedTab=_14;
+var sl=this._getScroll();
+if(sl>_14.offsetLeft||sl+dojo.style(this.scrollNode,"width")<_14.offsetLeft+dojo.style(_14,"width")){
+this.createSmoothScroll().play();
+}
+}
+this.inherited(arguments);
+},_getScrollBounds:function(){
+var _15=this.getChildren(),_16=dojo.style(this.scrollNode,"width"),_17=dojo.style(this.containerNode,"width"),_18=_17-_16,_19=this._getTabsWidth();
+if(_15.length&&_19>_16){
+return {min:this.isLeftToRight()?0:_15[_15.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_15[_15.length-1].domNode.offsetLeft+dojo.style(_15[_15.length-1].domNode,"width"))-_16:_18};
+}else{
+var _1a=this.isLeftToRight()?0:_18;
+return {min:_1a,max:_1a};
+}
+},_getScrollForSelectedTab:function(){
+var w=this.scrollNode,n=this._selectedTab,_1b=dojo.style(this.scrollNode,"width"),_1c=this._getScrollBounds();
+var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_1b/2;
+pos=Math.min(Math.max(pos,_1c.min),_1c.max);
+return pos;
+},createSmoothScroll:function(x){
+if(arguments.length>0){
+var _1d=this._getScrollBounds();
+x=Math.min(Math.max(x,_1d.min),_1d.max);
+}else{
+x=this._getScrollForSelectedTab();
+}
+if(this._anim&&this._anim.status()=="playing"){
+this._anim.stop();
+}
+var _1e=this,w=this.scrollNode,_1f=new dojo._Animation({beforeBegin:function(){
+if(this.curve){
+delete this.curve;
+}
+var _20=w.scrollLeft,_21=_1e._convertToScrollLeft(x);
+_1f.curve=new dojo._Line(_20,_21);
+},onAnimate:function(val){
+w.scrollLeft=val;
+}});
+this._anim=_1f;
+this._setButtonClass(x);
+return _1f;
+},_getBtnNode:function(e){
+var n=e.target;
+while(n&&!dojo.hasClass(n,"tabStripButton")){
+n=n.parentNode;
+}
+return n;
+},doSlideRight:function(e){
+this.doSlide(1,this._getBtnNode(e));
+},doSlideLeft:function(e){
+this.doSlide(-1,this._getBtnNode(e));
+},doSlide:function(_22,_23){
+if(_23&&dojo.hasClass(_23,"dijitTabBtnDisabled")){
+return;
+}
+var _24=dojo.style(this.scrollNode,"width");
+var d=(_24*0.75)*_22;
+var to=this._getScroll()+d;
+this._setButtonClass(to);
+this.createSmoothScroll(to).play();
+},_setButtonClass:function(_25){
+var cls="dijitTabBtnDisabled",_26=this._getScrollBounds();
+dojo.toggleClass(this._leftBtn.domNode,cls,_25<=_26.min);
+dojo.toggleClass(this._rightBtn.domNode,cls,_25>=_26.max);
+}});
+dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab",buttonType:"",buttonClass:"",tabPosition:"top",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div id=\"${id}-${buttonType}\" class=\"tabStripButton dijitTab ${buttonClass} tabStripButton-${tabPosition}\"\n\t\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\">\n\t<div role=\"presentation\" wairole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" wairole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img src=\"${_blankGif}\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:""});
+}
diff --git a/js/dojo/dijit/layout/StackController.js b/js/dojo/dijit/layout/StackController.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/StackController.js
@@ -0,0 +1,178 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.StackController"]){
+dojo._hasResource["dijit.layout.StackController"]=true;
+dojo.provide("dijit.layout.StackController");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.form.ToggleButton");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){
+dijit.setWaiRole(this.domNode,"tablist");
+this.pane2button={};
+this.pane2handles={};
+this.subscribe(this.containerId+"-startup","onStartup");
+this.subscribe(this.containerId+"-addChild","onAddChild");
+this.subscribe(this.containerId+"-removeChild","onRemoveChild");
+this.subscribe(this.containerId+"-selectChild","onSelectChild");
+this.subscribe(this.containerId+"-containerKeyPress","onContainerKeyPress");
+},onStartup:function(_1){
+dojo.forEach(_1.children,this.onAddChild,this);
+if(_1.selected){
+this.onSelectChild(_1.selected);
+}
+},destroy:function(){
+for(var _2 in this.pane2button){
+this.onRemoveChild(dijit.byId(_2));
+}
+this.inherited(arguments);
+},onAddChild:function(_3,_4){
+var _5=dojo.doc.createElement("span");
+this.domNode.appendChild(_5);
+var _6=dojo.getObject(this.buttonWidget);
+var _7=new _6({id:this.id+"_"+_3.id,label:_3.title,showLabel:_3.showTitle,iconClass:_3.iconClass,closeButton:_3.closable,title:_3.tooltip},_5);
+dijit.setWaiState(_7.focusNode,"selected","false");
+this.pane2handles[_3.id]=[this.connect(_3,"attr",function(_8,_9){
+if(arguments.length==2){
+var _a={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[_8];
+if(_a){
+_7.attr(_a,_9);
+}
+}
+}),this.connect(_7,"onClick",dojo.hitch(this,"onButtonClick",_3)),this.connect(_7,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",_3))];
+this.addChild(_7,_4);
+this.pane2button[_3.id]=_7;
+_3.controlButton=_7;
+if(!this._currentChild){
+_7.focusNode.setAttribute("tabIndex","0");
+dijit.setWaiState(_7.focusNode,"selected","true");
+this._currentChild=_3;
+}
+if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){
+this._rectifyRtlTabList();
+}
+},onRemoveChild:function(_b){
+if(this._currentChild===_b){
+this._currentChild=null;
+}
+dojo.forEach(this.pane2handles[_b.id],this.disconnect,this);
+delete this.pane2handles[_b.id];
+var _c=this.pane2button[_b.id];
+if(_c){
+this.removeChild(_c);
+delete this.pane2button[_b.id];
+_c.destroy();
+}
+delete _b.controlButton;
+},onSelectChild:function(_d){
+if(!_d){
+return;
+}
+if(this._currentChild){
+var _e=this.pane2button[this._currentChild.id];
+_e.attr("checked",false);
+dijit.setWaiState(_e.focusNode,"selected","false");
+_e.focusNode.setAttribute("tabIndex","-1");
+}
+var _f=this.pane2button[_d.id];
+_f.attr("checked",true);
+dijit.setWaiState(_f.focusNode,"selected","true");
+this._currentChild=_d;
+_f.focusNode.setAttribute("tabIndex","0");
+var _10=dijit.byId(this.containerId);
+dijit.setWaiState(_10.containerNode,"labelledby",_f.id);
+},onButtonClick:function(_11){
+var _12=dijit.byId(this.containerId);
+_12.selectChild(_11);
+},onCloseButtonClick:function(_13){
+var _14=dijit.byId(this.containerId);
+_14.closeChild(_13);
+if(this._currentChild){
+var b=this.pane2button[this._currentChild.id];
+if(b){
+dijit.focus(b.focusNode||b.domNode);
+}
+}
+},adjacent:function(_15){
+if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){
+_15=!_15;
+}
+var _16=this.getChildren();
+var _17=dojo.indexOf(_16,this.pane2button[this._currentChild.id]);
+var _18=_15?1:_16.length-1;
+return _16[(_17+_18)%_16.length];
+},onkeypress:function(e){
+if(this.disabled||e.altKey){
+return;
+}
+var _19=null;
+if(e.ctrlKey||!e._djpage){
+var k=dojo.keys;
+switch(e.charOrCode){
+case k.LEFT_ARROW:
+case k.UP_ARROW:
+if(!e._djpage){
+_19=false;
+}
+break;
+case k.PAGE_UP:
+if(e.ctrlKey){
+_19=false;
+}
+break;
+case k.RIGHT_ARROW:
+case k.DOWN_ARROW:
+if(!e._djpage){
+_19=true;
+}
+break;
+case k.PAGE_DOWN:
+if(e.ctrlKey){
+_19=true;
+}
+break;
+case k.DELETE:
+if(this._currentChild.closable){
+this.onCloseButtonClick(this._currentChild);
+}
+dojo.stopEvent(e);
+break;
+default:
+if(e.ctrlKey){
+if(e.charOrCode===k.TAB){
+this.adjacent(!e.shiftKey).onClick();
+dojo.stopEvent(e);
+}else{
+if(e.charOrCode=="w"){
+if(this._currentChild.closable){
+this.onCloseButtonClick(this._currentChild);
+}
+dojo.stopEvent(e);
+}
+}
+}
+}
+if(_19!==null){
+this.adjacent(_19).onClick();
+dojo.stopEvent(e);
+}
+}
+},onContainerKeyPress:function(_1a){
+_1a.e._djpage=_1a.page;
+this.onkeypress(_1a.e);
+}});
+dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){
+dijit.setWaiRole((this.focusNode||this.domNode),"tab");
+this.inherited(arguments);
+},onClick:function(evt){
+dijit.focus(this.focusNode);
+},onClickCloseButton:function(evt){
+evt.stopPropagation();
+}});
+}
diff --git a/js/dojo/dijit/layout/TabController.js b/js/dojo/dijit/layout/TabController.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/TabController.js
@@ -0,0 +1,79 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.TabController"]){
+dojo._hasResource["dijit.layout.TabController"]=true;
+dojo.provide("dijit.layout.TabController");
+dojo.require("dijit.layout.StackController");
+dojo.require("dijit.Menu");
+dojo.require("dijit.MenuItem");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){
+if(0>=this.tabPosition.indexOf("-h")){
+return;
+}
+if(!this.pane2button){
+return;
+}
+var _1=0;
+for(var _2 in this.pane2button){
+var ow=this.pane2button[_2].innerDiv.scrollWidth;
+_1=Math.max(_1,ow);
+}
+for(_2 in this.pane2button){
+this.pane2button[_2].innerDiv.style.width=_1+"px";
+}
+}});
+dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent,focusNode'>\n\t <img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='iconNode' waiRole=\"presentation\"/>\n\t <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t <span class=\"closeButton\" dojoAttachPoint='closeNode'\n\t \t\tdojoAttachEvent='onclick: onClickCloseButton, onmouseenter: _onCloseButtonEnter, onmouseleave: _onCloseButtonLeave'>\n\t \t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint='closeIcon' class='closeImage' waiRole=\"presentation\"/>\n\t <span dojoAttachPoint='closeText' class='closeText'>x</span>\n\t </span>\n </div>\n </div>\n</div>\n"),scrollOnFocus:false,postMixInProperties:function(){
+if(!this.iconClass){
+this.iconClass="dijitTabButtonIcon";
+}
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.containerNode,false);
+if(this.iconNode.className=="dijitTabButtonIcon"){
+dojo.style(this.iconNode,"width","1px");
+}
+},startup:function(){
+this.inherited(arguments);
+var n=this.domNode;
+setTimeout(function(){
+n.className=n.className;
+},1);
+},_setCloseButtonAttr:function(_3){
+this.closeButton=_3;
+dojo.toggleClass(this.innerDiv,"dijitClosable",_3);
+this.closeNode.style.display=_3?"":"none";
+if(_3){
+var _4=dojo.i18n.getLocalization("dijit","common");
+if(this.closeNode){
+dojo.attr(this.closeNode,"title",_4.itemClose);
+if(dojo.isIE<8){
+dojo.attr(this.closeIcon,"title",_4.itemClose);
+}
+}
+var _4=dojo.i18n.getLocalization("dijit","common");
+this._closeMenu=new dijit.Menu({id:this.id+"_Menu",targetNodeIds:[this.domNode]});
+this._closeMenu.addChild(new dijit.MenuItem({label:_4.itemClose,onClick:dojo.hitch(this,"onClickCloseButton")}));
+}else{
+if(this._closeMenu){
+this._closeMenu.destroyRecursive();
+delete this._closeMenu;
+}
+}
+},destroy:function(){
+if(this._closeMenu){
+this._closeMenu.destroyRecursive();
+delete this._closeMenu;
+}
+this.inherited(arguments);
+},_onCloseButtonEnter:function(){
+dojo.addClass(this.closeNode,"closeButton-hover");
+},_onCloseButtonLeave:function(){
+dojo.removeClass(this.closeNode,"closeButton-hover");
+}});
+}
diff --git a/js/dojo/dijit/layout/_TabContainerBase.js b/js/dojo/dijit/layout/_TabContainerBase.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/layout/_TabContainerBase.js
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout._TabContainerBase"]){
+dojo._hasResource["dijit.layout._TabContainerBase"]=true;
+dojo.provide("dijit.layout._TabContainerBase");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.layout._TabContainerBase",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:dojo.cache("dijit.layout","templates/TabContainer.html","<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),postMixInProperties:function(){
+this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");
+this.srcNodeRef&&dojo.style(this.srcNodeRef,"visibility","hidden");
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.tablist=this._makeController(this.tablistNode);
+if(!this.doLayout){
+dojo.addClass(this.domNode,"dijitTabContainerNoLayout");
+}
+if(this.nested){
+dojo.addClass(this.domNode,"dijitTabContainerNested");
+dojo.addClass(this.tablist.containerNode,"dijitTabContainerTabListNested");
+dojo.addClass(this.tablistSpacer,"dijitTabContainerSpacerNested");
+dojo.addClass(this.containerNode,"dijitTabPaneWrapperNested");
+}else{
+dojo.addClass(this.domNode,"tabStrip-"+(this.tabStrip?"enabled":"disabled"));
+}
+},_setupChild:function(_1){
+dojo.addClass(_1.domNode,"dijitTabPane");
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.tablist.startup();
+this.inherited(arguments);
+},layout:function(){
+if(!this._contentBox||typeof (this._contentBox.l)=="undefined"){
+return;
+}
+var sc=this.selectedChildWidget;
+if(this.doLayout){
+var _2=this.tabPosition.replace(/-h/,"");
+this.tablist.layoutAlign=_2;
+var _3=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_2},{domNode:this.containerNode,layoutAlign:"client"}];
+dijit.layout.layoutChildren(this.domNode,this._contentBox,_3);
+this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_3[2]);
+if(sc&&sc.resize){
+sc.resize(this._containerContentBox);
+}
+}else{
+if(this.tablist.resize){
+this.tablist.resize({w:dojo.contentBox(this.domNode).w});
+}
+if(sc&&sc.resize){
+sc.resize();
+}
+}
+},destroy:function(){
+if(this.tablist){
+this.tablist.destroy();
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/nls/ar/common.js b/js/dojo/dijit/nls/ar/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/ar/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/ar/loading.js b/js/dojo/dijit/nls/ar/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/ar/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/ca/common.js b/js/dojo/dijit/nls/ca/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/ca/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/ca/loading.js b/js/dojo/dijit/nls/ca/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/ca/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/da/common.js b/js/dojo/dijit/nls/da/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/da/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/da/loading.js b/js/dojo/dijit/nls/da/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/da/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/dijit-all_ar.js b/js/dojo/dijit/nls/dijit-all_ar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_ar.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_ar");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ar");dojo.nls.colors.ar={"lightsteelblue":"أزرق معدني فاتح","orangered":"أحمر مائل للبرتقالي","midnightblue":"أزرق بحري","cadetblue":"أزرق ملون بالرمادي","seashell":"أبيض مائل للأصفر فاتح","slategrey":"رمادي اردوازي","coral":"مرجاني","darkturquoise":"تركواز داكن","antiquewhite":"أبيض عتيق","mediumspringgreen":"أخضر ربيعي متوسط","salmon":"برتقالي وردي شاحب","darkgrey":"رمادي داكن","ivory":"عاجي","greenyellow":"أخضر مائل للأصفر","mistyrose":"وردي","lightsalmon":"فضي فاتح","silver":"فضي","dimgrey":"رمادي شاحب","orange":"برتقالي","white":"أبيض","navajowhite":"أبيض ملاحي","royalblue":"أزرق ملكي","deeppink":"أحمر وردي غامق","lime":"ليموني","oldlace":"برتقالي مائل للأصفر شاحب","chartreuse":"أخضر مائل للصفرة","darkcyan":"أزرق سماوي داكن","yellow":"أصفر","linen":"كتاني","olive":"أخضر زيتوني داكن","gold":"ذهبي","lawngreen":"أخضر بلون العشب","lightyellow":"أصفر فاتح","tan":"خمري","darkviolet":"بنفسجي داكن","lightslategrey":"رمادي اردوازي فاتح","grey":"رمادي","darkkhaki":"كاكي داكن","green":"أخضر","deepskyblue":"أزرق سماوي غامق","aqua":"أزرق مائي","sienna":"بني محروق","mintcream":"أصفر شاحب مائل للأخضر الزرعي","rosybrown":"بني وردي","mediumslateblue":"أزرق اردوازي متوسط","magenta":"أحمر قرمزي","lightseagreen":"أخضر مائل للأزرق فاتح","cyan":"أزرق سماوي","olivedrab":"أسود فاتح","darkgoldenrod":"أصفر ذهبي داكن","slateblue":"أزرق اردوازي","mediumaquamarine":"أزرق مائل للأخضر (زبرجد) متوسط","lavender":"أرجواني شاحب","mediumseagreen":"أخضر مائل للأزرق متوسط","maroon":"أحمر داكن","darkslategray":"رمادي اردوازي داكن","mediumturquoise":"تركواز متوسط","ghostwhite":"أبيض شفاف","darkblue":"أزرق داكن","mediumvioletred":"أحمر-بنفسجي متوسط","brown":"بني","lightgray":"رمادي فاتح","sandybrown":"بني مائل للصفرة","pink":"وردي","firebrick":"أصفر زاهي","indigo":"نيلي","snow":"أبيض ثلجي","darkorchid":"أرجواني داكن","turquoise":"تركواز","chocolate":"بني غامق","springgreen":"أخضر ربيعي","moccasin":"نحاسي أحمر","navy":"أزرق داكن","lemonchiffon":"أصفر شفاف","teal":"بترولي","floralwhite":"أبيض زهري","cornflowerblue":"أزرق عنبري","paleturquoise":"تركواز شاحب","purple":"ارجواني","gainsboro":"رمادي مائل للأزرق فاتح","plum":"أرجواني داكن","red":"أحمر","blue":"أزرق","forestgreen":"أخضر بلون أشجار الغابات","darkgreen":"أخضر داكن","honeydew":"أبيض مائل للأخضر","darkseagreen":"أخضر مائل للأزرق داكن","lightcoral":"مرجاني فاتح","palevioletred":"أحمر-بنفسجي شاحب","mediumpurple":"قرمزي متوسط","saddlebrown":"بني فاتح","darkmagenta":"قرمزي داكن","thistle":"ارجواني شاحب","whitesmoke":"دخان أبيض","wheat":"أخضر قمحي","violet":"بنفسجي","lightskyblue":"أزرق سماوي فاتح","goldenrod":"أصفر ذهبي","mediumblue":"أزرق متوسط","skyblue":"أزرق سماوي","crimson":"قرمزي","darksalmon":"فضي داكن","darkred":"أحمر داكن","darkslategrey":"رمادي اردوازي داكن","peru":"بني جملي","lightgrey":"رمادي فاتح","lightgoldenrodyellow":"أصفر ذهبي فاتح","blanchedalmond":"أخضر مائل للبياض","aliceblue":"أزرق فاتح","bisque":"أصفر برتقالي الى رمادي مصفر","slategray":"رمادي اردوازي","palegoldenrod":"أصفر ذهبي شاحب","darkorange":"برتقالي داكن","aquamarine":"أزرق مائل للأخضر (زبرجد)","lightgreen":"أخضر فاتح","burlywood":"خشبي","dodgerblue":"أزرق عنبري","darkgray":"رمادي داكن","lightcyan":"سماوي فاتح","powderblue":"أزرق مائل للأصفر","blueviolet":"أزرق-بنفسجي","orchid":"أرجواني فاتح","dimgray":"رمادي شاحب","beige":"بيج","fuchsia":"فوشيا","lavenderblush":"أحمر أرجواني","hotpink":"أحمر وردي زاهي","steelblue":"أزرق معدني","tomato":"أحمر مائل للأصفر","lightpink":"وردي فاتح","limegreen":"أخضر ليموني","indianred":"أحمر هندي","papayawhip":"خوخي فاتح","lightslategray":"رمادي اردوازي فاتح","gray":"رمادي","mediumorchid":"أرجواني متوسط","cornsilk":"حريري","black":"أسود","seagreen":"أخضر مائل للأزرق","darkslateblue":"أزرق اردوازي داكن","khaki":"كاكي","lightblue":"أزرق فاتح","palegreen":"أخضر شاحب","azure":"أزرق سماوي","peachpuff":"خوخي مائل للأصفر","darkolivegreen":"أخضر زيتوني داكن","yellowgreen":"أخضر مائل للأصفر"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ar");dijit.nls.common.ar={"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ar");dijit._editor.nls.commands.ar={"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","underline":"تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","italic":"مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","fontSize":"حجم طاقم الطباعة","systemShortcut":"يكون التصرف \"${0}\" متاحا فقط ببرنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"اعادة","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عريض","tabIndent":"ازاحة علامة الجدولة للداخل","justifyRight":"محاذاة الى اليمين","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ar");dojo.cldr.nls.number.ar={"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ar");dijit.form.nls.validate.ar={"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ar");dojo.cldr.nls.currency.ar={"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","CAD_displayName":"دولار كندي","CNY_displayName":"يوان صيني","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","USD_displayName":"دولار أمريكي","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","EUR_displayName":"يورو","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ar");dojo.cldr.nls.gregorian.ar={"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"field-week":"الأسبوع","dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"dateFormatItem-yyQ":"Q yy","timeFormat-long":"z h:mm:ss a","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","field-month":"الشهر","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"pm":"م","dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"am":"ص","days-standAlone-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ق.م","م"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormat-long":"{1} {0}","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};
diff --git a/js/dojo/dijit/nls/dijit-all_ca.js b/js/dojo/dijit/nls/dijit-all_ca.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_ca.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_ca");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ca");dojo.nls.colors.ca={"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ca");dijit.nls.common.ca={"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ca");dijit._editor.nls.commands.ca={"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","insertHorizontalRule":"Regle horitzontal","delete":"Suprimeix","insertUnorderedList":"Llista de vinyetes","tableProp":"Propietat de taula","insertImage":"Insereix imatge","superscript":"Superíndex","subscript":"Subíndex","createLink":"Crea un enllaç","undo":"Desfés","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","ctrlKey":"control+${0}","fontSize":"Cos de la lletra","systemShortcut":"L'acció \"${0}\" és l'única disponible al navegador utilitzant una drecera del teclat. Utilitzeu ${1}.","indent":"Sagnat","redo":"Refés","strikethrough":"Ratllat","justifyFull":"Justifica","justifyCenter":"Centra","hiliteColor":"Color de fons","deleteTable":"Suprimeix la taula","outdent":"Sagna a l'esquerra","cut":"Retalla","plainFormatBlock":"Estil de paràgraf","toggleDir":"Inverteix la direcció","bold":"Negreta","tabIndent":"Sagnat","justifyRight":"Alinea a la dreta","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ca");dojo.cldr.nls.number.ca={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ca");dijit.form.nls.validate.ca={"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ca");dojo.cldr.nls.currency.ca={"HKD_displayName":"dòlar de Hong Kong","CHF_displayName":"franc suís","CAD_displayName":"dòlar canadenc","CNY_displayName":"iuan renmimbi xinès","AUD_displayName":"dòlar australià","JPY_displayName":"ien japonès","USD_displayName":"dòlar dels Estats Units","GBP_displayName":"lliura esterlina britànica","EUR_displayName":"euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ca");dojo.cldr.nls.gregorian.ca={"dateFormatItem-yM":"M/yyyy","field-dayperiod":"a.m./p.m.","dateFormatItem-yQ":"Q yyyy","field-minute":"minut","eraNames":["aC","dC"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"dia de la setmana","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"era","field-hour":"hora","quarters-standAlone-abbr":["1T","2T","3T","4T"],"dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["g","l","t","c","j","v","s"],"eraAbbr":["aC","dC"],"dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-long":"d 'de' MMMM 'de' y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE d","field-zone":"zona","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-yMMMM":"LLLL 'del' y","dateFormatItem-ms":"mm:ss","field-year":"any","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH:mm:ss","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"field-week":"setmana","dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"timeFormat-short":"H:mm","field-month":"mes","dateFormatItem-MMMMd":"d 'de' MMMM","quarters-format-abbr":["1T","2T","3T","4T"],"days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"pm":"p.m.","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["g","l","t","c","j","v","s"],"field-second":"segon","field-day":"dia","dateFormatItem-MEd":"E d/M","months-format-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"am":"a.m.","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E d/M/yyyy","months-format-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"dateFormatItem-d":"d","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"eraNarrow":["aC","dC"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ca");dijit.form.nls.ComboBox.ca={"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"};
diff --git a/js/dojo/dijit/nls/dijit-all_da.js b/js/dojo/dijit/nls/dijit-all_da.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_da.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_da");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.da");dojo.nls.colors.da={"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.da");dijit.nls.common.da={"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.da");dijit._editor.nls.commands.da={"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","insertHorizontalRule":"Vandret linje","delete":"Slet","insertUnorderedList":"Punktliste","tableProp":"Tabelegenskab","insertImage":"Indsæt billede","superscript":"Hævet skrift","subscript":"Sænket skrift","createLink":"Opret link","undo":"Fortryd","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i your browser med en tastaturgenvej. Brug ${1}.","indent":"Indrykning","redo":"Annullér Fortryd","strikethrough":"Gennemstreget","justifyFull":"Lige margener","justifyCenter":"Centreret","hiliteColor":"Baggrundsfarve","deleteTable":"Slet tabel","outdent":"Udrykning","cut":"Klip","plainFormatBlock":"Afsnitstypografi","toggleDir":"Skift retning","bold":"Fed","tabIndent":"Indrykning med tabulator","justifyRight":"Højrejusteret","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.da");dojo.cldr.nls.number.da={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.da");dijit.form.nls.validate.da={"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.da");dojo.cldr.nls.currency.da={"HKD_displayName":"Hongkong dollar","CHF_displayName":"Schweizisk franc","CAD_displayName":"Canadisk dollar","CNY_displayName":"Kinesisk yuan renminbi","USD_symbol":"$","AUD_displayName":"Australsk dollar","JPY_displayName":"Japansk yen","USD_displayName":"Amerikansk dollar","GBP_displayName":"Britisk pund","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.da");dojo.cldr.nls.gregorian.da={"dateFormatItem-yM":"M-yyyy","field-dayperiod":"dagtid","dateFormatItem-yQ":"Q yyyy","field-minute":"minut","eraNames":["f.Kr.","e.Kr."],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"ugedag","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd/MM","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-MMM":"MMM","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"æra","field-hour":"time","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH.mm.ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","O","T","F","L"],"eraAbbr":["f.Kr.","e.Kr."],"dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-long":"d. MMM y","timeFormat-medium":"HH.mm.ss","field-zone":"zone","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM/yy","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-yyMMM":"MMM yy","quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm.ss","field-year":"år","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH.mm.ss","field-week":"uge","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH.mm","dateFormatItem-H":"H","field-month":"måned","quarters-format-abbr":["K1","K2","K3","K4"],"dateFormatItem-MMMMd":"d. MMMM","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"pm":"e.m.","dateFormatItem-M":"M","days-format-narrow":["S","M","T","O","T","F","L"],"field-second":"sekund","field-day":"dag","dateFormatItem-MEd":"E. d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h.mm a","am":"f.m.","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE. d. MMM y","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE. d-M-yyyy","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-d":"d.","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"eraNarrow":["f.Kr.","e.Kr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.da");dijit.form.nls.ComboBox.da={"previousMessage":"Forrige valg","nextMessage":"Flere valg"};
diff --git a/js/dojo/dijit/nls/dijit-all_el.js b/js/dojo/dijit/nls/dijit-all_el.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_el.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_el");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.el");dojo.nls.colors.el={"lightsteelblue":"ανοιχτό μπλε ατσαλιού","orangered":"πορτοκαλοκόκκινο","midnightblue":"πολύ σκούρο μπλε","cadetblue":"μπλε του στρατού","seashell":"κοχύλι","slategrey":"μεταλλικό γκρι","coral":"κοραλί","darkturquoise":"σκούρο τυρκουάζ","antiquewhite":"ξεθωριασμένο λευκό","mediumspringgreen":"μεσαίο πράσινο της άνοιξης","salmon":"σομόν","darkgrey":"σκούρο γκρι","ivory":"ιβουάρ","greenyellow":"πρασινοκίτρινο","mistyrose":"τριανταφυλλί","lightsalmon":"ανοιχτό σομόν","silver":"ασημί","dimgrey":"αχνό γκρι","orange":"πορτοκαλί","white":"λευκό","navajowhite":"άσπρο Ναβάχο","royalblue":"έντονο μπλε","deeppink":"βαθύ ροζ","lime":"λαχανί","oldlace":"εκρού","chartreuse":"φωτεινό κιτρινοπράσινο","darkcyan":"σκούρο κυανό","yellow":"κίτρινο","linen":"σπαγγί","olive":"πράσινο λαδί","gold":"χρυσαφί","lawngreen":"σκούρο πράσινο","lightyellow":"ανοιχτό κίτρινο","tan":"ώχρα","darkviolet":"σκούρο βιολετί","lightslategrey":"ανοιχτό μεταλλικό γκρι","grey":"γκρι","darkkhaki":"σκούρο χακί","green":"πράσινο","deepskyblue":"βαθύ μπλε το ουρανού","aqua":"γαλάζιο","sienna":"καφεκίτρινο","mintcream":"βεραμάν","rosybrown":"καστανό","mediumslateblue":"μεσαίο μεταλλικό μπλε","magenta":"ματζέντα","lightseagreen":"ανοιχτό πράσινο της θάλασσας","cyan":"κυανό","olivedrab":"λαδί","darkgoldenrod":"σκούρο χρυσοκίτρινο","slateblue":"μεταλλικό μπλε","mediumaquamarine":"μεσαίο γαλαζοπράσινο","lavender":"λίλα","mediumseagreen":"μεσαίο πράσινο της θάλασσας","maroon":"βυσσινί","darkslategray":"σκούρο μεταλλικό γκρι","mediumturquoise":"μεσαίο τυρκουάζ","ghostwhite":"άσπρο","darkblue":"σκούρο μπλε","mediumvioletred":"μεσαίο κόκκινο βιολετί","brown":"καφέ","lightgray":"ανοιχτό γκρι","sandybrown":"μπεζ της άμμου","pink":"ροζ","firebrick":"κεραμιδί","indigo":"λουλακί","snow":"χιονί","darkorchid":"σκούρα ορχιδέα","turquoise":"τυρκουάζ","chocolate":"σοκολατί","springgreen":"πράσινο της άνοιξης","moccasin":"μόκα","navy":"μπλε του ναυτικού","lemonchiffon":"λεμονί","teal":"πετρόλ","floralwhite":"λευκό των ανθών","cornflowerblue":"μεσαίο μπλε","paleturquoise":"αχνό τυρκουάζ","purple":"μωβ","gainsboro":"γκρι σιέλ","plum":"δαμασκηνί","red":"κόκκινο","blue":"μπλε","forestgreen":"πράσινο του δάσους","darkgreen":"σκούρο πράσινο","honeydew":"μελί","darkseagreen":"σκούρο πράσινο της θάλασσας","lightcoral":"ανοιχτό κοραλί","palevioletred":"αχνό κόκκινο βιολετί","mediumpurple":"μεσαίο μωβ","saddlebrown":"βαθύ καφέ","darkmagenta":"σκούρο ματζέντα","thistle":"μωβ βιολετί","whitesmoke":"λευκός καπνός","wheat":"σταρένιο","violet":"βιολετί","lightskyblue":"ανοιχτό μπλε το ουρανού","goldenrod":"χρυσοκίτρινο","mediumblue":"μεσαίο μπλε","skyblue":"μπλε του ουρανού","crimson":"βαθύ κόκκινο","darksalmon":"σκούρο σομόν","darkred":"σκούρο κόκκινο","darkslategrey":"σκούρο μεταλλικό γκρι","peru":"περού","lightgrey":"ανοιχτό γκρι","lightgoldenrodyellow":"ανοιχτό χρυσοκίτρινο","blanchedalmond":"ζαχαρί","aliceblue":"σιέλ","bisque":"σκούρο κρεμ","slategray":"μεταλλικό γκρι","palegoldenrod":"αχνό χρυσοκίτρινο","darkorange":"σκούρο πορτοκαλί","aquamarine":"γαλαζοπράσινο","lightgreen":"ανοιχτό πράσινο","burlywood":"καφέ του ξύλου","dodgerblue":"σκούρο ελεκτρίκ","darkgray":"σκούρο γκρι","lightcyan":"ανοιχτό κυανό","powderblue":"αχνό μπλε","blueviolet":"βιολετί","orchid":"ορχιδέα","dimgray":"αχνό γκρι","beige":"μπεζ","fuchsia":"φούξια","lavenderblush":"μωβ λεβάντας","hotpink":"έντονο ροζ","steelblue":"μπλε ατσαλιού","tomato":"κόκκινο της ντομάτας","lightpink":"ανοιχτό ροζ","limegreen":"πράσινο λαχανί","indianred":"ινδικό κόκκινο","papayawhip":"αχνό ροζ","lightslategray":"ανοιχτό μεταλλικό γκρι","gray":"γκρι","mediumorchid":"μεσαία ορχιδέα","cornsilk":"ασημί του καλαμποκιού","black":"μαύρο","seagreen":"πράσινο της θάλασσας","darkslateblue":"σκούρο μεταλλικό μπλε","khaki":"χακί","lightblue":"ανοιχτό μπλε","palegreen":"αχνό πράσινο","azure":"μπλε του ουρανού","peachpuff":"ροδακινί","darkolivegreen":"σκούρο πράσινο λαδί","yellowgreen":"κιτρινοπράσινο"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.el");dijit.nls.common.el={"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.el");dijit._editor.nls.commands.el={"removeFormat":"Αφαίρεση μορφοποίησης","copy":"Αντιγραφή","paste":"Επικόλληση","selectAll":"Επιλογή όλων","insertOrderedList":"Αριθμημένη λίστα","insertTable":"Εισαγωγή/Τροποποίηση πίνακα","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία διασύνδεσης","undo":"Αναίρεση","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση διασύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.el");dojo.cldr.nls.number.el={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.el");dijit.form.nls.validate.el={"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.el");dojo.cldr.nls.currency.el={"HKD_displayName":"Δολάριο Χονγκ Κονγκ","CHF_displayName":"Φράγκο Ελβετίας","CAD_displayName":"Δολάριο Καναδά","CNY_displayName":"Γιουάν Ρενμίμπι Κίνας","AUD_displayName":"Δολάριο Αυστραλίας","JPY_displayName":"Γιεν Ιαπωνίας","USD_displayName":"Δολάριο ΗΠΑ","GBP_displayName":"Λίρα Στερλίνα Βρετανίας","EUR_displayName":"Ευρώ","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.el");dojo.cldr.nls.gregorian.el={"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"dd MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dateFormat-full":"EEEE, dd MMMM y","dateFormatItem-Md":"d/M","field-era":"Περίοδος","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],"timeFormat-short":"h:mm a","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"timeFormat-long":"h:mm:ss a z","field-year":"Έτος","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"y Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Ώρα","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","am":"π.μ.","dateFormatItem-H":"H","months-standAlone-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"quarters-standAlone-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"LLLL y","field-day":"Ημέρα","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"field-zone":"Ζώνη","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"eraNames":["π.Χ.","μ.Χ."],"days-format-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"field-month":"Μήνας","days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"μ.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yyyy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};
diff --git a/js/dojo/dijit/nls/dijit-all_fi-fi.js b/js/dojo/dijit/nls/dijit-all_fi-fi.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_fi-fi.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_fi-fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi_fi");dojo.nls.colors.fi_fi={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi_fi");dijit.nls.common.fi_fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fi_fi");dijit._editor.nls.commands.fi_fi={"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Korotettu","subscript":"Alennettu","createLink":"Luo linkki","undo":"Kumoa","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi_fi");dojo.cldr.nls.number.fi_fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi_fi");dijit.form.nls.validate.fi_fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fi_fi");dojo.cldr.nls.currency.fi_fi={"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","EUR_symbol":"€","GBP_symbol":"£"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fi_fi");dojo.cldr.nls.gregorian.fi_fi={"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","am":"ap.","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-HHmmss":"HH.mm.ss","dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-MMMMd":"d. MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap/ip","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","dateFormatItem-yMMMM":"LLLL y","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","pm":"ip.","dateFormatItem-MMMMEd":"E d. MMMM","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-hms":"h.mm.ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi_fi");dijit.form.nls.ComboBox.fi_fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};
diff --git a/js/dojo/dijit/nls/dijit-all_fi.js b/js/dojo/dijit/nls/dijit-all_fi.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_fi.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi");dojo.nls.colors.fi={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi");dijit.nls.common.fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fi");dijit._editor.nls.commands.fi={"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Korotettu","subscript":"Alennettu","createLink":"Luo linkki","undo":"Kumoa","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi");dojo.cldr.nls.number.fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi");dijit.form.nls.validate.fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fi");dojo.cldr.nls.currency.fi={"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","EUR_symbol":"€","GBP_symbol":"£"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fi");dojo.cldr.nls.gregorian.fi={"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","am":"ap.","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-HHmmss":"HH.mm.ss","dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-MMMMd":"d. MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap/ip","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","dateFormatItem-yMMMM":"LLLL y","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","pm":"ip.","dateFormatItem-MMMMEd":"E d. MMMM","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-hms":"h.mm.ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi");dijit.form.nls.ComboBox.fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};
diff --git a/js/dojo/dijit/nls/dijit-all_he-il.js b/js/dojo/dijit/nls/dijit-all_he-il.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_he-il.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_he-il");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he_il");dojo.nls.colors.he_il={"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he_il");dijit.nls.common.he_il={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.he_il");dijit._editor.nls.commands.he_il={"removeFormat":"סילוק עיצוב","copy":"העתקה","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","insertHorizontalRule":"קו אופקי","delete":"מחיקה","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he_il");dojo.cldr.nls.number.he_il={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he_il");dijit.form.nls.validate.he_il={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.he_il");dojo.cldr.nls.currency.he_il={"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.he_il");dojo.cldr.nls.gregorian.he_il={"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateTimeFormat-medium":"{1} {0}","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","am":"לפנה\"צ","dateFormatItem-H":"H","months-standAlone-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"Dayperiod","days-standAlone-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","days-format-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"אחה\"צ","dateFormatItem-MMMMEd":"E MMMM d","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, y MMM d","dateFormatItem-Ed":"E d","field-week":"שבוע","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he_il");dijit.form.nls.ComboBox.he_il={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};
diff --git a/js/dojo/dijit/nls/dijit-all_he.js b/js/dojo/dijit/nls/dijit-all_he.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_he.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_he");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he");dojo.nls.colors.he={"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he");dijit.nls.common.he={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.he");dijit._editor.nls.commands.he={"removeFormat":"סילוק עיצוב","copy":"העתקה","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","insertHorizontalRule":"קו אופקי","delete":"מחיקה","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he");dojo.cldr.nls.number.he={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he");dijit.form.nls.validate.he={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.he");dojo.cldr.nls.currency.he={"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.he");dojo.cldr.nls.gregorian.he={"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateTimeFormat-medium":"{1} {0}","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","am":"לפנה\"צ","dateFormatItem-H":"H","months-standAlone-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"Dayperiod","days-standAlone-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","days-format-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"אחה\"צ","dateFormatItem-MMMMEd":"E MMMM d","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, y MMM d","dateFormatItem-Ed":"E d","field-week":"שבוע","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};
diff --git a/js/dojo/dijit/nls/dijit-all_nb.js b/js/dojo/dijit/nls/dijit-all_nb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_nb.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_nb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nb");dojo.nls.colors.nb={"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nb");dijit.nls.common.nb={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nb");dijit._editor.nls.commands.nb={"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","fontSize":"Skriftstørrelse","systemShortcut":"Handlingen \"${0}\" er bare tilgjengelig i nettleseren ved hjelp av en tastatursnarvei. Bruk ${1}.","indent":"Innrykk","redo":"Gjør om","strikethrough":"Gjennomstreking","justifyFull":"Juster","justifyCenter":"Midtstill","hiliteColor":"Bakgrunnsfarge","deleteTable":"Slett tabell","outdent":"Fjern innrykk","cut":"Klipp ut","plainFormatBlock":"Avsnittsstil","toggleDir":"Bytt retning","bold":"Fet","tabIndent":"Tabulatorinnrykk","justifyRight":"Høyrejuster","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nb");dojo.cldr.nls.number.nb={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nb");dijit.form.nls.validate.nb={"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nb");dojo.cldr.nls.currency.nb={"HKD_displayName":"Hongkong-dollar","CHF_displayName":"sveitsiske franc","CHF_symbol":"CHF","JPY_symbol":"JPY","CAD_displayName":"kanadiske dollar","CNY_displayName":"kinesiske yuan renminbi","USD_symbol":"USD","AUD_displayName":"australske dollar","JPY_displayName":"japanske yen","CAD_symbol":"CAD","USD_displayName":"amerikanske dollar","EUR_symbol":"EUR","CNY_symbol":"CNY","GBP_displayName":"britiske pund sterling","GBP_symbol":"GBP","AUD_symbol":"AUD","EUR_displayName":"euro","HKD_symbol":"HK$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nb");dojo.cldr.nls.gregorian.nb={"dateFormatItem-yM":"M yyyy","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","field-minute":"minutt","eraNames":["f.Kr.","e.Kr."],"dateFormatItem-MMMEd":"E d. MMM","field-weekday":"ukedag","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"tidsalder","field-hour":"time","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"'kl'. HH.mm.ss zzzz","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","O","T","F","L"],"eraAbbr":["f.Kr.","e.Kr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d. MMMM y","timeFormat-medium":"HH.mm.ss","dateFormatItem-EEEd":"EEE d","field-zone":"sone","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM.yy","dateFormat-medium":"d. MMM y","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm.ss","field-year":"år","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH.mm.ss","field-week":"uke","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-MMMMEd":"E d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH.mm.ss z","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"timeFormat-short":"HH.mm","field-month":"måned","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"pm":"PM","dateFormatItem-M":"L","days-format-narrow":["S","M","T","O","T","F","L"],"field-second":"sekund","field-day":"dag","dateFormatItem-MEd":"E d.M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h.mm a","am":"AM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"EEE d. MMM y","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE d.M.yyyy","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-d":"d.","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"eraNarrow":["f.Kr.","e.Kr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nb");dijit.form.nls.ComboBox.nb={"previousMessage":"Tidligere valg","nextMessage":"Flere valg"};
diff --git a/js/dojo/dijit/nls/dijit-all_nl-nl.js b/js/dojo/dijit/nls/dijit-all_nl-nl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_nl-nl.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_nl-nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl_nl");dojo.nls.colors.nl_nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl_nl");dijit.nls.common.nl_nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nl_nl");dijit._editor.nls.commands.nl_nl={"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl_nl");dojo.cldr.nls.number.nl_nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl_nl");dijit.form.nls.validate.nl_nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nl_nl");dojo.cldr.nls.currency.nl_nl={"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nl_nl");dojo.cldr.nls.gregorian.nl_nl={"dateFormatItem-yM":"M-yyyy","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","field-minute":"Minuut","eraNames":["Voor Christus","Anno Domini"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd-MM","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormatItem-yyMM":"MM-yy","dateFormat-medium":"d MMM y","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"Jaar","quarters-standAlone-narrow":["1","2","3","4"],"field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"pm":"PM","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"AM","days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-yyyy","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl_nl");dijit.form.nls.ComboBox.nl_nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};
diff --git a/js/dojo/dijit/nls/dijit-all_nl.js b/js/dojo/dijit/nls/dijit-all_nl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_nl.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl");dojo.nls.colors.nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl");dijit.nls.common.nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nl");dijit._editor.nls.commands.nl={"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl");dojo.cldr.nls.number.nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl");dijit.form.nls.validate.nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nl");dojo.cldr.nls.currency.nl={"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nl");dojo.cldr.nls.gregorian.nl={"dateFormatItem-yM":"M-yyyy","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","field-minute":"Minuut","eraNames":["Voor Christus","Anno Domini"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd-MM","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormatItem-yyMM":"MM-yy","dateFormat-medium":"d MMM y","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"Jaar","quarters-standAlone-narrow":["1","2","3","4"],"field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"pm":"PM","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"AM","days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-yyyy","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl");dijit.form.nls.ComboBox.nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};
diff --git a/js/dojo/dijit/nls/dijit-all_pt-pt.js b/js/dojo/dijit/nls/dijit-all_pt-pt.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_pt-pt.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_pt-pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_pt");dojo.nls.colors.pt_pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_pt");dijit.nls.common.pt_pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_pt");dijit._editor.nls.commands.pt_pt={"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","insertHorizontalRule":"Régua horizontal","delete":"Eliminar","insertUnorderedList":"Lista marcada","tableProp":"Propriedades da tabela","insertImage":"Inserir imagem","superscript":"Superior à linha","subscript":"Inferior à linha","createLink":"Criar ligação","undo":"Anular","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","fontSize":"Tamanho do tipo de letra","systemShortcut":"A acção \"${0}\" apenas está disponível no navegador utilizando um atalho de teclado. Utilize ${1}.","indent":"Indentar","redo":"Repetir","strikethrough":"Rasurado","justifyFull":"Justificar","justifyCenter":"Alinhar ao centro","hiliteColor":"Cor de segundo plano","deleteTable":"Eliminar tabela","outdent":"Recuar","cut":"Cortar","plainFormatBlock":"Estilo de parágrafo","toggleDir":"Alternar direcção","bold":"Negrito","tabIndent":"Indentar com a tecla Tab","justifyRight":"Alinhar à direita","print":"Impressão","newPage":"Nova Página","fullScreen":"Comutar Tela Cheia","viewSource":"Visualizar Origem HTML","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_pt");dojo.cldr.nls.number.pt_pt={"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_pt");dijit.form.nls.validate.pt_pt={"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_pt");dojo.cldr.nls.currency.pt_pt={"HKD_displayName":"Dólar de Hong Kong","CHF_displayName":"Franco suíço","CAD_displayName":"Dólar canadense","CNY_displayName":"Yuan Renminbi chinês","AUD_displayName":"Dólar australiano","JPY_displayName":"Iene japonês","USD_displayName":"Dólar norte-americano","GBP_displayName":"Libra esterlina britânica","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_pt");dojo.cldr.nls.gregorian.pt_pt={"dateFormatItem-yyQ":"QQQ 'de' yy","quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormat-medium":"d 'de' MMM 'de' yyyy","am":"Antes do meio-dia","months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQ":"QQQ 'de' yyyy","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"pm":"Depois do meio-dia","dateFormatItem-yQQQ":"QQQ 'de' y","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dateFormat-long":"d 'de' MMMM 'de' y","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"Era","dateFormatItem-yM":"MM/yyyy","timeFormat-short":"HH:mm","timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","timeFormat-full":"HH'h'mm'min'ss's' zzzz","dateFormatItem-HHmmss":"H'h'mm'min'ss's'","dateFormatItem-M":"L","days-standAlone-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","days-standAlone-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"Dia","days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormatItem-MMMMEd":"EEE, d 'de' MMMM","dateFormat-short":"dd/MM/yy","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormatItem-mmss":"mm'min'ss's'","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_pt");dijit.form.nls.ComboBox.pt_pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};
diff --git a/js/dojo/dijit/nls/dijit-all_sk.js b/js/dojo/dijit/nls/dijit-all_sk.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_sk.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_sk");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sk");dojo.nls.colors.sk={"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sk");dijit.nls.common.sk={"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sk");dijit._editor.nls.commands.sk={"removeFormat":"Odstrániť formát","copy":"Kopírovať","paste":"Nalepiť","selectAll":"Vybrať všetko","insertOrderedList":"Číslovaný zoznam","insertTable":"Vložiť/upraviť tabuľku","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","insertHorizontalRule":"Horizontálna čiara","delete":"Vymazať","insertUnorderedList":"Zoznam s odrážkami","tableProp":"Vlastnosť tabuľky","insertImage":"Vložiť obrázok","superscript":"Horný index","subscript":"Dolný index","createLink":"Vytvoriť prepojenie","undo":"Vrátiť späť","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","fontSize":"Veľkosť písma","systemShortcut":"Akcia \"${0}\" je vo vašom prehliadači dostupná len s použitím klávesovej skratky. Použite ${1}.","indent":"Odsadiť","redo":"Znova vykonať","strikethrough":"Prečiarknuť","justifyFull":"Zarovnať podľa okraja","justifyCenter":"Zarovnať na stred","hiliteColor":"Farba pozadia","deleteTable":"Vymazať tabuľku","outdent":"Predsadiť","cut":"Vystrihnúť","plainFormatBlock":"Štýl odseku","toggleDir":"Prepnúť smer","bold":"Tučné písmo","tabIndent":"Odsadenie tabulátora","justifyRight":"Zarovnať doprava","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sk");dojo.cldr.nls.number.sk={"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","percentFormat":"#,##0%","decimalFormat":"#,##0.###","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sk");dijit.form.nls.validate.sk={"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sk");dojo.cldr.nls.currency.sk={"HKD_displayName":"Hong Kongský dolár","CHF_displayName":"Švajčiarský frank","CAD_displayName":"Kanadský dolár","CNY_displayName":"Čínsky Yuan Renminbi","AUD_displayName":"Austrálsky dolár","JPY_displayName":"Japonský yen","USD_displayName":"US dolár","GBP_displayName":"Britská libra","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sk");dojo.cldr.nls.gregorian.sk={"field-dayperiod":"Časť dňa","dateFormatItem-yQ":"Q yyyy","field-minute":"Minúta","eraNames":["pred n.l.","n.l."],"dateFormatItem-MMMEd":"E, d. MMM","field-weekday":"Deň v týždni","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Éra","field-hour":"Hodina","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["N","P","U","S","Š","P","S"],"eraAbbr":["pred n.l.","n.l."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","field-zone":"Pásmo","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"Rok","months-standAlone-wide":["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],"field-week":"Týždeň","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"timeFormat-short":"H:mm","field-month":"Mesiac","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ne","po","ut","st","št","pi","so"],"pm":"popoludní","dateFormatItem-mmss":"mm:ss","days-format-narrow":["N","P","U","S","Š","P","S"],"field-second":"Sekunda","field-day":"Deň","dateFormatItem-MEd":"E, d.M.","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"am":"dopoludnia","days-standAlone-abbr":["ne","po","ut","st","št","pi","so"],"dateFormat-short":"d.M.yyyy","dateFormatItem-yyyyM":"M.yyyy","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE, d.M.yyyy","months-format-wide":["januára","februára","marca","apríla","mája","júna","júla","augusta","septembra","októbra","novembra","decembra"],"dateFormatItem-d":"d.","quarters-format-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"days-format-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"eraNarrow":["pred n.l.","n.l."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sk");dijit.form.nls.ComboBox.sk={"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"};
diff --git a/js/dojo/dijit/nls/dijit-all_sl.js b/js/dojo/dijit/nls/dijit-all_sl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_sl.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_sl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sl");dojo.nls.colors.sl={"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sl");dijit.nls.common.sl={"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sl");dijit._editor.nls.commands.sl={"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/Uredi tabelo","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvor HTML","formatBlock":"Slog odstavka","insertHorizontalRule":"Horizontalno pravilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi obrobo tabele","fontSize":"Velikost pisave","systemShortcut":"Dejanje \"${0}\" lahko v vašem brskalniku uporabite samo z bližnjico na tipkovnici. Uporabite ${1}.","indent":"Zamik","redo":"Znova uveljavi","strikethrough":"Prečrtano","justifyFull":"Obojestranka poravnava","justifyCenter":"Sredinska poravnava","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Zamik navzven","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sl");dojo.cldr.nls.number.sl={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sl");dijit.form.nls.validate.sl={"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sl");dojo.cldr.nls.currency.sl={"HKD_displayName":"hongkonški dolar","CHF_displayName":"švicarski frank","JPY_symbol":"¥","CAD_displayName":"kanadski dolar","CNY_displayName":"kitajski juan renminbi","USD_symbol":"$","AUD_displayName":"avstralski dolar","JPY_displayName":"japonski jen","USD_displayName":"ameriški dolar","GBP_displayName":"britanski funt","EUR_displayName":"evro","CHF_symbol":"Fr.","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sl");dojo.cldr.nls.gregorian.sl={"field-dayperiod":"Čas dneva","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-weekday":"Dan v tednu","days-standAlone-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Doba","field-hour":"Ura","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormat-medium":"d. MMM. yyyy","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH:mm:ss","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","dateFormatItem-HHmm":"HH:mm","dateFormatItem-yyQ":"Q/yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"timeFormat-short":"HH:mm","field-month":"Mesec","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormatItem-MMMMdd":"dd. MMMM","pm":"pop.","dateFormatItem-mmss":"mm:ss","days-format-narrow":["n","p","t","s","č","p","s"],"field-second":"Sekunda","field-day":"Dan","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"am":"dop.","days-standAlone-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormat-short":"d. MM. yy","dateFormatItem-yyyyM":"M/yyyy","dateFormat-full":"EEEE, dd. MMMM y","dateFormatItem-Md":"d. M.","months-format-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"quarters-format-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"days-format-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"eraNarrow":["pr. n. št.","po Kr."],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"y MMMM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sl");dijit.form.nls.ComboBox.sl={"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"};
diff --git a/js/dojo/dijit/nls/dijit-all_sv.js b/js/dojo/dijit/nls/dijit-all_sv.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_sv.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_sv");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sv");dojo.nls.colors.sv={"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sv");dijit.nls.common.sv={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sv");dijit._editor.nls.commands.sv={"removeFormat":"Ta bort format","copy":"Kopiera","paste":"Klistra in","selectAll":"Markera allt","insertOrderedList":"Numrerad lista","insertTable":"Infoga/redigera tabell","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsarenmed hjälp av ett kortkommando. Använd ${1}.","indent":"Indrag","redo":"Gör om","strikethrough":"Genomstruken","justifyFull":"Marginaljustera","justifyCenter":"Centrera","hiliteColor":"Bakgrundsfärg","deleteTable":"Ta bort tabell","outdent":"Utdrag","cut":"Klipp ut","plainFormatBlock":"Styckeformat","toggleDir":"Växla riktning","bold":"Fetstil","tabIndent":"Tabbindrag","justifyRight":"Högerjustera","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sv");dojo.cldr.nls.number.sv={"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sv");dijit.form.nls.validate.sv={"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sv");dojo.cldr.nls.currency.sv={"HKD_displayName":"Hongkong-dollar","CHF_displayName":"schweizisk franc","CHF_symbol":"CHF","CAD_displayName":"kanadensisk dollar","CNY_displayName":"kinesisk yuan renminbi","AUD_displayName":"australisk dollar","JPY_displayName":"japansk yen","CAD_symbol":"CAD","USD_displayName":"US-dollar","CNY_symbol":"CNY","GBP_displayName":"brittiskt pund sterling","EUR_displayName":"euro","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","EUR_symbol":"€","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sv");dojo.cldr.nls.gregorian.sv={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"veckodag","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, yyyy-MM-dd","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d MMMM y","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-MMMMEEEd":"EEE d MMMM","field-era":"era","dateFormatItem-yM":"yyyy-MM","months-standAlone-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","field-hour":"timme","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH.mm.ss zzzz","am":"fm","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"dateFormatItem-HHmmss":"HH.mm.ss","dateFormatItem-hhmmss":"h.mm.ss a","dateFormatItem-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"fm/em","days-standAlone-abbr":["sön","mån","tis","ons","tors","fre","lör"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","dateFormatItem-yMMMM":"y MMMM","field-day":"dag","days-format-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"field-zone":"tidszon","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"yy-MM","days-format-abbr":["sön","mån","tis","ons","tors","fre","lör"],"eraNames":["före Kristus","efter Kristus"],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"månad","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH.mm","pm":"em","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-hhmm":"hh.mm a","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sv");dijit.form.nls.ComboBox.sv={"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"};
diff --git a/js/dojo/dijit/nls/dijit-all_th.js b/js/dojo/dijit/nls/dijit-all_th.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_th.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_th");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.th");dojo.nls.colors.th={"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.th");dijit.nls.common.th={"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.th");dijit._editor.nls.commands.th={"removeFormat":"ลบรูปแบบออก","copy":"คัดลอก","paste":"วาง","selectAll":"เลือกทั้งหมด","insertOrderedList":"ลำดับเลข","insertTable":"แทรก/แก้ไข ตาราง","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","fontSize":"ขนาดฟอนต์","systemShortcut":"แอ็กชัน \"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.th");dojo.cldr.nls.number.th={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.th");dijit.form.nls.validate.th={"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.th");dojo.cldr.nls.currency.th={"HKD_displayName":"ดอลลาร์ฮ่องกง","CHF_displayName":"ฟรังก์สวิส","JPY_symbol":"¥","CAD_displayName":"ดอลลาร์แคนาดา","CNY_displayName":"หยวนเหรินหมินปี้ (สาธารณรัฐประชาชนจีน)","AUD_displayName":"ดอลลาร์ออสเตรเลีย","JPY_displayName":"เยนญี่ปุ่น","USD_displayName":"ดอลลาร์สหรัฐ","GBP_displayName":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","EUR_displayName":"ยูโร","CHF_symbol":"Fr.","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.th");dojo.cldr.nls.gregorian.th={"dateFormatItem-yM":"M/yyyy","field-dayperiod":"ช่วงวัน","dateFormatItem-yQ":"Q yyyy","field-minute":"นาที","eraNames":["ปีก่อนคริสต์ศักราช","คริสต์ศักราช"],"dateFormatItem-MMMEd":"E d MMM","dateTimeFormat-full":"{1}, {0}","field-weekday":"วันในสัปดาห์","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateTimeFormat-short":"{1}, {0}","field-era":"สมัย","field-hour":"ชั่วโมง","dateTimeFormat-medium":"{1}, {0}","dateFormatItem-y":"y","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","months-standAlone-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"eraAbbr":["ปีก่อน ค.ศ.","ค.ศ."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE d","field-zone":"เขต","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d MMM y","quarters-standAlone-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"ปี","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1}, {0}","dateFormatItem-HHmmss":"HH:mm:ss","field-week":"สัปดาห์","months-standAlone-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","dateFormatItem-HHmm":"HH:mm","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H นาฬิกา m นาที ss วินาที z","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"timeFormat-short":"H:mm","field-month":"เดือน","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"pm":"หลังเที่ยง","dateFormatItem-M":"L","dateFormatItem-mmss":"mm:ss","days-format-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"field-second":"วินาที","field-day":"วัน","dateFormatItem-MEd":"E, d/M","months-format-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"am":"ก่อนเที่ยง","days-standAlone-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormat-short":"d/M/yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE d/M/yyyy","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateFormatItem-d":"d","quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"eraNarrow":"ก่อน ค.ศ.","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};
diff --git a/js/dojo/dijit/nls/dijit-all_tr.js b/js/dojo/dijit/nls/dijit-all_tr.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/dijit-all_tr.js
@@ -0,0 +1,1 @@
+dojo.provide("dijit.nls.dijit-all_tr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.tr");dojo.nls.colors.tr={"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.tr");dijit.nls.common.tr={"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.tr");dijit._editor.nls.commands.tr={"removeFormat":"Biçimi Kaldır","copy":"Kopyala","paste":"Yapıştır","selectAll":"Tümünü Seç","insertOrderedList":"Numaralı Liste","insertTable":"Tablo Ekle/Düzenle","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","insertHorizontalRule":"Yatay Kural","delete":"Sil","insertUnorderedList":"Madde İşaretli Liste","tableProp":"Tablo Özelliği","insertImage":"Resim Ekle","superscript":"Üst Simge","subscript":"Alt Simge","createLink":"Bağlantı Oluştur","undo":"Geri Al","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","fontSize":"Yazı Tipi Boyutu","systemShortcut":"\"${0}\" işlemi yalnızca tarayıcınızda bir klavye kısayoluyla birlikte kullanılabilir. Şunu kullanın: ${1}.","indent":"Girinti","redo":"Yinele","strikethrough":"Üstü Çizili","justifyFull":"Yasla","justifyCenter":"Ortaya Hizala","hiliteColor":"Arka Plan Rengi","deleteTable":"Tabloyu Sil","outdent":"Çıkıntı","cut":"Kes","plainFormatBlock":"Paragraf Stili","toggleDir":"Yönü Değiştir","bold":"Kalın","tabIndent":"Sekme Girintisi","justifyRight":"Sağa Hizala","print":"Print","newPage":"New Page","appleKey":"⌘${0}","fullScreen":"Toggle Full Screen","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.tr");dojo.cldr.nls.number.tr={"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.tr");dijit.form.nls.validate.tr={"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.tr");dojo.cldr.nls.currency.tr={"HKD_displayName":"Hong Kong Doları","CHF_displayName":"İsviçre Frangı","JPY_symbol":"¥","CAD_displayName":"Kanada Doları","CNY_displayName":"Çin Yuanı Renminbi","USD_symbol":"$","AUD_displayName":"Avustralya Doları","JPY_displayName":"Japon Yeni","USD_displayName":"ABD Doları","GBP_displayName":"İngiliz Sterlini","EUR_displayName":"Euro","CHF_symbol":"Fr.","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.tr");dojo.cldr.nls.gregorian.tr={"months-format-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Haftanın Günü","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"dd.MM.yyyy EEE","dateFormatItem-MMMEd":"dd MMM E","eraNarrow":["MÖ","MS"],"dateFormat-long":"dd MMMM y","months-format-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"dateFormatItem-EEEd":"d EEE","dateFormat-full":"dd MMMM y EEEE","dateFormatItem-Md":"dd/MM","field-era":"Miladi Dönem","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"timeFormat-long":"HH:mm:ss z","field-year":"Yıl","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"Saat","months-format-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","am":"AM","dateFormatItem-H":"H","months-standAlone-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"quarters-format-abbr":["Ç1","Ç2","Ç3","Ç4"],"quarters-standAlone-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-hhmmss":"hh:mm:ss a","dateFormatItem-M":"L","days-standAlone-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"dateFormatItem-MMMMd":"dd MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Ç1","Ç2","Ç3","Ç4"],"eraAbbr":["MÖ","MS"],"field-minute":"Dakika","field-dayperiod":"AM/PM","days-standAlone-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"dd MMM","dateFormatItem-MEd":"dd/MM E","dateFormatItem-yMMMM":"MMMM y","field-day":"Gün","days-format-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"field-zone":"Saat Dilimi","dateFormatItem-y":"y","months-standAlone-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"eraNames":["Milattan Önce","Milattan Sonra"],"days-format-narrow":["P","P","S","Ç","P","C","C"],"field-month":"Ay","days-standAlone-narrow":["P","P","S","Ç","P","C","C"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"PM","dateFormatItem-MMMMEd":"dd MMMM E","dateFormat-short":"dd.MM.yyyy","field-second":"Saniye","dateFormatItem-yMMMEd":"dd MMM y EEE","dateFormatItem-hhmm":"hh:mm a","dateFormatItem-Ed":"d E","field-week":"Hafta","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.tr");dijit.form.nls.ComboBox.tr={"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"};
diff --git a/js/dojo/dijit/nls/el/common.js b/js/dojo/dijit/nls/el/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/el/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/el/loading.js b/js/dojo/dijit/nls/el/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/el/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/fi/common.js b/js/dojo/dijit/nls/fi/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/fi/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/fi/loading.js b/js/dojo/dijit/nls/fi/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/fi/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/he/common.js b/js/dojo/dijit/nls/he/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/he/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/he/loading.js b/js/dojo/dijit/nls/he/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/he/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/nb/common.js b/js/dojo/dijit/nls/nb/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/nb/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/nb/loading.js b/js/dojo/dijit/nls/nb/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/nb/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Laster inn...","errorState":"Det oppsto en feil"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/nl/common.js b/js/dojo/dijit/nls/nl/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/nl/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/nl/loading.js b/js/dojo/dijit/nls/nl/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/nl/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/pt-pt/common.js b/js/dojo/dijit/nls/pt-pt/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/pt-pt/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/pt-pt/loading.js b/js/dojo/dijit/nls/pt-pt/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/pt-pt/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sk/common.js b/js/dojo/dijit/nls/sk/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sk/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sk/loading.js b/js/dojo/dijit/nls/sk/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sk/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Zavádzanie...","errorState":"Nastala chyba"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sl/common.js b/js/dojo/dijit/nls/sl/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sl/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sl/loading.js b/js/dojo/dijit/nls/sl/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sl/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sv/common.js b/js/dojo/dijit/nls/sv/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sv/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/sv/loading.js b/js/dojo/dijit/nls/sv/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/sv/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Läser in...","errorState":"Det uppstod ett fel."})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/th/common.js b/js/dojo/dijit/nls/th/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/th/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/th/loading.js b/js/dojo/dijit/nls/th/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/th/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/tr/common.js b/js/dojo/dijit/nls/tr/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/tr/common.js
@@ -0,0 +1,1 @@
+({"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"})
\ No newline at end of file
diff --git a/js/dojo/dijit/nls/tr/loading.js b/js/dojo/dijit/nls/tr/loading.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/nls/tr/loading.js
@@ -0,0 +1,1 @@
+({"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"})
\ No newline at end of file
diff --git a/js/dojo/dijit/resources/_modules.js b/js/dojo/dijit/resources/_modules.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/resources/_modules.js
@@ -0,0 +1,7 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
diff --git a/js/dojo/dijit/robot.js b/js/dojo/dijit/robot.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/robot.js
@@ -0,0 +1,64 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.robot"]){
+dojo._hasResource["dijit.robot"]=true;
+dojo.provide("dijit.robot");
+dojo.require("dojo.robot");
+dojo.provide("dijit._base.place");
+dojo.require("dijit._base.scroll");
+dojo.require("dijit._base.window");
+dojo.mixin(doh.robot,{_position:function(n){
+var d=dojo,p=null,M=Math.max,m=Math.min;
+d.forEach(doh.robot._getWindowChain(n),function(w){
+d.withGlobal(w,function(){
+var p2=d.position(n,false),b=d._getPadBorderExtents(n);
+if(!p){
+p=p2;
+}else{
+var _1;
+d.withGlobal(n.contentWindow,function(){
+_1=dijit.getViewport();
+});
+p2.r=p2.x+_1.w;
+p2.b=p2.y+_1.h;
+p={x:M(p.x+p2.x,p2.x)+b.l,y:M(p.y+p2.y,p2.y)+b.t,r:m(p.x+p2.x+p.w,p2.r)+b.l,b:m(p.y+p2.y+p.h,p2.b)+b.t};
+p.w=p.r-p.x;
+p.h=p.b-p.y;
+}
+n=w.frameElement;
+});
+});
+return p;
+},_scrollIntoView:function(n){
+var d=dojo,dr=doh.robot,p=null;
+d.forEach(dr._getWindowChain(n),function(w){
+d.withGlobal(w,function(){
+var p2=d.position(n,false),b=d._getPadBorderExtents(n),_2=null;
+if(!p){
+p=p2;
+}else{
+_2=p;
+p={x:p.x+p2.x+b.l,y:p.y+p2.y+b.t,w:p.w,h:p.h};
+}
+dijit.scrollIntoView(n,p);
+p2=d.position(n,false);
+if(!_2){
+p=p2;
+}else{
+p={x:_2.x+p2.x+b.l,y:_2.y+p2.y+b.t,w:p.w,h:p.h};
+}
+n=w.frameElement;
+});
+});
+},_getWindowChain:function(n){
+var cW=dijit.getDocumentWindow(n.ownerDocument);
+var _3=[cW];
+var f=cW.frameElement;
+return (cW==dojo.global||f==null)?_3:_3.concat(doh.robot._getWindowChain(f));
+}});
+}
diff --git a/js/dojo/dijit/robotx.js b/js/dojo/dijit/robotx.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/robotx.js
@@ -0,0 +1,24 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.robotx"]){
+dojo._hasResource["dijit.robotx"]=true;
+dojo.provide("dijit.robotx");
+dojo.require("dijit.robot");
+dojo.require("dojo.robotx");
+dojo.experimental("dijit.robotx");
+(function(){
+var _1=doh.robot._updateDocument;
+dojo.mixin(doh.robot,{_updateDocument:function(){
+_1();
+var _2=dojo.global;
+if(_2["dijit"]){
+dijit.registry=_2.dijit.registry;
+}
+}});
+})();
+}
diff --git a/js/dojo/dijit/themes/a11y/colors3x4.png b/js/dojo/dijit/themes/a11y/colors3x4.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e4078812a54d06867e58dea2c2a2e4c5a1e04bc9
GIT binary patch
literal 786
zc%17D@N?(olHy`uVBq!ia0vp^VL<G_!3HE7ZZ;GGDb50q$YKTtZeb8+WSBKa0w~Cm
z?&#~tz_78e=6B#^AYUQbBgmJ5p-L5~t(k%0=YJsml7XSrfPvvv0t1893<d`A{7Lag
z-53~{Iy_w*Ln>}1&9E$f_CL@emVqm{fgy>-P{NJzDx(8~VJ{nFE`tL@FPly;klMI_
z`^+rUZY{RuOPBU~d`@6cXo%<tbkTAs&#8*Ca(#Aoj;Zj~J<mmEsduKuS*8A)Ybk78
z#K4rXMPq>=1IL1k4NIv_DXdu>eMQQvneod-&91YPmu#vuP7kzAU}VZD$!c>0y3ehf
zNs6(7L5ep5nVS1~(ZxC94h)I8qAOOf4o*3FcDDINouxT_Sz=MEm3j|Zu8Pc9+wkSf
zbCGRYDuzdB?u8eNgQqk_hRpjs%k`<HRt}KI1aT!;*`fxpPnf46Q_uHgm^^0{aEORz
zJwHF#j9o>uGwSrRrNI`@O@+6Hew=g2Qp<Bon1fa8yV;h)o3AnpI4pK$>_x;SRjEYT
zyH4_R7m1vi<$2dq-&5;+;Mpacemg+j$$}n!3Su{|uq<7ExR)uTmWkKDfq|J}=H(-K
U1q?n-!1T-D>FVdQ&MBb@01Ubap8x;=
diff --git a/js/dojo/dijit/themes/a11y/colors7x10.png b/js/dojo/dijit/themes/a11y/colors7x10.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..77d22ce3fa5eb7ad7b1c8f3edd441c0356900c4a
GIT binary patch
literal 2641
zc%03aX;4#F6vr>CF+i~;BbzKzg<z|oVG*Ta5yDOgAc`nNhyhXoHKq8d4pEHACIS}n
z5@ZWX212Q93IqjQpp<|pV1)*XNPxJ26Rk)T`mn_h9Y?0q(ecAQ_q})TJLf;=-upW@
z*~i;O4XuL)0I0dSI{6}f7t%6O%7{&EOA;g9@&m4cbO2N|7MdJj=V>7y6~i68900g@
z`iP8_jl3I%x%zqm5Wf}xMj`+&=aGIAfLL<?BxC@#umI4E$qKnaK>W42IXU<r9th2|
zp^N8hYAjBY%+Un7gXDgGpem5NK4X9)B!*(r<ZlCeurXb^1*@f0qQC$;!p&SV=8PPW
zKcy5TOV<JYF*=qpy@C;nzA8{$p|UZhebTmwrK#Z#LmmNKw&s*445_>*X6HsY!jQDP
zkXf*mIdVyZId7L-6^$LWC19@X#O{0glx9gga@mg+{C)9x&5&WIl+Hl`ghvlEMNA{<
zpRayTT&=vqp6gYMsB8y7&VqfA(1JBo0E)LFZfYxW8L9vo)(%GmZ$bp8Q}aI9#1pZx
z7PUE{*M!@GM4lI+h;ojpm3mYx?uNLiBKiWRuyWBnDmfJI5F+w4ZLVv8eHXk1mAWj3
z@QZq%f(clGD^6#-9EZ%2|8~0c@%emg)q~$IhVgRBbV-yUK4;uVDDA({DX7@d)0tg#
zOJIV1bzry~17A9XGegh+FcFv1Il5bz+!~XMDQOpUj8BnfraVozerZ2pA;Atz+O5XG
z;T=`VOoQ31D%{F|)UeZz@=NOaIJpjZ%tCg)BAJy?fEo#z=}`1^AnNTA@wZz`%^L0{
zNN3BV`^z}B5^6<5Ao93D#IFE4-_Xg6ajg2@D<j{=oHoRR*07c-EUc!#*PcD+j69-;
z1j()H33GWy(g1h&;%RPuh970<c4ZFlSZlU-CRBZ;(`h7W)~~KK;W?p~R2d$5ww_2^
zStjcb((<DO|B+mceHC}X0Rx+S7q5q&?}0kHP-k#Xdd_q~v_~c+vs4c|CHILW*!N9>
z8GFwp+?8>T7A7`w8#&wKswL3@B4Jr$V61id6KbD`-@xe`6w>4)o^>8u^gH0M`@XR8
z;$|Mi6=#y)z@VR0JC4c!+%VZHB`3#wB!3R(aor=o#afst3I*L5c3Ub{pBb*$>8R_>
ziFCZj+cm50|Kf<>93d0h9arx&^VNpKK9t}SEuUfLZX_CG;L?}`WoG5&wiF}jlSXp>
zew9y$2sLYd>_*v#EC6A(zg0$VhnVy-4Ls`;o|XTX*^lr->F-n_NTmP-sZnL=$4U0e
z09DwNhC?8%4Gb9sT-V|-va@>yB&n;px-yVQJ>(5ARWz|x*PELGb82@J3&CUE&Eo0x
zW;MQ)p@WIEUVEtSoRO631{JfzT}EJqBp;WtEq1ZKlwg|>8+3xC^e6_-6^@^1B@&6;
zb^(kdX}oB2%g4ZN1xYIlaOtMMT28V|3O*ScJYk`L*2!a93A-HnUvs=5Kq!=!am(KV
zK-^USdKK><Bs{(&94O}0nlK36tF#t<EwM?$KTBg<)AW~%Taa*j^|o{BqI8{eC=gUM
zy>_eVAZ}i;D%OAU4tpJfRF%kWBh^!Rj+v01i0&hj<yGO9tyxQQ8M|$25o6o{72ru!
zeFK9sXwvvBY_0M9LDzE+EIov*S|-Dv_oM0$d*W3$F1_Y&t89eDXxfLGXvi<;_Uy3s
zL*IIbq52Nm;_(u8(n9fKTxo#sKiia@A<<rD_<vICK`cFxA@l4d6%vv2pF|y^qlMW{
zxQy`oNX3_B6=bvy(<619#q|^Wif*<=qDQY``mU;}-8J1*S>&LxzR9-KyvenA+WP#}
zl6Kpx@coF%F&pNj^B3Dx5m_ACM@ZTd6HyN(5pT{pejUfeZJ+cVseOe1x;)8LZUO-T
w(Jafqd-H#xL1=M*{-cGf8XAmgGk^m4CDqcH_Ot9Ba{U8t&fZQxIg*e61uYHRj{pDw
diff --git a/js/dojo/dijit/themes/nihilo/Calendar.css b/js/dojo/dijit/themes/nihilo/Calendar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Calendar.css
@@ -0,0 +1,129 @@
+
+.nihilo .dijitCalendarIncrementControl {
+
+ width:15px;
+ height:15px;
+ background-image: url("images/spriteRoundedIconsSmall.png");
+ background-repeat: no-repeat
+}
+.dj_ie6 .nihilo .dijitCalendarIncrementControl {
+ font-size:.1em;
+ background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dijitA11ySideArrow {
+ display: none;
+}
+.nihilo .dijitCalendarDecrease {
+ background-position: top left;
+}
+.nihilo .dijitCalendarIncrease {
+ background-position: -30px top;
+}
+.nihilo table.dijitCalendarContainer {
+ font-size: 100%;
+ border-spacing: 0;
+ border-collapse: separate;
+ border: 1px solid #ccc;
+ margin: 0;
+}
+.nihilo .dijitCalendarMonthContainer th {
+
+ background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+ padding-top:.3em;
+ padding-bottom:.2em;
+ text-align:center;
+}
+.dj_ie6 .nihilo .dijitCalendarMonthContainer th {
+ padding-top:.2em;
+ padding-bottom:.1em;
+}
+.nihilo .dijitCalendarDayLabelTemplate {
+
+ background:#fefefe;
+ font-weight:normal;
+ padding-top:.15em;
+ padding-bottom:.2em;
+ border-bottom: 1px solid #eeeeee;
+ color:#293a4b;
+ text-align:center;
+}
+.nihilo .dijitCalendarBodyContainer {
+ border-bottom: 1px solid #eeeeee;
+}
+.nihilo .dijitCalendarMonthLabel {
+ color:#293a4b;
+ font-weight: bold;
+}
+.nihilo .dijitCalendarDateTemplate {
+
+ font-size: 0.9em;
+ font-weight: bold;
+ text-align: center;
+ padding: 0.3em 0.3em 0.05em 0.3em;
+ letter-spacing: 1px;
+ background-color: #fdfdfd;
+ border:#fdfdfd solid 1px !important;
+}
+.dj_ie .nihilo .dijitCalendarDateTemplate {
+ padding: 0.1em .33em 0.02em .33em;
+}
+.nihilo .dijitCalendarPreviousMonth,
+.nihilo .dijitCalendarNextMonth {
+
+ color:#999999;
+ background-color:#f5f5f5 !important;
+ border:#f5f5f5 solid 1px !important;
+}
+.nihilo .dijitCalendarPreviousMonthDisabled,
+.nihilo .dijitCalendarNextMonthDisabled {
+
+ background-color:#a4a5a6 !important;
+}
+.nihilo .dijitCalendarCurrentMonth {
+
+}
+.nihilo .dijitCalendarCurrentMonthDisabled {
+
+ background-color:#bbbbbc !important;
+}
+.nihilo .dijitCalendarDisabledDate {
+
+
+ text-decoration:line-through !important;
+ cursor:default !important;
+}
+.nihilo .dijitCalendarCurrentDate {
+
+ text-decoration:underline;
+ font-weight:bold;
+}
+.nihilo .dijitCalendarSelectedDate {
+
+ background-color:#ffe284 !important;
+ color:black !important;
+ border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarYearContainer {
+
+ background:white url("images/titleBar.png") repeat-x top;
+}
+.nihilo .dijitCalendarYearLabel {
+
+ margin:0;
+ padding:0.4em 0 0.25em 0;
+ text-align:center;
+}
+.nihilo .dijitCalendarSelectedYear {
+
+ color:black;
+ padding:0.2em;
+ padding-bottom:0.1em;
+ background-color:#ffe284 !important;
+ border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarNextYear,
+.nihilo .dijitCalendarPreviousYear {
+
+ color:black !important;
+ font-weight:normal;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Calendar_rtl.css b/js/dojo/dijit/themes/nihilo/Calendar_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Calendar_rtl.css
@@ -0,0 +1,7 @@
+
+.dijitRtl .nihilo .dijitCalendarDecrease {
+ background-position: -30px top;
+}
+.dijitRtl .nihilo .dijitCalendarIncrease {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/nihilo/ColorPalette.css b/js/dojo/dijit/themes/nihilo/ColorPalette.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/ColorPalette.css
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+ border:1px solid #d3d3d3;
+ background:#fff;
+ -moz-border-radius: 0px !important;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Common.css b/js/dojo/dijit/themes/nihilo/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Common.css
@@ -0,0 +1,19 @@
+
+.nihilo .dojoDndItemBefore {
+ border-top: 2px solid #369;
+}
+.nihilo .dojoDndItemAfter {
+ border-bottom: 2px solid #369;
+}
+.nihilo .dojoDndItemOver {
+ cursor:pointer;
+}
+.nihilo table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.nihilo .dojoDndAvatar td { border: none; }
+.nihilo .dojoDndAvatar tr { border: none; }
+.nihilo .dojoDndAvatarHeader td { height: 20px; padding: 0 0 0 21px; }
+.nihilo .dojoDndAvatarItem td { padding: 2px;}
+.nihilo.dojoDndMove .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
diff --git a/js/dojo/dijit/themes/nihilo/Dialog.css b/js/dojo/dijit/themes/nihilo/Dialog.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Dialog.css
@@ -0,0 +1,131 @@
+
+.nihilo .dijitDialog {
+ background: #eee;
+ border: 1px solid #d3d3d3;
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+ padding: 0px;
+}
+.nihilo .dijitDialog .dijitDialogTitle {
+
+ font-size: 0.9em;
+ color: #3243C5F;
+ font-weight: bold;
+ padding: 0px 4px;
+}
+.nihilo .dijitDialog .dijitDialogPaneContent {
+ background: #ffffff;
+ border:none;
+ border-top: 1px solid #d3d3d3;
+ padding:10px;
+}
+.nihilo .dijitDialogTitleBar {
+
+ background: #fafafa url("images/titleBar.png") repeat-x top left;
+ padding: 5px 6px 3px 6px;
+ cursor: move;
+ outline:0;
+}
+.nihilo .dijitDialogCloseIcon {
+
+ background-image: url("images/spriteRoundedIconsSmall.png");
+ background-repeat: no-repeat;
+ background-position: -60px 0px;
+ position: absolute;
+ vertical-align: middle;
+ right: 6px;
+ top: 4px;
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dj_ie6 .nihilo .dijitDialogCloseIcon {
+ background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dijitDialogCloseIcon-hover {
+ background-position: -60px -15px;
+}
+.nihilo .dijitTooltip,
+.nihilo .dijitTooltipDialog {
+
+ background: transparent;
+}
+.dijitTooltipBelow {
+
+ padding-top: 10px;
+}
+.dijitTooltipAbove {
+
+ padding-bottom: 10px;
+}
+.nihilo .dijitTooltipContainer {
+
+ background-color: #fff;
+ border:1px solid #d3d3d3;
+ padding:0.45em;
+}
+.nihilo .dijitTooltipConnector {
+
+ border:0px;
+ z-index: 2;
+}
+.nihilo .dijitTooltipABRight .dijitTooltipConnector {
+
+ left: auto !important;
+ right: 6px;
+}
+.nihilo .dijitTooltipBelow .dijitTooltipConnector {
+
+ top: 0px;
+ left: 6px;
+ background:url("images/tooltipConnectorUp.png") no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .nihilo .dijitTooltipBelow .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorUp.gif");
+}
+.nihilo .dijitTooltipAbove .dijitTooltipConnector {
+
+ bottom: 0px;
+ left: 6px;
+ background:url("images/tooltipConnectorDown.png") no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+ bottom: -5px;
+}
+.nihilo .dijitTooltipLeft {
+ padding-right: 10px;
+}
+.dj_ie6 .nihilo .dijitTooltipLeft {
+ padding-left: 11px;
+}
+.nihilo .dijitTooltipLeft .dijitTooltipConnector {
+
+ right: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorRight.png") no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .nihilo .dijitTooltipLeft .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorRight.gif");
+}
+.nihilo .dijitTooltipRight {
+ padding-left: 10px;
+}
+.nihilo .dijitTooltipRight .dijitTooltipConnector {
+
+ left: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorLeft.gif");
+}
diff --git a/js/dojo/dijit/themes/nihilo/Dialog_rtl.css b/js/dojo/dijit/themes/nihilo/Dialog_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Dialog_rtl.css
@@ -0,0 +1,5 @@
+
+.dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
+ right: auto;
+ left: 5px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Editor.css b/js/dojo/dijit/themes/nihilo/Editor.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Editor.css
@@ -0,0 +1,65 @@
+.dijitIEFixedToolbar {
+ position:absolute;
+
+ top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.nihilo .dijitToolbar .dijitToolbarSeparator {
+ background: url('images/editor.gif');
+}
+.nihilo .dijitEditorIcon {
+ background-image: url('images/editor.gif');
+ background-repeat: no-repeat;
+ width: 18px;
+ height: 18px;
+ text-align: center;
+}
+.nihilo .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled.gif');
+}
+.nihilo .dijitEditorIconSep { background-position: 0px; }
+.nihilo .dijitEditorIconBackColor { background-position: -18px; }
+.nihilo .dijitEditorIconBold { background-position: -36px; }
+.nihilo .dijitEditorIconCancel { background-position: -54px; }
+.nihilo .dijitEditorIconCopy { background-position: -72px; }
+.nihilo .dijitEditorIconCreateLink { background-position: -90px; }
+.nihilo .dijitEditorIconCut { background-position: -108px; }
+.nihilo .dijitEditorIconDelete { background-position: -126px; }
+.nihilo .dijitEditorIconForeColor { background-position: -144px; }
+.nihilo .dijitEditorIconHiliteColor { background-position: -162px; }
+.nihilo .dijitEditorIconIndent { background-position: -180px; }
+.nihilo .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
+.nihilo .dijitEditorIconInsertImage { background-position: -216px; }
+.nihilo .dijitEditorIconInsertOrderedList { background-position: -234px; }
+.nihilo .dijitEditorIconInsertTable { background-position: -252px; }
+.nihilo .dijitEditorIconInsertUnorderedList { background-position: -270px; }
+.nihilo .dijitEditorIconItalic { background-position: -288px; }
+.nihilo .dijitEditorIconJustifyCenter { background-position: -306px; }
+.nihilo .dijitEditorIconJustifyFull { background-position: -324px; }
+.nihilo .dijitEditorIconJustifyLeft { background-position: -342px; }
+.nihilo .dijitEditorIconJustifyRight { background-position: -360px; }
+.nihilo .dijitEditorIconLeftToRight { background-position: -378px; }
+.nihilo .dijitEditorIconListBulletIndent { background-position: -396px; }
+.nihilo .dijitEditorIconListBulletOutdent { background-position: -414px; }
+.nihilo .dijitEditorIconListNumIndent { background-position: -432px; }
+.nihilo .dijitEditorIconListNumOutdent { background-position: -450px; }
+.nihilo .dijitEditorIconOutdent { background-position: -468px; }
+.nihilo .dijitEditorIconPaste { background-position: -486px; }
+.nihilo .dijitEditorIconRedo { background-position: -504px; }
+.nihilo .dijitEditorIconRemoveFormat { background-position: -522px; }
+.nihilo .dijitEditorIconRightToLeft { background-position: -540px; }
+.nihilo .dijitEditorIconSave { background-position: -558px; }
+.nihilo .dijitEditorIconSpace { background-position: -576px; }
+.nihilo .dijitEditorIconStrikethrough { background-position: -594px; }
+.nihilo .dijitEditorIconSubscript { background-position: -612px; }
+.nihilo .dijitEditorIconSuperscript { background-position: -630px; }
+.nihilo .dijitEditorIconUnderline { background-position: -648px; }
+.nihilo .dijitEditorIconUndo { background-position: -666px; }
+.nihilo .dijitEditorIconWikiword { background-position: -684px; }
+.nihilo .dijitEditorIconToggleDir { background-position: -540px; }
+.nihilo .dijitEditorIconTabIndent { background-position: -702px; }
+.nihilo .dijitEditorIconSelectAll { background-position: -720px; }
+.nihilo .dijitEditorIconUnlink { background-position: -738px; }
+.nihilo .dijitEditorIconFullScreen { background-position: -756px; }
+.nihilo .dijitEditorIconViewSource { background-position: -774px; }
+.nihilo .dijitEditorIconPrint { background-position: -792px; }
+.nihilo .dijitEditorIconNewPage { background-position: -810px; }
diff --git a/js/dojo/dijit/themes/nihilo/Editor_rtl.css b/js/dojo/dijit/themes/nihilo/Editor_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Editor_rtl.css
@@ -0,0 +1,10 @@
+
+.dijitRtl .nihilo .dijitEditorIcon {
+ background-image: url('images/editor_rtl.gif');
+}
+.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled_rtl.gif');
+}
+.dijitRtl .nihilo .dijitToolbar .dijitToolbarSeparator {
+ background-image: url('images/editor_rtl.gif');
+}
diff --git a/js/dojo/dijit/themes/nihilo/Menu.css b/js/dojo/dijit/themes/nihilo/Menu.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Menu.css
@@ -0,0 +1,62 @@
+
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+ border: 1px solid #d3d3d3;
+ margin: 0px;
+ padding: 0px;
+ background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+ border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0px;
+ color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+ font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+ padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+ background-color: #ffe284;
+ color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+ width: 15px;
+ height: 15px;
+}
+.nihilo .dijitMenuExpand {
+ width:15px;
+ height:15px;
+ background-image: url('images/spriteRoundedIconsSmall.png');
+ background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+ background-image:url('images/spriteRoundedIconsSmall.gif');
+}
+.nihilo .dijitMenuSeparator {
+ height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #fff;
+}
+.nihilo .dijitMenuSeparatorBottom {
+ border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+ background-image: url('images/spriteCheckbox.gif');
+ background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Menu_rtl.css b/js/dojo/dijit/themes/nihilo/Menu_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Menu_rtl.css
@@ -0,0 +1,8 @@
+
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
+ padding-left: 3px;
+ padding-right: 0px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/nihilo/ProgressBar.css b/js/dojo/dijit/themes/nihilo/ProgressBar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/ProgressBar.css
@@ -0,0 +1,24 @@
+
+.nihilo .dijitProgressBar {
+ margin:2px 0px 2px 0px;
+}
+.nihilo .dijitProgressBarEmpty{
+
+ background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+ border-color: #f8d582 #f8d582 #f8d582 #f8d582;
+}
+.nihilo .dijitProgressBarTile{
+
+ background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.nihilo .dijitProgressBarFull {
+ border-right:1px solid #f8d582;
+}
+.nihilo .dijitProgressBarLabel {
+
+ color:#293a4b;
+}
+.nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
+
+ background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
diff --git a/js/dojo/dijit/themes/nihilo/TimePicker.css b/js/dojo/dijit/themes/nihilo/TimePicker.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/TimePicker.css
@@ -0,0 +1,50 @@
+
+.nihilo .dijitTimePickerTick,
+.nihilo .dijitTimePickerMarker {
+ border-color: #eeeeee;
+}
+.nihilo .dijitTimePickerTick {
+ color:white;
+}
+.nihilo .dijitTimePickerMarker {
+ background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+ color:#293a4b;
+ font-weight: bold;
+}
+.nihilo .dijitTimePickerItemSelected {
+ color: black;
+ background: #ffe284 none;
+}
+.nihilo .dijitTimePickerItemHover {
+ background: #d6d6dd none;
+ color:black;
+}
+.nihilo .dijitTimePickerItemHover,
+.nihilo .dijitTimePickerItemSelected {
+ position: relative;
+ z-index: 10;
+}
+.nihilo .dijitTimePickerTick .dijitTimePickerItemInner {
+ font-size:0.4em;
+}
+.nihilo .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.nihilo .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+ font-size:1em;
+}
+.nihilo .dijitTimePickerMarkerHover {
+ border-top: 1px solid #eeeeee;
+}
+.nihilo .dijitTimePickerTickHover,
+.nihilo .dijitTimePickerTickSelected {
+ margin-top:-0.3em;
+ margin-bottom:-0.3em;
+ border-bottom: none;
+}
+.dijit_a11y .dijitTimePickerTickHover {
+ background-color: #CCC !important;
+ border-top: 1px solid #333 !important;
+ border-bottom: 1px solid #333 !important;
+}
+.dijit_a11y .dijitTimePickerMarkerHover {
+ border-bottom-width: 2px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/TitlePane.css b/js/dojo/dijit/themes/nihilo/TitlePane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/TitlePane.css
@@ -0,0 +1,69 @@
+
+.nihilo .dijitTitlePaneTitle {
+ background: #cccccc;
+ background:#fff url("images/titleBar.png") repeat-x top left;
+ border:1px solid #bfbfbf;
+ padding:3px 4px;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #6d6d6d;
+}
+.nihilo .dijitTitlePaneTitle-hover {
+ background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
+ cursor: pointer;
+}
+.nihilo .dijitTitlePaneTitle * {
+ vertical-align: middle;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ width:15px;
+ height:15px;
+}
+.nihilo .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.nihilo .dijitOpen .dijitTitlePaneTextNode,
+.nihilo .dijitFixedOpen .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.nihilo .dijitTitlePane .dijitArrowNodeInner {
+ display:none;
+}
+.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
+.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
+ display:inline !important;
+ font-family:monospace;
+ padding-bottom:.2em;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+ display:none;
+}
+.nihilo .dijitTitlePaneContentOuter {
+ background: #ffffff;
+ border:1px solid #bfbfbf;
+ border-top: 0px solid #3d3d3d;
+}
+.nihilo .dijitTitlePaneContentInner {
+ padding:10px;
+}
+.dj_ie6 .nihilo .dijitTitlePaneContentOuter,
+.dj_ie6 .nihilo .dijitTitlePane .dijitTitlePaneTitle {
+ zoom: 1;
+}
+.nihilo .dijitTitlePaneTextNode {
+ margin-left: 4px;
+ margin-right: 4px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/TitlePane_rtl.css b/js/dojo/dijit/themes/nihilo/TitlePane_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/TitlePane_rtl.css
@@ -0,0 +1,6 @@
+.dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
+.dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Toolbar.css b/js/dojo/dijit/themes/nihilo/Toolbar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Toolbar.css
@@ -0,0 +1,56 @@
+.nihilo .dijitToolbar {
+ border-bottom: 1px solid #ccc;
+ background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .nihilo .dijitToolbar {
+ height: 10px;
+}
+.nihilo .dijitToolbar .dijitButtonNode,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ font-size: 12px;
+}
+.nihilo .dijitToolbar .dijitButton,
+.nihilo .dijitToolbar .dijitToggleButton,
+.nihilo .dijitToolbar .dijitDropDownButton,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ padding: 1px;
+}
+.nihilo .dijitToolbar .dijitButtonChecked,
+.nihilo .dijitToolbar .dijitToggleButtonChecked {
+ background-color:#ffeeb9;
+ border:1px solid #f7c95c;
+ padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonCheckedHover,
+.nihilo .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+ background-color:#ffe284;
+ border:1px solid #f7c95c;
+ padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonHover,
+.nihilo .dijitToolbar .dijitToggleButtonHover,
+.nihilo .dijitToolbar .dijitDropDownButtonHover,
+.nihilo .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
+
+ border: 1px solid #f7c95c;
+ padding: 0;
+ background-color:#ffe284;
+}
+.nihilo .dijitToolbar label {
+ padding: 3px 3px 0 6px;
+}
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+
+ border: 1px #555 dotted !important;
+ padding: 0px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Tree.css b/js/dojo/dijit/themes/nihilo/Tree.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Tree.css
@@ -0,0 +1,87 @@
+
+.nihilo .dijitTreeNode {
+ background : url('images/treeI.gif') no-repeat;
+ background-position : top left;
+ background-repeat : repeat-y;
+ zoom: 1;
+}
+.nihilo .dijitTreeIsLast {
+ background: url('images/treeI_half.gif') no-repeat;
+}
+.nihilo .dijitTreeNodeHover {
+
+ background-image: url(images/treeHover.png);
+ background-repeat: repeat;
+ background-color: none !important;
+}
+.nihilo .dijitTreeLabel {
+ font-weight: normal;
+ margin-left: 3px;
+}
+.nihilo .dijitTreeIsRoot {
+ margin-left: 0;
+ background-image: none;
+}
+.nihilo .dijitTreeExpando {
+ width: 18px;
+ height: 18px;
+}
+.nihilo .dijitTreeRow {
+
+ padding-bottom: 2px;
+}
+.nihilo .dijitTreeContent {
+ min-height: 18px;
+ min-width: 18px;
+ padding-left:1px;
+}
+.nihilo .dijitTreeExpand {
+ width: 18px;
+ height: 18px;
+ background-repeat : no-repeat;
+}
+.nihilo .dijitTreeNodeEmphasized {
+ background-color: Highlight;
+ color: HighlightText;
+}
+.nihilo .dijitTreeLabelFocused {
+ outline: 1px invert dotted;
+}
+.nihilo .dijitTreeExpandoOpened {
+ background: url('images/spriteTree.gif') no-repeat -18px top;
+}
+.nihilo .dijitTreeExpandoClosed {
+ background-image: url('images/spriteTree.gif');
+}
+.nihilo .dijitTreeExpandoLeaf {
+ background: url('images/spriteTree.gif') no-repeat -36px top;
+}
+.nihilo .dijitTreeExpandoLoading {
+ background-image: url('images/treeExpand_loading.gif');
+}
+.nihilo .dijitTreeIcon {
+ width: 16px;
+ height: 16px;
+}
+.nihilo .dijitFolderOpened {
+ background: url('images/spriteDivIcons.gif') no-repeat -16px top;
+}
+.nihilo .dijitFolderClosed {
+ background: url('images/spriteDivIcons.gif') no-repeat top left;
+}
+.nihilo .dijitLeaf {
+ background: url('images/spriteDivIcons.gif') no-repeat -32px top;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore,
+.nihilo .dijitTreeNode .dojoDndItemAfter {
+ border-bottom: none;
+ border-top: none;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+
+ border-top: 2px solid #369;
+}
+.nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+
+ border-bottom: 2px solid #369;
+}
diff --git a/js/dojo/dijit/themes/nihilo/Tree_rtl.css b/js/dojo/dijit/themes/nihilo/Tree_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/Tree_rtl.css
@@ -0,0 +1,22 @@
+
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeNode {
+ background-image : none;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsRoot {
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsLast {
+ background-image: url('images/treeI_half_rtl.gif');
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeContent {
+ padding-left: auto;
+ padding-right: 1px;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoOpened {
+ background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoClosed {
+ background-image: url('images/spriteTree_rtl.gif');
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoLeaf {
+ background: none;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Button.css b/js/dojo/dijit/themes/nihilo/form/Button.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Button.css
@@ -0,0 +1,93 @@
+
+.nihilo .dijitButtonNode {
+
+
+ border:1px solid #dedede;
+ border-bottom:1px solid #dedede;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #fff url("../images/buttonEnabled.png") repeat-x top left;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+ border-right: none;
+}
+.nihilo .dijitButtonNode button {
+ border: 0px;
+ background-color: transparent;
+}
+.nihilo .dijitButtonText {
+ text-align: center;
+ padding: 0 0.3em;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.nihilo .dijitArrowButton {
+ color: #111;
+}
+.nihilo .dijitComboButton .dijitDownArrowButton {
+ padding-right:4px;
+}
+.nihilo .dijitComboBoxReadOnly,
+.nihilo .dijitSpinnerReadOnly,
+.nihilo .dijitSpinnerReadOnly .dijitButtonNode,
+.nihilo .dijitButtonDisabled .dijitButtonNode,
+.nihilo .dijitToggleButtonDisabled .dijitButtonNode,
+.nihilo .dijitDropDownButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboBoxDisabled,
+.nihilo .dijitSpinnerDisabled,
+.nihilo .dijitSpinnerDisabled .dijitButtonNode {
+
+ border-color: #dedede;
+ background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
+ opacity: 0.60;
+}
+.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText {
+
+ color: #aaa;
+}
+.nihilo .dijitButtonHover .dijitButtonNode,
+.nihilo .dijitButtonNodeHover,
+.nihilo .dijitToggleButtonHover .dijitButtonNode,
+.nihilo .dijitDropDownButtonHover .dijitButtonNode,
+.nihilo .dijitComboButtonHover .dijitButtonContents,
+.nihilo .dijitComboButtonDownArrowHover .dijitDownArrowButton,
+.nihilo .dijitComboBoxHover .dijitDownArrowButton,
+.nihilo .dijitSpinnerUpArrowHover .dijitUpArrowButton,
+.nihilo .dijitSpinnerDownArrowHover .dijitDownArrowButton {
+
+
+ color:#243C5F;
+ background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dijitSpinnerUpArrowActive .dijitUpArrowButton,
+.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton,
+.nihilo .dijitButtonActive .dijitButtonNode,
+.nihilo .dijitToggleButtonActive .dijitButtonNode,
+.nihilo .dijitDropDownButtonActive .dijitButtonNode,
+.nihilo .dijitComboButtonActive .dijitButtonContents,
+.nihilo .dijitDownArrowActive .dijitDownArrowButton,
+.nihilo .dijitComboBoxActive .dijitDownArrowButton,
+.nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+
+ border-color:#dedede;
+ background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
+}
+.nihilo .dijitArrowButtonInner {
+ background-image: url("../images/spriteArrows.png");
+ background-repeat: no-repeat;
+ background-position: 0px top;
+ width: 11px;
+}
+.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
+ background-position: -11px top;
+}
+.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
+ background-position: -22px top;
+}
+.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
+ background-position: -33px top;
+}
+.dj_ie6 .nihilo .dijitArrowButtonInner {
+ background-image: url("../images/spriteArrows.gif");
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Button_rtl.css b/js/dojo/dijit/themes/nihilo/form/Button_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Button_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .nihilo .dijitSelect .dijitButtonContents {
+ border-left: none;
+ border-right-width: 1px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Checkbox.css b/js/dojo/dijit/themes/nihilo/form/Checkbox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Checkbox.css
@@ -0,0 +1,40 @@
+
+.nihilo .dijitToggleButton .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+ background-image: url('../images/spriteCheckbox.gif');
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitCheckBoxIcon {
+ background-image: url('../images/spriteCheckbox.gif');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+
+ background-position: -16px;
+}
+.nihilo .dijitCheckBoxChecked,
+.nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
+
+ background-position: 0px;
+}
+.nihilo .dijitCheckBoxDisabled {
+
+ background-position: -48px;
+}
+.nihilo .dijitCheckBoxCheckedDisabled {
+
+ background-position: -32px;
+}
+.nihilo .dijitCheckBoxHover {
+
+ background-position: -80px;
+}
+.nihilo .dijitCheckBoxCheckedHover {
+
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/ComboBox.css b/js/dojo/dijit/themes/nihilo/form/ComboBox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/ComboBox.css
@@ -0,0 +1,10 @@
+.nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("../images/spriteArrows.png") no-repeat left center;
+ width: 11px;
+}
+.dj_ie6 .nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("../images/spriteArrows.gif") no-repeat left center;
+}
+.nihilo .dijitComboBoxHover .dijitArrowButtonInner {
+
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Common.css b/js/dojo/dijit/themes/nihilo/form/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Common.css
@@ -0,0 +1,76 @@
+
+.nihilo .dijitInputField INPUT,
+.nihilo .dijitTextBox,
+.nihilo .dijitComboBox,
+.nihilo .dijitSpinner {
+ margin: 0em 0.1em;
+}
+.nihilo .dijitTextBox,
+.nihilo .dijitComboBox,
+.nihilo .dijitSpinner,
+.nihilo .dijitInlineEditor input,
+.nihilo .dijitTextArea {
+
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ border:1px solid #d3d3d3;
+ line-height: normal;
+}
+.dj_ie6 .nihilo .dijitTextBox,
+.dj_ie6 .nihilo .dijitComboBox,
+.dj_ie6 .nihilo .dijitSpinner,
+.dj_ie6 .nihilo .dijitInlineEditor input,
+.dj_ie6 .nihilo .dijitTextArea {
+ background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+ padding: 0 0.2em;
+}
+.nihilo .dijitComboBox .dijitButtonNode,
+.nihilo .dijitSpinner .dijitButtonNode {
+
+ border-color: #d3d3d3;
+ border-left: 1px solid #d3d3d3;
+}
+.nihilo .dijitTextBoxFocused,
+.nihilo .dijitComboBoxFocused,
+.nihilo .dijitSpinnerFocused, .nihilo .dijitSpinnerUpArrowActive, .nihilo .dijitSpinnerDownArrowActive,
+.nihilo .dijitTextAreaFocused {
+
+ border-color:#b3b3b3;
+}
+.nihilo .dijitComboBoxFocused .dijitButtonNode,
+.nihilo .dijitSpinnerFocused .dijitButtonNode,
+.nihilo .dijitSpinnerUpArrowActive .dijitButtonNode,
+.nihilo .dijitSpinnerDownArrowActive .dijitButtonNode {
+ border-left-color:#d3d3d3;
+}
+.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
+.nihilo .dijitSpinnerUpArrowActive .dijitDownArrowButton,
+.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton {
+ border-top-color:#d3d3d3;
+}
+.nihilo .dijitError {
+ border-color:#b3b3b3;
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dijitError INPUT {
+
+ background-color:#f9f7ba !important;
+}
+.nihilo .dijitErrorFocused {
+ background-color:#ff6;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dijitErrorFocused INPUT {
+
+ background-color:#ff6 !important;
+}
+.nihilo .dijitValidationIcon {
+
+ width: 16px;
+ background: transparent url('../images/warning.png') no-repeat center center;
+}
+.nihilo .dijitComboBoxHighlightMatch {
+ background-color:#d3d3d3;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Common_rtl.css b/js/dojo/dijit/themes/nihilo/form/Common_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Common_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode,
+.dijitRtl .nihilo .dijitSpinner .dijitButtonNode {
+
+ border-color: #8ba0bd;
+ border-left: 0px solid #8ba0bd;
+ border-right: 1px solid #8ba0bd;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/RadioButton.css b/js/dojo/dijit/themes/nihilo/form/RadioButton.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/RadioButton.css
@@ -0,0 +1,40 @@
+
+.nihilo .dijitToggleButton .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+ background-image: url('../images/spriteRadio.gif');
+}
+.nihilo .dijitRadio,
+.nihilo .dijitRadioIcon {
+ background-image: url('../images/spriteRadio.gif');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+
+ background-position: -16px;
+}
+.nihilo .dijitRadioChecked,
+.nihilo .dijitToggleButtonChecked .dijitRadioIcon {
+
+ background-position: 0px;
+}
+.nihilo .dijitRadioDisabled {
+
+ background-position: -48px;
+}
+.nihilo .dijitRadioCheckedDisabled {
+
+ background-position: -32px;
+}
+.nihilo .dijitRadioHover {
+
+ background-position: -80px;
+}
+.nihilo .dijitRadioCheckedHover {
+
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Select.css b/js/dojo/dijit/themes/nihilo/form/Select.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Select.css
@@ -0,0 +1,52 @@
+
+.nihilo .dijitSelectDisabled * {
+ cursor: not-allowed !important;
+}
+.nihilo .dijitSelectReadOnly * {
+ cursor: default !important;
+}
+.nihilo .dijitSelect .dijitButtonNode {
+ padding: 0px;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+ padding-top: 1px;
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.nihilo .dijitSelectHover .dijitButtonContents,
+.nihilo .dijitSelectActive .dijitButtonContents,
+.nihilo .dijitSelectOpened .dijitButtonContents,
+.nihilo .dijitSelectDisabled .dijitButtonContents,
+.nihilo .dijitSelectReadOnly .dijitButtonContents{
+ background: transparent none;
+}
+.dj_ie .nihilo .dijitSelect .dijitButtonContents {
+ padding-top: 0px;
+}
+.nihilo .dijitSelectDisabled .dijitButtonNode {
+ border-color: #dedede;
+ background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .nihilo .dijitSelectDisabled .dijitButtonNode * {
+ filter: gray() alpha(opacity=50);
+}
+.nihilo .dijitSelectHover .dijitButtonNode {
+ color:#000;
+ background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dijitSelectActive .dijitButtonNode,
+.nihilo .dijitSelectOpened .dijitButtonNode {
+ border-color:#dedede;
+ background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
+}
+.nihilo .dijitSelectMenu td {
+ padding: 0em;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemIcon {
+ margin: 0.1em 0.2em;
+ display: none;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemLabel,
+.nihilo .dijitSelectMenu .dijitMenuArrowCell {
+ padding: 0.1em 0.2em;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Slider.css b/js/dojo/dijit/themes/nihilo/form/Slider.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Slider.css
@@ -0,0 +1,127 @@
+
+.nihilo .dijitSliderProgressBarH {
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.nihilo .dijitSliderProgressBarV {
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarH,
+.nihilo .dijitSliderFocused .dijitSliderLeftBumper {
+ background-image:url("../images/sliderFullFocus.png");
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarV,
+.nihilo .dijitSliderFocused .dijitSliderBottomBumper {
+ background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.nihilo .dijitSliderRemainingBarV {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderRemainingBarH {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.nihilo .dijitSliderBar {
+ border-style: solid;
+ outline:1px;
+
+}
+.nihilo .dijitSliderFocused .dijitSliderBar {
+ border-color:#727272;
+}
+.dijit_a11y .dijitSliderProgressBar {
+ background-color:#333 !important;
+}
+.nihilo .dijitSliderImageHandleH {
+ border:0px;
+ width:15px;
+ height:18px;
+ background:url("../images/preciseSliderThumb.png") no-repeat center top;
+ #background:url("../images/preciseSliderThumb.gif") no-repeat center top;
+ cursor:pointer;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleH {
+ background-image:url("../images/preciseSliderThumbFocus.png");
+ #background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.nihilo .dijitSliderLeftBumper {
+ border-left-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.nihilo .dijitSliderRightBumper {
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+ border-color: #b4b4b4;
+ border-right-width: 1px;
+}
+.nihilo .dijitSliderImageHandleV {
+ border:0px;
+ width:20px;
+ height:15px;
+ background:url("../images/sliderThumb.png") no-repeat center center;
+ #background:url("../images/sliderThumb.gif") no-repeat center center;
+ cursor:pointer;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleV {
+ background-image:url("../images/sliderThumbFocus.png");
+ #background-image:url("../images/sliderThumbFocus.gif");
+}
+.nihilo .dijitSliderBottomBumper {
+ border-bottom-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderTopBumper {
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+ border-color: #b4b4b4;
+ border-top-width: 1px;
+}
+.nihilo .dijitSliderIncrementIconH,
+.nihilo .dijitSliderIncrementIconV {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
+ width:15px; height:15px;
+ cursor:pointer;
+}
+.nihilo .dijitSliderIncrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.nihilo .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDecrementIconV {
+ width:15px;
+ height:15px;
+ cursor:pointer;
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.nihilo .dijitSliderDecrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
+}
+.nihilo .dijitSliderButtonInner {
+ visibility:hidden;
+}
+.nihilo .dijitSliderReadOnly *,
+.nihilo .dijitSliderDisabled * {
+ border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+ color: #bdbdbd;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
+ background-position: 0px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
+ background-position: -30px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconV {
+ background-position: -15px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
+ background-position: -45px -15px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/Slider_rtl.css b/js/dojo/dijit/themes/nihilo/form/Slider_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/Slider_rtl.css
@@ -0,0 +1,29 @@
+
+.dijitRtl .nihilo .dijitSliderProgressBarH,
+.dijitRtl .nihilo .dijitSliderRemainingBarH,
+.dijitRtl .nihilo .dijitSliderLeftBumper,
+.dijitRtl .nihilo .dijitSliderRightBumper,
+.dijitRtl .nihilo .dijitSliderTopBumper {
+ background-position: top right;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarV,
+.dijitRtl .nihilo .dijitSliderRemainingBarV,
+.dijitRtl .nihilo .dijitSliderBottomBumper {
+ background-position: bottom right;
+}
+.dijitRtl .nihilo .dijitSliderLeftBumper {
+ border-left-width: 0px;
+ border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitSliderRightBumper {
+ border-left-width: 1px;
+ border-right-width: 0px;
+}
+.dijitRtl .nihilo .dijitSliderIncrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
+}
+.dijitRtl .nihilo .dijitSliderDecrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
diff --git a/js/dojo/dijit/themes/nihilo/form/TimeTextBox.css b/js/dojo/dijit/themes/nihilo/form/TimeTextBox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/form/TimeTextBox.css
@@ -0,0 +1,1 @@
+@CHARSET "UTF-8";
diff --git a/js/dojo/dijit/themes/nihilo/images/accordionItemActive.png b/js/dojo/dijit/themes/nihilo/images/accordionItemActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..58f3cf9654e626e8745a658c6b090550bd3ac5df
GIT binary patch
literal 148
zc%17D@N?(olHy`uVBq!ia0vp^Oh9bF0V21g*<1xuk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X%sgEjLn>}1{o-fy;Ynav8quJ{AtxxZicN!G|Lgnv_5w#w
soZwhAV}?Ui<cyg!JvWsJ1TiqOF=)HXWo$ee2(q8S)78&qol`;+06^+1LI3~&
diff --git a/js/dojo/dijit/themes/nihilo/images/buttonActive.png b/js/dojo/dijit/themes/nihilo/images/buttonActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e2f2fda3041519bb62e7e84bedcd603b81c4a905
GIT binary patch
literal 139
zc%17D@N?(olHy`uVBq!ia0vp^%s`yN!2~4F?3M*dNS3%plmzFem6RtIr7}3C<R_&n
zc;+Uirv{}arc@T5Otk?j()Dz445_%4^oyU_hsU5HVI#xQi$^`u6OCC{-`HRO-(&L9
lzTa+<i`P6n$HZa4ptenM)1MP(9|AQpc)I$ztaD0e0svdjE)oC$
diff --git a/js/dojo/dijit/themes/nihilo/images/buttonDisabled.png b/js/dojo/dijit/themes/nihilo/images/buttonDisabled.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b76af42f58de011221c5b5b2ece510e3bca61edc
GIT binary patch
literal 139
zc%17D@N?(olHy`uVBq!ia0vp^%s`yN!2~4F?3M*dNS3%plmzFem6RtIr7}3C<R_&n
zc;+Uirv{}arc@T5Otk?j()Dz445_%4^oyNY$KebEn-7n{flvSc*K2f7oG93@GpBWe
kY-;Z&x5(yJR)GWtu13+VnjYV`0W~ssy85}Sb4q9e0Qf2@Bme*a
diff --git a/js/dojo/dijit/themes/nihilo/images/buttonEnabled.png b/js/dojo/dijit/themes/nihilo/images/buttonEnabled.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d4fd306acf4972f36623f694af09b9d406241c42
GIT binary patch
literal 135
zc%17D@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?<NeQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@CH?yTUS62v|NsB;J(7}=GbJP>4w&#X|9BxW
h{fEXf4rUe!hF>l`$1GOg{R-5?;OXk;vd$@?2>`pnDxm-X
diff --git a/js/dojo/dijit/themes/nihilo/images/buttonHover.png b/js/dojo/dijit/themes/nihilo/images/buttonHover.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1af7e835a6f29076453478e7a2321f782f331ae2
GIT binary patch
literal 134
zc%17D@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?<NeQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiZnc3978H@CH?yU-(HxRnOV5QEv-4j&CSh#ZR5nF7Y+43
f2KpGWaTqWh4ieg{^7`@xpdJQKS3j3^P6<r_I!`D@
diff --git a/js/dojo/dijit/themes/nihilo/images/dndCopy.png b/js/dojo/dijit/themes/nihilo/images/dndCopy.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..baecd7cf2dc1dae959492ab965a04bc7059dcbf5
GIT binary patch
literal 777
zc$@(V1NQuhP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0-i}kK~y-)jg#w3
zlVKRf?@f2`0B&x&<{{_iautdrx20@zks(6b)HO9+1eHRwM9DO*Tyx?f&Dp_(LS-fj
zIcL#_AhYsIAN&v%Bm4*6f8*-eoD&tQ3+_+v`@8Pba}ynuluV?efYN@1)4NMha-$fT
zbr~F~DG>ek7YV3{LJi|}c)C4_o*$jK^wo*_^;$H1szvj<1En54sDwh%e-FW>6rTS6
z1n#Xi*g|HM2aV8qwa^UYqj0VOs+l~fULJ*c{xtX|et5qL%N&85KG&o2tqs;-IjR;a
zu`A<@0XfgJkm=7r>Z25B{c4atS_zYcO!Z@S++>;0G5Ac#0>iQ%-J4x;gSHRXA$u%^
zbV7opVKI0^1W9WeNEVrih5}RD6FB>>0=6|P%H9}Iv~U79H{5Xp*ZUTvj3q-nA_CvX
z2YCo0p9nl18*Fx?g1hsx6PC3y6b&DTWwZ>Ze0tno*{h&^(G7KPKD2!rh}s39hXnF5
zlk*82m39@gX<tOu>%E@;CFP(3<Ru6k%*fDv684WZXkEYh-v-wCif9$WCT5U-P0l$s
zE<ii0!QIUs__ro8`fUWk-@!Pr^lJ(I8~yNn@t|e31$2*rgM?%!aU?WSpqZ_&@KphF
zr?VlSN{4t<1jmXaZcx2g4eFyE@ILL#fVGffW<yNOBa_)*jAOF}$a%(gJ(+=|5iy)A
z&bWbn*$#RT17onLi-juow51IcvMd@Q^QS{Ho`ytU0xIThdp*xt_ZzS^${TkdQbarw
zWV!fZ-3v8@Y}Y(5+jT#|wd#sSwDcIvi@=vDO#FlQz)X}b3aLD45Df`;fPq+eV?Fm0
zlvh}0-r-}4D_KV-MGXaVI}$i~2SLU{af`UjS_-7<4xjTMoj1y)+}<Z{00000NkvXX
Hu0mjfCJ0*J
diff --git a/js/dojo/dijit/themes/nihilo/images/dndMove.png b/js/dojo/dijit/themes/nihilo/images/dndMove.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..07f878cfb2c9c165a354b613b7b2fd352328e4ea
GIT binary patch
literal 726
zc$@*&0xA88P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0&7V`K~y-)jgwzU
zlTjGPpU-WIVri)r(jSXy<Wy*&ZlYGQp@L=FBvXsZU=b84ji8XOf{=ntO%p+!(naFG
zys*M3D~L?-UlP<+MO#7$dex2J(>dQZo#KV>;o*J1bI$Yo-tXfakVHU+L`Yd8?C8p^
zGkPvG9;eiix<pT;9i3t=BY3~mY9YK)XV8DA_ZlY`KXY)gkInNB+3@E++yAz5V7`a0
zXP4A%<>(cAbwNHrF~G2+Qki@GbC~tN?y_RW!E-a^teAGN?)y!;e|NBI_B5T}s@d?R
zp7E8s*#HF5PGCz3`b)-&ST=r=#bbqZ&0VJqRg4qjxn!b9Q=oQzy2|KM^lAV@LP%z{
zyNm@NY|ML?%PW&k20{Xkj%I6XQpZMfw4DFZMthS*)$c<F!YqpW!H;`Pe|4Cp?~556
z5@3Fj%B+!eP3D(r{yKvNZ}J$Pg-#fqao+Q@RV)~>aidVzjb(M2sn3&{Hk`uU)muF<
z-#*Bkw^nX8BqX6{FZcH)F!pjdVR9W{%CL#kOB0(0#B^<E?9&)VUepu2&PI6?hm2He
zl?@?Ni{qSHT9rH_hBiGzI}8kUzyrmE?v#N;L=zZN8?pwXswz<fDmBU)p#?-Ms82%|
zl%25dxfSo5Y+ehI?cx!9Yf_E=+$NwmM2>?6NQMG41|=~VvhZ&~YgaS1`qdbeGtn;q
z{)j}FnD`pe5U$ZBNNEx6HVZvgXdklsOl^L1Hs<8rS-DIr5YdU=snd*T_ZtFw0_}ew
zUA$T6Gq1mmzR!t+6-nquKD;OuhEqa?qE3PvF``eKZ)?E!A8;2xtQKO7{{R3007*qo
IM6N<$g0T}z8~^|S
diff --git a/js/dojo/dijit/themes/nihilo/images/dndNoCopy.png b/js/dojo/dijit/themes/nihilo/images/dndNoCopy.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9bf9c33962359c6a769f403a584cf854a098b294
GIT binary patch
literal 699
zc$@*d0!00ZP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0#HdrK~y-)jZ@!C
zQ(+i>&)JVQH`h!G+uVv7WYM}&v!Eb@F1(6`7b4M}SAhl559m)QiXv|+h@>AP<ZR8E
zGhI{`iXzTUVr@bQr^r9z>G@7)r!=Wvc=!(A`JU%{-{*Zlkqyxy(%vI7a8uWfCtfce
z6Sw$%hI{It{3TrHM3R%CFxC=XFj@|w64{MXLkORVQezb9ni}-+j5_-V`JzbC=<3Gm
z{sUMF1d;dGBI9-=?Q~+s<;FDE55#P30GD}oort<wkt^W{3c)($0|Cs{*P|NKJ|EsX
z9LVW9UW*{-a^d{XOhk^eu8B~HH^)idhNZ1REHKrT);3$<Q}aGdX_|>~3cMm7@%yCm
z<SfluJ9QdG-dqR<vFP(-Zi@%y_(5A>ITphNNm*iyNLy<!xzevYjIS+iD6qD160=;#
zn89Let1U1ek7Jnik1+M8B#v4F*F_8&^48GpUF&N8S7hi#h5~m8dG7JCRShWZZT@e8
z*}9;aMZXews5_1F&M;f$!ph+zSWP7GrLz;?uU@eU-!Al_eC#MHCpwUCiXla!%HXal
z;S!CggroS#UcY0j-q2lT)?%dbmj^qxV}yGt3!|36HDzKqTaohy%nVeor&ymU5RKRZ
z3vBaCi&!NO5k1w>zAajE-XGwgXqaRM%3)P!HD=h}-v!cU{d&@#L=VUEp6JE*EF){(
z@Pf$iX)=-8K)x?pv3BEoutbt+&1p_r^>Eq}R2U{6@Qi1Z$7BbmtNn)P1B2o)21SFy
hGtmvT*SpDc{sGkB$E)6PSyuo6002ovPDHLkV1iVZMK1sV
diff --git a/js/dojo/dijit/themes/nihilo/images/dndNoMove.png b/js/dojo/dijit/themes/nihilo/images/dndNoMove.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cb8bd8bdd521510635377ca88c413267601ae9ec
GIT binary patch
literal 677
zc$@*H0$TlvP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0y;@VK~y-)jg#L?
z6j2n%zccIpaBJ7CHT+R&h?LYr5p5|1Jr!2c!$J@RK@rtM4?$5`k4XeQWI-W8L6h`D
z64Sq+w$_LW%37+0-F_&u3PMQ+D+}}O+-b(9%?A&BxM$9}=X=jw&IL)h8~_xpUBI0o
zf7DFXHd8Sas4^vXTXGw{`xSp3z<(Xuz{t8SEE@M%Jad-Q$=&?9E6HE`_H+6~C*QOr
ztZUHvWv|au2Q)}=5A@8Bu1lQSwu6ObjVv@a(Uf(vbu*_99p-q$3Qn$S;l$1)d*FNL
ziok$|%fP^BO&!PTmvVGTEhp9|Xq#opcMZo>PH_EiYd5f4I<W=z0-IhgU&$}=IP<X>
z&DCo-Ya)<~#_XITSM|sLDx@NdtvzxlI4w<l-`>G&ILyy=_58;~;A5zg*#!}sPnC|p
zFv8rTI6LKHVd(zCcvCa8qB^IEh!?9=VkQ_8;Sg_WJ`;n1FmsV8=WQbLwxWU~f&rcA
z_XlmYnY(@S7I>v=e68!eDN}$OnqJ5R{OpsDxkQS+_c`N1&B(CqeIZ;0OdJJz-v@(C
zNuXTBlG7eYtej^;S~w;Xiw>aek<Vub{}T~`Cr*KzSF7saq0la4k0XF~92iV{HYt%(
zK5w_1a!yM-Id?rJ!`BYS5<pM_A09jE-V>h+nd-Rh4?D4QKt{ct*~jFHs7?%L({rc5
zi~9eQa&om(T>cvE-;uW34$8$|01Dlbz9L){Ut-2q8T<22*KXZ!PKrDg!)Y^Q00000
LNkvXXu0mjfZgDUm
diff --git a/js/dojo/dijit/themes/nihilo/images/editor.gif b/js/dojo/dijit/themes/nihilo/images/editor.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..750c6b95d061a534c876c022624d2e01cd14a7ba
GIT binary patch
literal 5409
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
diff --git a/js/dojo/dijit/themes/nihilo/images/editorDisabled.gif b/js/dojo/dijit/themes/nihilo/images/editorDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e40460d7a8a76619dea2ce71df1b9f388b1c8551
GIT binary patch
literal 4979
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
diff --git a/js/dojo/dijit/themes/nihilo/images/editorDisabled_rtl.gif b/js/dojo/dijit/themes/nihilo/images/editorDisabled_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a0f6c1074e109611b782c8fc82d12fff98da50a3
GIT binary patch
literal 4994
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
F{|CzGzdir}
diff --git a/js/dojo/dijit/themes/nihilo/images/editor_rtl.gif b/js/dojo/dijit/themes/nihilo/images/editor_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a9740c213601c736ff0fe7fd070914e7aa940dcd
GIT binary patch
literal 5424
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
Jf<S;1{{tM<k7fV>
diff --git a/js/dojo/dijit/themes/nihilo/images/no.gif b/js/dojo/dijit/themes/nihilo/images/no.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9021a14e210b1107b48bcd16a637aed335ddb3d2
GIT binary patch
literal 179
zc${<hbhEHb6krfw*v!drCnDz6+y!q}uf42i^6l!iYc`HIz5M@t{CGh@?f?J(3>ZN1
zCkrD311EzHhyyZ%fhED<q%hAeHJOvbn&B0qF77-YiaG5Je5pkZ$BxZ?EVg7@i}V5q
zrUro-0j7+HChYi9x5itz(D~aEzy7Jk6QWoy^iA5SowL(XGUMjtNG`KET~D13_+$ra
RU0WDoASK(>+$6|g4FG`)Ka>Cf
diff --git a/js/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif b/js/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..53b33e54abdb947bdc92cd8b30359a4153017738
GIT binary patch
literal 258
zc$@(O0sa0*Nk%w1VGRHf0K^^u_4W1h^Yixh_QJx#$jHdq+1c&w?fLonudlD>=H{-h
zuB4=-!^6YJ$H&yv)W*if^z`)V>gwFw+|10(_xJb9%ggxq`276*`uh6&`}_U<{h^_u
z{{H^||NsC0{{R30A^8LW0015UEC2ui01W^T000Glphs+ESrVSNb)A;I8oP07msvt?
zW!-kE91I{p1YkIu3=mUkHjhc*#R7l;EElA5romV!7K}y<)LbwJ%w-&1am<-Dr?>6A
zHTW@Igvi{-83+tN9uor`h=>CX2Q(=U1&IX%78)rj1`7rqnF)lK9t8>#3J!jtmk|sJ
IN0%W0JLM~Y#sB~S
diff --git a/js/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png b/js/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..045bf35ed69d830b3a8f25a3459e180ea1b4c808
GIT binary patch
literal 413
zc$@*90b>4%P)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzKS@MERCwBiQ#)>iKnxu|>9`8wM%39P
zO1DkUkd{p%ZIMu<<_cRN5>Z5HXb^A&1mdG8eBw9SLBs5>V#)H@<L74&M)N$6S(de9
zjBVKe^3*iVjd^r7uIuu{G)-KE=(^4o;`=@d-<fimVHnsrjwc|)FqmmBsaMNso@cHq
z2r&R*k7Af=(@Bz?4B|M>%3py{(Y9^QhRT|z@z%slXF*632?7Kk_995IsUTHMnMDQ)
zkgOM(L;<y>RX5^G2SLCeKuv~^IPQu4jY1;_VKwTyevG1M#Uu(KURBj|+qU=Efn`bp
zZi}MWr)j!kf}iL4I{_ZZ?H49Vc5xiDvMf0ZEPUFKJ>7L+k!KQYU)2Bg;c#GCmN8h`
z$8F#DpLG3;FLCzu2>3$gI}F2HVtDPk?t}av`~V{7Pk;dc;kd1Onp(@G00000NkvXX
Hu0mjfC?~Xr
diff --git a/js/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif b/js/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8c6f92eb45865a0b1c3a08f978ad2e2b61d45057
GIT binary patch
literal 258
zc$@(O0sa0*Nk%w1VGRHf0K^{v_4W1n`T4G{uJ-o!^YioN<>ko8$cc%GrlzKQdwZy;
zsEdn>^z`)I-QC{a-mtK+w6wIs!osYqtl{C|_xJazs;bM&%lP>C{QUg-`uh9(`~Cg>
zc6N6D{{H{}|NsC0A^8LW0018VEC2ui01W^T000Gl;3sfoSqk6BdETbI8_RX7r(HvS
zX&#5EoeY3L1Y|lK4KQPAHjhal<^o^<E*PY8w#i&5m&`^B++Z?+3}zf%b<CP|r?>UI
zH~2AKv<TeC0SgsB9}ox~h=>ReekmUk28jj=7aNWr1qlTnnGS@P1_u@g5gIg?DH93}
IM~)!?I|pcgNB{r;
diff --git a/js/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png b/js/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c235849594ee3cd63ab53519c8985bcac9e5342c
GIT binary patch
literal 434
zc$@*U0ZsmiP)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzR7pfZRCwBilf7z$KoG~*k7zn=6~!kI
zAH=-Kg^(g}2zi48TQ4cDNs~^9SmhOjfLK`BSSbjWiHTp?S#HIT92ppPXLo+{pT&{!
zJP+l0enbfE(Es*i7{)Ds4t9sbfoz6hAWn^CS>j-h<3Qm%eqN^QI@I_52I4pl@%)r}
zHSNZ6B)*2=3_w`V#_{W>(=^>Y#ImeKynvvhX_`b0Dl-g2TBC3J6M`g~Kp}`>y$DgY
zHMBN<t}+KHH1~^2w7|NhMK|<IyRM7cw%sH{4Cio<J9xoIJ%L~}s;Y8*-(M)v0&rf}
z^|P+)_b>y~D>1l_<M<Rs(LxF0BuQR1O?$-Q*Q7LS<rsz`DvE-rzzVS-2q%2~2`XeH
zY}=k7Ns>z3Mww;VjVOvJ2m;hJ&0bNIH+=mAUt$A+$+G-WmgPGhr)xaG52~sH@C`oz
c&G{8z0R7*RI)c_e82|tP07*qoM6N<$g1$Yu-T(jq
diff --git a/js/dojo/dijit/themes/nihilo/images/progressBarAnim.gif b/js/dojo/dijit/themes/nihilo/images/progressBarAnim.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..543d0485c2382dfe9475fe74ddd0db5121e03ecf
GIT binary patch
literal 7064
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
VYA3<ccwvi^F+O3XV5+ms{eSs$@8tjh
diff --git a/js/dojo/dijit/themes/nihilo/images/progressBarEmpty.png b/js/dojo/dijit/themes/nihilo/images/progressBarEmpty.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c2d3695059a1feb19af3167da1c35a973a3ef1b3
GIT binary patch
literal 314
zc$@(`0mc4_P)<h;3K|Lk000e1NJLTq000O8003kN0ssI2G+XBV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy+(|@1RCwC#luHi6FbqVK$oD@e2VjAO
z9`r-v+Jg$}Hd!>)n|d;GtX7`)G8X-<N$Q0I4HbUT)aPs!f_}Fm3iL;lG{r@xLZ(8d
z;-puhCH&XK>%AgaMJf+JSVdZ(Nvf=nRvc0Z>Z}MSVUC6hMf;SHZho-}6geg1BikvW
ziGr>bgCcJ*1~XsYv!)7nm?_F8$W;3zl5gIAN!44BD?}>71TQT?j+UuNzU_X3$rTiN
zQQ?fot(3aH`{!a+16ud$h4)^&qwUn8kC4#mpJ579n8FmU3oii%07a~wLALyFk^lez
M07*qoM6N<$f{zb@#Q*>R
diff --git a/js/dojo/dijit/themes/nihilo/images/progressBarFull.png b/js/dojo/dijit/themes/nihilo/images/progressBarFull.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a8f38657a3b7192e821722a3a6400571fce3a9f9
GIT binary patch
literal 746
zc$@+10u}v<P)<h;3K|Lk000e1NJLTq000XB003kN0ssI2-)vp}0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!j7da6RCwBSRY|rSAq=w}?ti@ObAn`*
zERx2l0uQp`*Q-ZU46-B}n)Ua0dLC6;KlZ9dUnrkF)E{wxnAY}6-M2$v|5>3Ye)&WU
z1jvz5!|%>qow@l*;jOq1wOn<&L*wSs3gP1ekON+^FI9+E$Qh1lrBW=G1HY}K;p!1-
z!fJK3+G1&p%b84HJt4P8E(}A9AE$5gtg(uum|HzDViDb#nqce50YI%_#~ni_)M;^@
z&Y~Y!3N5P}Nh$!H#*gMtwS0OMJ)~NQy+UgUEp}a*&WdEGlDcCM_bZHOr(ANTB?+Uu
zbihb2&x4BBSf*+=)aKZP;+VT5$Mw>W#YkAneQ3NKRnxD-QKvgV^E7>gynN*5X1Rlx
zAGPdOEM%%*o$PXdC{n9Tc|@gjQFil``*hw;?}PF8XHv7yZr^EQ8T9AJ*6nj2qTQEg
z`e`4GU$*HT{kO#bTl>HH3d8(lhzF7*=PYJd%)K3646K!`AXOu{=iXNq1_iYhh)smI
zZxqx?uzS5L3RJJfmgMm|w!?1&>~)xDk%}y@J_`UDu#1h`l2KtqkzmU3O7_<xsQ?&d
z4{kaIKs<_pIr$ycN0EvoCioa>izre8p{@fKKW(YNrn<=RBr633L;LPP7|bd};c7Y3
z+}Y=FNlHe1QTwk<vxAnbznEy(wDS5~ofo6$U8>;Dlpw<lTGA+KhHfp9m*gLYUR~$r
zJ-SJiHN~mKx|OqF<&K}W%9(n>X^+Bi+OXtYOO|9kDVO@V6<cb#*lOy4V6l}UFJI$_
z7OWSJ0zQ}$1ggZ*25d{6vR5HPEqa@(?tH&w%5Vep^HNh^>a^TJTyMI&kkBY6KIa{@
c-1{%U0K%hKu_;sD`2YX_07*qoM6N<$f+|O2Pyhe`
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderEmpty.png b/js/dojo/dijit/themes/nihilo/images/sliderEmpty.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..99fbd727babe6fa54b1c0070a39c287d1d3ad525
GIT binary patch
literal 114
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JibOnJ978H@CH?vT-=0~*K<FeBhXKQ4W4`Yqi@D8!@(iA?
KelF{r5}E-2B_5{$
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png b/js/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d497e3e011dffb766193892d0fa455630758d1d
GIT binary patch
literal 114
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JibOnJ978H@CH?vT-=0}0LFE8DhXDicM2_G33Kh$M@(iA?
KelF{r5}E)aCLe16
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderFull.png b/js/dojo/dijit/themes/nihilo/images/sliderFull.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9adb25441596ab5075f1b0dac72c3dbd3e144aab
GIT binary patch
literal 130
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jic~yZ978H@CH?tc$ImRW!N6#vLnKdr_`wJrr+{nuYMLC}
b3I`Z=-ePU5h`g`|sGh;o)z4*}Q$iB}Pq8KK
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderFullFocus.png b/js/dojo/dijit/themes/nihilo/images/sliderFullFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3d75caeb6f7bcc162842e5f3d6d911bd2ce59836
GIT binary patch
literal 132
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jiqt$^978H@CH?tc$ImRW!NAB#f~V(yK8r(y50AltPqQ5b
d4l!{UFdTo!`g-|6w}(I-44$rjF6*2UngFDnCrkhU
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderFullVertical.png b/js/dojo/dijit/themes/nihilo/images/sliderFullVertical.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..27e9752e8cc0f25456e89a2f4ba6242231f21cde
GIT binary patch
literal 126
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiWEFu978H@CH?tc$FD5RefV}LkB-y+nM-C!1Tb33D;!{W
X(#%@LWfUU-RLkJ$>gTe~DWM4f(4-@Z
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png b/js/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cca618417bb566796bb279e179d20acfeaf1880a
GIT binary patch
literal 126
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiWEFu978H@CH?tc$FHo+e7IYahlgjsB+E>R07ff$g#!$?
XSy?T`4lHH^s%7wW^>bP0l+XkKkmez<
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderThumb.gif b/js/dojo/dijit/themes/nihilo/images/sliderThumb.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..29899a4b630782dfe9e4d276ccc775ad47a6e752
GIT binary patch
literal 238
zc${<hbhEHb6ky<GI3mgL^XJbWKYpAzapLC9n}-e^di(b6x^?T;uU~)o@Zo3Ao-J9j
z<k+!eckbMI_3G7`GiR<`xpMsY@zbYI|N8ao&!0cPfB#;%aN*y-fB*ga_a6)xFo5Du
z7DfgJNd_Gd2V^G$Yj%QKU&>6*&{eCPA`@r0o}Jt(%lFeS=m9eWSHlL44lVIGmqSwm
zbfz~ZO>m4-n<&X!r70m5=6%FT&)JZN<&%=xWc^s@M@QwRKMXwT>~#FMCJPIvh`7E%
ag@L&Mqp-NT_5=<FF%{3K>Afn74AuZC?`t*y
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderThumb.png b/js/dojo/dijit/themes/nihilo/images/sliderThumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b6abbd2fd4e2c26cf2aee75a5bbbe1e5ee70235c
GIT binary patch
literal 413
zc$@*90b>4%P)<h;3K|Lk000e1NJLTq000mG000dL1^@s6pu6rQ0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzKS@MERCwB?lD%q#KoG}Q-E?Q;8(7#1
z!N$TD(1)-J1e26G0(p?jK~hAE)E2&j2|@}j1s_3B{2;`S%r3WKPs}BdfgkRUGynPT
zs^I%R`cH_!4w(PIZcP9Kp6j}FGffkPg&+tNQ4~=ahF)FQEu^<g2Q<cUTxA#risLv)
zRn=Q4eFV;r1m=1ER?M=DP9!h~)GEfvvMgkp=7l6l?~uAYa=@(e)_GWHnucuKMzSpL
zVQY%~c~~KHz&qicDvE-1T_?+HaoKz-SWQ`$C{0sx;m?@8;P2t5MiP0Rqa;bl#csQ<
zd&SE_!!TAw$QOy@7!^hF0+XNmzJG)C2VPF$o$!;RC_+_L?c27!hiwOZZZ?~V2s{Kq
z;Qe-f5cZ+@4wgMIK=aK0#H*%hZs2(aNGCMLL*vLNzXTWnx`mI^8bG1#00000NkvXX
Hu0mjfz;Lqv
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif b/js/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f8d306febc6627deffbdf6cb687dd1fbc499eaf8
GIT binary patch
literal 238
zc${<hbhEHb6ky<GI3msP<HwJmKYy-Ux9-G=6HlK$UAAo5iWMuWtE)RZJG;BP@7=q%
zVZ(-1t5!XH_;AaXEqCwUJ#^^M_wV1=tXXsV^yy!}e*O9L=lAd5fB*h1D=Yi=@85qg
zU_b(jKUo+V7^E3=Kpc>r46NA?)cR6(az?CL<<yyZEA{NvrK)^C!$cmiGkPykQ0y>}
zyw`GQNrc|agNYj)<FqDA^3GCJkh*sIiIbkQsW7vVve{(g*dvdR%1wWGk-5d`_-|%b
gHZCzqeS-=Eb8ZGvNp<ZBJdENho>9|#RTLSl0kn&6P5=M^
diff --git a/js/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png b/js/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..73ee70565e51f8aca9968f0ec66493b8c0de254e
GIT binary patch
literal 421
zc$@*H0b2fvP)<h;3K|Lk000e1NJLTq000mG000dL1^@s6pu6rQ0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzM@d9MRCwB?l0RyMKorKGlW{Mw#eyPU
zVS^y4_Xt~gfI!e#W)*S+!OCK@kQ7Oi&dT08*&>CWz{X}_yCekv<&9**te8z8AN+9U
z`QA65gOcZY@E;LmjdXutJ!U`=I|zb))3$97mn2C&gb)bB(BAEKuUK9U6ZC4DW|X?F
zdtBFr`Fwtbt+!};dSK9X-M3?&=lzKco`7jGnSf<kuv{+BDWxx1x;RL{ql(c*xJ=Uo
z$8lgfoo=vxM#S&ojXZ&vL`<qE3M>{2w!9?6;bY=GWm!U+rXb7mJ>@UNd-!RPX}jG*
zk|eBurK;)^9X1+<F=|p(6~u82S(ZKGh2G6(vu7-S(BUa!67l3HieSIrZ!}H2#_b#P
zEQ+FK1~<O%+rR#@ggoG|kIQ$Y#^H|tiH@%8E<R=C<cLS}HQ0#7PXPu1T=#)j&zEEM
P00000NkvXXu0mjf<>kIH
diff --git a/js/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png b/js/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e7bc204d8ecf5f4191374e9ba9beec2fb7a99ce0
GIT binary patch
literal 127
zc%17D@N?(olHy`uVBq!ia0vp^!a&T-!2~4#Jy{GS85oO$+?^QKos)S9<VcpdMwA5S
zr<If^7Ns&crsOB3DtP85rl$s_CZ<#to=mj?DiZN@aSV~ToczO8FCoHBFX4y39s@%s
W_tXr{2?r*EjP!K%b6Mw<&;$UyyCY`+
diff --git a/js/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png b/js/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5f5b0e9fc8aecd9989a0b32f0885026b322e75f1
GIT binary patch
literal 121
zc%17D@N?(olHy`uVBq!ia0vp^j6lrJ!2~4T^fnv@Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiljYV978H@CH?yRod5Fw|Nm$H`}>>ycz|I812cn)yU6|M
T*NKyW${0Ld{an^LB{Ts5qK78@
diff --git a/js/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png b/js/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..410a0a7a4267a36ed5d41c271e2b508f2623810d
GIT binary patch
literal 129
zc%17D@N?(olHy`uVBq!ia0vp^%s?#6!2~34%~2=@QjEnx?oJHr&dIz4awJP!BT9nv
z(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po~-c6^VJeIEF}EPX6)r_4Q4ur~m!`f8Ky4
alA-YC)Qp}JabJNd7(8A5T-G@yGywp6!704}
diff --git a/js/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png b/js/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..064bc1897b83c2a796656af3a9e62961719bcca1
GIT binary patch
literal 116
zc%17D@N?(olHy`uVBq!ia0vp^>_E)O!2~4dW-8AFQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jio`r!978H@CH?vQ{QQ3)ILOe#Es((Qlu_i;9_RLTKotz0
Lu6{1-oD!M<#*`$8
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteArrows.gif b/js/dojo/dijit/themes/nihilo/images/spriteArrows.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc81207e70710738804fd4f0803a7f7f6a80fe50
GIT binary patch
literal 446
zc${<hbhEHb)M4OexT?Z%?e?SN$B$2*Jo(0>k2jzFxOVG)b#--5PfuT8UsF?4YisMZ
z>$es!UVQ!Diz`>I)YjHszxVv~>C@Y`ZM%5!;<cN1FJHcV;lhO(GiF@B^Z3T&PdA@_
zyMF)mjR$W#J3DVYe1GG~m!Cg>UcGwt#>02{`T76<|7V~!Q2fcl$iSe&pabH7{KUX^
z+hJ0Hht4FE2?q|Gkm=$$t6|uj$id(i=s0C+h{Z9+1|cndhC2(77fNbs9CdqO@KJ=Z
zsV~*}4+{&IauYw3P^OYFN0YLmi?kq{G6$ce3pc+qry#G308e+5tZ0A=EBk_8CmAu$
zZgB}IXT@$d#!PpK+$K)31SciNiA^h6L}eE!^9XEOz|I=X*Tp7S<H9SrmY;jS5Yvn%
zE+$5Kr_D_q!rPtXgxMMAxJir2hWjyarz(mtcsq$Sip$(Mxk;6)ovUrh9l-+(&Z@0}
W94neF6c}0}1dOv(7@Ir=7_0#=nwCTW
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteArrows.png b/js/dojo/dijit/themes/nihilo/images/spriteArrows.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..73aa7009103e9935a831057ab5d8df6261728e38
GIT binary patch
literal 720
zc$@*y0x$iEP)<h;3K|Lk000e1NJLTq001li000XJ1^@s61TAlm0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!a!Eu%RCwCVRljRmQ4~H;Y6lS!q;BG%
zi%zXW7VRSVYe^jpfp&kz|Dc(QP-y=HN%j^?I+!dkBDz$E1d)QML*gKA20=uGR?(jC
zai3gYRZ3lY;BxbFzkBX?&iT$!S*=!dh;=%hXS`)6lS$6uaJ&o#gS7+w9rJd>etvB`
zw;bsFId31D&1SCAXy9MjeMER^g3wM(zu&)FE|)*~@60yL69J5f$NapGr1J+}cf7uG
z#MdV0Nv@7otJSF6?ULK=CUJiok#}5ykM(+;VzF3~zf<h*W()MR*XvQM)uKcqaml#1
zjJuElO1s_mv$K0-h<6$ehwDQwu};M2^O4u<ePxhFCKijuRi#oP&d3_Cswy!?F_Beg
zv)OsESfuH63O^K&$4OC?7mWR3!rm7O1@Ix4%SEYFiflI98RI^!CBYvLOzgeW>D(X-
z!$p3KJRT1|<&0#@<?;sE9huF{=ks$-({!>h+(A{~L+D>Noh)oL8WDm-Wn>u{8qSA8
zp^HEuuyGqva%sq7v7DHiARi8g$!@prBm0!Kcv&iy^v7j`gjo0LKFz}rBxEGxbiz#L
z5hNm!h+Z-n$e<)vs}(x>COd*OxGHDqbXpI}kdM&3VadT@fRY+#YlF<j<1w<A<G}p8
z2!ji2UQf_k!}3@|Be6C$lp7fYDOo>TvZ$iu$RdbEqtP#ne`6X^r=pQ%Vs|3AygUXO
zf6FpBf;3TWB#^bf(V&WX4vR;!!rAp-jJ6C)k8H|~`Hy4rbG2H1jedee1&58sR1W>&
zF!Txu975I@uPl@A7y^Rq;~yXp{+|}c?7s8g0t^62NYX=N(GUUv0000<MNUMnLSTYG
CVM|Z|
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif b/js/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d2c4ebfaff2230675f59f5caf94ebe26739b5ed2
GIT binary patch
literal 774
zc$@(S1Nr<%Nk%w1VPF6d0M$PL_4W10$jI*Q?(y;Q_V)Je?d{*+-`?KdL_|cx!^7m{
z<c^Mw!otGJ%F5c>*_@o5%*@M6OH1tR>~V2$g@uLX<>hpAbZcvC^z`)B*4BM~eUFch
zb#-;!-P}V%LywP-(b3ULN=oA5;$vfC=;-Kte0zC$c<}J>+uPgo^Yhr)*wN9@*x1*{
z$H&*#*VWb3-QC^H%*@o()bH=_{QUg={r&#_{`vX&`uh6#`1t$#`}g<v$;rv0qN4x*
z|NsC0A^8LW002J#EC2ui0AK(R000L6z@KnPEE<o<q;kn@8UwwkblM9Hp;W3>XyAFj
zV4h*v4Tr}<Y*xDcsn^wEZ%`1-?sq|9(38{ccr$u@Lp*<hf_prLhk=8OLUVP9gME>W
zc$IQEH8wt<pEfl(mOnk5o}fOWq=l%etD}%VJg=&(v!|V~tfjiCpuL-&zzhkazNo-9
z!a}vgpaKH2uF#>l!_1(@$l1%yrZ+S<I?M+b3*)}x#LS}Vh2k{C02v44vpnqX%r*FO
z;>ejp2QSh-e*SK(qmckajTsywJSZ5B#=IIB{ZZ6ML&AU>H(bOJ@z0sOj2JE6$R)1f
z!-x|V0<?%yqs&M-bbK&TVFLpH3I=rK@Rd`C#iKfemg12Uh6(})8lXraG+)u97L(@4
zm2+p$pFxMpxr$Y*uN?{zj0jOe0gf9x&fdU5x9;1xh0ux!u%ZDA40rRPwObc%F0?(=
zvULkrE@8Tj<q*h0!h(kh9d6{vLBQAK95+IT-rTv+WDGA_$QYoRbH2}_N4u6x*)rzV
zr6a+PP1+ZL9XT9mfUr5o4gkJ^7cYK%>F*pTGDu(!Am8)ln~&#uE}VFF<Z`ZKZytV!
z`Sa(&NBWH(y?R>g+ncXmD8799>*c3UuAh7)97zQzU@QL#Xdr>K0BB%<IOL<?f;u#~
z34}=@cnXCPmh#3LZETn$MH^+9@dX+`geamISHQtWiYmt8#EUS-DC3MY)@b96NCW`@
EJGMll8vp<R
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteCheckbox.png b/js/dojo/dijit/themes/nihilo/images/spriteCheckbox.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e99233079c444db3ada2ab5f2a10ec8e4d9cbf06
GIT binary patch
literal 707
zc$@*l0zCbRP)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Wl2OqRCwC#SWS;1Q4~EzA!M|#5T>Um
zY_z4Fj#)}<{QwKGnEnsb$@Jf_oZbyf3%@`tXo;PO4I>f40wKDMuc=!J=`LTTnO7S(
zd6HM}op<ZpQ}@2-am(cr7gNr7`pM_>%WAbM8|3wR5eNjhRsU3cy<T5-Ivv?~hr<E4
z+kG~?lKe#h2pow-Fq_T5ah%wsMwvp5=Xs>lX<A@Cb}F8N=kxhw<13X41@LTmCHeEK
z33|OAYPI^{0`vKNtEw0L$MC9ci%Iu|Y&MHrE+;$1r1)d^8R`69uZMoWubBV;$zLT^
zXgZyWDy{mpS`DdG3eV4l^|M`0-;N*Z@4_z@i+6L!<1yOpwkQA#|E&3MWI&-%K)GBN
zCk_S!BoYbQ<ZyLmlCA!(CdVkyqtR#`j7Fm&ia@oKg@4xkH!`4DEFziwEq--RPrpzq
zl@JUD5ekK5e*uTuK0J|bwOW`=CTKRB7!HRpnM|-)EKK~f=Fh)ffYRS)vmuko;PLUN
z5QsMJ?gEI#V&c(lRUUS|0FBcIbm%4b;WZi!y4|iIz^l;y3SXWPE|&{ht(J*@*8Ddz
zARG?E@AnI7_XoGPUc}>Z*zNXrwfUGDzU}!wywz%j(fCOyJ1;O83_|cfi=wdd&zk>+
z0A{lp_xIls{1!ws8pZYXmyM0&kh;6lP7a=GJ^7@v<8(Tq)9IM{XU(7Aw$RPZS3LZ9
zILi_4SR*_I-Q)2n=AR}1wE&dn+x|evb#TFd49~CbCX&hIQFj^A{wa9c;OMk*%w5ho
p@k;XNF1Mk|n(7h)W$m8;0|1(ch|L_xa>@Vz002ovPDHLkV1hJdSa|>d
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif b/js/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..00ad23a310eede2ed0c8e88c2d37532e71b71ad1
GIT binary patch
literal 875
zc$@)i1C;znNk%w1VK4v?0Oo%H%F4>=>FNL9fdAZf-QC^L(9rn!`2XaU|Kg7S-FlUP
zN6yX4xuIdm$jH9FzPGox|K*wg;*9(I`~Tj4|J`{1+jHOF-~ZWbxu9Lc!^8jPo&Vv9
z|KEcD-h8gEuK(P0|JrZ==%tl|RR7?Gxt&s{j!U_tX}O+Mvz11(ltZJSn8A`7xv`!9
z=b``EY1Y=(>+9>>yIc15_Tu8=|KNkz*x2Re<+-0&<KyGx<mCU_ZS?f?|KNuI+i~;r
z^YHNSa9b(n=H`ocMY*3^#g-t<njP};^8ew7osMet_4T=*SNzs#?Ck9B?(Vg<wZXx`
z|KpGU<C6c|aG8BKeQZRhgDU^paL>=rl!RW@)zyoEY5(Mt+uPgx{QQ1sGP$H{%EY$q
z$zijzv(wYl|K*pSi&lDPIeTe7_xJaKd~w9Y#HW;CxuRx}bup@{s;8%?qN1XjdMp3t
zn~Z%{b#P?MnHXMJO1Y$L|L33TtrNMOQLcz5|JY`?w5$LB|NsC0A^8LW004ggEC2ui
z05AX$000O7fPaF5NPC8RLW7Efg@=iYe|?gZl#+vodqjDgc}19ln3|lPhk|{6sHv)`
zeSdqLu(6wlbt|^FxVL+eemgrdz`q8mt!5&}B2%zc3e5^<dsHgZ)Ya2=yQc*O1T`-O
zFEGS^Yb_xyawaG!DJdmA7kqprdvvS!epuOlO)x<LOmg6W!DLvgJLXzwH~?h>jR_Rs
z$<wnZ4Zc-o_IX$!=7Ezp4<2{`;HT9W4R|y_IDlXShY16u#N(qUj*5$_fb4VA;0XW%
zFJ9OnkfY=u6A+RzjKD)cf&n00O!RUSCn}x1X3PlC1YavQQMN>Z62T?J3Oc0H^rD4@
zTQI7~7Pw{Mr46qnMw0kIW8jAbA4Vj!Vh{mA*&`31%9KY_$bl9IXq1`DVh&?I3V1ni
z@We?00B~L`Py=Hyk0U%rynKpQElmbc$UqUWB!=x6VJ_?81po&D05!7A7}JH-9}EJL
zPw2ops_r2IMhF<-`tn3x85U${;J`wSD_o2ZNkE>$fDb*=TGw*|L<K9=t<&TcU}%6G
zKXBLxV*JmI|4Jxv!U-hkVc>y+9H`)e2AX13e~?5d;e-x8*b0RhW*A8&910Q$06QI=
B)+PV|
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteDivIcons.png b/js/dojo/dijit/themes/nihilo/images/spriteDivIcons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..413098acbfe38bac6cc5f89fcb50f76f10289d9e
GIT binary patch
literal 1062
zc$@(y1ljwEP)<h;3K|Lk000e1NJLTq001xm000mO1^@s6P_F#30000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#$Vo&&RCwCNR^MwASrq=JnI<)9n<i;m
zYE9O<wGnI~V0J0!LwzZVBI^23QBZat7Iq&+_HS5UeDksTA_|H^VHfRgr633eQAAOT
zmijYktBK^N$s{x5J$I7K+$5!@iXOP!xhMDBeBU|WxigZk>!`KKvw!LyWk&Elk8i^1
zGyhBY3|mk9jeoA{Xu|gFJHpSBh`{x~w+X?$ods;|O$!09;!eCuI0fIKzn=0#zBHb|
zGeFJYrx;E`ra#}c_5GRwL0^s!t5tvpJW1pVEmeQ11Uz}`s5wD}&zY`^uaF?iX0v>5
zX)({zG>xxqHXH1AdmS$M?xGj5;)uniLss74Q24p9aprL^5^9kDZVVv0oX3tImNE5k
z7(<cfGWg$(DI5$h2)>1d1&|^-J3FB$3V$vX3LLoK??-occRhiTkq{<++0DdcW4Kf{
z6im<D!`zbF0IF+z)}0&h$AKZ15``^`JoxgzZvkZ)d3iIApZL8g0?9Xb2(sV{1OiZ1
z6~$r^E|-gEJ)h5`(x>rw9PRDxa5&8B%HFQ_@}pFp$9E4ikQK0sI9tr?wj=uv?9dK0
zYq8f)v2j53&Cbpu7z`p7i$RuUE}v8?1-IJ`Ns^Gu<@oQBNW>&yWVu9YGqO!p;6B|l
z!(2nWEZ(PNY#9nQO(2^|*ZE4Ud1#P?oK7daUN4sr8IhoBShH^s;Id(o(4{h9RU~AQ
zkx9a|cPSf!_&PQ^I?87P+1lC)kH@oSjLgB2G+2oYfSN&o54BtowM;@YD^j+PMF*B%
zKEU+UWYy>K_2H+Tdxd?E?%ziA^|R{Q<#e#CReUY@d_LX-q<xYPWt^l#GxbEJAKKd5
ztP(OB*Q|h623!(}SV>r{%jd_b-?jrbIx53-kihvXH}N4J6ZSp4dlRRQbye5np`UT?
z@(W?l+}s=oNczuYGU)H`=MtKqpXa)#9v~8-P^d;ibrsM|DOoGQiHJ55@*5J=a^*y*
znAp>U=+Z4=Uu3_lE_N^=`sjw~>+9p76Nv=RG)ZY}Yz)a{65()|SEoS_D5kWlQc-J2
zl<Kl?ylEKtQj#SgXY5gP*kD)jW5CsP4^VbjR#teX33xOb#lXM-UsH20E-qqlaIgUZ
ztzfxEwHgvu88tAS#TGxXaJjs{u=?ILjHE$8E1IWgs!BSYMn^{n?}xf39zS_en!a#U
zx4wzZN?2~71~&fdHGbms<Y9e1fGhD8>*?ufxR0*T)o&p>=;S5oORm3KAm7rYMxWE)
g!`Ayb{YiiU0M#Q39RsOa!T<mO07*qoM6N<$f@uQxi2wiq
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteRadio.gif b/js/dojo/dijit/themes/nihilo/images/spriteRadio.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8dd6e578e89939ac92dddcb77a684ebb95955933
GIT binary patch
literal 1137
zc$~$NX)~J%0D#}T2_lsA2)d*CN*Ni{+O|_VW(=m3OgpRAk+mO+*=fxzJH~X?Vs|7F
zq^+$s;?}&02*SFn(J}I}iK`>-Ba)DkL>wXRo8A73eZD=Po)6E1kRb1Su`vK1&{2TB
zy}gr@lil529*@`C+soy0hlhuckB=7?77PZ%>gwv**_lixJ3T#}pPye_Thr-u8yg!4
zf~>EvcXxMhZ*OmIZjOwM^z`%;78b%VTv=H;Ffg#PveMk#+}GDvTwFXjIM~?Os8*}D
zwzdQUfzfE3n3xzE8k(G(oSK>vi^WSzOJieWqobp9b93Y4<LBq+4Gj$`DJe>&vZA7b
z!{ID0F4ouAOQlj4i#0txT~bma5{a~0ZAM1M&dyGHdOD3pYj1BaD=TYjYh$z7d_G?&
z6joJLwY0S8^?HRuA(zWF8qMtNY*$y8L?ThCR5LR(M@L8d`}>E7hX)4-|3!iS1II%Q
z3IHg8`&aq;1TZ_#q|oSDjO?6T=F3;F^O)9G&{xryaBtqS*i6vM)ZWwzEUVyfi{2F!
z=H}Ow=3q>0ts~8EqA`ultsg$-U@d)}A_;g?Y!}ia>FsD~YZqlV$vQ`~t`lt{6j70&
z!*#~Yta47xz`FP;B2-a6eOb$^+Ko;6;+ksy%e4GRcVu1~3i-3m?^q%+UlNflf6RsG
z=436Ioo#J`iizRj01NX=6gVD0;Jj-tk)5ekP7<2gWe>?g7%}kG9g|qK@hv@zNdDQK
zn~eGgt^lk;xyh}#$Cb1oZy?E;3SzPL6c~(^K(!%7ceN`KF5g@DQgMHz6;y`_+|K1V
zSAZICZ68dYu}hZTr}{sy#bDurI3F?Hk_6wPGA?7j6$E#Hh~I*gZt)X8;rCxv7B9Bf
z4ad{1F+EAvMZF-=pH6Tl+mFIGLVWP_Xs?;PStCJ73wRih#7S~(A9|FF?Beo`stak0
z2_C^-3G%kYbD5#^qfU{zdaK`$pMBBMO?aPjEw!7bubqA(;6Z^b7f)Vi4H3R=BMlds
zabiyy52UHuilX-!0&_dRjJn5o5I`m1CDyl%5JK<>^~}uzBu0l=uiw0L(LdbG2Tkq#
zr~y8B@1%urV$ciZ(RY7($1-f6invT#Cglc`fMQC~Xr~yd40P4xgM_H?rfxJHs^zEG
z1m4p^peMfj9S#~n6|kAa;G!pSwO5`!btuuid*oZ|%%)K~G~kcqkZK5%i$?)8RWQwL
z%DC(TJ6T1OY?djR`aG~E=?#?UyOPIe>>NIWBT1#p-14;2Wq|ZN)Zff9p^3!dm%bDV
z`ysr)$wejd+ELt3uKSy172sD_E%@YWBQE^Ly*`HoQBAMLtH~{&?;h7XmU|*7v;Yb-
he2@oxu5T5lx+RMKD)?o+LocXX|FqU#77PJC{{j+n6Yl^3
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteRadio.png b/js/dojo/dijit/themes/nihilo/images/spriteRadio.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14c1080ee04392caea207fda7279062c674b9715
GIT binary patch
literal 1073
zc$@(-1kU@3P)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#(@8`@RCwC#n9E8WK@^5hJEJo?-ZdC+
zAc~-ds35qRClDo&wNKy!7#|^E_J%w_mTt0@;KGF~We|*lh>jN=9j|!5PR@VQ)wE@I
zjWdhsEG#Ix9qa4=oT_t9Rkt-YHAO+Tfq{WQ^%oWv0@W|_`0XQitV)u5#=idG-v7#H
zzVSKmmX-mNu~=-pudk0<T3V>0qJl0iE@*dmmlBBt?!WPvF9z|Pc`XAbi;IiL8yXsf
zjYJ}JcXvnU=jXJ)zmNN@`nmF21{B=?(D3lEy8qhP*f=pXG(>Qqq@;v0nT%ZP>+7kj
ztBVc~5991il*j(|5YLNmYHD(LHh!X`ql5TLp-@P8T+7PJ<Qdo3*YVriTVMTr_`SWo
zK>b%4(8ESAkBp3nv1}+EA0JEPgu`KZKy7U;Jv=<n^z<}V@&hw}T;k98qN0D54F;$y
ze)Hn(4Cvv=U2bo0m#D?~`}=ztj|Ll}(Wv~sva*6mexdK?{q((fI|BmqU+n>7SfSF=
zQc2mhwKdw=*^$)Q*w~=?`FT1yIU#nEdV70iyteud4}&esa=NTCU!R_yjC@T^jYJE^
zVgg_XM=M=kUdm+L+}wy0h%OUv(l_xz`L7n>b8Bm>zz~EOrwd(OT}cf)J3FJr#YK5Y
zTU(oq*9>rYh`~|a2s9I4US2LdG}YuIV$g99d%#y$R~z|k`hI*+{)g@BJESh^CBzYN
z3cv)w2vyTi3NT(Xz~N2J#Dhi0WTPwn$HzyBe%PUEx{1%G@5cw_zsi6#oQAViRaJC)
zdMc@}N&t*fn<dHv#%s@Zc=yV?S6?+h9xOVdNNK})Og<(6wH3|Y7kv3_`hI*+{;LJ}
zg_;NBP@`~s+T7ffbWA3bQa1+&2jziVTU#<-d#=OlqVB&<JSG`@U0t30fMa7Sm7;Vy
zEwz<T7{a3*nD}h^etb~=s}l5mb#-+NM>wR>=;$c%-?H+knVp@Tl8!i;EG;d`c+G%k
zJT@DMsZ)TuH}R}B1}*U2-Q9F_bR^M&l*RARN5{fs<Nfqad{F+Y_kaW5_+ni9;?2#?
z@(&!nu(2Q_0b^sFot?$zgqMk*ngK6(_v)K?JGBqk!5EjDIL`1GkCIbaS?L@<k=}?#
zUKCG#o!9mKc>6sdF#p{zVl$k^F;2ZWKx`^#I18_@uhZPzoPzz{1oPruFJdzsAu%oy
zare;;djKMFdwW|=p09pByz50Q5dSTYk8%C>IrS6w_uNx<%|hBFUhyp?C*I>@TtW3c
rKE@SP-+KER`u}|meQO15e+3u-MiFIbz#8V300000NkvXXu0mjf-bM?r
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif b/js/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..251389a285e06380d4e8eda1ff98e6679c817fbd
GIT binary patch
literal 1863
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
BjY9wc
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png b/js/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e81ba07f8d99a772a5e09cc5c8f732670204b294
GIT binary patch
literal 2195
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
V5GgrqL(KpH002ovPDHLkV1hgq7(f63
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteTree.gif b/js/dojo/dijit/themes/nihilo/images/spriteTree.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e546e281b131d5a45571c6fd3a5bb7a30e856f1e
GIT binary patch
literal 233
zc$@+002cp8Nk%w1VKx8~0J9GO)6>)L?(XdD?EU@yi;Ii%^Yi!j_xt<%@bK{U_4V@d
z^3KlA`T6<9#l`>s|NsC0A^8LW000jFEC2ui05$*;000D*@X1N5y*TU5yZ>M)jwIHc
zXxdzATT%@(I5a&ls};|+bLX$euIIzCWW--kGIS7ZMjf)JTsEIYAZ%Kz1{;P0VLUz<
z8Vi6Lzzmbi=k)rruGg6f1A{@>8xmR*4S9Qoe}N<o2nq!S1dR#^h(e2vmXVVp4FQ~;
jos*lMo|z#H0;i~`psB2+AT25^uqaElwzs&swh;h3mbh_h
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteTree.png b/js/dojo/dijit/themes/nihilo/images/spriteTree.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..33ae07be42376e8fb788ee56770c8f5a7c4cc9ec
GIT binary patch
literal 337
zc$@)I0j~auP)<h;3K|Lk000e1NJLTq001@s000sQ1^@s65O^*90000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy^GQTORCwC#m&*x+Fc3f!iQRbgWIHxs
zABtV+N$}#uLPU(>EE9<9Z`X(e>q;IB1fvgU@*&{>z@CW19*Rxu-w?Wy=ehA>3xa@u
z>Z9_IC5HIE&x8=nakc|Fjw2g}ffYq@D5dh)sdzTABuVV%aof#9&wq?GO*f+!MUm=5
z%CZF4br&Mf^Y}N9=8R`eRaNGv2|RgVWLXAH(?Hv{&~=@PIF6?_KF5B1Pk*x)d!Bii
zdalM|#QMHhI~nKiqDd*I0_aK~vFDi=($qsf6*XZPs-HZ|+H;FFM!~O>+9X!jHHnnU
ja|Ld%EjF=x@DgAEAcH7jJ<PIz00000NkvXXu0mjfDv^&@
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif b/js/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bbcc64be82efd5aab472b2d7b23b1567a480746b
GIT binary patch
literal 233
zc$@+002cp8Nk%w1VKx8~0J9GO)6>)L?(XdD?EU@yi;Ii%^Yi!j_xt<%@bK{U_4V@d
z^3KlA`T6<9#l`>s|NsC0A^8LW000jFEC2ui05$*;000D*@X1N5y*TU5yZ>M)j^x&y
zXxdzATT%@(I5a&ls};|+bLX$euIIzCWW--kGIS7ZMjf)JTsEIYAZ%KziU451qG31?
z&gX+67Z#JvXo8yEt^+uYgn_{z@C^xC6M1`le}PLv2nq!S1dR#^f=r8zmXVVq4FQ~;
jotc}So|z&I0;i~`psB2+AuTE_uqcVOwzs&sArSyOolA4X
diff --git a/js/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png b/js/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b06afdb82c45dcc546b48a37dfd6ae61349d4245
GIT binary patch
literal 335
zc$@)G0kHmwP)<h;3K|Lk000e1NJLTq001@s000sQ1^@s65O^*90000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy@kvBMRCwC#mQf0XAP|OCJWh{2b)7EI
zJ&bNuPd)b1K_V>4WrEz+R#!uIxA233XzI6r8V9kI65SCTjYVUBY^-S-XSZ3FVN))Y
z&KamFk)|o4lp;dNA-60G5<;N1Z9gs$O2-$1Zi=(9vMldu>}t@i>s~haJkP5CA*!l6
z{I#Me*4!Q+oedWq8%dIw2M$a{J?gra!!XEk93|&`4aS(dhWn6*=ia?<)7gis&Y3Vy
zMW{GTGK`-^nWjk<L$9=t&c3LwI>E;M)<PS3o~!oqLD%`(9<zN=2!3J8YOL@3APa=j
hiD$)V?4mpb7yxI?Kctq~sT=?R002ovPDHLkV1o48jtKw&
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..84bffde04bd6e6a88a0cc7aed94b5052f36f1a0a
GIT binary patch
literal 518
zc${<hbhEHblw>escqYp5`}gl}-@g6$@#E*upI^Uz{qW(#r%#`rK7IP;&704kKY#rA
z@xg-!U%q_#_wV1md-pD1zWnFUpa1{=fB*jd*RNlH|Ndnd1(X5BpDc_F45AD=APy)_
z7}%2=_?wzrTH9J!I=i}idb^n>Oq?`%$|Qm5GiJ`3JyT@f`~?daEnc#8+42=DSFK*N
zcHR078#is<vUS_`9XogJ-m`b#{sRXO9X_&a&hZl`Pn|w<_T2dk7cX7Da&9Z{jhnY_
O-?`O({{ep^gEauk&wuU!
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6803db442e3bd37d69d7b09c5848751bb0c30505
GIT binary patch
literal 291
zc$@(v0o?vaNk%w1VKM+R0J97L{{H^;_4WAp_~qs0`T6<!`ug_v_V@Sq`}_OT)6@L?
z{Qdp?|Ns900000000000A^8LW000aCEC2ui05SkF000EgaHL7Ay*O(sg$ZCNj$~<?
z#xWrUA-r%b&vZQ#L@_CR@BhG{aL7YU7RaP>$!t2G3xzQOty-_r<8{kTW~tq<^(!tv
z$>y{YtyZ(!<~Lj{pLgr_Ej~Y<^67qmcY%U>goS-th>2i}ReO$WhmlQ?lu?tHl8Ty3
zmXx27p^l@ArHH46se-G2t$eR}v36ucwzszkez?57J-SD}!nwP{#zDYT$ICv+QOwNF
p(9y-y#s~_**2_l#olOZ60ORE4=I7|?>Hy&k5*zUG@dFGI06P!$mhk`p
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9ef9ab08496213ec596cdabcea577af6dd8ea51d
GIT binary patch
literal 511
zc${<hbhEHblw>escqYp5`}gl}-@g6$@#E*upI^Uz{qW(#r%#`rK7IP;&704kKY#rA
z@xg-!U%q_#_wV1md-pD1zWnFUpa1{=fB*jd*RNlH|Ndnd1(X5BpDc_F45AD=APy)_
z7}#SP_?ntqTH9KLJG;7jdi(k(Oq?`%%G7DoXUv>6d(PZ>^A{{!w0OzVWy@ErT(x@5
z+I8zUOl8=-W$U)>TX}cw-m`b#9>If$4j(ys?D&b3r%s<ad+z*&i<d56xq7wz#!bFP
G25SI&MS70_
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b6b08ce48412e7c22498fe0fbebf8ca63de0522c
GIT binary patch
literal 266
zc${<hbhEHbG-5Df*v!fB`}glRZ{Ga<`}fbEKMx)}`1kMMy?gim|NsB%*DoN+fB_VL
zvM@3*a5CtCI3P0^ShgF?@LavuB3o<X{{)S`l%Kw7tJcY#+E<W$<jbpTKPsN@x%0n6
zc7vMCv94p{Mwzn>Gfywq)KU#xy+~VZ$=zRjR;>%)qndm+bW6zJ6yv*|I|A*NFu%30
z@jw6g`5%i07dD30w)T$BuI`>TVJ6mzlO|7@I&Jz4RwiLq_IdLcEL^mB$x?RKIm=e9
zUbBL2?wXC8=C9kZdHbrZJ9aN+W?8@I;KE&pjvhIB@c4<{r%rEQA#`pJ8zZNX^o^T0
JuL?3)0{|qbfqVb}
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0f533b56704a67192a07ba851f9b4be903d003d3
GIT binary patch
literal 542
zc${<hbhEHblw>escqYp5`}gl}-@g6$@#E*upI^Uz{qW(#r%#`rK7IP;&704kKY#rA
z@xg-!U%q_#_wV1md-pD1zWnFUpa1{=fB*jd*RNlH|Ndnd1(X5BpDc_F45AD=APy)_
z7}%>D_?wzrTH9J!JG;7jdb`;sOq?`%$|T0=GiJ`3JyU4j`~?daEnc#8+42=DSFK*N
zcHR078#is<vUS_`9XogJ-m`b#{sRXO9X_&<`S^*Gr%s<_ICuWS#Y-0iu3o!-<L0f~
pckbT1|KQ=H$4{O<yDReY)$2EJU-N$W`04YPPwn4-@HaA80|3WFlJo!o
diff --git a/js/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif b/js/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..010b08ae9da1cce97a260c2dd6fece6967033a19
GIT binary patch
literal 388
zc${<hbhEHbG-5DfI3mdK^XJch|Ni~``}f0#51&4L`tjq(uV25OK7IQ6^XHErKYsoC
z^~;wpzkmP!_U+r{%a{NB`Sbnz_y7O@GY}0Ff3h$#FbFc}fH)vK8Cd^6c-WJYIWJ??
zB&A6z&N}Bya_^Tl^_*=IIIy6=Lr1EUqa}$Y(_;RG6(wG4t=w5V%1*zn+W+9g)rq{b
z&u6^dF(+^LY~DB3eQ}rHCs^0*zxw%mU440DQ*ldcUVBGoS9f}EUs7Sp#QX_U<EGDu
znKe6Wa?ZR-MT^qr&Rafv<&4!+*G^pDx3PP3$JW;EO*`v%*X(UruyomEhNH)hpE!By
z^cjXoWuA+dE?>EN?fMNKHU?$>d-oqaeDwIqQ~q0bpS^nh`UT&c4<8@A`}FnAmv29x
z{P^|v{-1xpT)o9F$TtfzF>yqk*s$<$yMVG+%>xIQhHeSttUD(*E<Vm6s@xIbxGCi%
Kv!D|&Jgfn{wa3W-
diff --git a/js/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif b/js/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..92044a7f191eee8e86079d6e2e8a34be0c50644e
GIT binary patch
literal 1285
zc$@(R1^W6&Nk%w1VHp6z0mKvl`T6<x_xJkx`uO<x^z`)I-QDWy>g??7-{0Tk<Ky7q
z;P&?R`}_Oz^Yh-`-u3nM{{H^`{r&v>{Qv*||Ns900000000000000000000000000
z000000000000000A^8LW000yKEC2ui02u(n0RRR6AayuoX`U!KPHgMGFzdv0J=eH<
zPf+jwz~C-OEZ&Mp;4#TuGLf@qlP85zdy%Ym%iTu1;Bdr&jY!Vuv|3GunAdPP+03Zd
z1^B$)ZlB-v0D*#ogk%y7f&+?+1B8x-0*e8Yl$Dm0WQYTl3!R>ypq&bb0F#~%sHv)}
z4-TZJovgB{u86P;v$M6O0jIgFySKl<uf4Ius=>y%$h5`2&8^SJ(aO-x*3{V3%+=h{
zsM+1yw#(qs<=4pK=j`C_-s#%w-|zMDyz0a7<oWaa_xcI5CvP0G1Op_LLPemV!-o(F
zgiArOqQ#3Qa%kMhu_KNuAVZ2ANwTELlTyV0gcQTFOPrT5W6I=1v!+cuj&eHEgGZ-N
zotJ_JU_?|=sG~?fom;xJfzzi@qe^w!aH`d-ShH%~%C)Q4uVBN99ZR;X*|TWVs$I*r
zt=qS7<9dxqx9&rXc=J{?K*3`S2L}B96%3<|55k5=wn!{;u}KyY5S)}Tc>-g_mm521
z$+CxKnQ6K}_zW6OgwYOes<w0Hv;&^7V+*Jw!S&Cdvn4=qP_%c^Kmv3-NQ!i*qS?F8
zd71=(fdmK2J27`&Ao_yo5~_n+9-w)4>)5qN<L+I2GxF5IcTc}v`ugwfufI2s3_bku
z?#rv!A3ywl_V~%iUx5DgH{XBvotGc~fC>u8V0{ZF2%&=#4r3pE7DkBSFBc-XVJ;mm
zB^>|~41j=M7Kwmj3M&w{n2S2FaMBl?i9utHV9;3F8d12hBO6rUnBx^C^=OijMFuG(
z7dI}cMH@~sSw@su%t7UoZd_SqmOrw=WtV8o0cILvj(NrmZ<vXunP*Or=9p`;8K;_V
zviV${a^gwnn_$ifr=EZE*`=R-0$Qk`KN32qp^GBAqoRp28mXhDLHekqmr@FvrIljZ
zsgG)|C~96XmKp;}Q);Q|7IwC(#;RGMD(kGU)@tjmxL)b%uDtf@>#slND(tYt7HjOW
z$R?}ovdlK??6b$pI_k80^;IhWV5VAD*=AazrYdS?#!4EPr+Is&XPJeh?PTeKWLdZ7
zp8GDm+@8DJs`q~DO1Q4E8SB2`?q+Ad{*F6l1O}6vaF+-JeDK1-LcC+c14~>Q#RWU8
zu*M8q3>wDadMp#j4|5!`$rFnl6UiG_jPk`Q!^CpOFMk~KOEXW58nq^<$ny#_@}Ox<
zeynD+AF?H_$C^g3h9(_N+tlOGFHL<Vk|a5iwTwq{og|SXX&rX9JHS}Bi)SN7_S&YV
zEtuPW!R?XU9nsB^-5cSpk={A*jf3AduzjuIW)qIK;cB;y_}h!e-T2&(*Uj_fCdj&L
z)J-d``5u^e?l~X3);jBg=%kl!dJ@^DuKMb%x9<Auu*WX@?6lWz`|Y^ruKVu1_wIY|
zlvB<Zy9W4++UGR6wt3PFxQ0Ay4L|Q(7B{a^?z~i@i_*F!QT7=3BzfOG_=;H;`Q7K|
vo&MhI_uc;A?+32<{Dae9xc!IYpLqTJ-`{`!|J$Gc1_(d`3J`6<3jqK-5i7Bp
diff --git a/js/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif b/js/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d59fd4a5b034b29bb98702393bc7b66fa7a1adf4
GIT binary patch
literal 303
zc$@(*0nq+ONk%w1VHp520J8u9`uh6({QLO$_xt<%{r&y-_xJSl^xody{QUg(_V)St
z`S|$w_4W1s{{H{}|MT<nA^8LV00000EC2ui02u%>000Es@W@H4r7r8uc|(J;bR_wO
zW2t7R*t~Eo%LD?rb3WJiqW>^Lpa%r<aK+rwmsHx2&Dc>8eG#s;K@ZFAdas}!VoWZZ
z&06t!eNKx8@VI<V?=1lMykgJq`$Y>2e}ja8frp5P1&fT01&0Zdl9QB`i-8Q8nwy-R
z36Be%qNAUI1_lqQs;jK31`MUGva+wSv$v_WkGQzH3%s|!z_Y@`t;NQx$jP~|yUec6
zztGLL)XU7+$=b%;!`{H)yyCsm)YZ?|=I7+W>+06f?Zncj_V@Vtu%#FM{s$2N06Qaw
BwI=`o
diff --git a/js/dojo/dijit/themes/nihilo/images/tabRightChecked.gif b/js/dojo/dijit/themes/nihilo/images/tabRightChecked.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d32f44e3c7852b9455d5b158c570dfc55ce15f3e
GIT binary patch
literal 300
zc$@(&0n`3RNk%w1VHp520J8u9`uh6({QLO$_xt<%{r&y-_xJSl^xody{QUg(_V)St
z`S|$w_4W1s{{H{}|MT<nA^8LV00000EC2ui02u%>000Ep@W@H4rArOeoc~}LW?Lto
zBFUlbmjMXT%yezrZ+!3j8_2xiEC&?wh{hl?xf3X0MP}`_Ay}hHYV6AGdI>MU20<>H
z&*tzL%|0)vgSdQ7r@u3bynfFI`2Tl&f`fZ^1&4@<1$T^%3x^4jl9QB`Zv_bqnwy-R
zo|l=PqN0zP1`nvIs;j962Bi$Ath21Jvb4Alwz;{xytKZ*wV1KOv%$ux$jQ3Ix6I9^
y(8|u!sLRRN#@fQ%zuvsyz17y@xaPp*)9A<Q(Cov~<(Q_f_V@Vs7yJAN5db@CtFb-+
diff --git a/js/dojo/dijit/themes/nihilo/images/tabStripe.gif b/js/dojo/dijit/themes/nihilo/images/tabStripe.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a93467520a7232d7d2d88e7e812cf08227ee5681
GIT binary patch
literal 54
zc${<hbhEHbWMq(Mn8?g<`SRuK*RTKh@#Fvh|B63Z7#SFt8FUzc03^@A#6G8gC6`hl
H1A{dHDz_0s
diff --git a/js/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif b/js/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..64c3376bd53b6aa988a224b5f24533b486896e10
GIT binary patch
literal 432
zc${<hbhEHbWMq(Mc*e|d`SRuK*RTKh@q=L$3<Oa8$->CMz|5cn;(+3Wft|O3k%@_c
OxvjmUv#YC-!5RRV+7OTc
diff --git a/js/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif b/js/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d607a45f7f6e074a701dcd7baaafbb592350216a
GIT binary patch
literal 432
zc${<hbhEHblxJXMc*e|d`SRuK*RTKh@q=L$3<Oa8$->CMz|5cn;(+3Wft|O3xv9CO
OwXKbTiHWh1!5RRi1Q2)t
diff --git a/js/dojo/dijit/themes/nihilo/images/tabStripeRight.gif b/js/dojo/dijit/themes/nihilo/images/tabStripeRight.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9778cedf729685853b6ba13acc30ba81b7e0f3c9
GIT binary patch
literal 432
zc${<hbhEHblxJXMc*e|d`SRuK*RTKh@q=L$3<Oa8$->CMz|5cn;(+3Wft|O3k%@_c
OxvjmUv#YC-!5RRWQV@^;
diff --git a/js/dojo/dijit/themes/nihilo/images/titleBar.png b/js/dojo/dijit/themes/nihilo/images/titleBar.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..06ea21c21f10cecd9021e7c7c0fd1793f5c68fe0
GIT binary patch
literal 148
zc%17D@N?(olHy`uVBq!ia0vp^Oh7!114LFUpHl-;>?NMQuIx8CMR^(dh5Y790EIXU
zJR*x37`TN%nDNrxx<5ccV^0^ykcwN$fByfsXJ%$Ty*_@wgNU-Saz|29lG6tVA10BH
pS_?&#k3>B(?Fm|ZMZ?vfi{UgomyTA~%;`Yw44$rjF6*2UngFVLC(Qr=
diff --git a/js/dojo/dijit/themes/nihilo/images/titleBarActive.png b/js/dojo/dijit/themes/nihilo/images/titleBarActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fe6c7a4e4f5e1778a92f87ea17d1a554a90184ae
GIT binary patch
literal 155
zc%17D@N?(olHy`uVBq!ia0vp^Oh7!114LFUpHl-;>?NMQuIx8CMR|FZdzANm2MTc(
zctjR6FmMZjFyp1Wb$@_@R-P`7Ar-fh|NQ@N&&<p$%q-!cDVEdpLnDMYKrZgp{r&X{
xT@xn?x)>TZZrNmDY&<#Tt%j*rZ;;6%hG(2IX7UTCrUFf2@O1TaS?83{1OPm|D`x-z
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9c3849553aa71a67ab40f153223b8394574ccd9d
GIT binary patch
literal 205
zc${<hbhEHb6lCCLI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+Zj!ZwEJ%z00R3Y;4D9Xwpv>9%LtQdQ&S25fU0
z17DtHW0y%vc%vwyabn?3<p2XUpC?XlQ>9c6s9ZMXl9BFQkfW1fG>hqWhh)MoMFwjC
DbQy8*
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d75af71f95ed98e8d9ed98be4d150f3ef1f26b33
GIT binary patch
literal 342
zc$@)N0jd6pP)<h;3K|Lk000e1NJLTq000pH000XJ1^@s6nIL8d0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy_(?=TRCwByQacKRP!L?-5mKbF%fSM<
zgalFt0=9x}z$(W`mBI^H`2l|rv{4HSH9MkU<SDwv`^?UayKg1iwy%!kbZy&qdjmSw
z-vkjoilQ*mG^IU}Bnh$3<l|io*dvZ(D$8<{K~+@*J`AvoCJ|S6_B@ZctyKf$UDqY%
zU!a?sAgsEsb>H__O@bgG@c8%~F)`z4d7fKYmPrjbN1S_sH^qg7YYt!g191nA{9GV2
z`EcLb(031D$9pwRg9_eTOb|Lxz!)abkCP{70GE*!{#lmZ@SrG4rm8AMQG{xajD2N9
ou`-C9g{LqKb?i$9h@Suh0BSqSi~!Qew*UYD07*qoM6N<$f@OJ#%>V!Z
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc947e0a1997c1cd7c0bf170312a93596c2b735c
GIT binary patch
literal 205
zc${<hbhEHb<Yo|LI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+aOf_h(y+oaA7a~3UPWw16lvTY(uk;FIMG!fVH
z$22*lW-R1gT*xqGn<Lw;WUqM_79~sy=`#}SC@-;8s5o-@%p|+eIJ>Y%8<TpO6d9}m
DEje;R
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f3de66a74bcea7892e3bd1b69f33e1b748674f4d
GIT binary patch
literal 361
zc$@)g0ha!WP)<h;3K|Lk000e1NJLTq000XB000pP1^@s63*lDV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz3rR#lRCwBq(!XkhP!tC6qZAy}MIne5
z{PPyw@)%h%WK2oNgsxqaHITJ*>tl3wR&>$n>QHo12M4w11nkfzS3fu)-XD5CQSf~q
zX6E%_2C@jMs=AxPYe5h`Ow$CzFo1`Tk|gb2*9ApUt~YMsC!DROX=}%EKorH_gTHu>
zhezACLD%(vPZ_a>^Crvk&htFL*WcWWu!|)UDnLc>`fdrrTg$SpZKp!pUl?PMWf=^^
zFo{z{3&iI*j-hQ^E~b3rywr7l2*VJ{vgG11r>^UkNs@e~X$pPcb1~%$XH^u%DF^~+
znud$V9B}_l6h)Bd`6Q;iWBEt?S{Eum=NDx-&s9~i9{~mc8n0Yv0MM>800000NkvXX
Hu0mjfFw&Ti
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b0e8097f4b1fe9b8aead6c2b22d23a5702042fbf
GIT binary patch
literal 204
zc${<hbhEHb<Yo|LI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+Zz!m-|zogAK#OpVJ{Jl-aFhT-(=LIs!3(_CE|
z-)<*JH8CyMV74%kP}4J>z@!qOmNqHopTfk2=Is_SHPYU1udO;@(e3_9wqmjqgEaun
CJ8_o)
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ed6efc46cf92608c9fa957fdcaa6e6f70f4c7c6a
GIT binary patch
literal 205
zc${<hbhEHb<Yo|LI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+Zj!hznDoi?74d5vK!A8(61!*F_bqs;ZL{0Say
zUnVE2H8CyMVD>PPP}4J>z$6o(wrpa|KanYkK4}&T9Cl8;Y#Evfb6OQx#SdF5GFSru
DS%YsQ
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..54bcf652c6bf0f540ed3d9a2079fcb5895b0605d
GIT binary patch
literal 205
zc${<hbhEHb6lCCLI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+aOf_k5fSwf1JSkyAnRazdim5-#DF-l)Zu{fvN
zbW_4mgy|iFp_ORI4Tgtn<k(hn9S$g!lIRL_N`4u}IjiM`pg}qF_5+9Rvg#NqGFSru
DbR2Fi
diff --git a/js/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png b/js/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7f7a5d8fd543089c5cc59cd80ef2051519dcbbbe
GIT binary patch
literal 319
zc$@)00l@x=P)<h;3K|Lk000e1NJLTq000pH000XJ1^@s6nIL8d0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy;Ymb6RCwBAJbn5!10J9V#F;=m9f<Ga
zQpAME08vIp#(Od{GNm9I$QL5VkUB|8Nd^fC2`~nNMp6wa<>BGU0T}`UQc_Y3+}zwb
zAaP<1v1evx?ow1#WB_^tEC8aFl$02ln3%eNTuWjM$&{CuXJBV%M-c?^LE_MW#%oBI
zu&{8rkP!AT1j;c0<zhkVa2b*Sw5=3s8&060pa60eC~RWU4Uq==dp^|Pcntx`L&Iwk
zNFTBx)zBDVAO-+q4jf}ZPyr%XKnC#g@@B%KlUM*sJD)y%%K7~H^HYET0{~V_A-!M@
R0Pz3-002ovPDHLkV1l~ea@qg@
diff --git a/js/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif b/js/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..db9ddd0282895511c648154db2bf621e33fcfbe1
GIT binary patch
literal 662
zc${<hbhEHb6k!lycox9${rmUp*RS8Yb?f8DkC!iBzIpSemzUR-D_6dJ`Eu{xy;G-7
zojiGR)22<^w{Jgu`0$-OcOE``_~glx0|yRtb#<LPcW(9S)o<Uv{qW(#{{8z`ty*>V
z?AfbVukPKu_sp3y+qP}nx^?TnfB*9H^FM$7ymRNy`}gnH)zuw8e*E_B+m9bVe);m{
z!Gj0atXZ>X&z=(}PF%ZoZR5s`Z{EB)efsqI^XDHtc<}V;(_g=S9X)z<$BrHK_4R#y
zeV;ykN=Zq1_UzfZb?bir{(blE-7Q<Tym;~A(4j*YFJ650>eZ1WM>cQXykf<Q-Me?M
zUAuPu`t_GCUHbX+=dNA5zJ2@l_3PLF|Nk=#CZPC}g^__FfI$bu0mTUe`{#y$rskH`
zwpIpyLo-8m@%9!wDM@ZtHdbd|A?67jydr)Kev20}YMZo~^0F`TU$@@RSX8W4%7|e-
zlMdqsRyl=cKgq>ARrhR=5NKBC+Hv&wdUmH~E+)VA{!A7Z{F(WAn)!^`){BW)%W}Tr
zG+>i#=4QOUPQX%8QTV64hOAe!o|?-ZFUJK52USI4JTi=49O_nJ7Dy;ws_fdxD$gfy
zXaN(`L~bPk1qlY_Lv3O*VGIf;3!1uk?E^k^I4Cu=DM?7oF%VgJs6&iPM91Kv1CtP&
pkwWB$50BWmnPuD<JU=l^QV>v)k+8hfe3(rw>~NQ?w}t?NH2_QY4EX>6
diff --git a/js/dojo/dijit/themes/nihilo/images/treeHover.png b/js/dojo/dijit/themes/nihilo/images/treeHover.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ca80cd2c4e7a2472044e1c6fce522c43a9b8414b
GIT binary patch
literal 112
zc%17D@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VN3FMcVYMs
zf(!O8p9~a{@N{tuk+_^3vuf$la}F#CNeV(eT1)zz7*<I!ig4#I(FCet@O1TaS?83{
F1OU;$9wz_*
diff --git a/js/dojo/dijit/themes/nihilo/images/treeI.gif b/js/dojo/dijit/themes/nihilo/images/treeI.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6f669e24015476e1d05b9b69e042a91c9105ad2c
GIT binary patch
literal 71
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl01MzTxyT-r$z}by@u9
YCT0I`l--fKwA3$iOVFbiTUi;b0S|H*g#Z8m
diff --git a/js/dojo/dijit/themes/nihilo/images/treeI_half.gif b/js/dojo/dijit/themes/nihilo/images/treeI_half.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e5fd0155bd99e8018ab44f08c8ad22c1a429dbc3
GIT binary patch
literal 65
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfk~oAzTxyT-r$z}by@u9
SCT0I`eB?3hS?4lV25SI>jupfJ
diff --git a/js/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif b/js/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..44ad021a36dea29ecf72868965aed52ce393a41d
GIT binary patch
literal 66
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl0Ebzv1*U-oxEFmrAnZ
T%D(@}edICiS?974Mh0sDw@Vjn
diff --git a/js/dojo/dijit/themes/nihilo/images/treeI_rtl.gif b/js/dojo/dijit/themes/nihilo/images/treeI_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0d32a2f731795134a05617873080e36711806100
GIT binary patch
literal 72
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl0onzv1*U-oxEFmrAnZ
Z%D(@JRWx-|EiqfUO;-E*E?-6lYXCOA7%2b%
diff --git a/js/dojo/dijit/themes/nihilo/images/validationInputBg.gif b/js/dojo/dijit/themes/nihilo/images/validationInputBg.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c28475c8d4e2f1e6a59369f4ee46c17b700dffce
GIT binary patch
literal 93
zc${<hbhEHbWMmLx*v!E2@87@QzkmPu@#D{*KR<u|{QLLsuV25ufB*jf|9=K-K=CIF
anAQOiATt<PxIV}@`be-YI9tiWU=08Y4k9i9
diff --git a/js/dojo/dijit/themes/nihilo/images/validationInputBg.png b/js/dojo/dijit/themes/nihilo/images/validationInputBg.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f3039f952046cce1a599c481603c1e4d616e5b77
GIT binary patch
literal 126
zc%17D@N?(olHy`uVBq!ia0vp^j6f{J!2~2lO_g5*DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MGBrSjv*Ddl79XBYc0&o%q*;|tgLtD$N&HJ8>DO`6b>+0
X-er>(iZbp8s%7wW^>bP0l+XkKkhddj
diff --git a/js/dojo/dijit/themes/nihilo/images/warning.png b/js/dojo/dijit/themes/nihilo/images/warning.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c52f83dc3b5ffb880302f50574758a5618bdc1fc
GIT binary patch
literal 1275
zc%0>v`%jx?6vt23a2e1Gw9xnM%>fQ7mkg6SCYq>A86_fM8HyU>bci^~v`!|M;h4@P
z%QnYAGbSUzhFumIBIzcY&>^f7Y(Xi5GB#+}b)~fQLaDvKZ+-a_{MnP7^T~65Ip6br
za!!{P7f@o@F#td*6pJJT>0231CaNHtRz`qyL{hL924}cy#AC-nvE(&?#+?8yUjz8V
z1c`oK4uItVKwbv`>yx&3mHPn5P+GJ<zbl49rBG>98l6T@N=!mn2$#cUqijBpk7M}K
z{Uv~t01+$}lAbQ`2e71lvS%uOzBaNLk#}y@?l-M_tefFAhwp{ML-~!P2ivEs8rtqX
z+E_8W9qs^9(Ixz#GpF)=>8XkOzPaXWi*54zx28>Z7uQX8@0!!M?(##m`lYjrnXlF!
zA2u3oo>hnU>bSnPN9FPcJ^o<Rjj7emK=16D#S;==7*JS(la_y$Tz;!RWOO*YC#Mdz
zwziLtUs5V>8I3ZvdPt)gSy&i*@IYlSXw7B{l~|0fv)LF-CW4|?x0}P|qHMOy=W}_z
z{!j?R@dd5c=yV(%>Ij5_PS*x}wma>ke5lwtVNgjfzXNq}W$KE2Uaoa(pI}c2vk0d+
zTn@@cd3+v*W6jDh?idy6UnbPutQyyil$3~BtRyxYO-)TnPTo;oUY3=WnVFe^2TmWW
z7j}1+;V!8~f5NBRWBPj!ZmGaMH^V`F7;}V;xo1vQ<6gDtUPBo7&y7|;RJCk8?qB(>
zaI!aBem=Xi1}1vmzIgNv#g7+nd{e)XL2`Xu{4f>f_<(smQz#r}Mo#CZXvEKrCct$h
z`nCY^IqZ|=MUP@(I1c(UlBYj>&#l)fBS98PI`?$)FE8fK9&6CHUs#`3f6Iu!ilX|T
z2B{PZokmNDk7qI%2#dw#aM&oy=kah13x~rvP7n))LV-ZQ<MFs$E~nG!a5!u>o7HMH
zo6RPZ$zU+(bh_o`<@xz}jYcy&J3BKoqgJa`DwR^HR45d3xqM(?KqixQbaXT|HA$t?
zs;a8W%1V()Boqn-0zq0@8lO+h<Z-#gd=8s%6GagONlZ*+G6`J_I-Sr+qf!a6l(@LK
zsHiA1dFvwVc02sXP;Yx&PQdxOq_`~n{|fl7x2AyDefy{4w~heBGPaTgKU_wLW^JM9
zmHmRhn*UT$?&L)0zs`F3cd=;OAH&0q5x-t9irsvF_4ed46!hu(<t6&<HI(kLU@KW<
zAB!4qB|R@n>268-zNa#;LK?qIK|Um9JiF@z$s(KUt6m~q>KyEsWbBS!;UT0mcjwQZ
aeDnC)Q^Q@tEWK&#LkjbYMT2_}eDyCckH_!;
diff --git a/js/dojo/dijit/themes/nihilo/layout/AccordionContainer.css b/js/dojo/dijit/themes/nihilo/layout/AccordionContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/AccordionContainer.css
@@ -0,0 +1,37 @@
+
+.nihilo .dijitAccordionContainer {
+ border-color: #ccc;
+ background-color: #fff;
+}
+.nihilo .dijitAccordionTitle {
+ background:#fafafa url("../images/titleBar.png") repeat-x top left;
+ border-top: 1px solid #dedede;
+ padding: 5px 4px 6px 8px;
+ cursor:pointer;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #6d6d6d;
+}
+.nihilo .dijitAccordionTitle-selected {
+ background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
+ font-weight: bold;
+ border-top: 1px solid #dedede;
+ border-bottom: 1px solid #dedede;
+ padding: 5px 4px 5px 8px;
+ cursor: default;
+ color: #243C5F;
+}
+.nihilo .dijitAccordionArrow {
+ background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -30px top;
+ width:15px;
+ height:15px;
+ margin-top:-1px;
+}
+.nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
+ background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -15px top;
+ margin-top:-1px;
+}
+.nihilo .dijitAccordionText {
+ margin-left: 4px;
+ margin-right: 4px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css b/js/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .nihilo .dijitAccordionArrow {
+ background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
+
+ background-position: -15px top;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/BorderContainer.css b/js/dojo/dijit/themes/nihilo/layout/BorderContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/BorderContainer.css
@@ -0,0 +1,59 @@
+
+.nihilo .dijitBorderContainer {
+ background-color: #fcfcfc;
+ padding: 5px;
+}
+.nihilo .dijitSplitContainer-child,
+.nihilo .dijitBorderContainer-child {
+
+ border: 1px #ccc solid;
+}
+.nihilo .dijitBorderContainer-dijitTabContainerTop,
+.nihilo .dijitBorderContainer-dijitTabContainerBottom,
+.nihilo .dijitBorderContainer-dijitTabContainerLeft,
+.nihilo .dijitBorderContainer-dijitTabContainerRight {
+
+ border: none;
+}
+.nihilo .dijitBorderContainer-dijitBorderContainer {
+
+ border: none;
+ padding: 0px;
+}
+.nihilo .dijitSplitterH,
+.nihilo .dijitGutterH {
+ background:#FCFCFC;
+ border:0;
+ border-left:0px solid #d3d3d3;
+ border-right:0px solid #d3d3d3;
+ height:5px;
+}
+.nihilo .dijitSplitterH .dijitSplitterThumb {
+ background:#8BA0BD none;
+ height:1px;
+ top:2px;
+ width:19px;
+}
+.nihilo .dijitSplitterV,
+.nihilo .dijitGutterV {
+ background:#FCFCFC;
+ border:0;
+ border-top:0px solid #d3d3d3;
+ border-bottom:0px solid #d3d3d3;
+ width:5px;
+}
+.nihilo .dijitSplitterV .dijitSplitterThumb {
+ background:#8BA0BD none;
+ height:19px;
+ left:2px;
+ width:1px;
+}
+.nihilo .dijitSplitterActive {
+ font-size: 1px;
+ background-image: none;
+ background-color: #aaa;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+ filter: Alpha(Opacity=60);
+ margin: 0;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/ContentPane.css b/js/dojo/dijit/themes/nihilo/layout/ContentPane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/ContentPane.css
@@ -0,0 +1,17 @@
+
+.nihilo .dijitContentPane {
+ padding: 0px;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane,
+.nihilo .dijitTabContainerLeft-dijitContentPane,
+.nihilo .dijitTabContainerRight-dijitContentPane,
+.nihilo .dijitTabContainerBottom-dijitContentPane,
+.nihilo .dijitAccordionContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
+.nihilo .dijitSplitContainer-dijitContentPane,
+.nihilo .dijitBorderContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/SplitContainer.css b/js/dojo/dijit/themes/nihilo/layout/SplitContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/SplitContainer.css
@@ -0,0 +1,27 @@
+
+.nihilo .dijitSplitContainerSizerH {
+ background:url("../images/splitContainerSizerV.png") repeat-y #fff;
+ border:0;
+ border-left:0px solid #d3d3d3;
+ border-right:0px solid #d3d3d3;
+ width:5px;
+}
+.nihilo .dijitSplitContainerSizerH .thumb {
+ background:url("../images/splitContainerSizerV-thumb.png") no-repeat;
+ left:1px;
+ width:2px;
+ height:19px;
+}
+.nihilo .dijitSplitContainerSizerV {
+ background:url("../images/splitContainerSizerH.png") repeat-x #fff;
+ border:0;
+ border-top:0px solid #d3d3d3;
+ border-bottom:0px solid #d3d3d3;
+ height:2px;
+}
+.nihilo .dijitSplitContainerSizerV .thumb {
+ background:url("../images/splitContainerSizerH-thumb.png") no-repeat;
+ top:1px;
+ width:19px;
+ height:5px;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/TabContainer.css b/js/dojo/dijit/themes/nihilo/layout/TabContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/TabContainer.css
@@ -0,0 +1,448 @@
+
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+ border: 1px solid #d3d3d3;
+ margin: 0px;
+ padding: 0px;
+ background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+ border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0px;
+ color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+ font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+ padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+ background-color: #ffe284;
+ color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+ width: 15px;
+ height: 15px;
+}
+.nihilo .dijitMenuExpand {
+ width:15px;
+ height:15px;
+ background-image: url(../images/spriteRoundedIconsSmall.png);
+ background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+ background-image:url(../images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+ height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #fff;
+}
+.nihilo .dijitMenuSeparatorBottom {
+ border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+ background-image: url(../images/spriteCheckbox.gif);
+ background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
+.nihilo .dijitTabContainer .tabStripRBtn {
+ margin-right: 21px;
+}
+.nihilo .dijitTabContainer .tabStripLBtn {
+ margin-left: 21px;
+}
+.nihilo .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+ top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripMenuButton-Hover {
+ cursor: pointer;
+}
+.nihilo .dijitTabPaneWrapper {
+ background:#fff;
+ border:1px solid #ccc;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitTabInnerDiv {
+ padding:0px 3px 0px 0px;
+ margin: 0 0 0 4px;
+ background: url("../images/tabContainerSprite.gif") no-repeat;
+ background-position: right -400px;
+}
+.nihilo .dijitTab {
+ line-height:normal;
+ margin:0 2px 0 0;
+ padding:0px;
+ background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
+ color: #6d6d6d;
+ border-bottom: 1px #ccc solid;
+}
+.nihilo .dijitTabInnerDiv .dijitTabContent {
+ padding:3px 3px 3px 4px;
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
+ position: relative;
+}
+.nihilo .dijitTabHover {
+ color: #243C5F;
+ background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
+}
+.nihilo .dijitTabChecked,
+.nihilo .dijitTabCloseButtonChecked
+{
+
+ background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
+ color: #243C5F !important;
+}
+.nihilo .dijitTabContainerNested .dijitTabListWrapper {
+ height: auto;
+}
+.nihilo .dijitTabContainerTabListNested {
+ background: #FDFDFD;
+ border: none;
+ margin-bottom: 0px;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab {
+ background: none;
+ border: none;
+ top: 0px;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+ background: none;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+ text-decoration: underline;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+ text-decoration: underline;
+ font-weight: bold;
+}
+.nihilo .dijitTabContainerSpacerNested {
+
+ height: 0px;
+ border-bottom: 0px;
+}
+.nihilo .dijitTabPaneWrapperNested {
+ border: none;
+}
+.nihilo .dijitTab .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
+ width: 15px;
+ height: 15px;
+ margin-top: -1px;
+}
+.dj_ie6 .nihilo .dijitTab .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
+}
+.nihilo .dijitTab .closeButton-hover .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
+}
+.dj_ie6 .nihilo .dijitTab .closeButton-hover .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
+}
+.nihilo .dijitTab .tabLabel {
+
+ min-height: 15px;
+ display: inline-block;
+}
+.dj_ie6 .nihilo .dijitTabButtonIcon {
+
+ height: 18px;
+ width: 1px;
+}
+.nihilo .dijitTabContainerTop-tabs {
+ border-bottom: none;
+ padding-bottom: 1px;
+ background-position: bottom;
+ padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-top,
+.dj_ie7 .nihilo .dijitTabListContainer-top {
+ z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerTop-tabs,
+.dj_ie7 .nihilo .dijitTabContainerTop-tabs {
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 0px;
+}
+.nihilo .dijitTabContainerTopNoStrip {
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerTop-container {
+ border-top: none;
+}
+.nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
+ border-bottom-color: #f8f8f8;
+}
+.nihilo .dijitTabContainer .dijitTabContainerTopStrip {
+ border-bottom: none;
+ padding-top: 1px;
+ margin-top: 1px;
+ background: #f2f2f2;
+ border-top: 1px solid #CCC;
+ border-right: 1px solid #CCC;
+ border-left: 1px solid #CCC;
+}
+.nihilo .dijitTabContainerBottom-tabs {
+ border-top: none;
+ background-position: top;
+ padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-bottom,
+.dj_ie7 .nihilo .dijitTabListContainer-bottom {
+ z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerBottom-tabs,
+.dj_ie7 .nihilo .dijitTabContainerBottom-tabs {
+ border-top: 1px solid #ccc;
+ margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-container {
+ border-bottom: none;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTab {
+ border-bottom: none;
+ border-top: 1px solid #ccc;
+ background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+ border-top-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+ background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover {
+ color: #243C5F;
+ background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked,
+.nihilo .dijitTabContainerBottom-tabs .dijitTabCloseButtonChecked
+{
+
+ background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+ background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
+ border: 1px solid #ccc;
+ background: #f2f2f2;
+ border-top: none;
+ padding-bottom: 2px;
+}
+.nihilo .dijitTabContainerBottom-spacer,
+.nihilo .dijitTabContainerTop-spacer {
+ height: 2px;
+ border: 1px solid #ccc;
+ background: #f8f8f8;
+}
+.nihilo .dijitTabContainerTop-spacer {
+ margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-spacer {
+ margin-bottom: -1px;
+}
+.nihilo .dijitTabContainerRight-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerRight .dijitTabListWrapper {
+ padding-right: 3px;
+}
+.nihilo .dijitTabContainerRight-container {
+ border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ border-bottom: none;
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid #dedede !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+ border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+ border-left-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+ background: url("../images/tabRightChecked.gif") no-repeat left top !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #efefef 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+ background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
+}
+.nihilo .dijitTabContainerRightStrip {
+ padding-right: 2px;
+ border: 1px solid #ccc;
+ border-left: none;
+ background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerLeft-container {
+ border-left: none;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab {
+ border-right: 1px solid #ccc;
+ border-bottom: 1px solid #dedede;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked {
+ border-right: 1px solid #f8f8f8;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ background: url("../images/tabLeftChecked.gif") no-repeat right top;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #efefef 1px;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerLeftStrip {
+ padding-left: 2px;
+ border: 1px solid #ccc;
+ border-right: none;
+}
+.nihilo .dijitTabContainerLeftStrip {
+ background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ margin-right:auto;
+ margin-bottom:2px;
+}
+.nihilo .dijitTabContainerLeft-spacer,
+.nihilo .dijitTabContainerRight-spacer {
+ width: 2px;
+ border: 1px solid #ccc;
+ background: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-spacer {
+ border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs {
+ padding-top: 3px;
+ height: 100%;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+ height: 100%;
+}
+.nihilo .dijitTabContainerLeft-spacer {
+ border-left: none;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+ border-left: 0px solid #ccc;
+ border-top: 0px solid #ccc;
+ border-right: 0px solid #ccc;
+ padding-top: 0px;
+ padding-left: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+ margin-right: 0px;
+}
+.nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding: 5px 0 6px;
+}
+.dj_ie6 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding-bottom: 7px;
+}
+.nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding: 3px 0 5px;
+}
+.dj_ie6 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding-top: 4px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+
+ width: 21px;
+}
+.nihilo .dijitTabContainer .tabStripButton img {
+ height: 14px;
+ background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .nihilo .dijitTabContainer .tabStripButton img {
+ background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitTabContainer .tabStripSlideButtonRight img {
+ background-position: -30px top;
+}
+.nihilo .dijitTabContainer .tabStripMenuButton img {
+ background-position: -15px top;
+}
+.nihilo .dijitTabContainerTopNone {
+ padding-top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton-top {
+ margin-top: 1px;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom {
+ background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+ border-bottom: medium none;
+ border-top: 1px solid #CCCCCC;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+ background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+ background: transparent;
+}
diff --git a/js/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css b/js/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css
@@ -0,0 +1,34 @@
+.dijitRtl .nihilo .dijitTab {
+ margin-right:0;
+ margin-left:2px;
+}
+.dijitRtl .nihilo .dijitTabContainer .tabStripButton {
+ margin-left: 0;
+}
+.dijitRtl .nihilo .dijitTabContainerTopStrip,
+.dijitRtl .nihilo .dijitTabContainerBottomStrip,
+.dijitRtl .nihilo .dijitTabContainerTop-tabs,
+.dijitRtl .nihilo .dijitTabContainerBottom-tabs {
+ padding-left: 0;
+ padding-right: 3px;
+}
+.dijitRtl .nihilo .dijitTabInnerDiv {
+ padding-left: 3px;
+ padding-right: 4px;
+}
+.dijitRtl .nihilo .dijitTabPaneWrapper {
+ #zoom: 1;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerLeft-tabs {
+ margin-left: 0px !important;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
+ margin-right: 0px !important;
+}
+.dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
+ margin-left:0px;
+}
+.dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
+ width : 1%;
+}
diff --git a/js/dojo/dijit/themes/nihilo/nihilo.css b/js/dojo/dijit/themes/nihilo/nihilo.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/nihilo.css
@@ -0,0 +1,3159 @@
+
+.dijitReset {
+
+ margin:0;
+ border:0;
+ padding:0;
+ line-height:normal;
+ font: inherit;
+ color: inherit;
+}
+.dijitInline {
+
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+ border:0;
+ padding:0;
+ vertical-align:middle;
+ #vertical-align: auto;
+}
+.dijitHidden {
+
+ display: none !important;
+}
+.dijitVisible {
+
+ display: block !important;
+ position: relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitInputField INPUT {
+ font-size: 100%;
+}
+.dj_ie .dijitInputField INPUT {
+ margin: -1px 0 !important;
+}
+.dijitInlineTable {
+
+ display:inline-table;
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+ box-sizing: content-box; -moz-box-sizing: content-box;
+ border:0;
+ padding:0;
+}
+.dijitTeeny {
+ font-size:1px;
+ line-height:1px;
+}
+.dijitPopup {
+ position: absolute;
+ background-color: transparent;
+ margin: 0;
+ border: 0;
+ padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup div,
+.dijit_a11y .dijitPopup table,
+.dijit_a11y .dijitTooltipContainer {
+ background-color: white !important;
+}
+.dijitInputField {
+ overflow:hidden;
+ #zoom:1;
+}
+.dijitPositionOnly {
+
+ padding: 0 !important;
+ border: 0 !important;
+ background-color: transparent !important;
+ background-image: none !important;
+ height: auto !important;
+ width: auto !important;
+}
+.dijitNonPositionOnly {
+
+ float: none !important;
+ position: static !important;
+ margin: 0 0 0 0 !important;
+ vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: -1;
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+.dijitClickableRegion {
+
+ background-color: #e2ebf2;
+ cursor: text;
+}
+.dijitDisplayNone {
+
+ display:none !important;
+}
+.dijitContainer {
+
+ overflow: hidden;
+}
+.dijit_a11y * {
+ background-image:none !important;
+}
+.dijit_a11y .dijitCalendarIncrementControl {
+ display: none;
+}
+.dijit_a11y .dijitA11ySideArrow {
+ display: inline !important;
+ cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+ padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+ border: solid 1px black;
+ padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+ padding-bottom: 0.1em !important;
+}
+.dijit_a11y .dijit * {
+ background:white !important;
+ color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+ border-color: black!important;
+ border-style: outset!important;
+ border-width: medium!important;
+}
+.dijit_a11y .dijitComboBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitComboBoxReadOnly .dijitButtonNode,
+.dijit_a11y .dijitSpinnerReadOnly .dijitButtonNode,
+.dijit_a11y .dijitSpinnerReadOnly .dijitInputField,
+.dijit_a11y .dijitButtonDisabled .dijitButtonNode,
+.dijit_a11y .dijitDropDownButtonDisabled .dijitButtonNode,
+.dijit_a11y .dijitComboButtonDisabled .dijitButtonNode,
+.dijit_a11y .dijitComboBoxDisabled .dijitInputField,
+.dijit_a11y .dijitComboBoxDisabled .dijitButtonNode,
+.dijit_a11y .dijitSpinnerDisabled .dijitButtonNode,
+.dijit_a11y .dijitSpinnerDisabled .dijitInputField {
+ border-style: outset!important;
+ border-width: medium!important;
+ border-color: #999 !important;
+ color:#999 !important;
+}
+.dijitButtonNode * {
+ vertical-align: middle;
+}
+.dijit_a11y .dijitArrowButtonInner {
+ width: 1em;
+ display: none !important;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+ background:no-repeat center;
+ width: 16px;
+}
+.dijitComboBox .dijitArrowButtonInner {
+ display: block;
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+ display: inline !important;
+}
+.dijitLeft {
+
+ background-position:left top;
+ background-repeat:no-repeat;
+}
+.dijitStretch {
+
+ white-space:nowrap;
+ background-repeat:repeat-x;
+}
+.dijitRight {
+
+ #display:inline;
+ background-position:right top;
+ background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+
+ margin: 0.2em;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+ margin: 0;
+}
+.dj_ie8 .dijitToolbar button,
+.dj_webkit .dijitToolbar button {
+
+ padding: 1px 2px;
+}
+.dj_ie .dijitToolbar .dijitComboBox{
+
+ vertical-align: middle;
+}
+.dj_ie .dijitComboButton {
+
+ margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+ padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+ padding:0;
+}
+.dijitButtonNode {
+
+ border:1px solid gray;
+ margin:0;
+ line-height:normal;
+ vertical-align: middle;
+ #vertical-align: auto;
+ text-align:center;
+ white-space: nowrap;
+}
+.dijitButtonNode, .dijitButtonNode * {
+ cursor: pointer;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled,
+.dijitDisabledClickableRegion {
+ cursor: not-allowed !important;
+}
+.dj_ie .dijitButtonNode {
+
+ zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+
+ overflow: visible;
+}
+.dijitArrowButton {
+
+
+ padding: 0 .4em;
+}
+DIV.dijitArrowButton {
+ float: right;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
+ border-style: solid;
+ border-width: 0 0 0 1px !important;
+ padding: 0;
+ position: absolute;
+ right: 0;
+ float: none;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
+ position: absolute;
+ height: 50%;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitDownArrowButton {
+ top: auto;
+ bottom: 0;
+ border-top-width: 1px !important;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitUpArrowButton {
+ top: 0;
+ bottom: auto;
+}
+TABLE.dijitComboButton {
+
+ border-collapse: collapse;
+ border:0;
+ padding:0;
+ margin:0;
+}
+.dijitToolbar .dijitComboButton {
+
+ border-collapse: separate;
+}
+.dj_ie BUTTON.dijitButtonNode {
+ overflow: visible;
+}
+table .dijitButton .dijitButtonNode,
+table .dijitComboButton .dijitButtonNode {
+ #overflow:hidden;
+}
+.dijitButtonNode IMG {
+
+ vertical-align:middle;
+
+}
+.dijitTextBox,
+.dijitComboBox,
+.dijitSpinner {
+ border: solid black 1px;
+ #overflow: hidden;
+ width: 15em;
+ vertical-align: middle;
+ #vertical-align: auto;
+}
+.dijitTimeTextBox {
+ width: 8em;
+}
+.dijitTextBox input:focus,
+.dijitComboBox input:focus,
+.dijitSpinner input:focus {
+ outline: none;
+}
+.dijitTextBoxFocused,
+.dijitComboBoxFocused,
+.dijitSpinnerFocused, .dijitSpinnerUpArrowActive, .dijitSpinnerDownArrowActive,
+.dijitTextAreaFocused {
+
+ outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT,
+.dijitComboBox INPUT,
+.dijitSpinner INPUT {
+ border-left: solid black 1px;
+ display:inline;
+ position:static !important;
+ border:0 !important;
+ margin:0 !important;
+ vertical-align:top !important;
+ background-color:transparent !important;
+ background-image:none !important;
+ width:100% !important;
+}
+.dijitValidationIcon {
+ visibility: hidden;
+ display: block;
+ padding: 0 2px;
+ float: right;
+ height: auto;
+}
+.dijitValidationIconText {
+ visibility: hidden;
+ display: none;
+ float:right;
+ font-family: sans-serif;
+ font-style:italic;
+ font-size: 0.75em;
+ padding-right: 0.15em;
+ line-height: 160%;
+}
+.dijit_a11y .dijitValidationIcon { display: none !important; }
+.dijit_a11y .dijitValidationIconText { display: block !important; }
+.dijitError .dijitValidationIcon,
+.dijitError .dijitValidationIconText {
+ visibility: visible;
+}
+.dijitTextBox .dijitArrowButton {
+
+ display:none;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+ padding: 0;
+ border: 0;
+ width: 16px;
+ height: 16px;
+ background-position:center center;
+ background-repeat:no-repeat;
+ overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+ margin: 0;
+ padding: 0;
+ display: block;
+}
+.dijitCheckBoxInput {
+
+ opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+ filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+ width: auto;
+ height: auto;
+}
+.dijit_a11y .dijitCheckBoxInput {
+ opacity: 1;
+ filter: none;
+ width: auto;
+ height: auto;
+}
+.dijitProgressBarEmpty{
+
+ position:relative;overflow:hidden;
+ border:1px solid black;
+ z-index:0;
+}
+.dijitProgressBarFull {
+
+ position:absolute;
+ overflow:hidden;
+ z-index:-1;
+ top:0;
+ width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+ height:1.6em;
+}
+.dijitProgressBarTile {
+
+ position:absolute;
+ overflow:hidden;
+ top:0;
+ left:0;
+ bottom:0;
+ right:0;
+ margin:0;
+ padding:0;
+ width:auto;
+ height:auto;
+ background-color:#aaa;
+ background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile{
+
+ border-width:4px;
+ border-style:solid;
+ background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+
+ position:static;
+
+ height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+ visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+ display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+ display:block;
+ position:absolute;
+ top:0;
+ bottom:0;
+ margin:0;
+ padding:0;
+ width:100%;
+ height:auto;
+}
+.dijitProgressBarLabel {
+ display:block;
+ position:static;
+ width:100%;
+ text-align:center;
+ background-color:transparent !important;
+}
+.dijitTooltip {
+ position: absolute;
+ z-index: 2000;
+ display: block;
+
+ left: 50%;
+ top: -10000px;
+ overflow: visible;
+}
+.dijitTooltipContainer {
+ border: solid black 2px;
+ background: #b8b5b5;
+ color: black;
+ font-size: small;
+}
+.dijitTooltipFocusNode {
+ padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+ position: absolute;
+}
+.dijitTooltipData {
+ display:none;
+}
+.dijitLayoutContainer{
+ position: relative;
+ display: block;
+ overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+ position: absolute;
+ overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+ position:relative;
+ overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+ position: absolute !important;
+ z-index: 2;
+}
+.dijitBorderContainer > .dijitTextArea {
+
+ resize: none;
+}
+.dijitGutter {
+
+ position: absolute;
+ font-size: 1px;
+}
+.dijitSplitter {
+ position: absolute;
+ overflow: hidden;
+ z-index: 10;
+ background-color: #fff;
+ border-color: gray;
+ border-style: solid;
+ border-width: 0;
+}
+.dj_ie .dijitSplitter {
+ z-index: 1;
+}
+.dijitSplitterActive {
+ z-index: 11 !important;
+}
+.dijitSplitterCover{
+ position:absolute;
+ z-index:-1;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+}
+.dijitSplitterCoverActive{
+ z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover{
+ background: white;
+ filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+ height: 7px;
+ border-top:1px;
+ border-bottom:1px;
+ cursor: ns-resize;
+}
+.dijitSplitterV {
+ width: 7px;
+ border-left:1px;
+ border-right:1px;
+ cursor: ew-resize;
+}
+.dijitSplitContainer{
+ position: relative;
+ overflow: hidden;
+ display: block;
+}
+.dijitSplitPane{
+ position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+ position:absolute;
+ font-size: 1px;
+ cursor: move;
+ cursor: w-resize;
+ background-color: ThreeDFace;
+ border: 1px solid;
+ border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+ margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+ overflow:hidden;
+ position:absolute;
+ top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+ position:absolute;
+ left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+ font-size: 1px;
+ background-color: ThreeDShadow;
+ -moz-opacity: 0.5;
+ opacity: 0.5;
+ filter: Alpha(Opacity=50);
+ margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+ cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+ cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+ border-top:1px solid #d3d3d3 !important;
+ border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+ border-left:1px solid #d3d3d3 !important;
+ border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+ display: block;
+ overflow: auto;
+}
+.dijitContentPaneSingleChild {
+
+ overflow: hidden;
+}
+.dijitTitlePane {
+ display: block;
+ overflow: hidden;
+}
+.dijitColorPalette {
+ border:1px solid #999;
+ background:#fff;
+ -moz-border-radius:3pt;
+}
+img.dijitColorPaletteUnder {
+ border-style:none;
+ position:absolute;
+ left:0;
+ top:0;
+}
+.dijitColorPaletteInner {
+ position: relative;
+ overflow:hidden;
+ outline:0;
+}
+.dijitPaletteCell {
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ overflow: hidden;
+ z-index: 10;
+ outline-width: 0;
+}
+.dijitPaletteImg {
+ width: 16px;
+ height: 14px;
+ position: absolute;
+ top: 1px;
+ left: 1px;
+ overflow: hidden;
+ cursor: default;
+ border:1px solid #999;
+
+}
+.dijitPaletteCellHighlight img {
+ width: 14px;
+ height: 12px;
+ position: absolute;
+ top: 1px;
+ left: 1px;
+ overflow: hidden;
+ cursor: default;
+ border:2px solid #000;
+ outline:1px solid #dedede;
+
+}
+.dijit_a11y .dijitPaletteCell {
+ background-color:transparent !important;
+}
+.dijit_a11y .dijitPaletteImg {
+ background-color:transparent !important;
+}
+.dijitAccordionContainer {
+ border:1px solid #b7b7b7;
+ border-top:0 !important;
+}
+.dj_webkit .dijitAccordionContainer div:focus {
+ outline:none;
+}
+.dj_ff3 .dijitAccordionContainer div:focus {
+ outline:none;
+}
+.dijitAccordionTitle {
+ cursor: pointer;
+}
+.dijitAccordionFocused {
+ text-decoration: underline;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+ display: none;
+ font-size: 0.65em;
+ font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitle-selected .arrowTextDown {
+ display: inline;
+}
+.dijit_a11y .dijitAccordionTitle-selected .arrowTextUp {
+ display: none;
+}
+.dijitCalendarContainer thead tr th, .dijitCalendarContainer thead tr td, .dijitCalendarContainer tbody tr td, .dijitCalendarContainer tfoot tr td {
+ padding: 0;
+}
+.dijitCalendarNextYear {
+ margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+ margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+ vertical-align: middle;
+}
+.dijitCalendarDisabledDate {
+ color:gray !important;
+}
+.dijitCalendarPreviousMonthDisabled,
+.dijitCalendarCurrentMonthDisabled,
+.dijitCalendarNextMonthDisabled {
+ cursor:default !important
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarBodyContainer tbody tr td,
+.dijitCalendarDateTemplate,
+.dijitCalendarContainer .dijitInline {
+ cursor:pointer;
+}
+.dijitSpacer {
+
+ position: relative;
+ height: 1px;
+ overflow: hidden;
+ visibility: hidden;
+}
+.dijitMenu {
+ border:1px solid black;
+ background-color:white;
+}
+.dijitMenuTable {
+ margin:1px 0;
+ border-collapse:collapse;
+ border-width:0;
+ background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+ border-right:hidden;
+}
+.dijitMenuItem{
+ text-align: left;
+ white-space: nowrap;
+ padding:.1em .2em;
+ cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+
+ background-color:black;
+ color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+ background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+
+ opacity:0.3;
+ cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+ color:gray !important;
+ filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+ position: relative;
+ vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+ border: 1px #fff dotted !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+ padding: none !important;
+ background:none ! important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+ border-width: 1px;
+ border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+ position:static;
+}
+.dijitMenuExpandA11y {
+ display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+ display: inline;
+}
+.dijitMenuSeparator td {
+ border: 0;
+ padding: 0;
+}
+.dijitMenuSeparatorTop {
+ height: 50%;
+ margin: 0;
+ margin-top:3px;
+ font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+ height: 50%;
+ margin: 0;
+ margin-bottom:3px;
+ font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+ vertical-align: middle;
+ visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+ visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+ display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+ display: none;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+ cursor: default;
+}
+.dijitTabContainerNoLayout {
+ width: 100%;
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+ overflow: visible !important;
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+ z-index:0;
+ overflow: hidden;
+ border: 1px solid black;
+}
+.dijitTabContainer .nowrapTabStrip {
+ width: 50000px;
+ display: block;
+ position: relative;
+}
+.dijitTabContainer .dijitTabListWrapper {
+ overflow: hidden;
+}
+.dijit_a11y .dijitTabContainer .tabStripButton img {
+
+ display: none;
+}
+.dijitTabContainerTop-tabs {
+ border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+ border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+ border-right: 1px solid black;
+ float: left;
+}
+.dijitTabContainerLeft-container {
+ border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+ border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+ border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+ border-left: 1px solid black;
+ float: left;
+}
+.dijitTabContainerRight-container {
+ border-right: 0px;
+}
+div.dijitTabBtnDisabled, .dj_ie div.dijitTabBtnDisabled {
+ cursor: auto;
+}
+.dijitTab {
+ position:relative;
+ cursor:pointer;
+ white-space:nowrap;
+ z-index:3;
+}
+.dijitTab * {
+
+ vertical-align: middle;
+}
+.dijitTabChecked {
+ cursor: default;
+}
+.dijitTabButtonIcon {
+ height: 18px;
+}
+.dijitTabContainerTop-tabs .dijitTab {
+ top: 1px;
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+ top: -1px;
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+ left: 1px;
+}
+.dijitTabContainerRight-tabs .dijitTab {
+ left: -1px;
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+}
+.dijitTabInnerDiv {
+ position:relative;
+}
+.tabStripButton {
+ z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+ display: none;
+}
+.dijitTab .closeButton {
+ margin-left: 1em;
+}
+.dijitTab .closeText {
+ display:none;
+}
+.dijit_a11y .closeText {
+ display:inline;
+ margin: 0px 6px;
+}
+.dijit_a11y .dijitTab .closeImage {
+ display:none;
+}
+.dijit_a11y .closeButton-hover .closeText {
+ border:thin solid;
+}
+.dijit_a11y .dijitTabChecked {
+ border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+ border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+
+ border: none !important;
+}
+.dijitInlineEditor {
+
+ position:relative;
+ vertical-align:bottom;
+}
+.dj_ie .dijitInlineEditor {
+ vertical-align:middle;
+}
+.dijitInlineValue {
+
+}
+.dijitInlineEditor .dijitButtonContainer {
+
+ position:absolute;
+ right:0;
+ overflow:visible;
+}
+.dijitInlineEditor .saveButton,
+.dijitInlineEditor .cancelButton {
+}
+.dijitTreeIndent {
+
+ width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+ white-space: nowrap;
+}
+.dijitTreeRow img {
+
+ vertical-align: middle;
+}
+.dijitTreeContent {
+ cursor: default;
+}
+.dijitExpandoText {
+ display: none;
+}
+.dijit_a11y .dijitExpandoText {
+ display: inline;
+ padding-left: 10px;
+ padding-right: 10px;
+ font-family: monospace;
+ border-style: solid;
+ border-width: thin;
+ cursor: pointer;
+}
+.dijitTreeLabel {
+ margin: 0px 4px;
+}
+.dijitDialog {
+ position: absolute;
+ z-index: 999;
+ padding: 1px;
+ overflow: hidden;
+}
+.dijitDialogFixed div.dijitDialogTitleBar {
+ cursor:default;
+}
+.dijitDialogUnderlayWrapper {
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 998;
+ display: none;
+ background: transparent !important;
+}
+.dijitDialogUnderlay {
+ background: #eee;
+ opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+ filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitInputLayoutContainer,
+.dijit_a11y .dijitDialog {
+ opacity: 1 !important;
+ background-color: white !important;
+}
+.dijitDialog .closeText {
+ display:none;
+
+ position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+ display:inline;
+}
+.dijitSliderMoveable {
+ z-index:99;
+ position:absolute !important;
+ display:block;
+ vertical-align:middle;
+}
+.dijitSliderMoveableH {
+ right:0;
+}
+.dijit_a11y div.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+ margin:0;
+ padding:0;
+ position:absolute !important;
+ border:8px solid gray;
+ width:0;
+ height:0;
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+ border:4px solid #000;
+ height:8px;
+ width:8px;
+}
+.dijitSliderImageHandleV {
+ top:-8px;
+ left:-6px;
+}
+.dijitSliderImageHandleH {
+ left:-8px;
+ top:-5px;
+ vertical-align:top;
+}
+.dijitSliderBar {
+ border-style:solid;
+ border-color:black;
+}
+.dijitSliderBarContainerV {
+ position:relative;
+ height:100%;
+ z-index:1;
+}
+.dijitSliderBarContainerH {
+ position:relative;
+ z-index:1;
+}
+.dijitSliderBarH {
+ height:4px;
+ border-width:1px 0;
+}
+.dijitSliderBarV {
+ width:4px;
+ border-width:0 1px;
+}
+.dijitSliderProgressBar {
+ background-color:red;
+ z-index:1;
+}
+.dijitSliderProgressBarV {
+ position:static !important;
+ height:0%;
+ vertical-align:top;
+ text-align:left;
+}
+.dijitSliderProgressBarH {
+ position:absolute !important;
+ width:0%;
+ vertical-align:middle;
+ overflow:visible;
+}
+.dijitSliderRemainingBar {
+ overflow:hidden;
+ background-color:transparent;
+ z-index:1;
+}
+.dijitSliderRemainingBarV {
+ height:100%;
+ text-align:left;
+}
+.dijitSliderRemainingBarH {
+ width:100% !important;
+}
+.dijitSliderBumper {
+ overflow:hidden;
+ z-index:1;
+}
+.dijitSliderBumperV {
+ width:4px;
+ height:8px;
+ border-width:0 1px;
+}
+.dijitSliderBumperH {
+ width:8px;
+ height:4px;
+ border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+ background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+ background-color:transparent;
+}
+.dijitSliderDecorationH {
+ text-align:center;
+}
+.dijitSlider .dijitSliderButton {
+ font-family:monospace;
+ margin:0;
+ padding:0;
+ display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+ visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+ text-align:center;
+ height:0;
+}
+.dijitSlider .dijitButtonNode {
+ padding:0;
+ display:block;
+}
+.dijitRuleContainer {
+ position:relative;
+ overflow:visible;
+}
+.dijitRuleContainerV {
+ height:100%;
+ line-height:0;
+ float:left;
+ text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+ line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+ line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+ margin:0 0 1px 0;
+}
+.dijitRuleMark {
+ position:absolute;
+ border:1px solid black;
+ line-height:0;
+ height:100%;
+}
+.dijitRuleMarkH {
+ width:0;
+ border-top-width:0 !important;
+ border-bottom-width:0 !important;
+ border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+ position:absolute;
+}
+.dijitRuleLabelContainerH {
+ text-align:center;
+ display:inline-block;
+}
+.dijitRuleLabelH {
+ position:relative;
+ left:-50%;
+}
+.dijitRuleMarkV {
+ height:0;
+ border-right-width:0 !important;
+ border-bottom-width:0 !important;
+ border-left-width:0 !important;
+ width:100%;
+ left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+ margin-top:-.55em;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+ display: inline !important;
+}
+.dj_ie7 .dijitButtonNode > BUTTON.dijitButtonContents > * {
+ position: relative;
+}
+.dijitTextArea {
+ width:100%;
+ overflow-y: auto;
+}
+.dijitTextArea[cols] {
+ width:auto;
+}
+.dj_ie .dijitTextAreaCols {
+ width:auto;
+}
+.dijitTextArea > DIV {
+ text-decoration:none;
+ overflow:auto;
+ min-height: 1.40em;
+}
+.dj_ie .dijitTextArea p {
+ margin-top:0;
+ margin-bottom:0;
+ line-height: normal !important;
+}
+.dijitToolbarSeparator {
+ height: 18px;
+ width: 5px;
+ padding: 0 1px;
+ margin: 0;
+}
+.dijitIEFixedToolbar {
+ position:absolute;
+
+ top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.RichTextEditable {
+ display: block;
+}
+.dijitTimePickerItemInner {
+ text-align:center;
+ border:0;
+ padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+ border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+ border-top: none !important;
+}
+.dijitTimePickerTick {
+ color:#CCC;
+}
+.dijitTimePickerMarker {
+ color:black;
+ background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+ font-weight:bold;
+ color:#333;
+ background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+ background-color:gray;
+ color:white;
+ cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItem {
+ border-bottom:1px solid #333;
+}
+.dijitToggleButtonIconChar {
+ display:none !important;
+}
+.dijit_a11y .dijitToggleButtonIconChar {
+ display:inline !important;
+}
+.dijit_a11y .dijitToggleButtonIconChar {
+ visibility:hidden;
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+ visibility:visible !important;
+}
+.dijitArrowButtonChar {
+ display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+ display:inline !important;
+}
+.dijitInputLayoutContainer {
+ position: relative;
+ overflow: hidden;
+}
+.dijitSpinnerButtonContainer {
+ float: right;
+ width: 18px;
+ position: relative;
+ overflow: hidden;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
+ height: 50%;
+ width: 16px;
+ overflow: hidden;
+}
+.dijitSpinner .dijitInputLayoutContainer .dijitArrowButtonInner {
+ overflow: hidden;
+ line-height: 50%;
+}
+.dijit_a11y .dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
+ width: 100%;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButton .dijitArrowButtonChar {
+ font-size: 0.4em;
+ vertical-align: top;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+ width: 0.5em;
+ margin-left: 2px;
+ overflow: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+ border-width: 1px 0px 0px 1px;
+ border-style: solid !important;
+}
+.dijitSelect {
+ margin: 0.2em;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+ vertical-align: middle;
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+ vertical-align: top;
+}
+.dijitSelect .dijitButtonNode {
+ text-align: left;
+}
+.dijitRtl .dijitSelect .dijitButtonNode {
+ text-align: right;
+}
+.dijitToolbar .dijitSelect {
+ margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+ padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+ border-style: outset!important;
+ border-width: medium!important;
+ border-color: #999 !important;
+ color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+ padding: 0px;
+ background: transparent none;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+ width: 100%;
+}
+.dijitSelect .dijitArrowButton {
+ width: 16px;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+
+ position: static;
+}
+.dijitSelectLabel *
+{
+ vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+ font-weight: bold;
+}
+.dijitSelectMenu {
+ border-width: 1px;
+}
+.dijitSelect .dijitButtonContents {
+ white-space: nowrap;
+}
+.dijitSelectMenu .dijitMenuTable {
+ margin: 0px;
+ background-color: transparent;
+}
+.dijitTextBoxReadOnly,
+.dijitComboBoxReadOnly,
+.dijitSpinnerReadOnly,
+.dijitTextAreaReadOnly,
+.dijitTextBoxDisabled,
+.dijitComboBoxDisabled,
+.dijitSpinnerDisabled,
+.dijitTextAreaDisabled {
+ color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT,
+.dj_webkit .dijitComboBoxDisabled INPUT,
+.dj_webkit .dijitSpinnerDisabled INPUT {
+ color: #eee;
+}
+.dj_webkit INPUT.dijitTextBoxDisabled,
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+ color: #333;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+ opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+ filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+ font-family: monospace;
+ font-size: 1em;
+ line-height: 1em;
+ height: auto;
+ width: auto;
+ margin: 0px 4px;
+}
+.dijitForceStatic {
+ position: static !important;
+}
+.nihilo .dojoDndItemBefore {
+ border-top: 2px solid #369;
+}
+.nihilo .dojoDndItemAfter {
+ border-bottom: 2px solid #369;
+}
+.nihilo .dojoDndItemOver {
+ cursor:pointer;
+}
+.nihilo table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.nihilo .dojoDndAvatar td { border: none; }
+.nihilo .dojoDndAvatar tr { border: none; }
+.nihilo .dojoDndAvatarHeader td { height: 20px; padding: 0 0 0 21px; }
+.nihilo .dojoDndAvatarItem td { padding: 2px;}
+.nihilo.dojoDndMove .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo .dijitContentPane {
+ padding: 0px;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane,
+.nihilo .dijitTabContainerLeft-dijitContentPane,
+.nihilo .dijitTabContainerRight-dijitContentPane,
+.nihilo .dijitTabContainerBottom-dijitContentPane,
+.nihilo .dijitAccordionContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
+.nihilo .dijitSplitContainer-dijitContentPane,
+.nihilo .dijitBorderContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+ border: 1px solid #d3d3d3;
+ margin: 0px;
+ padding: 0px;
+ background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+ border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0px;
+ color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+ font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+ padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+ background-color: #ffe284;
+ color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+ width: 15px;
+ height: 15px;
+}
+.nihilo .dijitMenuExpand {
+ width:15px;
+ height:15px;
+ background-image: url(images/spriteRoundedIconsSmall.png);
+ background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+ background-image:url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+ height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #fff;
+}
+.nihilo .dijitMenuSeparatorBottom {
+ border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+ background-image: url(images/spriteCheckbox.gif);
+ background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
+.nihilo .dijitTabContainer .tabStripRBtn {
+ margin-right: 21px;
+}
+.nihilo .dijitTabContainer .tabStripLBtn {
+ margin-left: 21px;
+}
+.nihilo .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+ top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripMenuButton-Hover {
+ cursor: pointer;
+}
+.nihilo .dijitTabPaneWrapper {
+ background:#fff;
+ border:1px solid #ccc;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitTabInnerDiv {
+ padding:0px 3px 0px 0px;
+ margin: 0 0 0 4px;
+ background: url(images/tabContainerSprite.gif) no-repeat;
+ background-position: right -400px;
+}
+.nihilo .dijitTab {
+ line-height:normal;
+ margin:0 2px 0 0;
+ padding:0px;
+ background: url(images/tabContainerSprite.gif) no-repeat 0 -300px;
+ color: #6d6d6d;
+ border-bottom: 1px #ccc solid;
+}
+.nihilo .dijitTabInnerDiv .dijitTabContent {
+ padding:3px 3px 3px 4px;
+ background: url(images/tabContainerSprite.gif) repeat-x 0 -350px;
+ position: relative;
+}
+.nihilo .dijitTabHover {
+ color: #243C5F;
+ background: url(images/tabContainerSprite.gif) no-repeat 0px -150px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv {
+ background: url(images/tabContainerSprite.gif) no-repeat right -250px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url(images/tabContainerSprite.gif) repeat-x 0 -200px;
+}
+.nihilo .dijitTabChecked,
+.nihilo .dijitTabCloseButtonChecked
+{
+
+ background: url(images/tabContainerSprite.gif) no-repeat 0px -0px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv {
+ background: url(images/tabContainerSprite.gif) no-repeat right -100px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url(images/tabContainerSprite.gif) repeat-x 0 -50px;
+ color: #243C5F !important;
+}
+.nihilo .dijitTabContainerNested .dijitTabListWrapper {
+ height: auto;
+}
+.nihilo .dijitTabContainerTabListNested {
+ background: #FDFDFD;
+ border: none;
+ margin-bottom: 0px;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab {
+ background: none;
+ border: none;
+ top: 0px;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+ background: none;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+ text-decoration: underline;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+ text-decoration: underline;
+ font-weight: bold;
+}
+.nihilo .dijitTabContainerSpacerNested {
+
+ height: 0px;
+ border-bottom: 0px;
+}
+.nihilo .dijitTabPaneWrapperNested {
+ border: none;
+}
+.nihilo .dijitTab .closeImage {
+ background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px top;
+ width: 15px;
+ height: 15px;
+ margin-top: -1px;
+}
+.dj_ie6 .nihilo .dijitTab .closeImage {
+ background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px top;
+}
+.nihilo .dijitTab .closeButton-hover .closeImage {
+ background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px -15px;
+}
+.dj_ie6 .nihilo .dijitTab .closeButton-hover .closeImage {
+ background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px -15px;
+}
+.nihilo .dijitTab .tabLabel {
+
+ min-height: 15px;
+ display: inline-block;
+}
+.dj_ie6 .nihilo .dijitTabButtonIcon {
+
+ height: 18px;
+ width: 1px;
+}
+.nihilo .dijitTabContainerTop-tabs {
+ border-bottom: none;
+ padding-bottom: 1px;
+ background-position: bottom;
+ padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-top,
+.dj_ie7 .nihilo .dijitTabListContainer-top {
+ z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerTop-tabs,
+.dj_ie7 .nihilo .dijitTabContainerTop-tabs {
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 0px;
+}
+.nihilo .dijitTabContainerTopNoStrip {
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerTop-container {
+ border-top: none;
+}
+.nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
+ border-bottom-color: #f8f8f8;
+}
+.nihilo .dijitTabContainer .dijitTabContainerTopStrip {
+ border-bottom: none;
+ padding-top: 1px;
+ margin-top: 1px;
+ background: #f2f2f2;
+ border-top: 1px solid #CCC;
+ border-right: 1px solid #CCC;
+ border-left: 1px solid #CCC;
+}
+.nihilo .dijitTabContainerBottom-tabs {
+ border-top: none;
+ background-position: top;
+ padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-bottom,
+.dj_ie7 .nihilo .dijitTabListContainer-bottom {
+ z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerBottom-tabs,
+.dj_ie7 .nihilo .dijitTabContainerBottom-tabs {
+ border-top: 1px solid #ccc;
+ margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-container {
+ border-bottom: none;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTab {
+ border-bottom: none;
+ border-top: 1px solid #ccc;
+ background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+ border-top-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background: url(images/tabBottomEnabledC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+ background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover {
+ color: #243C5F;
+ background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url(images/tabBottomHoverC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked,
+.nihilo .dijitTabContainerBottom-tabs .dijitTabCloseButtonChecked
+{
+
+ background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+ background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url(images/tabBottomActiveC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
+ border: 1px solid #ccc;
+ background: #f2f2f2;
+ border-top: none;
+ padding-bottom: 2px;
+}
+.nihilo .dijitTabContainerBottom-spacer,
+.nihilo .dijitTabContainerTop-spacer {
+ height: 2px;
+ border: 1px solid #ccc;
+ background: #f8f8f8;
+}
+.nihilo .dijitTabContainerTop-spacer {
+ margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-spacer {
+ margin-bottom: -1px;
+}
+.nihilo .dijitTabContainerRight-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerRight .dijitTabListWrapper {
+ padding-right: 3px;
+}
+.nihilo .dijitTabContainerRight-container {
+ border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ border-bottom: none;
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid #dedede !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+ border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+ border-left-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+ background: url(images/tabRightChecked.gif) no-repeat left top !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #efefef 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ background: url(images/tabContainerSprite.gif) no-repeat left -350px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+ background: url(images/tabContainerSprite.gif) no-repeat left -200px;
+}
+.nihilo .dijitTabContainerRightStrip {
+ padding-right: 2px;
+ border: 1px solid #ccc;
+ border-left: none;
+ background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+}
+.nihilo .dijitTabContainerLeft-container {
+ border-left: none;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab {
+ border-right: 1px solid #ccc;
+ border-bottom: 1px solid #dedede;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked {
+ border-right: 1px solid #f8f8f8;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ background: url(images/tabContainerSprite.gif) no-repeat right -350px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url(images/tabContainerSprite.gif) no-repeat right -200px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ background: url(images/tabLeftChecked.gif) no-repeat right top;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #efefef 1px;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerLeftStrip {
+ padding-left: 2px;
+ border: 1px solid #ccc;
+ border-right: none;
+}
+.nihilo .dijitTabContainerLeftStrip {
+ background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+ margin-right:auto;
+ margin-bottom:2px;
+}
+.nihilo .dijitTabContainerLeft-spacer,
+.nihilo .dijitTabContainerRight-spacer {
+ width: 2px;
+ border: 1px solid #ccc;
+ background: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-spacer {
+ border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs {
+ padding-top: 3px;
+ height: 100%;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+ height: 100%;
+}
+.nihilo .dijitTabContainerLeft-spacer {
+ border-left: none;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+ border-left: 0px solid #ccc;
+ border-top: 0px solid #ccc;
+ border-right: 0px solid #ccc;
+ padding-top: 0px;
+ padding-left: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+ margin-right: 0px;
+}
+.nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding: 5px 0 6px;
+}
+.dj_ie6 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding-bottom: 7px;
+}
+.nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding: 3px 0 5px;
+}
+.dj_ie6 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+ padding-top: 4px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+
+ width: 21px;
+}
+.nihilo .dijitTabContainer .tabStripButton img {
+ height: 14px;
+ background: url(images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .nihilo .dijitTabContainer .tabStripButton img {
+ background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitTabContainer .tabStripSlideButtonRight img {
+ background-position: -30px top;
+}
+.nihilo .dijitTabContainer .tabStripMenuButton img {
+ background-position: -15px top;
+}
+.nihilo .dijitTabContainerTopNone {
+ padding-top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton-top {
+ margin-top: 1px;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom {
+ background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+ border-bottom: medium none;
+ border-top: 1px solid #CCCCCC;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+ background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+ background: transparent;
+}
+.nihilo .dijitAccordionContainer {
+ border-color: #ccc;
+ background-color: #fff;
+}
+.nihilo .dijitAccordionTitle {
+ background:#fafafa url(images/titleBar.png) repeat-x top left;
+ border-top: 1px solid #dedede;
+ padding: 5px 4px 6px 8px;
+ cursor:pointer;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #6d6d6d;
+}
+.nihilo .dijitAccordionTitle-selected {
+ background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+ font-weight: bold;
+ border-top: 1px solid #dedede;
+ border-bottom: 1px solid #dedede;
+ padding: 5px 4px 5px 8px;
+ cursor: default;
+ color: #243C5F;
+}
+.nihilo .dijitAccordionArrow {
+ background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+ width:15px;
+ height:15px;
+ margin-top:-1px;
+}
+.nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
+ background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+ margin-top:-1px;
+}
+.nihilo .dijitAccordionText {
+ margin-left: 4px;
+ margin-right: 4px;
+}
+.nihilo .dijitSplitContainerSizerH {
+ background:url(images/splitContainerSizerV.png) repeat-y #fff;
+ border:0;
+ border-left:0px solid #d3d3d3;
+ border-right:0px solid #d3d3d3;
+ width:5px;
+}
+.nihilo .dijitSplitContainerSizerH .thumb {
+ background:url(images/splitContainerSizerV-thumb.png) no-repeat;
+ left:1px;
+ width:2px;
+ height:19px;
+}
+.nihilo .dijitSplitContainerSizerV {
+ background:url(images/splitContainerSizerH.png) repeat-x #fff;
+ border:0;
+ border-top:0px solid #d3d3d3;
+ border-bottom:0px solid #d3d3d3;
+ height:2px;
+}
+.nihilo .dijitSplitContainerSizerV .thumb {
+ background:url(images/splitContainerSizerH-thumb.png) no-repeat;
+ top:1px;
+ width:19px;
+ height:5px;
+}
+.nihilo .dijitBorderContainer {
+ background-color: #fcfcfc;
+ padding: 5px;
+}
+.nihilo .dijitSplitContainer-child,
+.nihilo .dijitBorderContainer-child {
+
+ border: 1px #ccc solid;
+}
+.nihilo .dijitBorderContainer-dijitTabContainerTop,
+.nihilo .dijitBorderContainer-dijitTabContainerBottom,
+.nihilo .dijitBorderContainer-dijitTabContainerLeft,
+.nihilo .dijitBorderContainer-dijitTabContainerRight {
+
+ border: none;
+}
+.nihilo .dijitBorderContainer-dijitBorderContainer {
+
+ border: none;
+ padding: 0px;
+}
+.nihilo .dijitSplitterH,
+.nihilo .dijitGutterH {
+ background:#FCFCFC;
+ border:0;
+ border-left:0px solid #d3d3d3;
+ border-right:0px solid #d3d3d3;
+ height:5px;
+}
+.nihilo .dijitSplitterH .dijitSplitterThumb {
+ background:#8BA0BD none;
+ height:1px;
+ top:2px;
+ width:19px;
+}
+.nihilo .dijitSplitterV,
+.nihilo .dijitGutterV {
+ background:#FCFCFC;
+ border:0;
+ border-top:0px solid #d3d3d3;
+ border-bottom:0px solid #d3d3d3;
+ width:5px;
+}
+.nihilo .dijitSplitterV .dijitSplitterThumb {
+ background:#8BA0BD none;
+ height:19px;
+ left:2px;
+ width:1px;
+}
+.nihilo .dijitSplitterActive {
+ font-size: 1px;
+ background-image: none;
+ background-color: #aaa;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+ filter: Alpha(Opacity=60);
+ margin: 0;
+}
+.nihilo .dijitInputField INPUT,
+.nihilo .dijitTextBox,
+.nihilo .dijitComboBox,
+.nihilo .dijitSpinner {
+ margin: 0em 0.1em;
+}
+.nihilo .dijitTextBox,
+.nihilo .dijitComboBox,
+.nihilo .dijitSpinner,
+.nihilo .dijitInlineEditor input,
+.nihilo .dijitTextArea {
+
+ background:#fff url(images/validationInputBg.png) repeat-x top left;
+ border:1px solid #d3d3d3;
+ line-height: normal;
+}
+.dj_ie6 .nihilo .dijitTextBox,
+.dj_ie6 .nihilo .dijitComboBox,
+.dj_ie6 .nihilo .dijitSpinner,
+.dj_ie6 .nihilo .dijitInlineEditor input,
+.dj_ie6 .nihilo .dijitTextArea {
+ background:#fff url(images/validationInputBg.gif) repeat-x top left;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+ padding: 0 0.2em;
+}
+.nihilo .dijitComboBox .dijitButtonNode,
+.nihilo .dijitSpinner .dijitButtonNode {
+
+ border-color: #d3d3d3;
+ border-left: 1px solid #d3d3d3;
+}
+.nihilo .dijitTextBoxFocused,
+.nihilo .dijitComboBoxFocused,
+.nihilo .dijitSpinnerFocused, .nihilo .dijitSpinnerUpArrowActive, .nihilo .dijitSpinnerDownArrowActive,
+.nihilo .dijitTextAreaFocused {
+
+ border-color:#b3b3b3;
+}
+.nihilo .dijitComboBoxFocused .dijitButtonNode,
+.nihilo .dijitSpinnerFocused .dijitButtonNode,
+.nihilo .dijitSpinnerUpArrowActive .dijitButtonNode,
+.nihilo .dijitSpinnerDownArrowActive .dijitButtonNode {
+ border-left-color:#d3d3d3;
+}
+.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
+.nihilo .dijitSpinnerUpArrowActive .dijitDownArrowButton,
+.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton {
+ border-top-color:#d3d3d3;
+}
+.nihilo .dijitError {
+ border-color:#b3b3b3;
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dijitError INPUT {
+
+ background-color:#f9f7ba !important;
+}
+.nihilo .dijitErrorFocused {
+ background-color:#ff6;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dijitErrorFocused INPUT {
+
+ background-color:#ff6 !important;
+}
+.nihilo .dijitValidationIcon {
+
+ width: 16px;
+ background: transparent url(images/warning.png) no-repeat center center;
+}
+.nihilo .dijitComboBoxHighlightMatch {
+ background-color:#d3d3d3;
+}
+.nihilo .dijitButtonNode {
+
+
+ border:1px solid #dedede;
+ border-bottom:1px solid #dedede;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #fff url(images/buttonEnabled.png) repeat-x top left;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+ border-right: none;
+}
+.nihilo .dijitButtonNode button {
+ border: 0px;
+ background-color: transparent;
+}
+.nihilo .dijitButtonText {
+ text-align: center;
+ padding: 0 0.3em;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.nihilo .dijitArrowButton {
+ color: #111;
+}
+.nihilo .dijitComboButton .dijitDownArrowButton {
+ padding-right:4px;
+}
+.nihilo .dijitComboBoxReadOnly,
+.nihilo .dijitSpinnerReadOnly,
+.nihilo .dijitSpinnerReadOnly .dijitButtonNode,
+.nihilo .dijitButtonDisabled .dijitButtonNode,
+.nihilo .dijitToggleButtonDisabled .dijitButtonNode,
+.nihilo .dijitDropDownButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboBoxDisabled,
+.nihilo .dijitSpinnerDisabled,
+.nihilo .dijitSpinnerDisabled .dijitButtonNode {
+
+ border-color: #dedede;
+ background:#fafafa url(images/buttonDisabled.png) top repeat-x;
+ opacity: 0.60;
+}
+.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText {
+
+ color: #aaa;
+}
+.nihilo .dijitButtonHover .dijitButtonNode,
+.nihilo .dijitButtonNodeHover,
+.nihilo .dijitToggleButtonHover .dijitButtonNode,
+.nihilo .dijitDropDownButtonHover .dijitButtonNode,
+.nihilo .dijitComboButtonHover .dijitButtonContents,
+.nihilo .dijitComboButtonDownArrowHover .dijitDownArrowButton,
+.nihilo .dijitComboBoxHover .dijitDownArrowButton,
+.nihilo .dijitSpinnerUpArrowHover .dijitUpArrowButton,
+.nihilo .dijitSpinnerDownArrowHover .dijitDownArrowButton {
+
+
+ color:#243C5F;
+ background:#fcfcfc url(images/buttonHover.png) repeat-x top left;
+}
+.nihilo .dijitSpinnerUpArrowActive .dijitUpArrowButton,
+.nihilo .dijitSpinnerDownArrowActive .dijitDownArrowButton,
+.nihilo .dijitButtonActive .dijitButtonNode,
+.nihilo .dijitToggleButtonActive .dijitButtonNode,
+.nihilo .dijitDropDownButtonActive .dijitButtonNode,
+.nihilo .dijitComboButtonActive .dijitButtonContents,
+.nihilo .dijitDownArrowActive .dijitDownArrowButton,
+.nihilo .dijitComboBoxActive .dijitDownArrowButton,
+.nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+
+ border-color:#dedede;
+ background: #f5f5f5 url(images/buttonActive.png) top left repeat-x;
+}
+.nihilo .dijitArrowButtonInner {
+ background-image: url(images/spriteArrows.png);
+ background-repeat: no-repeat;
+ background-position: 0px top;
+ width: 11px;
+}
+.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
+ background-position: -11px top;
+}
+.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
+ background-position: -22px top;
+}
+.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
+ background-position: -33px top;
+}
+.dj_ie6 .nihilo .dijitArrowButtonInner {
+ background-image: url(images/spriteArrows.gif);
+}
+.nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url(images/spriteArrows.png) no-repeat left center;
+ width: 11px;
+}
+.dj_ie6 .nihilo .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url(images/spriteArrows.gif) no-repeat left center;
+}
+.nihilo .dijitComboBoxHover .dijitArrowButtonInner {
+
+}
+.nihilo .dijitToggleButton .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+ background-image: url(images/spriteCheckbox.gif);
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitCheckBoxIcon {
+ background-image: url(images/spriteCheckbox.gif);
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+
+ background-position: -16px;
+}
+.nihilo .dijitCheckBoxChecked,
+.nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
+
+ background-position: 0px;
+}
+.nihilo .dijitCheckBoxDisabled {
+
+ background-position: -48px;
+}
+.nihilo .dijitCheckBoxCheckedDisabled {
+
+ background-position: -32px;
+}
+.nihilo .dijitCheckBoxHover {
+
+ background-position: -80px;
+}
+.nihilo .dijitCheckBoxCheckedHover {
+
+ background-position: -64px;
+}
+.nihilo .dijitToggleButton .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+ background-image: url(images/spriteRadio.gif);
+}
+.nihilo .dijitRadio,
+.nihilo .dijitRadioIcon {
+ background-image: url(images/spriteRadio.gif);
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.nihilo .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+
+ background-position: -16px;
+}
+.nihilo .dijitRadioChecked,
+.nihilo .dijitToggleButtonChecked .dijitRadioIcon {
+
+ background-position: 0px;
+}
+.nihilo .dijitRadioDisabled {
+
+ background-position: -48px;
+}
+.nihilo .dijitRadioCheckedDisabled {
+
+ background-position: -32px;
+}
+.nihilo .dijitRadioHover {
+
+ background-position: -80px;
+}
+.nihilo .dijitRadioCheckedHover {
+
+ background-position: -64px;
+}
+.nihilo .dijitSliderProgressBarH {
+ border-color: #aab0bb;
+ background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.nihilo .dijitSliderProgressBarV {
+ border-color: #aab0bb;
+ background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarH,
+.nihilo .dijitSliderFocused .dijitSliderLeftBumper {
+ background-image:url(images/sliderFullFocus.png);
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarV,
+.nihilo .dijitSliderFocused .dijitSliderBottomBumper {
+ background-image:url(images/sliderFullVerticalFocus.png);
+}
+.nihilo .dijitSliderRemainingBarV {
+ border-color: #b4b4b4;
+ background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderRemainingBarH {
+ border-color: #b4b4b4;
+ background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+}
+.nihilo .dijitSliderBar {
+ border-style: solid;
+ outline:1px;
+
+}
+.nihilo .dijitSliderFocused .dijitSliderBar {
+ border-color:#727272;
+}
+.dijit_a11y .dijitSliderProgressBar {
+ background-color:#333 !important;
+}
+.nihilo .dijitSliderImageHandleH {
+ border:0px;
+ width:15px;
+ height:18px;
+ background:url(images/preciseSliderThumb.png) no-repeat center top;
+ #background:url(images/preciseSliderThumb.gif) no-repeat center top;
+ cursor:pointer;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleH {
+ background-image:url(images/preciseSliderThumbFocus.png);
+ #background-image:url(images/preciseSliderThumbFocus.gif);
+}
+.nihilo .dijitSliderLeftBumper {
+ border-left-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.nihilo .dijitSliderRightBumper {
+ background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+ border-color: #b4b4b4;
+ border-right-width: 1px;
+}
+.nihilo .dijitSliderImageHandleV {
+ border:0px;
+ width:20px;
+ height:15px;
+ background:url(images/sliderThumb.png) no-repeat center center;
+ #background:url(images/sliderThumb.gif) no-repeat center center;
+ cursor:pointer;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleV {
+ background-image:url(images/sliderThumbFocus.png);
+ #background-image:url(images/sliderThumbFocus.gif);
+}
+.nihilo .dijitSliderBottomBumper {
+ border-bottom-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderTopBumper {
+ background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y top left;
+ border-color: #b4b4b4;
+ border-top-width: 1px;
+}
+.nihilo .dijitSliderIncrementIconH,
+.nihilo .dijitSliderIncrementIconV {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat -45px top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat -45px top;
+ width:15px; height:15px;
+ cursor:pointer;
+}
+.nihilo .dijitSliderIncrementIconH {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.nihilo .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDecrementIconV {
+ width:15px;
+ height:15px;
+ cursor:pointer;
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.nihilo .dijitSliderDecrementIconH {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat 0px top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat 0px top;
+}
+.nihilo .dijitSliderButtonInner {
+ visibility:hidden;
+}
+.nihilo .dijitSliderReadOnly *,
+.nihilo .dijitSliderDisabled * {
+ border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+ color: #bdbdbd;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
+ background-position: 0px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
+ background-position: -30px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconV {
+ background-position: -15px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
+ background-position: -45px -15px;
+}
+.nihilo .dijitSelectDisabled * {
+ cursor: not-allowed !important;
+}
+.nihilo .dijitSelectReadOnly * {
+ cursor: default !important;
+}
+.nihilo .dijitSelect .dijitButtonNode {
+ padding: 0px;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+ padding-top: 1px;
+ background:#fff url(images/validationInputBg.png) repeat-x top left;
+ #background:#fff url(images/validationInputBg.gif) repeat-x top left;
+}
+.nihilo .dijitSelectHover .dijitButtonContents,
+.nihilo .dijitSelectActive .dijitButtonContents,
+.nihilo .dijitSelectOpened .dijitButtonContents,
+.nihilo .dijitSelectDisabled .dijitButtonContents,
+.nihilo .dijitSelectReadOnly .dijitButtonContents{
+ background: transparent none;
+}
+.dj_ie .nihilo .dijitSelect .dijitButtonContents {
+ padding-top: 0px;
+}
+.nihilo .dijitSelectDisabled .dijitButtonNode {
+ border-color: #dedede;
+ background:#fafafa url(images/buttonDisabled.png) top repeat-x;
+}
+.dj_ie .nihilo .dijitSelectDisabled .dijitButtonNode * {
+ filter: gray() alpha(opacity=50);
+}
+.nihilo .dijitSelectHover .dijitButtonNode {
+ color:#000;
+ background:#fcfcfc url(images/buttonHover.png) repeat-x top left;
+}
+.nihilo .dijitSelectActive .dijitButtonNode,
+.nihilo .dijitSelectOpened .dijitButtonNode {
+ border-color:#dedede;
+ background: #f5f5f5 url(images/buttonActive.png) top left repeat-x;
+}
+.nihilo .dijitSelectMenu td {
+ padding: 0em;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemIcon {
+ margin: 0.1em 0.2em;
+ display: none;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemLabel,
+.nihilo .dijitSelectMenu .dijitMenuArrowCell {
+ padding: 0.1em 0.2em;
+}
+.nihilo .dijitTreeNode {
+ background : url(images/treeI.gif) no-repeat;
+ background-position : top left;
+ background-repeat : repeat-y;
+ zoom: 1;
+}
+.nihilo .dijitTreeIsLast {
+ background: url(images/treeI_half.gif) no-repeat;
+}
+.nihilo .dijitTreeNodeHover {
+
+ background-image: url(images/treeHover.png);
+ background-repeat: repeat;
+ background-color: none !important;
+}
+.nihilo .dijitTreeLabel {
+ font-weight: normal;
+ margin-left: 3px;
+}
+.nihilo .dijitTreeIsRoot {
+ margin-left: 0;
+ background-image: none;
+}
+.nihilo .dijitTreeExpando {
+ width: 18px;
+ height: 18px;
+}
+.nihilo .dijitTreeRow {
+
+ padding-bottom: 2px;
+}
+.nihilo .dijitTreeContent {
+ min-height: 18px;
+ min-width: 18px;
+ padding-left:1px;
+}
+.nihilo .dijitTreeExpand {
+ width: 18px;
+ height: 18px;
+ background-repeat : no-repeat;
+}
+.nihilo .dijitTreeNodeEmphasized {
+ background-color: Highlight;
+ color: HighlightText;
+}
+.nihilo .dijitTreeLabelFocused {
+ outline: 1px invert dotted;
+}
+.nihilo .dijitTreeExpandoOpened {
+ background: url(images/spriteTree.gif) no-repeat -18px top;
+}
+.nihilo .dijitTreeExpandoClosed {
+ background-image: url(images/spriteTree.gif);
+}
+.nihilo .dijitTreeExpandoLeaf {
+ background: url(images/spriteTree.gif) no-repeat -36px top;
+}
+.nihilo .dijitTreeExpandoLoading {
+ background-image: url(images/treeExpand_loading.gif);
+}
+.nihilo .dijitTreeIcon {
+ width: 16px;
+ height: 16px;
+}
+.nihilo .dijitFolderOpened {
+ background: url(images/spriteDivIcons.gif) no-repeat -16px top;
+}
+.nihilo .dijitFolderClosed {
+ background: url(images/spriteDivIcons.gif) no-repeat top left;
+}
+.nihilo .dijitLeaf {
+ background: url(images/spriteDivIcons.gif) no-repeat -32px top;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore,
+.nihilo .dijitTreeNode .dojoDndItemAfter {
+ border-bottom: none;
+ border-top: none;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+
+ border-top: 2px solid #369;
+}
+.nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+
+ border-bottom: 2px solid #369;
+}
+.nihilo .dijitProgressBar {
+ margin:2px 0px 2px 0px;
+}
+.nihilo .dijitProgressBarEmpty{
+
+ background:#fff url(images/progressBarEmpty.png) repeat-x center center;
+ border-color: #f8d582 #f8d582 #f8d582 #f8d582;
+}
+.nihilo .dijitProgressBarTile{
+
+ background:#f0f0f0 url(images/progressBarFull.png) repeat-x center center;
+}
+.nihilo .dijitProgressBarFull {
+ border-right:1px solid #f8d582;
+}
+.nihilo .dijitProgressBarLabel {
+
+ color:#293a4b;
+}
+.nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
+
+ background:#cad2de url(images/progressBarAnim.gif) repeat-x center center;
+}
+.nihilo .dijitTitlePaneTitle {
+ background: #cccccc;
+ background:#fff url(images/titleBar.png) repeat-x top left;
+ border:1px solid #bfbfbf;
+ padding:3px 4px;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #6d6d6d;
+}
+.nihilo .dijitTitlePaneTitle-hover {
+ background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+ cursor: pointer;
+}
+.nihilo .dijitTitlePaneTitle * {
+ vertical-align: middle;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ width:15px;
+ height:15px;
+}
+.nihilo .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.nihilo .dijitOpen .dijitTitlePaneTextNode,
+.nihilo .dijitFixedOpen .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background: url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.nihilo .dijitTitlePane .dijitArrowNodeInner {
+ display:none;
+}
+.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
+.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
+ display:inline !important;
+ font-family:monospace;
+ padding-bottom:.2em;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+ display:none;
+}
+.nihilo .dijitTitlePaneContentOuter {
+ background: #ffffff;
+ border:1px solid #bfbfbf;
+ border-top: 0px solid #3d3d3d;
+}
+.nihilo .dijitTitlePaneContentInner {
+ padding:10px;
+}
+.dj_ie6 .nihilo .dijitTitlePaneContentOuter,
+.dj_ie6 .nihilo .dijitTitlePane .dijitTitlePaneTitle {
+ zoom: 1;
+}
+.nihilo .dijitTitlePaneTextNode {
+ margin-left: 4px;
+ margin-right: 4px;
+}
+.nihilo .dijitCalendarIncrementControl {
+
+ width:15px;
+ height:15px;
+ background-image: url(images/spriteRoundedIconsSmall.png);
+ background-repeat: no-repeat
+}
+.dj_ie6 .nihilo .dijitCalendarIncrementControl {
+ font-size:.1em;
+ background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitA11ySideArrow {
+ display: none;
+}
+.nihilo .dijitCalendarDecrease {
+ background-position: top left;
+}
+.nihilo .dijitCalendarIncrease {
+ background-position: -30px top;
+}
+.nihilo table.dijitCalendarContainer {
+ font-size: 100%;
+ border-spacing: 0;
+ border-collapse: separate;
+ border: 1px solid #ccc;
+ margin: 0;
+}
+.nihilo .dijitCalendarMonthContainer th {
+
+ background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+ padding-top:.3em;
+ padding-bottom:.2em;
+ text-align:center;
+}
+.dj_ie6 .nihilo .dijitCalendarMonthContainer th {
+ padding-top:.2em;
+ padding-bottom:.1em;
+}
+.nihilo .dijitCalendarDayLabelTemplate {
+
+ background:#fefefe;
+ font-weight:normal;
+ padding-top:.15em;
+ padding-bottom:.2em;
+ border-bottom: 1px solid #eeeeee;
+ color:#293a4b;
+ text-align:center;
+}
+.nihilo .dijitCalendarBodyContainer {
+ border-bottom: 1px solid #eeeeee;
+}
+.nihilo .dijitCalendarMonthLabel {
+ color:#293a4b;
+ font-weight: bold;
+}
+.nihilo .dijitCalendarDateTemplate {
+
+ font-size: 0.9em;
+ font-weight: bold;
+ text-align: center;
+ padding: 0.3em 0.3em 0.05em 0.3em;
+ letter-spacing: 1px;
+ background-color: #fdfdfd;
+ border:#fdfdfd solid 1px !important;
+}
+.dj_ie .nihilo .dijitCalendarDateTemplate {
+ padding: 0.1em .33em 0.02em .33em;
+}
+.nihilo .dijitCalendarPreviousMonth,
+.nihilo .dijitCalendarNextMonth {
+
+ color:#999999;
+ background-color:#f5f5f5 !important;
+ border:#f5f5f5 solid 1px !important;
+}
+.nihilo .dijitCalendarPreviousMonthDisabled,
+.nihilo .dijitCalendarNextMonthDisabled {
+
+ background-color:#a4a5a6 !important;
+}
+.nihilo .dijitCalendarCurrentMonth {
+
+}
+.nihilo .dijitCalendarCurrentMonthDisabled {
+
+ background-color:#bbbbbc !important;
+}
+.nihilo .dijitCalendarDisabledDate {
+
+
+ text-decoration:line-through !important;
+ cursor:default !important;
+}
+.nihilo .dijitCalendarCurrentDate {
+
+ text-decoration:underline;
+ font-weight:bold;
+}
+.nihilo .dijitCalendarSelectedDate {
+
+ background-color:#ffe284 !important;
+ color:black !important;
+ border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarYearContainer {
+
+ background:white url(images/titleBar.png) repeat-x top;
+}
+.nihilo .dijitCalendarYearLabel {
+
+ margin:0;
+ padding:0.4em 0 0.25em 0;
+ text-align:center;
+}
+.nihilo .dijitCalendarSelectedYear {
+
+ color:black;
+ padding:0.2em;
+ padding-bottom:0.1em;
+ background-color:#ffe284 !important;
+ border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarNextYear,
+.nihilo .dijitCalendarPreviousYear {
+
+ color:black !important;
+ font-weight:normal;
+}
+.nihilo .dijitTimePickerTick,
+.nihilo .dijitTimePickerMarker {
+ border-color: #eeeeee;
+}
+.nihilo .dijitTimePickerTick {
+ color:white;
+}
+.nihilo .dijitTimePickerMarker {
+ background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+ color:#293a4b;
+ font-weight: bold;
+}
+.nihilo .dijitTimePickerItemSelected {
+ color: black;
+ background: #ffe284 none;
+}
+.nihilo .dijitTimePickerItemHover {
+ background: #d6d6dd none;
+ color:black;
+}
+.nihilo .dijitTimePickerItemHover,
+.nihilo .dijitTimePickerItemSelected {
+ position: relative;
+ z-index: 10;
+}
+.nihilo .dijitTimePickerTick .dijitTimePickerItemInner {
+ font-size:0.4em;
+}
+.nihilo .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.nihilo .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+ font-size:1em;
+}
+.nihilo .dijitTimePickerMarkerHover {
+ border-top: 1px solid #eeeeee;
+}
+.nihilo .dijitTimePickerTickHover,
+.nihilo .dijitTimePickerTickSelected {
+ margin-top:-0.3em;
+ margin-bottom:-0.3em;
+ border-bottom: none;
+}
+.dijit_a11y .dijitTimePickerTickHover {
+ background-color: #CCC !important;
+ border-top: 1px solid #333 !important;
+ border-bottom: 1px solid #333 !important;
+}
+.dijit_a11y .dijitTimePickerMarkerHover {
+ border-bottom-width: 2px;
+}
+.nihilo .dijitToolbar {
+ border-bottom: 1px solid #ccc;
+ background:#eaeaea url(images/titleBar.png) repeat-x top left;
+}
+.dj_ie6 .nihilo .dijitToolbar {
+ height: 10px;
+}
+.nihilo .dijitToolbar .dijitButtonNode,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ font-size: 12px;
+}
+.nihilo .dijitToolbar .dijitButton,
+.nihilo .dijitToolbar .dijitToggleButton,
+.nihilo .dijitToolbar .dijitDropDownButton,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ padding: 1px;
+}
+.nihilo .dijitToolbar .dijitButtonChecked,
+.nihilo .dijitToolbar .dijitToggleButtonChecked {
+ background-color:#ffeeb9;
+ border:1px solid #f7c95c;
+ padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonCheckedHover,
+.nihilo .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+ background-color:#ffe284;
+ border:1px solid #f7c95c;
+ padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonHover,
+.nihilo .dijitToolbar .dijitToggleButtonHover,
+.nihilo .dijitToolbar .dijitDropDownButtonHover,
+.nihilo .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
+
+ border: 1px solid #f7c95c;
+ padding: 0;
+ background-color:#ffe284;
+}
+.nihilo .dijitToolbar label {
+ padding: 3px 3px 0 6px;
+}
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+
+ border: 1px #555 dotted !important;
+ padding: 0px;
+}
+.nihilo .dijitDialog {
+ background: #eee;
+ border: 1px solid #d3d3d3;
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+ padding: 0px;
+}
+.nihilo .dijitDialog .dijitDialogTitle {
+
+ font-size: 0.9em;
+ color: #3243C5F;
+ font-weight: bold;
+ padding: 0px 4px;
+}
+.nihilo .dijitDialog .dijitDialogPaneContent {
+ background: #ffffff;
+ border:none;
+ border-top: 1px solid #d3d3d3;
+ padding:10px;
+}
+.nihilo .dijitDialogTitleBar {
+
+ background: #fafafa url(images/titleBar.png) repeat-x top left;
+ padding: 5px 6px 3px 6px;
+ cursor: move;
+ outline:0;
+}
+.nihilo .dijitDialogCloseIcon {
+
+ background-image: url(images/spriteRoundedIconsSmall.png);
+ background-repeat: no-repeat;
+ background-position: -60px 0px;
+ position: absolute;
+ vertical-align: middle;
+ right: 6px;
+ top: 4px;
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dj_ie6 .nihilo .dijitDialogCloseIcon {
+ background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitDialogCloseIcon-hover {
+ background-position: -60px -15px;
+}
+.nihilo .dijitTooltip,
+.nihilo .dijitTooltipDialog {
+
+ background: transparent;
+}
+.dijitTooltipBelow {
+
+ padding-top: 10px;
+}
+.dijitTooltipAbove {
+
+ padding-bottom: 10px;
+}
+.nihilo .dijitTooltipContainer {
+
+ background-color: #fff;
+ border:1px solid #d3d3d3;
+ padding:0.45em;
+}
+.nihilo .dijitTooltipConnector {
+
+ border:0px;
+ z-index: 2;
+}
+.nihilo .dijitTooltipABRight .dijitTooltipConnector {
+
+ left: auto !important;
+ right: 6px;
+}
+.nihilo .dijitTooltipBelow .dijitTooltipConnector {
+
+ top: 0px;
+ left: 6px;
+ background:url(images/tooltipConnectorUp.png) no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .nihilo .dijitTooltipBelow .dijitTooltipConnector {
+ background-image: url(images/tooltipConnectorUp.gif);
+}
+.nihilo .dijitTooltipAbove .dijitTooltipConnector {
+
+ bottom: 0px;
+ left: 6px;
+ background:url(images/tooltipConnectorDown.png) no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+ background-image: url(images/tooltipConnectorDown.gif);
+}
+.dj_ie6 .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+ bottom: -5px;
+}
+.nihilo .dijitTooltipLeft {
+ padding-right: 10px;
+}
+.dj_ie6 .nihilo .dijitTooltipLeft {
+ padding-left: 11px;
+}
+.nihilo .dijitTooltipLeft .dijitTooltipConnector {
+
+ right: 0px;
+ bottom: 3px;
+ background:url(images/tooltipConnectorRight.png) no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .nihilo .dijitTooltipLeft .dijitTooltipConnector {
+ background-image: url(images/tooltipConnectorRight.gif);
+}
+.nihilo .dijitTooltipRight {
+ padding-left: 10px;
+}
+.nihilo .dijitTooltipRight .dijitTooltipConnector {
+
+ left: 0px;
+ bottom: 3px;
+ background:url(images/tooltipConnectorLeft.png) no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
+ background-image: url(images/tooltipConnectorLeft.gif);
+}
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+ border: 1px solid #d3d3d3;
+ margin: 0px;
+ padding: 0px;
+ background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+ border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0px;
+ color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+ font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+ padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+ background-color: #ffe284;
+ color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+ width: 15px;
+ height: 15px;
+}
+.nihilo .dijitMenuExpand {
+ width:15px;
+ height:15px;
+ background-image: url(images/spriteRoundedIconsSmall.png);
+ background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+ background-image:url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+ height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #fff;
+}
+.nihilo .dijitMenuSeparatorBottom {
+ border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+ background-image: url(images/spriteCheckbox.gif);
+ background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
+.dijitIEFixedToolbar {
+ position:absolute;
+
+ top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.nihilo .dijitToolbar .dijitToolbarSeparator {
+ background: url(images/editor.gif);
+}
+.nihilo .dijitEditorIcon {
+ background-image: url(images/editor.gif);
+ background-repeat: no-repeat;
+ width: 18px;
+ height: 18px;
+ text-align: center;
+}
+.nihilo .dijitDisabled .dijitEditorIcon {
+ background-image: url(images/editorDisabled.gif);
+}
+.nihilo .dijitEditorIconSep { background-position: 0px; }
+.nihilo .dijitEditorIconBackColor { background-position: -18px; }
+.nihilo .dijitEditorIconBold { background-position: -36px; }
+.nihilo .dijitEditorIconCancel { background-position: -54px; }
+.nihilo .dijitEditorIconCopy { background-position: -72px; }
+.nihilo .dijitEditorIconCreateLink { background-position: -90px; }
+.nihilo .dijitEditorIconCut { background-position: -108px; }
+.nihilo .dijitEditorIconDelete { background-position: -126px; }
+.nihilo .dijitEditorIconForeColor { background-position: -144px; }
+.nihilo .dijitEditorIconHiliteColor { background-position: -162px; }
+.nihilo .dijitEditorIconIndent { background-position: -180px; }
+.nihilo .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
+.nihilo .dijitEditorIconInsertImage { background-position: -216px; }
+.nihilo .dijitEditorIconInsertOrderedList { background-position: -234px; }
+.nihilo .dijitEditorIconInsertTable { background-position: -252px; }
+.nihilo .dijitEditorIconInsertUnorderedList { background-position: -270px; }
+.nihilo .dijitEditorIconItalic { background-position: -288px; }
+.nihilo .dijitEditorIconJustifyCenter { background-position: -306px; }
+.nihilo .dijitEditorIconJustifyFull { background-position: -324px; }
+.nihilo .dijitEditorIconJustifyLeft { background-position: -342px; }
+.nihilo .dijitEditorIconJustifyRight { background-position: -360px; }
+.nihilo .dijitEditorIconLeftToRight { background-position: -378px; }
+.nihilo .dijitEditorIconListBulletIndent { background-position: -396px; }
+.nihilo .dijitEditorIconListBulletOutdent { background-position: -414px; }
+.nihilo .dijitEditorIconListNumIndent { background-position: -432px; }
+.nihilo .dijitEditorIconListNumOutdent { background-position: -450px; }
+.nihilo .dijitEditorIconOutdent { background-position: -468px; }
+.nihilo .dijitEditorIconPaste { background-position: -486px; }
+.nihilo .dijitEditorIconRedo { background-position: -504px; }
+.nihilo .dijitEditorIconRemoveFormat { background-position: -522px; }
+.nihilo .dijitEditorIconRightToLeft { background-position: -540px; }
+.nihilo .dijitEditorIconSave { background-position: -558px; }
+.nihilo .dijitEditorIconSpace { background-position: -576px; }
+.nihilo .dijitEditorIconStrikethrough { background-position: -594px; }
+.nihilo .dijitEditorIconSubscript { background-position: -612px; }
+.nihilo .dijitEditorIconSuperscript { background-position: -630px; }
+.nihilo .dijitEditorIconUnderline { background-position: -648px; }
+.nihilo .dijitEditorIconUndo { background-position: -666px; }
+.nihilo .dijitEditorIconWikiword { background-position: -684px; }
+.nihilo .dijitEditorIconToggleDir { background-position: -540px; }
+.nihilo .dijitEditorIconTabIndent { background-position: -702px; }
+.nihilo .dijitEditorIconSelectAll { background-position: -720px; }
+.nihilo .dijitEditorIconUnlink { background-position: -738px; }
+.nihilo .dijitEditorIconFullScreen { background-position: -756px; }
+.nihilo .dijitEditorIconViewSource { background-position: -774px; }
+.nihilo .dijitEditorIconPrint { background-position: -792px; }
+.nihilo .dijitEditorIconNewPage { background-position: -810px; }
+.dijitColorPalette {
+ border:1px solid #d3d3d3;
+ background:#fff;
+ -moz-border-radius: 0px !important;
+}
diff --git a/js/dojo/dijit/themes/nihilo/nihilo_rtl.css b/js/dojo/dijit/themes/nihilo/nihilo_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/nihilo/nihilo_rtl.css
@@ -0,0 +1,219 @@
+
+.dj_gecko-rtl .dijitInputField {
+ direction: ltr;
+}
+.dj_gecko-rtl .dijitInputField * {
+ direction: rtl;
+}
+.dijitRtl .dijitMenuItem {
+ text-align: right;
+}
+.dijitRtl .dijitComboBox .dijitInputField {
+ border-right-width:1px !important;
+ border-left-width:0 !important;
+}
+.dijitRtl .dijitCalendarNextYear {
+ margin:0 0.55em 0 0;
+}
+.dijitRtl .dijitCalendarPreviousYear {
+ margin:0 0 0 0.55em;
+}
+.dijitRtl .dijitProgressBarFull .dijitProgressBarLabel {
+ right:0;
+}
+.dijitRtl .dijitSliderImageHandleV {
+ left:auto;
+ right:-6px;
+}
+.dj_ie-rtl .dijitSliderImageHandleV {
+ right:-10px;
+}
+.dijitRtl .dijitSliderMoveableH {
+ right:auto;
+ left:0;
+}
+.dijitRtl .dijitRuleContainerV {
+ float:right;
+}
+.dj_gecko-rtl .dijitRuleContainerV {
+ float:left;
+}
+.dj_ie-rtl .dijitRuleContainerV {
+ text-align:right;
+}
+.dj_ie-rtl .dijitRuleLabelV {
+ text-align:left;
+}
+.dj_ie-rtl .dijitRuleLabelH {
+ zoom:1;
+}
+.dj_ie-rtl .dijitSliderProgressBarH {
+ right:0;
+ left:auto;
+}
+.dj_gecko-rtl .dijitSliderProgressBarH {
+ float:right;
+ right:0;
+ left:auto;
+}
+.dijitRtl .dijitSpinner .dijitInputLayoutContainer .dijitArrowButton {
+ right: auto;
+ left: 0;
+ border-width: 0 1px 0 0 !important;
+}
+.dijitRtl .dijitSpinnerButtonContainer {
+ float: left;
+}
+.dijitRtl .dijit_a11y .dijitSpinnerButtonContainer {
+ margin-left: none;
+ margin-right: 2px;
+}
+.dijitRtl DIV.dijitArrowButton, .dijitRtl .dijitValidationIcon, .dijitRtl .dijitValidationIconText {
+ float: left;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+ background-position:right;
+ padding-right:25px;
+}
+.dijitRtl .dijitTabContainer .tabStripMenuButton {
+ float: left;
+}
+.dj_iequirks-rtl .dijitComboButton BUTTON {
+ float:left;
+}
+.dijitRtl .nihilo .dijitTab {
+ margin-right:0;
+ margin-left:2px;
+}
+.dijitRtl .nihilo .dijitTabContainer .tabStripButton {
+ margin-left: 0;
+}
+.dijitRtl .nihilo .dijitTabContainerTopStrip,
+.dijitRtl .nihilo .dijitTabContainerBottomStrip,
+.dijitRtl .nihilo .dijitTabContainerTop-tabs,
+.dijitRtl .nihilo .dijitTabContainerBottom-tabs {
+ padding-left: 0;
+ padding-right: 3px;
+}
+.dijitRtl .nihilo .dijitTabInnerDiv {
+ padding-left: 3px;
+ padding-right: 4px;
+}
+.dijitRtl .nihilo .dijitTabPaneWrapper {
+ #zoom: 1;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerLeft-tabs {
+ margin-left: 0px !important;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
+ margin-right: 0px !important;
+}
+.dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
+ margin-left:0px;
+}
+.dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
+ width : 1%;
+}
+.dijitRtl .nihilo .dijitAccordionArrow {
+ background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitAccordionTitle-selected .dijitAccordionArrow {
+
+ background-position: -15px top;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarH,
+.dijitRtl .nihilo .dijitSliderRemainingBarH,
+.dijitRtl .nihilo .dijitSliderLeftBumper,
+.dijitRtl .nihilo .dijitSliderRightBumper,
+.dijitRtl .nihilo .dijitSliderTopBumper {
+ background-position: top right;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarV,
+.dijitRtl .nihilo .dijitSliderRemainingBarV,
+.dijitRtl .nihilo .dijitSliderBottomBumper {
+ background-position: bottom right;
+}
+.dijitRtl .nihilo .dijitSliderLeftBumper {
+ border-left-width: 0px;
+ border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitSliderRightBumper {
+ border-left-width: 1px;
+ border-right-width: 0px;
+}
+.dijitRtl .nihilo .dijitSliderIncrementIconH {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat left top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat left top;
+}
+.dijitRtl .nihilo .dijitSliderDecrementIconH {
+ background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+ #background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .nihilo .dijitSelect .dijitButtonContents {
+ border-left: none;
+ border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode,
+.dijitRtl .nihilo .dijitSpinner .dijitButtonNode {
+
+ border-color: #8ba0bd;
+ border-left: 0px solid #8ba0bd;
+ border-right: 1px solid #8ba0bd;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeNode {
+ background-image : none;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsRoot {
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeIsLast {
+ background-image: url(images/treeI_half_rtl.gif);
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeContent {
+ padding-left: auto;
+ padding-right: 1px;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoOpened {
+ background: url(images/spriteTree_rtl.gif) no-repeat -18px top;
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoClosed {
+ background-image: url(images/spriteTree_rtl.gif);
+}
+.dijitRtl .nihilo .dijitTreeContainer .dijitTreeExpandoLeaf {
+ background: none;
+}
+.dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
+.dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitCalendarDecrease {
+ background-position: -30px top;
+}
+.dijitRtl .nihilo .dijitCalendarIncrease {
+ background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
+ right: auto;
+ left: 5px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
+ padding-left: 3px;
+ padding-right: 0px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
+ background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitEditorIcon {
+ background-image: url(images/editor_rtl.gif);
+}
+.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
+ background-image: url(images/editorDisabled_rtl.gif);
+}
+.dijitRtl .nihilo .dijitToolbar .dijitToolbarSeparator {
+ background-image: url(images/editor_rtl.gif);
+}
diff --git a/js/dojo/dijit/themes/soria/Calendar.css b/js/dojo/dijit/themes/soria/Calendar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Calendar.css
@@ -0,0 +1,129 @@
+
+.soria .dijitCalendarIncrementControl {
+
+ width:15px;
+ height:15px;
+ background-image: url("images/spriteRoundedIconsSmall.png");
+ background-repeat: no-repeat;
+}
+.dj_ie6 .soria .dijitCalendarIncrementControl {
+ font-size:.1em;
+ background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.soria .dijitA11ySideArrow {
+ display: none;
+}
+.soria .dijitCalendarDecrease {
+ background-position: top left;
+}
+.soria .dijitCalendarIncrease {
+ background-position: -30px top;
+}
+.soria table.dijitCalendarContainer {
+ font-size: 100%;
+ border-spacing: 0;
+ border-collapse: separate;
+ border: 1px solid #b1badf;
+ margin: 0;
+}
+.soria .dijitCalendarMonthContainer th {
+
+ background:#bed7f0 url("images/titleBar.png") repeat-x top;
+ padding-top:.3em;
+ padding-bottom:.2em;
+ text-align:center;
+}
+.dj_ie6 .soria .dijitCalendarMonthContainer th {
+ padding-top:.2em;
+ padding-bottom:.1em;
+}
+.soria .dijitCalendarDayLabelTemplate {
+
+ background:#bed7f0;
+ font-weight:normal;
+ padding-top:.15em;
+ padding-bottom:.2em;
+ border-bottom: 1px solid #b1badf;
+ color:#293a4b;
+ text-align:center;
+}
+.soria .dijitCalendarBodyContainer {
+ border-bottom: 1px solid #eeeeee;
+}
+.soria .dijitCalendarMonthLabel {
+ color:#293a4b;
+ font-weight: bold;
+}
+.soria .dijitCalendarDateTemplate {
+
+ font-size: 0.9em;
+ font-weight: bold;
+ text-align: center;
+ padding: 0.3em 0.3em 0.05em 0.3em;
+ letter-spacing: 1px;
+ background-color: #fff;
+ border:#fff solid 1px !important;
+}
+.dj_ie .soria .dijitCalendarDateTemplate {
+ padding: 0.1em .33em 0.02em .33em;
+}
+.soria .dijitCalendarPreviousMonth,
+.soria .dijitCalendarNextMonth {
+
+ color:#999999;
+ background-color:#fdfdfd !important;
+ border:#fdfdfd solid 1px !important;
+}
+.soria .dijitCalendarPreviousMonthDisabled,
+.soria .dijitCalendarNextMonthDisabled {
+
+ background-color:#a4a5a6 !important;
+}
+.soria .dijitCalendarCurrentMonth {
+
+}
+.soria .dijitCalendarCurrentMonthDisabled {
+
+ background-color:#bbbbbc !important;
+}
+.soria .dijitCalendarDisabledDate {
+
+
+ text-decoration:line-through !important;
+ cursor:default !important;
+}
+.soria .dijitCalendarCurrentDate {
+
+ text-decoration:underline;
+ font-weight:bold;
+}
+.soria .dijitCalendarSelectedDate {
+
+ background-color:#b9cbf1 !important;
+ color:black !important;
+ border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarYearContainer {
+
+ background:white url("images/titleBar.png") repeat-x top;
+}
+.soria .dijitCalendarYearLabel {
+
+ margin:0;
+ padding:0.4em 0 0.25em 0;
+ text-align:center;
+}
+.soria .dijitCalendarSelectedYear {
+
+ color:black;
+ padding:0.2em;
+ padding-bottom:0.1em;
+ background-color:#b9cbf1 !important;
+ border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarNextYear,
+.soria .dijitCalendarPreviousYear {
+
+ color:black !important;
+ font-weight:normal;
+}
diff --git a/js/dojo/dijit/themes/soria/Calendar_rtl.css b/js/dojo/dijit/themes/soria/Calendar_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Calendar_rtl.css
@@ -0,0 +1,7 @@
+
+.dijitRtl .soria .dijitCalendarDecrease {
+ background-position: -30px top;
+}
+.dijitRtl .soria .dijitCalendarIncrease {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/soria/ColorPalette.css b/js/dojo/dijit/themes/soria/ColorPalette.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/ColorPalette.css
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+ border:1px solid #cbcbcb;
+ background:#fff;
+ -moz-border-radius: 0px !important;
+}
diff --git a/js/dojo/dijit/themes/soria/Common.css b/js/dojo/dijit/themes/soria/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Common.css
@@ -0,0 +1,19 @@
+
+.soria .dojoDndItemBefore {
+ border-top: 2px solid #369;
+}
+.soria .dojoDndItemAfter {
+ border-bottom: 2px solid #369;
+}
+.soria .dojoDndItemOver {
+ cursor:pointer;
+}
+.soria table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.soria .dojoDndAvatar td { border: none; }
+.soria .dojoDndAvatar tr { border: none; }
+.soria .dojoDndAvatarHeader td { height: 20px; padding: 0 0 0 21px; }
+.soria .dojoDndAvatarItem td { padding: 2px;}
+.soria.dojoDndMove .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
diff --git a/js/dojo/dijit/themes/soria/Dialog.css b/js/dojo/dijit/themes/soria/Dialog.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Dialog.css
@@ -0,0 +1,134 @@
+
+.soria .dijitDialog {
+ background: #eee;
+ border: 1px solid #cbcbcb;
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+ padding: 0px;
+}
+.soria .dijitDialog .dijitDialogTitle {
+
+ font-weight: bold;
+ padding: 0px 4px;
+ font-size: 0.9em;
+ color: #3243C5F;
+}
+.soria .dijitDialog .dijitDialogPaneContent {
+ background: #ffffff;
+ border:none;
+ border-top: 1px solid #b1badf;
+ padding:10px;
+}
+.soria .dijitDialogTitleBar {
+
+ background: #fafafa url("images/titleBar.png") repeat-x top left;
+ padding: 5px 6px 3px 6px;
+ cursor: move;
+ outline:0;
+}
+.soria .dijitDialogCloseIcon {
+
+ background-image: url("images/spriteRoundedIconsSmallBl.png");
+ background-repeat: no-repeat;
+ background-position: -60px 0px;
+ position: absolute;
+ vertical-align: middle;
+ right: 6px;
+ top: 4px;
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dj_ie6 .soria .dijitDialogCloseIcon {
+ background-image: url("images/spriteRoundedIconsSmallBl.gif");
+}
+.soria .dijitDialogCloseIcon-hover {
+ background-position: -60px -15px;
+}
+.soria .dijitTooltip,
+.soria .dijitTooltipDialog {
+
+ background: transparent;
+}
+.dijitTooltipBelow {
+
+ padding-top: 10px;
+}
+.dijitTooltipAbove {
+
+ padding-bottom: 10px;
+}
+.soria .dijitTooltipContainer {
+
+ background-color: #fff;
+ border:1px solid #cbcbcb;
+ padding:0.45em;
+}
+.soria .dijitTooltipConnector {
+
+ border:0px;
+ z-index: 2;
+}
+.soria .dijitTooltipABRight .dijitTooltipConnector {
+
+ left: auto !important;
+ right: 6px;
+}
+.soria .dijitTooltipBelow .dijitTooltipConnector {
+
+ top: 0px;
+ left: 6px;
+ background:url("images/tooltipConnectorUp.png") no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .soria .dijitTooltipBelow .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorUp.gif");
+}
+.soria .dijitTooltipAbove .dijitTooltipConnector {
+
+ bottom: 0px;
+ left: 6px;
+ background:url("images/tooltipConnectorDown.png") no-repeat top left;
+ width:17px;
+ height:11px;
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .soria .dijitTooltipAbove .dijitTooltipConnector {
+ bottom: -5px;
+}
+.soria .dijitTooltipLeft {
+ padding-right: 10px;
+}
+.dj_ie6 .soria .dijitTooltipLeft {
+ padding-left: 11px;
+}
+.soria .dijitTooltipLeft .dijitTooltipConnector {
+
+ right: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorRight.png") no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .soria .dijitTooltipLeft .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorRight.gif");
+}
+.soria .dijitTooltipRight {
+ padding-left: 10px;
+}
+.soria .dijitTooltipRight .dijitTooltipConnector {
+
+ left: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+ width:11px;
+ height:17px;
+}
+.dj_ie .soria .dijitTooltipRight .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorLeft.gif");
+}
diff --git a/js/dojo/dijit/themes/soria/Dialog_rtl.css b/js/dojo/dijit/themes/soria/Dialog_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Dialog_rtl.css
@@ -0,0 +1,5 @@
+
+.dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
+ right: auto;
+ left: 5px;
+}
diff --git a/js/dojo/dijit/themes/soria/Editor.css b/js/dojo/dijit/themes/soria/Editor.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Editor.css
@@ -0,0 +1,65 @@
+.dijitIEFixedToolbar {
+ position:absolute;
+
+ top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.soria .dijitToolbar .dijitToolbarSeparator {
+ background: url('images/editor.gif');
+}
+.soria .dijitEditorIcon {
+ background-image: url('images/editor.gif');
+ background-repeat: no-repeat;
+ width: 18px;
+ height: 18px;
+ text-align: center;
+}
+.soria .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled.gif');
+}
+.soria .dijitEditorIconSep { background-position: 0px; }
+.soria .dijitEditorIconBackColor { background-position: -18px; }
+.soria .dijitEditorIconBold { background-position: -36px; }
+.soria .dijitEditorIconCancel { background-position: -54px; }
+.soria .dijitEditorIconCopy { background-position: -72px; }
+.soria .dijitEditorIconCreateLink { background-position: -90px; }
+.soria .dijitEditorIconCut { background-position: -108px; }
+.soria .dijitEditorIconDelete { background-position: -126px; }
+.soria .dijitEditorIconForeColor { background-position: -144px; }
+.soria .dijitEditorIconHiliteColor { background-position: -162px; }
+.soria .dijitEditorIconIndent { background-position: -180px; }
+.soria .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
+.soria .dijitEditorIconInsertImage { background-position: -216px; }
+.soria .dijitEditorIconInsertOrderedList { background-position: -234px; }
+.soria .dijitEditorIconInsertTable { background-position: -252px; }
+.soria .dijitEditorIconInsertUnorderedList { background-position: -270px; }
+.soria .dijitEditorIconItalic { background-position: -288px; }
+.soria .dijitEditorIconJustifyCenter { background-position: -306px; }
+.soria .dijitEditorIconJustifyFull { background-position: -324px; }
+.soria .dijitEditorIconJustifyLeft { background-position: -342px; }
+.soria .dijitEditorIconJustifyRight { background-position: -360px; }
+.soria .dijitEditorIconLeftToRight { background-position: -378px; }
+.soria .dijitEditorIconListBulletIndent { background-position: -396px; }
+.soria .dijitEditorIconListBulletOutdent { background-position: -414px; }
+.soria .dijitEditorIconListNumIndent { background-position: -432px; }
+.soria .dijitEditorIconListNumOutdent { background-position: -450px; }
+.soria .dijitEditorIconOutdent { background-position: -468px; }
+.soria .dijitEditorIconPaste { background-position: -486px; }
+.soria .dijitEditorIconRedo { background-position: -504px; }
+.soria .dijitEditorIconRemoveFormat { background-position: -522px; }
+.soria .dijitEditorIconRightToLeft { background-position: -540px; }
+.soria .dijitEditorIconSave { background-position: -558px; }
+.soria .dijitEditorIconSpace { background-position: -576px; }
+.soria .dijitEditorIconStrikethrough { background-position: -594px; }
+.soria .dijitEditorIconSubscript { background-position: -612px; }
+.soria .dijitEditorIconSuperscript { background-position: -630px; }
+.soria .dijitEditorIconUnderline { background-position: -648px; }
+.soria .dijitEditorIconUndo { background-position: -666px; }
+.soria .dijitEditorIconWikiword { background-position: -684px; }
+.soria .dijitEditorIconToggleDir { background-position: -540px; }
+.soria .dijitEditorIconTabIndent { background-position: -702px; }
+.soria .dijitEditorIconSelectAll { background-position: -720px; }
+.soria .dijitEditorIconUnlink { background-position: -738px; }
+.soria .dijitEditorIconFullScreen { background-position: -756px; }
+.soria .dijitEditorIconViewSource { background-position: -774px; }
+.soria .dijitEditorIconPrint { background-position: -792px; }
+.soria .dijitEditorIconNewPage { background-position: -810px; }
diff --git a/js/dojo/dijit/themes/soria/Editor_rtl.css b/js/dojo/dijit/themes/soria/Editor_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Editor_rtl.css
@@ -0,0 +1,10 @@
+
+.dijitRtl .soria .dijitEditorIcon {
+ background-image: url('images/editor_rtl.gif');
+}
+.dijitRtl .soria .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled_rtl.gif');
+}
+.dijitRtl .soria .dijitToolbar .dijitToolbarSeparator {
+ background-image: url('images/editor_rtl.gif');
+}
diff --git a/js/dojo/dijit/themes/soria/Menu.css b/js/dojo/dijit/themes/soria/Menu.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Menu.css
@@ -0,0 +1,62 @@
+
+.soria .dijitMenu,
+.soria .dijitMenuBar {
+ border: 1px solid #cbcbcb;
+ margin: 0px;
+ padding: 0px;
+ background-color: #fff;
+}
+.soria .dijitBorderContainer .dijitMenuBar {
+ border:1px solid #B1BADF;
+}
+.soria .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0px;
+ color: #243C5F;
+}
+.soria .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.soria .dijitMenuPreviousButton, .soria .dijitMenuNextButton {
+ font-style: italic;
+}
+.soria .dijitMenuItem TD {
+ padding:1px;
+}
+.soria .dijitMenuPassive .dijitMenuItemHover,
+.soria .dijitMenuItemSelected {
+ background-color: #d9e6f9;
+ color: #243C5F;
+}
+.soria .dijitMenuItemIcon {
+ width: 15px;
+ height: 15px;
+}
+.soria .dijitMenuExpand {
+ width:15px;
+ height:15px;
+ background-image: url('images/spriteRoundedIconsSmall.png');
+ background-position: -30px top;
+}
+.dj_ie6 .soria .dijitMenuExpand {
+ background-image: url('images/spriteRoundedIconsSmall.gif');
+}
+.soria .dijitMenuSeparator {
+ height: 1px;
+}
+.soria .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #fff;
+}
+.soria .dijitMenuSeparatorBottom {
+ border-top: 1px solid #8ba0bd;
+}
+.soria .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.soria .dijitCheckedMenuItemIcon {
+ background-image: url('images/spriteCheckbox.gif');
+ background-position: -80px;
+}
+.soria .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/soria/Menu_rtl.css b/js/dojo/dijit/themes/soria/Menu_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Menu_rtl.css
@@ -0,0 +1,8 @@
+
+.dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
+ padding-left: 3px;
+ padding-right: 0px;
+}
+.dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
+ background-position: left top;
+}
diff --git a/js/dojo/dijit/themes/soria/ProgressBar.css b/js/dojo/dijit/themes/soria/ProgressBar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/ProgressBar.css
@@ -0,0 +1,24 @@
+
+.soria .dijitProgressBar {
+ margin:2px 0px 2px 0px;
+}
+.soria .dijitProgressBarEmpty{
+
+ background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+ border-color: #8ba0bd;
+}
+.soria .dijitProgressBarTile{
+
+ background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.soria .dijitProgressBarFull {
+ border-right:1px solid #8ba0bd;
+}
+.soria .dijitProgressBarLabel {
+
+ color:#293a4b;
+}
+.soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
+
+ background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
diff --git a/js/dojo/dijit/themes/soria/TimePicker.css b/js/dojo/dijit/themes/soria/TimePicker.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/TimePicker.css
@@ -0,0 +1,50 @@
+
+.soria .dijitTimePickerTick,
+.soria .dijitTimePickerMarker {
+ border-color: #b1badf;
+}
+.soria .dijitTimePickerTick {
+ color:white;
+}
+.soria .dijitTimePickerMarker {
+ background:#bed7f0 url("images/titleBar.png") repeat-x top;
+ color:#293a4b;
+ font-weight: bold;
+}
+.soria .dijitTimePickerItemSelected {
+ color: black;
+ background: #b9cbf1 none;
+}
+.soria .dijitTimePickerItemHover {
+ background: #60a1ea none;
+ color:white;
+}
+.soria .dijitTimePickerItemHover,
+.soria .dijitTimePickerItemSelected {
+ position: relative;
+ z-index: 10;
+}
+.soria .dijitTimePickerTick .dijitTimePickerItemInner {
+ font-size:0.4em;
+}
+.soria .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.soria .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+ font-size:1em;
+}
+.soria .dijitTimePickerMarkerHover {
+ border-top: 1px solid #94b9ef;
+}
+.soria .dijitTimePickerTickHover,
+.soria .dijitTimePickerTickSelected {
+ margin-top:-0.3em;
+ margin-bottom:-0.3em;
+ border-bottom: none;
+}
+.dijit_a11y .dijitTimePickerTickHover {
+ background-color: #CCC !important;
+ border-top: 1px solid #333 !important;
+ border-bottom: 1px solid #333 !important;
+}
+.dijit_a11y .dijitTimePickerMarkerHover {
+ border-bottom-width: 2px;
+}
diff --git a/js/dojo/dijit/themes/soria/TitlePane.css b/js/dojo/dijit/themes/soria/TitlePane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/TitlePane.css
@@ -0,0 +1,69 @@
+
+.soria .dijitTitlePaneTitle {
+ background: #cccccc;
+ background:#fff url("images/titleBar.png") repeat-x top left;
+ border:1px solid #bfbfbf;
+ padding:3px 4px;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #6d6d6d;
+}
+.soria .dijitTitlePaneTitle-hover {
+ background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
+ cursor: pointer;
+}
+.soria .dijitTitlePaneTitle * {
+ vertical-align: middle;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+ width:15px;
+ height:15px;
+}
+.soria .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.soria .dijitOpen .dijitTitlePaneTextNode,
+.soria .dijitFixedOpen .dijitTitlePaneTextNode {
+ color: #243C5F;
+}
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.soria .dijitTitlePane .dijitArrowNodeInner {
+ display:none;
+}
+.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
+.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
+ display:inline !important;
+ font-family:monospace;
+ padding-bottom:.2em;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+ display:none;
+}
+.soria .dijitTitlePaneContentOuter {
+ background: #ffffff;
+ border:1px solid #bfbfbf;
+ border-top: 0px solid #3d3d3d;
+}
+.soria .dijitTitlePaneContentInner {
+ padding:10px;
+}
+.dj_ie6 .soria .dijitTitlePaneContentOuter,
+.dj_ie6 .soria .dijitTitlePane .dijitTitlePaneTitle {
+ zoom: 1;
+}
+.soria .dijitTitlePaneTextNode {
+ margin-left: 4px;
+ margin-right: 4px;
+}
diff --git a/js/dojo/dijit/themes/soria/TitlePane_rtl.css b/js/dojo/dijit/themes/soria/TitlePane_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/TitlePane_rtl.css
@@ -0,0 +1,6 @@
+.dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
+.dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/soria/Toolbar.css b/js/dojo/dijit/themes/soria/Toolbar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Toolbar.css
@@ -0,0 +1,56 @@
+.soria .dijitToolbar {
+ border-bottom: 1px solid #ccc;
+ background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .soria .dijitToolbar {
+ height: 10px;
+}
+.soria .dijitToolbar .dijitButtonNode,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ font-size: 12px;
+}
+.soria .dijitToolbar .dijitButton,
+.soria .dijitToolbar .dijitToggleButton,
+.soria .dijitToolbar .dijitDropDownButton,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ padding: 1px;
+}
+.soria .dijitToolbar .dijitButtonChecked,
+.soria .dijitToolbar .dijitToggleButtonChecked {
+ background-color:#d8e5f8;
+ border:1px solid #316ac5;
+ padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonCheckedHover,
+.soria .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+ background-color:#9abbea;
+ border:1px solid #316ac5;
+ padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonHover,
+.soria .dijitToolbar .dijitToggleButtonHover,
+.soria .dijitToolbar .dijitDropDownButtonHover,
+.soria .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
+
+ border: 1px solid #316ac5;
+ padding: 0px;
+ background-color:#9abbea;
+}
+.soria .dijitToolbar label {
+ padding: 3px 3px 0 6px;
+}
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+
+ border: 1px #777 dotted !important;
+ padding: 0px;
+}
diff --git a/js/dojo/dijit/themes/soria/Tree.css b/js/dojo/dijit/themes/soria/Tree.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Tree.css
@@ -0,0 +1,90 @@
+
+.soria .dijitTreeNode {
+ background : url('images/treeI.gif') no-repeat;
+ background-position : top left;
+ background-repeat : repeat-y;
+ zoom: 1;
+}
+.soria .dijitTreeNodeHover {
+
+ background-image: url(images/treeHover.png);
+ background-repeat: repeat;
+ background-color: none !important;
+}
+.soria .dijitTreeIsLast {
+ background: url('images/treeI_half.gif') no-repeat;
+}
+.soria .dijitTreeLabel {
+ font-weight: normal;
+ margin-left: 3px;
+}
+.soria .dijitTreeIsRoot {
+ margin-left: 0;
+ background-image: none;
+}
+.soria .dijitTreeExpando {
+ width: 18px;
+ height: 18px;
+}
+.soria .dijitTreeRow {
+
+ padding-bottom: 2px;
+}
+.soria .dijitTreeContent {
+ min-height: 18px;
+ min-width: 18px;
+ padding-left:1px;
+}
+.soria .dijitTreeExpand {
+ width: 18px;
+ height: 18px;
+ background-repeat : no-repeat;
+}
+.soria .dijitTreeNodeEmphasized {
+ background-color: Highlight;
+ color: HighlightText;
+}
+.soria .dijitTreeLabelFocused {
+ outline: 1px invert dotted;
+}
+.soria .dijitTreeNodeSelected .dijitTreeLabel{
+ background:#b8cbec;
+}
+.soria .dijitTreeExpandoOpened {
+ background: url('images/spriteTree.gif') no-repeat -18px top;
+}
+.soria .dijitTreeExpandoClosed {
+ background-image: url('images/spriteTree.gif');
+}
+.soria .dijitTreeExpandoLeaf {
+ background: url('images/spriteTree.gif') no-repeat -36px top;
+}
+.soria .dijitTreeExpandoLoading {
+ background-image: url('images/treeExpand_loading.gif');
+}
+.soria .dijitTreeIcon {
+ width: 16px;
+ height: 16px;
+}
+.soria .dijitFolderOpened {
+ background: url('images/spriteDivIcons.gif') no-repeat -16px top;
+}
+.soria .dijitFolderClosed {
+ background: url('images/spriteDivIcons.gif') no-repeat top left;
+}
+.soria .dijitLeaf {
+ background: url('images/spriteDivIcons.gif') no-repeat -32px top;
+}
+.soria .dijitTreeNode .dojoDndItemBefore,
+.soria .dijitTreeNode .dojoDndItemAfter {
+ border-bottom: none;
+ border-top: none;
+}
+.soria .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+
+ border-top: 2px solid #369;
+}
+.soria .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+
+ border-bottom: 2px solid #369;
+}
diff --git a/js/dojo/dijit/themes/soria/Tree_rtl.css b/js/dojo/dijit/themes/soria/Tree_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/Tree_rtl.css
@@ -0,0 +1,17 @@
+
+.dijitRtl .soria .dijitTreeContainer .dijitTreeNode {
+ background-image : none;
+}
+.dijitRtl .soria .dijitTreeContainer .dijitTreeContent {
+ padding-left: auto;
+ padding-right: 1px;
+}
+.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoOpened {
+ background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
+}
+.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoClosed {
+ background-image: url('images/spriteTree_rtl.gif');
+}
+.dijitRtl .soria .dijitTreeContainer .dijitTreeExpandoLeaf {
+ background: none;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Button.css b/js/dojo/dijit/themes/soria/form/Button.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Button.css
@@ -0,0 +1,95 @@
+
+.soria .dijitButtonNode {
+
+
+ border: 1px solid #8ba0bd;
+ border-bottom:1px solid #657c9c;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #bcd5f0 url("../images/buttonEnabled.png") repeat-x top left;
+}
+.soria .dijitSelect .dijitButtonContents {
+ border-right: none;
+}
+.soria .dijitButtonNode button {
+ border: 0px;
+ background-color: transparent;
+}
+.soria .dijitButtonText {
+ text-align: center;
+ padding: 0 0.3em;
+}
+.soria .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.soria .dijitArrowButton {
+ color: #111;
+}
+.soria .dijitComboButton .dijitDownArrowButton {
+ padding-right:4px;
+}
+.soria .dijitComboBoxReadOnly,
+.soria .dijitSpinnerReadOnly,
+.soria .dijitSpinnerReadOnly .dijitButtonNode,
+.soria .dijitButtonDisabled .dijitButtonNode,
+.soria .dijitToggleButtonDisabled .dijitButtonNode,
+.soria .dijitDropDownButtonDisabled .dijitButtonNode,
+.soria .dijitComboButtonDisabled .dijitButtonNode,
+.soria .dijitComboBoxDisabled,
+.soria .dijitSpinnerDisabled,
+.soria .dijitSpinnerDisabled .dijitButtonNode {
+
+ border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+ background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
+ opacity: 0.60;
+}
+.dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText {
+
+ color: #aaa;
+}
+.soria .dijitButtonHover .dijitButtonNode,
+.soria .dijitButtonNodeHover,
+.soria .dijitToggleButtonHover .dijitButtonNode,
+.soria .dijitDropDownButtonHover .dijitButtonNode,
+.soria .dijitComboButtonHover .dijitButtonContents,
+.soria .dijitComboButtonDownArrowHover .dijitDownArrowButton,
+.soria .dijitComboBoxHover .dijitDownArrowButton,
+.soria .dijitSpinnerUpArrowHover .dijitUpArrowButton,
+.soria .dijitSpinnerDownArrowHover .dijitDownArrowButton {
+
+
+ color:#243C5F;
+ background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
+}
+.soria .dijitButtonActive .dijitButtonNode,
+.soria .dijitToggleButtonActive .dijitButtonNode,
+.soria .dijitDropDownButtonActive .dijitButtonNode,
+.soria .dijitComboButtonActive .dijitButtonContents,
+.soria .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+
+ border-color:#657c9c;
+ background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitSpinnerUpArrowActive .dijitUpArrowButton,
+.soria .dijitSpinnerDownArrowActive .dijitDownArrowButton,
+.soria .dijitComboBoxActive .dijitDownArrowButton {
+
+ background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitArrowButtonInner {
+ background-image: url("../images/spriteArrows.png");
+ background-repeat: no-repeat;
+ background-position: 0px top;
+ width: 11px;
+}
+.soria .dijitLeftArrowButton .dijitArrowButtonInner {
+ background-position: -11px top;
+}
+.soria .dijitUpArrowButton .dijitArrowButtonInner {
+ background-position: -22px top;
+}
+.soria .dijitRightArrowButton .dijitArrowButtonInner {
+ background-position: -33px top;
+}
+.dj_ie6 .soria .dijitArrowButtonInner {
+ background-image: url("../images/spriteArrows.gif");
+}
diff --git a/js/dojo/dijit/themes/soria/form/Button_rtl.css b/js/dojo/dijit/themes/soria/form/Button_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Button_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .soria .dijitComboBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .soria .dijitSelect .dijitButtonContents {
+ border-left: none;
+ border-right-width: 1px;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Checkbox.css b/js/dojo/dijit/themes/soria/form/Checkbox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Checkbox.css
@@ -0,0 +1,40 @@
+
+.soria .dijitToggleButton .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+ background-image: url('../images/spriteCheckbox.gif');
+}
+.soria .dijitCheckBox,
+.soria .dijitCheckBoxIcon {
+ background-image: url('../images/spriteCheckbox.gif');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.soria .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+
+ background-position: -16px;
+}
+.soria .dijitCheckBoxChecked,
+.soria .dijitToggleButtonChecked .dijitCheckBoxIcon {
+
+ background-position: 0px;
+}
+.soria .dijitCheckBoxDisabled {
+
+ background-position: -48px;
+}
+.soria .dijitCheckBoxCheckedDisabled {
+
+ background-position: -32px;
+}
+.soria .dijitCheckBoxHover {
+
+ background-position: -80px;
+}
+.soria .dijitCheckBoxCheckedHover {
+
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/soria/form/ComboBox.css b/js/dojo/dijit/themes/soria/form/ComboBox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/ComboBox.css
@@ -0,0 +1,10 @@
+.soria .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("../images/spriteArrows.png") no-repeat left center;
+ width: 11px;
+}
+.dj_ie6 .soria .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("../images/spriteArrows.gif") no-repeat left center;
+}
+.soria .dijitComboBoxHover .dijitArrowButtonInner {
+
+}
diff --git a/js/dojo/dijit/themes/soria/form/Common.css b/js/dojo/dijit/themes/soria/form/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Common.css
@@ -0,0 +1,76 @@
+
+.soria .dijitInputField INPUT,
+.soria .dijitTextBox,
+.soria .dijitComboBox,
+.soria .dijitSpinner {
+ margin: 0em 0.1em;
+}
+.soria .dijitTextBox,
+.soria .dijitComboBox,
+.soria .dijitSpinner,
+.soria .dijitInlineEditor input,
+.soria .dijitTextArea {
+
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ border:1px solid #8ba0bd;
+ line-height: normal;
+}
+.dj_ie6 .soria .dijitTextBox,
+.dj_ie6 .soria .dijitComboBox,
+.dj_ie6 .soria .dijitSpinner,
+.dj_ie6 .soria .dijitInlineEditor input,
+.dj_ie6 .soria .dijitTextArea {
+ background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.soria .dijitComboBox .dijitButtonNode {
+ padding: 0 0.2em;
+}
+.soria .dijitComboBox .dijitButtonNode,
+.soria .dijitSpinner .dijitButtonNode {
+
+ border-color: #8ba0bd;
+ border-left: 1px solid #8ba0bd;
+}
+.soria .dijitTextBoxFocused,
+.soria .dijitComboBoxFocused,
+.soria .dijitSpinnerFocused, .soria .dijitSpinnerUpArrowActive, .soria .dijitSpinnerDownArrowActive,
+.soria .dijitTextAreaFocused {
+
+ border-color:#406b9b;
+}
+.soria .dijitComboBoxFocused .dijitButtonNode,
+.soria .dijitSpinnerFocused .dijitButtonNode,
+.soria .dijitSpinnerUpArrowActive .dijitButtonNode,
+.soria .dijitSpinnerDownArrowActive .dijitButtonNode {
+ border-left-color:#8ba0bd;
+}
+.soria .dijitSpinnerFocused .dijitDownArrowButton,
+.soria .dijitSpinnerUpArrowActive .dijitDownArrowButton,
+.soria .dijitSpinnerDownArrowActive .dijitDownArrowButton {
+ border-top-color:#8ba0bd;
+}
+.soria .dijitError {
+ border-color:#f3d118;
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .soria .dijitError INPUT {
+
+ background-color:#f9f7ba !important;
+}
+.soria .dijitErrorFocused {
+ background-color:#ff6;
+ background-image:none;
+}
+.dj_ie6 .soria .dijitErrorFocused INPUT {
+
+ background-color:#ff6 !important;
+}
+.soria .dijitValidationIcon {
+
+ width: 16px;
+ background: transparent url('../images/warning.png') no-repeat center center;
+}
+.soria .dijitComboBoxHighlightMatch {
+ background-color:#f9f7ba;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Common_rtl.css b/js/dojo/dijit/themes/soria/form/Common_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Common_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .soria .dijitComboBox .dijitButtonNode,
+.dijitRtl .soria .dijitSpinner .dijitButtonNode {
+
+ border-color: #8ba0bd;
+ border-left: 0px solid #8ba0bd;
+ border-right: 1px solid #8ba0bd;
+}
diff --git a/js/dojo/dijit/themes/soria/form/RadioButton.css b/js/dojo/dijit/themes/soria/form/RadioButton.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/RadioButton.css
@@ -0,0 +1,40 @@
+
+.soria .dijitToggleButton .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+ background-image: url('../images/spriteRadio.gif');
+}
+.soria .dijitRadio,
+.soria .dijitRadioIcon {
+ background-image: url('../images/spriteRadio.gif');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.soria .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+
+ background-position: -16px;
+}
+.soria .dijitRadioChecked,
+.soria .dijitToggleButtonChecked .dijitRadioIcon {
+
+ background-position: 0px;
+}
+.soria .dijitRadioDisabled {
+
+ background-position: -48px;
+}
+.soria .dijitRadioCheckedDisabled {
+
+ background-position: -32px;
+}
+.soria .dijitRadioHover {
+
+ background-position: -80px;
+}
+.soria .dijitRadioCheckedHover {
+
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Select.css b/js/dojo/dijit/themes/soria/form/Select.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Select.css
@@ -0,0 +1,52 @@
+
+.soria .dijitSelectDisabled * {
+ cursor: not-allowed !important;
+}
+.soria .dijitSelectReadOnly * {
+ cursor: default !important;
+}
+.soria .dijitSelect .dijitButtonNode {
+ padding: 0px;
+}
+.soria .dijitSelect .dijitButtonContents {
+ padding-top: 1px;
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.soria .dijitSelectHover .dijitButtonContents,
+.soria .dijitSelectActive .dijitButtonContents,
+.soria .dijitSelectOpened .dijitButtonContents,
+.soria .dijitSelectDisabled .dijitButtonContents,
+.soria .dijitSelectReadOnly .dijitButtonContents{
+ background: transparent none;
+}
+.dj_ie .soria .dijitSelect .dijitButtonContents {
+ padding-top: 0px;
+}
+.soria .dijitSelectDisabled .dijitButtonNode {
+ border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+ background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .soria .dijitSelectDisabled .dijitButtonNode * {
+ filter: gray() alpha(opacity=50);
+}
+.soria .dijitSelectHover .dijitButtonNode {
+ color:#000;
+ background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
+}
+.soria .dijitSelectActive .dijitButtonNode,
+.soria .dijitSelectOpened .dijitButtonNode {
+ border-color:#657c9c;
+ background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitSelectMenu td {
+ padding: 0em;
+}
+.soria .dijitSelectMenu .dijitMenuItemIcon {
+ margin: 0.1em 0.2em;
+ display: none;
+}
+.soria .dijitSelectMenu .dijitMenuItemLabel,
+.soria .dijitSelectMenu .dijitMenuArrowCell {
+ padding: 0.1em 0.2em;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Slider.css b/js/dojo/dijit/themes/soria/form/Slider.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Slider.css
@@ -0,0 +1,129 @@
+
+.soria .dijitSliderProgressBarH {
+ border-color: #b1badf;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.soria .dijitSliderProgressBarV {
+ border-color: #b1badf;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarH,
+.soria .dijitSliderFocused .dijitSliderLeftBumper {
+ background-image:url("../images/sliderFullFocus.png");
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarV,
+.soria .dijitSliderFocused .dijitSliderBottomBumper {
+ background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.soria .dijitSliderRemainingBarV {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderRemainingBarH {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.soria .dijitSliderBar {
+ border-style: solid;
+ outline:1px;
+
+}
+.soria .dijitSliderFocused .dijitSliderBar {
+ border-color:#8ba0bd;
+}
+.dijit_a11y .dijitSliderProgressBar {
+ background-color:#333 !important;
+}
+.soria .dijitSliderImageHandleH {
+ border:0px;
+ width:15px;
+ height:18px;
+ background:url("../images/preciseSliderThumb.png") no-repeat center top;
+ cursor:pointer;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleH {
+ background-image:url("../images/preciseSliderThumbFocus.png");
+ #background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.dj_ie6 .soria .dijitSliderImageHandleH {
+ background-image:url("../images/preciseSliderThumb.gif");
+}
+.soria .dijitSliderLeftBumper {
+ border-left-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.soria .dijitSliderRightBumper {
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+ border-color: #b4b4b4;
+ border-right-width: 1px;
+}
+.soria .dijitSliderImageHandleV {
+ border:0px;
+ width:20px;
+ height:15px;
+ background:url("../images/sliderThumb.png") no-repeat center center;
+ #background:url("../images/sliderThumb.gif") no-repeat center center;
+ cursor:pointer;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleV {
+ background-image:url("../images/sliderThumbFocus.png");
+ #background-image:url("../images/sliderThumbFocus.gif");
+}
+.soria .dijitSliderBottomBumper {
+ border-bottom-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderTopBumper {
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+ border-color: #b4b4b4;
+ border-top-width: 1px;
+}
+.soria .dijitSliderIncrementIconH,
+.soria .dijitSliderIncrementIconV {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
+ width:15px; height:15px;
+ cursor:pointer;
+}
+.soria .dijitSliderIncrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.soria .dijitSliderDecrementIconH,
+.soria .dijitSliderDecrementIconV {
+ width:15px;
+ height:15px;
+ cursor:pointer;
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.soria .dijitSliderDecrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
+}
+.soria .dijitSliderButtonInner {
+ visibility:hidden;
+}
+.soria .dijitSliderReadOnly *,
+.soria .dijitSliderDisabled * {
+ border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+ color: #bdbdbd;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconH {
+ background-position: 0px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconH {
+ background-position: -30px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconV {
+ background-position: -15px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconV {
+ background-position: -45px -15px;
+}
diff --git a/js/dojo/dijit/themes/soria/form/Slider_rtl.css b/js/dojo/dijit/themes/soria/form/Slider_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/Slider_rtl.css
@@ -0,0 +1,29 @@
+
+.dijitRtl .soria .dijitSliderProgressBarH,
+.dijitRtl .soria .dijitSliderRemainingBarH,
+.dijitRtl .soria .dijitSliderLeftBumper,
+.dijitRtl .soria .dijitSliderRightBumper,
+.dijitRtl .soria .dijitSliderTopBumper {
+ background-position: top right;
+}
+.dijitRtl .soria .dijitSliderProgressBarV,
+.dijitRtl .soria .dijitSliderRemainingBarV,
+.dijitRtl .soria .dijitSliderBottomBumper {
+ background-position: bottom right;
+}
+.dijitRtl .soria .dijitSliderLeftBumper {
+ border-left-width: 0px;
+ border-right-width: 1px;
+}
+.dijitRtl .soria .dijitSliderRightBumper {
+ border-left-width: 1px;
+ border-right-width: 0px;
+}
+.dijitRtl .soria .dijitSliderIncrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
+}
+.dijitRtl .soria .dijitSliderDecrementIconH {
+ background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+ #background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
diff --git a/js/dojo/dijit/themes/soria/form/TimeTextBox.css b/js/dojo/dijit/themes/soria/form/TimeTextBox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/form/TimeTextBox.css
@@ -0,0 +1,1 @@
+@CHARSET "UTF-8";
diff --git a/js/dojo/dijit/themes/soria/images/accordionItemActive.gif b/js/dojo/dijit/themes/soria/images/accordionItemActive.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..249a1533f473e72dc10dcd3cf6db3ac67c57e683
GIT binary patch
literal 174
zc${<hbhEHbWMVL2IKsd%Z~wb{FMmzl`To@1KT8k4pSS=0@!Nl9?0z?Q-@EHif8Toc
zYu283S04XfaNzCqUGFYF{5^B`yE`v_oxA^g&c1gqKm3`p^F0Gzp!kyoOzVIMkev*y
z+6u0$jv|^~lMK#$_PAsq;dYsUp~>g+CWi@!4?Yy&&^ocC=wy!7{0m$Q1(+DD0ptfv
APXGV_
diff --git a/js/dojo/dijit/themes/soria/images/accordionItemActive.png b/js/dojo/dijit/themes/soria/images/accordionItemActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..92c74315c4d8ca43e468b14fabee824390059e80
GIT binary patch
literal 171
zc%17D@N?(olHy`uVBq!ia0vp^Oh9bF0V21g*<1xuk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5Xd_7$pLn>}1)%<+O&&<qx`uhC;4p;X7=Sg@aKjYW$`GP)<
zl^R#(*PkddpI_IK!Os1!eFl@-!?uN7PL&3{365%Qiar}TiVXk!Im{rCz)*Bs^NPmw
Sqsl;o89ZJ6T-G@yGywph96L||
diff --git a/js/dojo/dijit/themes/soria/images/buttonActive.png b/js/dojo/dijit/themes/soria/images/buttonActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f81598388f866b2fba598decf0aea47e6ce50776
GIT binary patch
literal 187
zc%17D@N?(olHy`uVBq!ia0vp^%s`yN!2~4F?3M*dNS3%plmzFem6RtIr7}3C<R_&n
zc;+Uirv{}arc@T5Otk?jiuH7H45_&FX0k6=g9C?~z54t5eS8<T9TnK(HJ4+m!waU~
z)yF^Qf4x{2)4PD}-SS78X3dlLb#w_IUB39ywYAsfJx*D6e|u}P-ePOS43n47k0?zP
kap8y**mA(wf<=Pift!&+)zcGyffg}%y85}Sb4q9e07_RzSpWb4
diff --git a/js/dojo/dijit/themes/soria/images/buttonDisabled.png b/js/dojo/dijit/themes/soria/images/buttonDisabled.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f76e4ab57109531bb9094194102944b1d63a5ea9
GIT binary patch
literal 187
zc%17D@N?(olHy`uVBq!ia0vp^%s`yN!2~4F?3M*dNS3%plmzFem6RtIr7}3C<R_&n
zc;+Uirv{}arc@T5Otk?jiuH7H45_&F=CU<cg9DH2#hx?&!ZrVWXpVT%;3;y}TX{#*
z6019ESG`}CT`JCu=vrA`YJ9~n;PI;Ck3+*$JHA|I+2dL-WN4Ulue)|Nhd5Vjjb_i@
jja9<;7i{%zU}O+{ZQ-);-`lxBix@mz{an^LB{Ts5Q`JTN
diff --git a/js/dojo/dijit/themes/soria/images/buttonEnabled.png b/js/dojo/dijit/themes/soria/images/buttonEnabled.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3c55c834ec37236b7372463be08949dae4cb27b5
GIT binary patch
literal 174
zc%17D@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?<NeQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiUK@c978H@y*Xjc)!@L>@=(#N?B4$}rA<E^Tno5QswF2J
zWR8fg`E&Te9+}UHGrl#699x?ZA^LYw(vk{;<F|jg&YhGmdQ2@sy5W9!>}?w+9)@^(
W6W7*Rcawo;GkCiCxvX<aXaWGH={}4A
diff --git a/js/dojo/dijit/themes/soria/images/buttonHover.png b/js/dojo/dijit/themes/soria/images/buttonHover.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a22ebdaca190ad0ffd3ed08a659c07f696b5363f
GIT binary patch
literal 160
zc%17D@N?(olHy`uVBq!ia0vp^j6j^i!2~2v_?<NeQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jikv)M978H@y_sOhcR)elu;0)B=@VBqv3OP;IC1RG!A;Y3
z94lMZoH=b}AG|sG&QboIh(*hCvxuf5X+it#PwKbXGqN!h?YEJ+`t73v&@={5S3j3^
HP6<r_AP_fP
diff --git a/js/dojo/dijit/themes/soria/images/dndCopy.png b/js/dojo/dijit/themes/soria/images/dndCopy.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..baecd7cf2dc1dae959492ab965a04bc7059dcbf5
GIT binary patch
literal 777
zc$@(V1NQuhP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0-i}kK~y-)jg#w3
zlVKRf?@f2`0B&x&<{{_iautdrx20@zks(6b)HO9+1eHRwM9DO*Tyx?f&Dp_(LS-fj
zIcL#_AhYsIAN&v%Bm4*6f8*-eoD&tQ3+_+v`@8Pba}ynuluV?efYN@1)4NMha-$fT
zbr~F~DG>ek7YV3{LJi|}c)C4_o*$jK^wo*_^;$H1szvj<1En54sDwh%e-FW>6rTS6
z1n#Xi*g|HM2aV8qwa^UYqj0VOs+l~fULJ*c{xtX|et5qL%N&85KG&o2tqs;-IjR;a
zu`A<@0XfgJkm=7r>Z25B{c4atS_zYcO!Z@S++>;0G5Ac#0>iQ%-J4x;gSHRXA$u%^
zbV7opVKI0^1W9WeNEVrih5}RD6FB>>0=6|P%H9}Iv~U79H{5Xp*ZUTvj3q-nA_CvX
z2YCo0p9nl18*Fx?g1hsx6PC3y6b&DTWwZ>Ze0tno*{h&^(G7KPKD2!rh}s39hXnF5
zlk*82m39@gX<tOu>%E@;CFP(3<Ru6k%*fDv684WZXkEYh-v-wCif9$WCT5U-P0l$s
zE<ii0!QIUs__ro8`fUWk-@!Pr^lJ(I8~yNn@t|e31$2*rgM?%!aU?WSpqZ_&@KphF
zr?VlSN{4t<1jmXaZcx2g4eFyE@ILL#fVGffW<yNOBa_)*jAOF}$a%(gJ(+=|5iy)A
z&bWbn*$#RT17onLi-juow51IcvMd@Q^QS{Ho`ytU0xIThdp*xt_ZzS^${TkdQbarw
zWV!fZ-3v8@Y}Y(5+jT#|wd#sSwDcIvi@=vDO#FlQz)X}b3aLD45Df`;fPq+eV?Fm0
zlvh}0-r-}4D_KV-MGXaVI}$i~2SLU{af`UjS_-7<4xjTMoj1y)+}<Z{00000NkvXX
Hu0mjfCJ0*J
diff --git a/js/dojo/dijit/themes/soria/images/dndMove.png b/js/dojo/dijit/themes/soria/images/dndMove.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..07f878cfb2c9c165a354b613b7b2fd352328e4ea
GIT binary patch
literal 726
zc$@*&0xA88P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0&7V`K~y-)jgwzU
zlTjGPpU-WIVri)r(jSXy<Wy*&ZlYGQp@L=FBvXsZU=b84ji8XOf{=ntO%p+!(naFG
zys*M3D~L?-UlP<+MO#7$dex2J(>dQZo#KV>;o*J1bI$Yo-tXfakVHU+L`Yd8?C8p^
zGkPvG9;eiix<pT;9i3t=BY3~mY9YK)XV8DA_ZlY`KXY)gkInNB+3@E++yAz5V7`a0
zXP4A%<>(cAbwNHrF~G2+Qki@GbC~tN?y_RW!E-a^teAGN?)y!;e|NBI_B5T}s@d?R
zp7E8s*#HF5PGCz3`b)-&ST=r=#bbqZ&0VJqRg4qjxn!b9Q=oQzy2|KM^lAV@LP%z{
zyNm@NY|ML?%PW&k20{Xkj%I6XQpZMfw4DFZMthS*)$c<F!YqpW!H;`Pe|4Cp?~556
z5@3Fj%B+!eP3D(r{yKvNZ}J$Pg-#fqao+Q@RV)~>aidVzjb(M2sn3&{Hk`uU)muF<
z-#*Bkw^nX8BqX6{FZcH)F!pjdVR9W{%CL#kOB0(0#B^<E?9&)VUepu2&PI6?hm2He
zl?@?Ni{qSHT9rH_hBiGzI}8kUzyrmE?v#N;L=zZN8?pwXswz<fDmBU)p#?-Ms82%|
zl%25dxfSo5Y+ehI?cx!9Yf_E=+$NwmM2>?6NQMG41|=~VvhZ&~YgaS1`qdbeGtn;q
z{)j}FnD`pe5U$ZBNNEx6HVZvgXdklsOl^L1Hs<8rS-DIr5YdU=snd*T_ZtFw0_}ew
zUA$T6Gq1mmzR!t+6-nquKD;OuhEqa?qE3PvF``eKZ)?E!A8;2xtQKO7{{R3007*qo
IM6N<$g0T}z8~^|S
diff --git a/js/dojo/dijit/themes/soria/images/dndNoCopy.png b/js/dojo/dijit/themes/soria/images/dndNoCopy.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9bf9c33962359c6a769f403a584cf854a098b294
GIT binary patch
literal 699
zc$@*d0!00ZP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0#HdrK~y-)jZ@!C
zQ(+i>&)JVQH`h!G+uVv7WYM}&v!Eb@F1(6`7b4M}SAhl559m)QiXv|+h@>AP<ZR8E
zGhI{`iXzTUVr@bQr^r9z>G@7)r!=Wvc=!(A`JU%{-{*Zlkqyxy(%vI7a8uWfCtfce
z6Sw$%hI{It{3TrHM3R%CFxC=XFj@|w64{MXLkORVQezb9ni}-+j5_-V`JzbC=<3Gm
z{sUMF1d;dGBI9-=?Q~+s<;FDE55#P30GD}oort<wkt^W{3c)($0|Cs{*P|NKJ|EsX
z9LVW9UW*{-a^d{XOhk^eu8B~HH^)idhNZ1REHKrT);3$<Q}aGdX_|>~3cMm7@%yCm
z<SfluJ9QdG-dqR<vFP(-Zi@%y_(5A>ITphNNm*iyNLy<!xzevYjIS+iD6qD160=;#
zn89Let1U1ek7Jnik1+M8B#v4F*F_8&^48GpUF&N8S7hi#h5~m8dG7JCRShWZZT@e8
z*}9;aMZXews5_1F&M;f$!ph+zSWP7GrLz;?uU@eU-!Al_eC#MHCpwUCiXla!%HXal
z;S!CggroS#UcY0j-q2lT)?%dbmj^qxV}yGt3!|36HDzKqTaohy%nVeor&ymU5RKRZ
z3vBaCi&!NO5k1w>zAajE-XGwgXqaRM%3)P!HD=h}-v!cU{d&@#L=VUEp6JE*EF){(
z@Pf$iX)=-8K)x?pv3BEoutbt+&1p_r^>Eq}R2U{6@Qi1Z$7BbmtNn)P1B2o)21SFy
hGtmvT*SpDc{sGkB$E)6PSyuo6002ovPDHLkV1iVZMK1sV
diff --git a/js/dojo/dijit/themes/soria/images/dndNoMove.png b/js/dojo/dijit/themes/soria/images/dndNoMove.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cb8bd8bdd521510635377ca88c413267601ae9ec
GIT binary patch
literal 677
zc$@*H0$TlvP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0y;@VK~y-)jg#L?
z6j2n%zccIpaBJ7CHT+R&h?LYr5p5|1Jr!2c!$J@RK@rtM4?$5`k4XeQWI-W8L6h`D
z64Sq+w$_LW%37+0-F_&u3PMQ+D+}}O+-b(9%?A&BxM$9}=X=jw&IL)h8~_xpUBI0o
zf7DFXHd8Sas4^vXTXGw{`xSp3z<(Xuz{t8SEE@M%Jad-Q$=&?9E6HE`_H+6~C*QOr
ztZUHvWv|au2Q)}=5A@8Bu1lQSwu6ObjVv@a(Uf(vbu*_99p-q$3Qn$S;l$1)d*FNL
ziok$|%fP^BO&!PTmvVGTEhp9|Xq#opcMZo>PH_EiYd5f4I<W=z0-IhgU&$}=IP<X>
z&DCo-Ya)<~#_XITSM|sLDx@NdtvzxlI4w<l-`>G&ILyy=_58;~;A5zg*#!}sPnC|p
zFv8rTI6LKHVd(zCcvCa8qB^IEh!?9=VkQ_8;Sg_WJ`;n1FmsV8=WQbLwxWU~f&rcA
z_XlmYnY(@S7I>v=e68!eDN}$OnqJ5R{OpsDxkQS+_c`N1&B(CqeIZ;0OdJJz-v@(C
zNuXTBlG7eYtej^;S~w;Xiw>aek<Vub{}T~`Cr*KzSF7saq0la4k0XF~92iV{HYt%(
zK5w_1a!yM-Id?rJ!`BYS5<pM_A09jE-V>h+nd-Rh4?D4QKt{ct*~jFHs7?%L({rc5
zi~9eQa&om(T>cvE-;uW34$8$|01Dlbz9L){Ut-2q8T<22*KXZ!PKrDg!)Y^Q00000
LNkvXXu0mjfZgDUm
diff --git a/js/dojo/dijit/themes/soria/images/editorDisabled.gif b/js/dojo/dijit/themes/soria/images/editorDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e40460d7a8a76619dea2ce71df1b9f388b1c8551
GIT binary patch
literal 4979
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
diff --git a/js/dojo/dijit/themes/soria/images/editorDisabled_rtl.gif b/js/dojo/dijit/themes/soria/images/editorDisabled_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a0f6c1074e109611b782c8fc82d12fff98da50a3
GIT binary patch
literal 4994
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
F{|CzGzdir}
diff --git a/js/dojo/dijit/themes/soria/images/editor_rtl.gif b/js/dojo/dijit/themes/soria/images/editor_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a9740c213601c736ff0fe7fd070914e7aa940dcd
GIT binary patch
literal 5424
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
Jf<S;1{{tM<k7fV>
diff --git a/js/dojo/dijit/themes/soria/images/preciseSliderThumb.gif b/js/dojo/dijit/themes/soria/images/preciseSliderThumb.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..53b33e54abdb947bdc92cd8b30359a4153017738
GIT binary patch
literal 258
zc$@(O0sa0*Nk%w1VGRHf0K^^u_4W1h^Yixh_QJx#$jHdq+1c&w?fLonudlD>=H{-h
zuB4=-!^6YJ$H&yv)W*if^z`)V>gwFw+|10(_xJb9%ggxq`276*`uh6&`}_U<{h^_u
z{{H^||NsC0{{R30A^8LW0015UEC2ui01W^T000Glphs+ESrVSNb)A;I8oP07msvt?
zW!-kE91I{p1YkIu3=mUkHjhc*#R7l;EElA5romV!7K}y<)LbwJ%w-&1am<-Dr?>6A
zHTW@Igvi{-83+tN9uor`h=>CX2Q(=U1&IX%78)rj1`7rqnF)lK9t8>#3J!jtmk|sJ
IN0%W0JLM~Y#sB~S
diff --git a/js/dojo/dijit/themes/soria/images/preciseSliderThumb.png b/js/dojo/dijit/themes/soria/images/preciseSliderThumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..045bf35ed69d830b3a8f25a3459e180ea1b4c808
GIT binary patch
literal 413
zc$@*90b>4%P)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzKS@MERCwBiQ#)>iKnxu|>9`8wM%39P
zO1DkUkd{p%ZIMu<<_cRN5>Z5HXb^A&1mdG8eBw9SLBs5>V#)H@<L74&M)N$6S(de9
zjBVKe^3*iVjd^r7uIuu{G)-KE=(^4o;`=@d-<fimVHnsrjwc|)FqmmBsaMNso@cHq
z2r&R*k7Af=(@Bz?4B|M>%3py{(Y9^QhRT|z@z%slXF*632?7Kk_995IsUTHMnMDQ)
zkgOM(L;<y>RX5^G2SLCeKuv~^IPQu4jY1;_VKwTyevG1M#Uu(KURBj|+qU=Efn`bp
zZi}MWr)j!kf}iL4I{_ZZ?H49Vc5xiDvMf0ZEPUFKJ>7L+k!KQYU)2Bg;c#GCmN8h`
z$8F#DpLG3;FLCzu2>3$gI}F2HVtDPk?t}av`~V{7Pk;dc;kd1Onp(@G00000NkvXX
Hu0mjfC?~Xr
diff --git a/js/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif b/js/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8c6f92eb45865a0b1c3a08f978ad2e2b61d45057
GIT binary patch
literal 258
zc$@(O0sa0*Nk%w1VGRHf0K^{v_4W1n`T4G{uJ-o!^YioN<>ko8$cc%GrlzKQdwZy;
zsEdn>^z`)I-QC{a-mtK+w6wIs!osYqtl{C|_xJazs;bM&%lP>C{QUg-`uh9(`~Cg>
zc6N6D{{H{}|NsC0A^8LW0018VEC2ui01W^T000Gl;3sfoSqk6BdETbI8_RX7r(HvS
zX&#5EoeY3L1Y|lK4KQPAHjhal<^o^<E*PY8w#i&5m&`^B++Z?+3}zf%b<CP|r?>UI
zH~2AKv<TeC0SgsB9}ox~h=>ReekmUk28jj=7aNWr1qlTnnGS@P1_u@g5gIg?DH93}
IM~)!?I|pcgNB{r;
diff --git a/js/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png b/js/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c235849594ee3cd63ab53519c8985bcac9e5342c
GIT binary patch
literal 434
zc$@*U0ZsmiP)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzR7pfZRCwBilf7z$KoG~*k7zn=6~!kI
zAH=-Kg^(g}2zi48TQ4cDNs~^9SmhOjfLK`BSSbjWiHTp?S#HIT92ppPXLo+{pT&{!
zJP+l0enbfE(Es*i7{)Ds4t9sbfoz6hAWn^CS>j-h<3Qm%eqN^QI@I_52I4pl@%)r}
zHSNZ6B)*2=3_w`V#_{W>(=^>Y#ImeKynvvhX_`b0Dl-g2TBC3J6M`g~Kp}`>y$DgY
zHMBN<t}+KHH1~^2w7|NhMK|<IyRM7cw%sH{4Cio<J9xoIJ%L~}s;Y8*-(M)v0&rf}
z^|P+)_b>y~D>1l_<M<Rs(LxF0BuQR1O?$-Q*Q7LS<rsz`DvE-rzzVS-2q%2~2`XeH
zY}=k7Ns>z3Mww;VjVOvJ2m;hJ&0bNIH+=mAUt$A+$+G-WmgPGhr)xaG52~sH@C`oz
c&G{8z0R7*RI)c_e82|tP07*qoM6N<$g1$Yu-T(jq
diff --git a/js/dojo/dijit/themes/soria/images/progressBarEmpty.png b/js/dojo/dijit/themes/soria/images/progressBarEmpty.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..04d81df089a3bc80c5c3d9373cbf66d9725106bf
GIT binary patch
literal 232
zc%17D@N?(olHy`uVBq!ia0vp^+(4Yd!2~4l=fwU4Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jin=^q978H@T?uvMYB1ngy{p;$|Nk?M3X3G_H;DD9zO`KA
zIjb!AzPxmpb$*ZF=E|!Nl+HB&h_$fkSrF#z{ebs+sh2oku!ccsVb8(C=XdqVPq^_{
zM$W3P=Dwv@)2~9+JC{8seYEelnm+$y_^K6WZ{40!v*gZ`Eo+<)ZnWAwH8DypnNj!l
ft{%bl49pClq@B++b*Fy;x{ATm)z4*}Q$iB}EZ$tK
diff --git a/js/dojo/dijit/themes/soria/images/progressBarFull.png b/js/dojo/dijit/themes/soria/images/progressBarFull.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bed17b39033e3880f6b21c05ac8ec34aacfb51ff
GIT binary patch
literal 251
zc%17D@N?(olHy`uVBq!ia0vp^+(4Yd!2~4l=fwU4Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JispK{IEGZ*dNbXSyTyQ~H9l+ZoOl2Ko0Xf3x(H;=pSC;n
zRe<y1nJ;-4{*7beoLI=2=&mxS!K1LtR_&&R;=|>pkBoxmIqQ9roTu}_jgc?l@${%W
zlRnwB_uUqnyV)gcxtzJhll6C`Ugnz0{543o6nPdg(RTTk_*WkmZ9TeX!mX7rqx;#_
z>=p9keRlmVdFk?rFWTYupLI*t+qrgFut+d4w8nRyKGD7h=uievS3j3^P6<r_<62|b
diff --git a/js/dojo/dijit/themes/soria/images/sliderEmpty.png b/js/dojo/dijit/themes/soria/images/sliderEmpty.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..99fbd727babe6fa54b1c0070a39c287d1d3ad525
GIT binary patch
literal 114
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JibOnJ978H@CH?vT-=0~*K<FeBhXKQ4W4`Yqi@D8!@(iA?
KelF{r5}E-2B_5{$
diff --git a/js/dojo/dijit/themes/soria/images/sliderEmptyVertical.png b/js/dojo/dijit/themes/soria/images/sliderEmptyVertical.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d497e3e011dffb766193892d0fa455630758d1d
GIT binary patch
literal 114
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JibOnJ978H@CH?vT-=0}0LFE8DhXDicM2_G33Kh$M@(iA?
KelF{r5}E)aCLe16
diff --git a/js/dojo/dijit/themes/soria/images/sliderFull.png b/js/dojo/dijit/themes/soria/images/sliderFull.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..171eb54d9e11a583516750bccb75f7644e2fb0e1
GIT binary patch
literal 131
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jic~#a978H@CH?yGRGwvH&5wW68F?b?{<mzb`}d1E(a`V!
dgF^!&L-jGivgb#NrvWuEc)I$ztaD0e0sst0Di8nw
diff --git a/js/dojo/dijit/themes/soria/images/sliderFullFocus.png b/js/dojo/dijit/themes/soria/images/sliderFullFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0956a726d1a537fe2a6739acfd5444472a5f6158
GIT binary patch
literal 146
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JicCCR978H@CDnX=D1NxUZU2ACh<i1uDXD1;Ow-Qamy|rv
s@bvEW{|a548o&R^PB?nz1cyKZ!__wa9O>o+HlTh6Pgg&ebxsLQ0RHVUB>(^b
diff --git a/js/dojo/dijit/themes/soria/images/sliderFullVertical.png b/js/dojo/dijit/themes/soria/images/sliderFullVertical.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..35845daf1d5f455c82cc838629dc2c585bba5b43
GIT binary patch
literal 127
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiWEIv978H@CH?vF^nUyMdi(!>et*6$&&I~4#un0Wj-A7R
Z;n7C!rDA*Dy8{(7c)I$ztaD0e0sx*WD9!)?
diff --git a/js/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png b/js/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9b158bb049c981da7a5a70cc22dbd90993d18b4b
GIT binary patch
literal 143
zc%17D@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiVQtn978H@CDr_UcYS(%&-;A_b-(`o|GN9T&zT+`fe+8+
p58wa)f2M?lWZnPN2Id9^W`^YR!kz&-Ms7gO44$rjF6*2UngAK=G6ett
diff --git a/js/dojo/dijit/themes/soria/images/sliderThumb.gif b/js/dojo/dijit/themes/soria/images/sliderThumb.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..29899a4b630782dfe9e4d276ccc775ad47a6e752
GIT binary patch
literal 238
zc${<hbhEHb6ky<GI3mgL^XJbWKYpAzapLC9n}-e^di(b6x^?T;uU~)o@Zo3Ao-J9j
z<k+!eckbMI_3G7`GiR<`xpMsY@zbYI|N8ao&!0cPfB#;%aN*y-fB*ga_a6)xFo5Du
z7DfgJNd_Gd2V^G$Yj%QKU&>6*&{eCPA`@r0o}Jt(%lFeS=m9eWSHlL44lVIGmqSwm
zbfz~ZO>m4-n<&X!r70m5=6%FT&)JZN<&%=xWc^s@M@QwRKMXwT>~#FMCJPIvh`7E%
ag@L&Mqp-NT_5=<FF%{3K>Afn74AuZC?`t*y
diff --git a/js/dojo/dijit/themes/soria/images/sliderThumb.png b/js/dojo/dijit/themes/soria/images/sliderThumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b6abbd2fd4e2c26cf2aee75a5bbbe1e5ee70235c
GIT binary patch
literal 413
zc$@*90b>4%P)<h;3K|Lk000e1NJLTq000mG000dL1^@s6pu6rQ0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzKS@MERCwB?lD%q#KoG}Q-E?Q;8(7#1
z!N$TD(1)-J1e26G0(p?jK~hAE)E2&j2|@}j1s_3B{2;`S%r3WKPs}BdfgkRUGynPT
zs^I%R`cH_!4w(PIZcP9Kp6j}FGffkPg&+tNQ4~=ahF)FQEu^<g2Q<cUTxA#risLv)
zRn=Q4eFV;r1m=1ER?M=DP9!h~)GEfvvMgkp=7l6l?~uAYa=@(e)_GWHnucuKMzSpL
zVQY%~c~~KHz&qicDvE-1T_?+HaoKz-SWQ`$C{0sx;m?@8;P2t5MiP0Rqa;bl#csQ<
zd&SE_!!TAw$QOy@7!^hF0+XNmzJG)C2VPF$o$!;RC_+_L?c27!hiwOZZZ?~V2s{Kq
z;Qe-f5cZ+@4wgMIK=aK0#H*%hZs2(aNGCMLL*vLNzXTWnx`mI^8bG1#00000NkvXX
Hu0mjfz;Lqv
diff --git a/js/dojo/dijit/themes/soria/images/sliderThumbFocus.gif b/js/dojo/dijit/themes/soria/images/sliderThumbFocus.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f8d306febc6627deffbdf6cb687dd1fbc499eaf8
GIT binary patch
literal 238
zc${<hbhEHb6ky<GI3msP<HwJmKYy-Ux9-G=6HlK$UAAo5iWMuWtE)RZJG;BP@7=q%
zVZ(-1t5!XH_;AaXEqCwUJ#^^M_wV1=tXXsV^yy!}e*O9L=lAd5fB*h1D=Yi=@85qg
zU_b(jKUo+V7^E3=Kpc>r46NA?)cR6(az?CL<<yyZEA{NvrK)^C!$cmiGkPykQ0y>}
zyw`GQNrc|agNYj)<FqDA^3GCJkh*sIiIbkQsW7vVve{(g*dvdR%1wWGk-5d`_-|%b
gHZCzqeS-=Eb8ZGvNp<ZBJdENho>9|#RTLSl0kn&6P5=M^
diff --git a/js/dojo/dijit/themes/soria/images/sliderThumbFocus.png b/js/dojo/dijit/themes/soria/images/sliderThumbFocus.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..73ee70565e51f8aca9968f0ec66493b8c0de254e
GIT binary patch
literal 421
zc$@*H0b2fvP)<h;3K|Lk000e1NJLTq000mG000dL1^@s6pu6rQ0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzM@d9MRCwB?l0RyMKorKGlW{Mw#eyPU
zVS^y4_Xt~gfI!e#W)*S+!OCK@kQ7Oi&dT08*&>CWz{X}_yCekv<&9**te8z8AN+9U
z`QA65gOcZY@E;LmjdXutJ!U`=I|zb))3$97mn2C&gb)bB(BAEKuUK9U6ZC4DW|X?F
zdtBFr`Fwtbt+!};dSK9X-M3?&=lzKco`7jGnSf<kuv{+BDWxx1x;RL{ql(c*xJ=Uo
z$8lgfoo=vxM#S&ojXZ&vL`<qE3M>{2w!9?6;bY=GWm!U+rXb7mJ>@UNd-!RPX}jG*
zk|eBurK;)^9X1+<F=|p(6~u82S(ZKGh2G6(vu7-S(BUa!67l3HieSIrZ!}H2#_b#P
zEQ+FK1~<O%+rR#@ggoG|kIQ$Y#^H|tiH@%8E<R=C<cLS}HQ0#7PXPu1T=#)j&zEEM
P00000NkvXXu0mjf<>kIH
diff --git a/js/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png b/js/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0e8f397227dc4c944bb5a7cc60a583fe4644e487
GIT binary patch
literal 125
zc%17D@N?(olHy`uVBq!ia0vp^!a&T-!2~4#Jy{GS86-<wBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~-c70G+LIEGZ*O8WETsXTLJL+Z6zf1kWe`SbC$eWev66Awe(
W1@;HC6L-3T4D@vMb6Mw<&;$T&6e!>T
diff --git a/js/dojo/dijit/themes/soria/images/splitContainerSizerH.png b/js/dojo/dijit/themes/soria/images/splitContainerSizerH.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7cdf79a92d8d1dfb32f0b0ec51b8f658338dce45
GIT binary patch
literal 127
zc%17D@N?(olHy`uVBq!ia0vp^j6lrJ!2~4T^fnv@Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiWEIv978H@CH?yGRQ_`N`}&!7|Nor+^7*>F8XFs%1RI9|
Z!;AOa>jYj!9|bCA@O1TaS?83{1OSCHD8~Q*
diff --git a/js/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png b/js/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7f12fed5cfbb59929847c42ab6c9f12479048131
GIT binary patch
literal 121
zc%17D@N?(olHy`uVBq!ia0vp^%s?#6!2~34%~2=@Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiljYV978H@CH?sEH2!<jUi-Sg=}8TZ3lB4K7%(ik$o{bC
S(;;r4G6qjqKbLh*2~7Z&XC|8f
diff --git a/js/dojo/dijit/themes/soria/images/splitContainerSizerV.png b/js/dojo/dijit/themes/soria/images/splitContainerSizerV.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9ff14d64101270010c9a5f4860048fb439b3b1b1
GIT binary patch
literal 124
zc%17D@N?(olHy`uVBq!ia0vp^>_E)O!2~4dW-8AFQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JisU?9978H@CGGk7q`igVcKiE!`~QD_f4(lyX28H<z%Wyb
Vd!bICd<Re^gQu&X%Q~loCIHqVCBgsz
diff --git a/js/dojo/dijit/themes/soria/images/spriteArrows.gif b/js/dojo/dijit/themes/soria/images/spriteArrows.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc81207e70710738804fd4f0803a7f7f6a80fe50
GIT binary patch
literal 446
zc${<hbhEHb)M4OexT?Z%?e?SN$B$2*Jo(0>k2jzFxOVG)b#--5PfuT8UsF?4YisMZ
z>$es!UVQ!Diz`>I)YjHszxVv~>C@Y`ZM%5!;<cN1FJHcV;lhO(GiF@B^Z3T&PdA@_
zyMF)mjR$W#J3DVYe1GG~m!Cg>UcGwt#>02{`T76<|7V~!Q2fcl$iSe&pabH7{KUX^
z+hJ0Hht4FE2?q|Gkm=$$t6|uj$id(i=s0C+h{Z9+1|cndhC2(77fNbs9CdqO@KJ=Z
zsV~*}4+{&IauYw3P^OYFN0YLmi?kq{G6$ce3pc+qry#G308e+5tZ0A=EBk_8CmAu$
zZgB}IXT@$d#!PpK+$K)31SciNiA^h6L}eE!^9XEOz|I=X*Tp7S<H9SrmY;jS5Yvn%
zE+$5Kr_D_q!rPtXgxMMAxJir2hWjyarz(mtcsq$Sip$(Mxk;6)ovUrh9l-+(&Z@0}
W94neF6c}0}1dOv(7@Ir=7_0#=nwCTW
diff --git a/js/dojo/dijit/themes/soria/images/spriteArrows.png b/js/dojo/dijit/themes/soria/images/spriteArrows.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..73aa7009103e9935a831057ab5d8df6261728e38
GIT binary patch
literal 720
zc$@*y0x$iEP)<h;3K|Lk000e1NJLTq001li000XJ1^@s61TAlm0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!a!Eu%RCwCVRljRmQ4~H;Y6lS!q;BG%
zi%zXW7VRSVYe^jpfp&kz|Dc(QP-y=HN%j^?I+!dkBDz$E1d)QML*gKA20=uGR?(jC
zai3gYRZ3lY;BxbFzkBX?&iT$!S*=!dh;=%hXS`)6lS$6uaJ&o#gS7+w9rJd>etvB`
zw;bsFId31D&1SCAXy9MjeMER^g3wM(zu&)FE|)*~@60yL69J5f$NapGr1J+}cf7uG
z#MdV0Nv@7otJSF6?ULK=CUJiok#}5ykM(+;VzF3~zf<h*W()MR*XvQM)uKcqaml#1
zjJuElO1s_mv$K0-h<6$ehwDQwu};M2^O4u<ePxhFCKijuRi#oP&d3_Cswy!?F_Beg
zv)OsESfuH63O^K&$4OC?7mWR3!rm7O1@Ix4%SEYFiflI98RI^!CBYvLOzgeW>D(X-
z!$p3KJRT1|<&0#@<?;sE9huF{=ks$-({!>h+(A{~L+D>Noh)oL8WDm-Wn>u{8qSA8
zp^HEuuyGqva%sq7v7DHiARi8g$!@prBm0!Kcv&iy^v7j`gjo0LKFz}rBxEGxbiz#L
z5hNm!h+Z-n$e<)vs}(x>COd*OxGHDqbXpI}kdM&3VadT@fRY+#YlF<j<1w<A<G}p8
z2!ji2UQf_k!}3@|Be6C$lp7fYDOo>TvZ$iu$RdbEqtP#ne`6X^r=pQ%Vs|3AygUXO
zf6FpBf;3TWB#^bf(V&WX4vR;!!rAp-jJ6C)k8H|~`Hy4rbG2H1jedee1&58sR1W>&
zF!Txu975I@uPl@A7y^Rq;~yXp{+|}c?7s8g0t^62NYX=N(GUUv0000<MNUMnLSTYG
CVM|Z|
diff --git a/js/dojo/dijit/themes/soria/images/spriteCheckbox.gif b/js/dojo/dijit/themes/soria/images/spriteCheckbox.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d2c4ebfaff2230675f59f5caf94ebe26739b5ed2
GIT binary patch
literal 774
zc$@(S1Nr<%Nk%w1VPF6d0M$PL_4W10$jI*Q?(y;Q_V)Je?d{*+-`?KdL_|cx!^7m{
z<c^Mw!otGJ%F5c>*_@o5%*@M6OH1tR>~V2$g@uLX<>hpAbZcvC^z`)B*4BM~eUFch
zb#-;!-P}V%LywP-(b3ULN=oA5;$vfC=;-Kte0zC$c<}J>+uPgo^Yhr)*wN9@*x1*{
z$H&*#*VWb3-QC^H%*@o()bH=_{QUg={r&#_{`vX&`uh6#`1t$#`}g<v$;rv0qN4x*
z|NsC0A^8LW002J#EC2ui0AK(R000L6z@KnPEE<o<q;kn@8UwwkblM9Hp;W3>XyAFj
zV4h*v4Tr}<Y*xDcsn^wEZ%`1-?sq|9(38{ccr$u@Lp*<hf_prLhk=8OLUVP9gME>W
zc$IQEH8wt<pEfl(mOnk5o}fOWq=l%etD}%VJg=&(v!|V~tfjiCpuL-&zzhkazNo-9
z!a}vgpaKH2uF#>l!_1(@$l1%yrZ+S<I?M+b3*)}x#LS}Vh2k{C02v44vpnqX%r*FO
z;>ejp2QSh-e*SK(qmckajTsywJSZ5B#=IIB{ZZ6ML&AU>H(bOJ@z0sOj2JE6$R)1f
z!-x|V0<?%yqs&M-bbK&TVFLpH3I=rK@Rd`C#iKfemg12Uh6(})8lXraG+)u97L(@4
zm2+p$pFxMpxr$Y*uN?{zj0jOe0gf9x&fdU5x9;1xh0ux!u%ZDA40rRPwObc%F0?(=
zvULkrE@8Tj<q*h0!h(kh9d6{vLBQAK95+IT-rTv+WDGA_$QYoRbH2}_N4u6x*)rzV
zr6a+PP1+ZL9XT9mfUr5o4gkJ^7cYK%>F*pTGDu(!Am8)ln~&#uE}VFF<Z`ZKZytV!
z`Sa(&NBWH(y?R>g+ncXmD8799>*c3UuAh7)97zQzU@QL#Xdr>K0BB%<IOL<?f;u#~
z34}=@cnXCPmh#3LZETn$MH^+9@dX+`geamISHQtWiYmt8#EUS-DC3MY)@b96NCW`@
EJGMll8vp<R
diff --git a/js/dojo/dijit/themes/soria/images/spriteCheckbox.png b/js/dojo/dijit/themes/soria/images/spriteCheckbox.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e99233079c444db3ada2ab5f2a10ec8e4d9cbf06
GIT binary patch
literal 707
zc$@*l0zCbRP)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Wl2OqRCwC#SWS;1Q4~EzA!M|#5T>Um
zY_z4Fj#)}<{QwKGnEnsb$@Jf_oZbyf3%@`tXo;PO4I>f40wKDMuc=!J=`LTTnO7S(
zd6HM}op<ZpQ}@2-am(cr7gNr7`pM_>%WAbM8|3wR5eNjhRsU3cy<T5-Ivv?~hr<E4
z+kG~?lKe#h2pow-Fq_T5ah%wsMwvp5=Xs>lX<A@Cb}F8N=kxhw<13X41@LTmCHeEK
z33|OAYPI^{0`vKNtEw0L$MC9ci%Iu|Y&MHrE+;$1r1)d^8R`69uZMoWubBV;$zLT^
zXgZyWDy{mpS`DdG3eV4l^|M`0-;N*Z@4_z@i+6L!<1yOpwkQA#|E&3MWI&-%K)GBN
zCk_S!BoYbQ<ZyLmlCA!(CdVkyqtR#`j7Fm&ia@oKg@4xkH!`4DEFziwEq--RPrpzq
zl@JUD5ekK5e*uTuK0J|bwOW`=CTKRB7!HRpnM|-)EKK~f=Fh)ffYRS)vmuko;PLUN
z5QsMJ?gEI#V&c(lRUUS|0FBcIbm%4b;WZi!y4|iIz^l;y3SXWPE|&{ht(J*@*8Ddz
zARG?E@AnI7_XoGPUc}>Z*zNXrwfUGDzU}!wywz%j(fCOyJ1;O83_|cfi=wdd&zk>+
z0A{lp_xIls{1!ws8pZYXmyM0&kh;6lP7a=GJ^7@v<8(Tq)9IM{XU(7Aw$RPZS3LZ9
zILi_4SR*_I-Q)2n=AR}1wE&dn+x|evb#TFd49~CbCX&hIQFj^A{wa9c;OMk*%w5ho
p@k;XNF1Mk|n(7h)W$m8;0|1(ch|L_xa>@Vz002ovPDHLkV1hJdSa|>d
diff --git a/js/dojo/dijit/themes/soria/images/spriteDivIcons.gif b/js/dojo/dijit/themes/soria/images/spriteDivIcons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f5c58e47a0dcfce5380cba10ec120a4c26cedbf3
GIT binary patch
literal 884
zc$@)r1B?7eNk%w1VK4v?0Oo%H+~@addW%C?ZH1Vt*4Eb6;q}VO%IWFp-QC^1&h609
z(9GKM`1ts~(C$lNd&k!Bf|jb(;Pt}N?^JAs%*@Ql$jIU9_`bfrx3{<Z`}@Sz@ML+2
z-{0TB(eA^;!`S5Z(%<y1uC9ohtb35C;_CU0o~?0*pKgVoi=3^Lo~&wushz2@xy<ZZ
zafQ*|^!E1l>+9>o)bHEo_sG}r*x1<R<>ln$<m2Px^z`)K>G;mv^Wx&-ZiuWuRCMg@
z>`-QT?(Xj7?fJE}wYtsiyUp$M^!3Ww^1;&Y@bK`))$sN8_2%a0YJ;W8*zvv3?!m#q
zf0L>5^78ZZ^SaFKaD$P3lBsKdmHhntskzVB<Mp<`#b0iNqqWUqcZkBt&fDep%i8j@
zv$I-ne^h6J)6>)2+uM4Kn?hM~_xJbE-Sb&;jl{&nxy$U&&(Er=s><2%&D!juqN1m#
zr(AG<)z#HMS81%g(5}JV&D-*NkEnl{!(Dchx3sIc%k2OE|NsC0A^8LW004ggEC2ui
z05AX$000O7fJJ|Ue^h&idq0GOf`o>Mii?AMl$Dm0got}gdYyVanuD60o}h@6eyOUf
zseFHXp0To>hde5`xVgA{e|&y8I4{D%463em8_8W0v1%>PEdqOEDb?23)zZCw3JM4`
z1PTN&#(!o(Bmf^GCMG8*R(<k)R(o5l_<r@<Krl-OK5X28;iH(V5*BjE$O1w~6Ac}R
z%<Ge9Pk?-^9PsiLf<hP!LgZk;5W;{TS14qB`B1>cf*COyOqrNxLJEwldTjLLros~g
z2nZ0UfxyPeKO(Xeh~Pqpkt9c)u%PMSCeBnkx9!+*07yPp13<V)gU85&m=b9U2(Y59
zmQ`NS+O9aG$d{5RN~EA+fFy&IC>g-w!2_nr*$xS&(iCGMhy?&t<gS=AWL}GH7cM*z
zqQF2L0u<K3a0Ow;j0YNGbdWkxUY-&;NGOD32MZT2cPhKyX5a<_12pLDAakYFA1E<m
zNa)ZYackEp0mxwK5@rL%6t{Vx;Gx0=4m8@7F+QR}11AY)K6jloi_(T~peA55FVD6E
zL=V_Na-+r)<A01GU>*b(XrO&ai6FuN13&-)6jh91ASzcKCCP;tW{9CL6}qC~hafI;
K$%q~X0suRA-s~{|
diff --git a/js/dojo/dijit/themes/soria/images/spriteDivIcons.png b/js/dojo/dijit/themes/soria/images/spriteDivIcons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d76325f39a15f69d3e44d60d30477964d16cf1c5
GIT binary patch
literal 1114
zc$@)R1f~0lP)<h;3K|Lk000e1NJLTq001xm000mO1^@s6P_F#30000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#{7FPXRCwCVR$pjaRT%%>CT(JywoBRs
zW7lA}&Z>-2w#teX41%yRe3%<d23CeX=@`=oMet1oeG=JTbmGGV!8u_Jw+TM1xWVWi
z^g$777h<O-ZD!N8`D5GMdyeP(?!C!9P1Y_>m_Il<xhLm4=lgx%@B4C%u>&t}x_b80
z+wkC-!$&V~?te7tUCU-tx4--R!!Xw1se`ZFlf8>?FPxQV0(<ryG-x)Ylo)^Oq-NaN
z89_9b&<qw9X0ec;)z(gbaFh?ZS9@|^In<2*WWyx<borL8!y6ie!w>TC!gV|n*^J8S
zYV8NLdTTCIcSdI@R%h>$Ae2fao?BX4s(XYG{Ot4j(AL&gcc%a5%r6M~%6zL(7psJz
zST^z4_NTRtzfN6O=~~v-=5kp))Hj4b(?21(`|+kCc<$2oh!1Sj)>5eyND*CKU078C
zq3<gzE9`hQ8bxn!Z#{vrCwAi1BjXSjP_cv>66Y>n#N7N1CL`1b&0V1Y_CNQMW_<p_
z85GJEIsyh>J93~Y0@E`&<o~v`wf_EoSeAuKrGk!*4vzZr@-h=4%+Jpw6bc~_2-FDl
zL?SRP+ev#!?0a?(6RDUsA(LiP!V-F&ZR(CF0=JYj+R-dhGqVWCqT1TT!~_zF1hUyI
z{C+>nXK85(-QC?V3<KqInSUP{8L1Iad)PVBt)-l&XYx}BStaC>YlKp%fZe+uX_`Qx
zSXKn|HPbYCkc8UX+f{8vSV9CMLD}#|-yxtPtfa$oQO;A8X}Ba@LK2M`l#2!YR~Q`~
z<(ZspZEaOeBfO!FpQ26~aHCBQn?yoM$IghXW}^{SR!jJK`UXBbbH2J3kM&}2@=0yq
zmFquZ`nTV!&%Rc{t<{U3o*u3N(mu(DB2LnwnQFqVhhQ+cRzkvVS=Fdh7GRU$Y~1-j
zCLRmp?bna1OAWQ(ZUiSzokBMEm$vWnwI4A4;xRs(@a7w1IQ_-P+MdbDNp_I*Un~~U
z*Vo4qnwpwo-BS$^iJ_q(PX>gY0dC*2CLPN&*6|-ZckEyrL)1Ff_zQ=TzWE0SfaFO{
z;`#mC>ueuRY}KBr!^Gopb~>NWbEHX1$z&3Xi;EZ@9_H-S)c{2ePN52?b&9)i-pv|0
z=*o=dVBi64+cKzkF{i7o2a0Ykm*Ys2<C#nb0|Nv6OvRl}r!hD<xTXfQ4AkmC$h&(r
z;U=IQBdt=Q>y1FII1NGConT#%G{{j`^YopvQYaME>q#fyQCGz89y?^b^U;^mc>~z+
z5-;96euz(e|C6sJoh_YiRs92W$avdwBYPLISghea)I#qFyU*X>ap{|{WV3K=?6=YX
g1ODyn^gjX&0GBi++i+6EL;wH)07*qoM6N<$g3YlSqW}N^
diff --git a/js/dojo/dijit/themes/soria/images/spriteRadio.gif b/js/dojo/dijit/themes/soria/images/spriteRadio.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8dd6e578e89939ac92dddcb77a684ebb95955933
GIT binary patch
literal 1137
zc$~$NX)~J%0D#}T2_lsA2)d*CN*Ni{+O|_VW(=m3OgpRAk+mO+*=fxzJH~X?Vs|7F
zq^+$s;?}&02*SFn(J}I}iK`>-Ba)DkL>wXRo8A73eZD=Po)6E1kRb1Su`vK1&{2TB
zy}gr@lil529*@`C+soy0hlhuckB=7?77PZ%>gwv**_lixJ3T#}pPye_Thr-u8yg!4
zf~>EvcXxMhZ*OmIZjOwM^z`%;78b%VTv=H;Ffg#PveMk#+}GDvTwFXjIM~?Os8*}D
zwzdQUfzfE3n3xzE8k(G(oSK>vi^WSzOJieWqobp9b93Y4<LBq+4Gj$`DJe>&vZA7b
z!{ID0F4ouAOQlj4i#0txT~bma5{a~0ZAM1M&dyGHdOD3pYj1BaD=TYjYh$z7d_G?&
z6joJLwY0S8^?HRuA(zWF8qMtNY*$y8L?ThCR5LR(M@L8d`}>E7hX)4-|3!iS1II%Q
z3IHg8`&aq;1TZ_#q|oSDjO?6T=F3;F^O)9G&{xryaBtqS*i6vM)ZWwzEUVyfi{2F!
z=H}Ow=3q>0ts~8EqA`ultsg$-U@d)}A_;g?Y!}ia>FsD~YZqlV$vQ`~t`lt{6j70&
z!*#~Yta47xz`FP;B2-a6eOb$^+Ko;6;+ksy%e4GRcVu1~3i-3m?^q%+UlNflf6RsG
z=436Ioo#J`iizRj01NX=6gVD0;Jj-tk)5ekP7<2gWe>?g7%}kG9g|qK@hv@zNdDQK
zn~eGgt^lk;xyh}#$Cb1oZy?E;3SzPL6c~(^K(!%7ceN`KF5g@DQgMHz6;y`_+|K1V
zSAZICZ68dYu}hZTr}{sy#bDurI3F?Hk_6wPGA?7j6$E#Hh~I*gZt)X8;rCxv7B9Bf
z4ad{1F+EAvMZF-=pH6Tl+mFIGLVWP_Xs?;PStCJ73wRih#7S~(A9|FF?Beo`stak0
z2_C^-3G%kYbD5#^qfU{zdaK`$pMBBMO?aPjEw!7bubqA(;6Z^b7f)Vi4H3R=BMlds
zabiyy52UHuilX-!0&_dRjJn5o5I`m1CDyl%5JK<>^~}uzBu0l=uiw0L(LdbG2Tkq#
zr~y8B@1%urV$ciZ(RY7($1-f6invT#Cglc`fMQC~Xr~yd40P4xgM_H?rfxJHs^zEG
z1m4p^peMfj9S#~n6|kAa;G!pSwO5`!btuuid*oZ|%%)K~G~kcqkZK5%i$?)8RWQwL
z%DC(TJ6T1OY?djR`aG~E=?#?UyOPIe>>NIWBT1#p-14;2Wq|ZN)Zff9p^3!dm%bDV
z`ysr)$wejd+ELt3uKSy172sD_E%@YWBQE^Ly*`HoQBAMLtH~{&?;h7XmU|*7v;Yb-
he2@oxu5T5lx+RMKD)?o+LocXX|FqU#77PJC{{j+n6Yl^3
diff --git a/js/dojo/dijit/themes/soria/images/spriteRadio.png b/js/dojo/dijit/themes/soria/images/spriteRadio.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14c1080ee04392caea207fda7279062c674b9715
GIT binary patch
literal 1073
zc$@(-1kU@3P)<h;3K|Lk000e1NJLTq003YB000mO1^@s6>AHIP0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#(@8`@RCwC#n9E8WK@^5hJEJo?-ZdC+
zAc~-ds35qRClDo&wNKy!7#|^E_J%w_mTt0@;KGF~We|*lh>jN=9j|!5PR@VQ)wE@I
zjWdhsEG#Ix9qa4=oT_t9Rkt-YHAO+Tfq{WQ^%oWv0@W|_`0XQitV)u5#=idG-v7#H
zzVSKmmX-mNu~=-pudk0<T3V>0qJl0iE@*dmmlBBt?!WPvF9z|Pc`XAbi;IiL8yXsf
zjYJ}JcXvnU=jXJ)zmNN@`nmF21{B=?(D3lEy8qhP*f=pXG(>Qqq@;v0nT%ZP>+7kj
ztBVc~5991il*j(|5YLNmYHD(LHh!X`ql5TLp-@P8T+7PJ<Qdo3*YVriTVMTr_`SWo
zK>b%4(8ESAkBp3nv1}+EA0JEPgu`KZKy7U;Jv=<n^z<}V@&hw}T;k98qN0D54F;$y
ze)Hn(4Cvv=U2bo0m#D?~`}=ztj|Ll}(Wv~sva*6mexdK?{q((fI|BmqU+n>7SfSF=
zQc2mhwKdw=*^$)Q*w~=?`FT1yIU#nEdV70iyteud4}&esa=NTCU!R_yjC@T^jYJE^
zVgg_XM=M=kUdm+L+}wy0h%OUv(l_xz`L7n>b8Bm>zz~EOrwd(OT}cf)J3FJr#YK5Y
zTU(oq*9>rYh`~|a2s9I4US2LdG}YuIV$g99d%#y$R~z|k`hI*+{)g@BJESh^CBzYN
z3cv)w2vyTi3NT(Xz~N2J#Dhi0WTPwn$HzyBe%PUEx{1%G@5cw_zsi6#oQAViRaJC)
zdMc@}N&t*fn<dHv#%s@Zc=yV?S6?+h9xOVdNNK})Og<(6wH3|Y7kv3_`hI*+{;LJ}
zg_;NBP@`~s+T7ffbWA3bQa1+&2jziVTU#<-d#=OlqVB&<JSG`@U0t30fMa7Sm7;Vy
zEwz<T7{a3*nD}h^etb~=s}l5mb#-+NM>wR>=;$c%-?H+knVp@Tl8!i;EG;d`c+G%k
zJT@DMsZ)TuH}R}B1}*U2-Q9F_bR^M&l*RARN5{fs<Nfqad{F+Y_kaW5_+ni9;?2#?
z@(&!nu(2Q_0b^sFot?$zgqMk*ngK6(_v)K?JGBqk!5EjDIL`1GkCIbaS?L@<k=}?#
zUKCG#o!9mKc>6sdF#p{zVl$k^F;2ZWKx`^#I18_@uhZPzoPzz{1oPruFJdzsAu%oy
zare;;djKMFdwW|=p09pByz50Q5dSTYk8%C>IrS6w_uNx<%|hBFUhyp?C*I>@TtW3c
rKE@SP-+KER`u}|meQO15e+3u-MiFIbz#8V300000NkvXXu0mjf-bM?r
diff --git a/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif b/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..795ea848da796ed02a62592dc5ab36e2de78522b
GIT binary patch
literal 1937
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
XNVo&u_-dEap)&8NNKNV@0s#O!aa+aI
diff --git a/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png b/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..10c0d139f2567f41017197bcd89b23f66f6ed638
GIT binary patch
literal 3187
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
Z0RV(+9G7oyzT*G@002ovPDHLkV1gwLN+AFM
diff --git a/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif b/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..67581811ddbf4578eae9c6fc8b66e8fe1db29b39
GIT binary patch
literal 1907
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
diff --git a/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png b/js/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2c9f51a7112d9c0d6cfd03d285df29ab51d8375c
GIT binary patch
literal 3010
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
Eg0L~$A^-pY
diff --git a/js/dojo/dijit/themes/soria/images/spriteTree.gif b/js/dojo/dijit/themes/soria/images/spriteTree.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e546e281b131d5a45571c6fd3a5bb7a30e856f1e
GIT binary patch
literal 233
zc$@+002cp8Nk%w1VKx8~0J9GO)6>)L?(XdD?EU@yi;Ii%^Yi!j_xt<%@bK{U_4V@d
z^3KlA`T6<9#l`>s|NsC0A^8LW000jFEC2ui05$*;000D*@X1N5y*TU5yZ>M)jwIHc
zXxdzATT%@(I5a&ls};|+bLX$euIIzCWW--kGIS7ZMjf)JTsEIYAZ%Kz1{;P0VLUz<
z8Vi6Lzzmbi=k)rruGg6f1A{@>8xmR*4S9Qoe}N<o2nq!S1dR#^h(e2vmXVVp4FQ~;
jos*lMo|z#H0;i~`psB2+AT25^uqaElwzs&swh;h3mbh_h
diff --git a/js/dojo/dijit/themes/soria/images/spriteTree.png b/js/dojo/dijit/themes/soria/images/spriteTree.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..33ae07be42376e8fb788ee56770c8f5a7c4cc9ec
GIT binary patch
literal 337
zc$@)I0j~auP)<h;3K|Lk000e1NJLTq001@s000sQ1^@s65O^*90000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy^GQTORCwC#m&*x+Fc3f!iQRbgWIHxs
zABtV+N$}#uLPU(>EE9<9Z`X(e>q;IB1fvgU@*&{>z@CW19*Rxu-w?Wy=ehA>3xa@u
z>Z9_IC5HIE&x8=nakc|Fjw2g}ffYq@D5dh)sdzTABuVV%aof#9&wq?GO*f+!MUm=5
z%CZF4br&Mf^Y}N9=8R`eRaNGv2|RgVWLXAH(?Hv{&~=@PIF6?_KF5B1Pk*x)d!Bii
zdalM|#QMHhI~nKiqDd*I0_aK~vFDi=($qsf6*XZPs-HZ|+H;FFM!~O>+9X!jHHnnU
ja|Ld%EjF=x@DgAEAcH7jJ<PIz00000NkvXXu0mjfDv^&@
diff --git a/js/dojo/dijit/themes/soria/images/spriteTree_rtl.gif b/js/dojo/dijit/themes/soria/images/spriteTree_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bbcc64be82efd5aab472b2d7b23b1567a480746b
GIT binary patch
literal 233
zc$@+002cp8Nk%w1VKx8~0J9GO)6>)L?(XdD?EU@yi;Ii%^Yi!j_xt<%@bK{U_4V@d
z^3KlA`T6<9#l`>s|NsC0A^8LW000jFEC2ui05$*;000D*@X1N5y*TU5yZ>M)j^x&y
zXxdzATT%@(I5a&ls};|+bLX$euIIzCWW--kGIS7ZMjf)JTsEIYAZ%KziU451qG31?
z&gX+67Z#JvXo8yEt^+uYgn_{z@C^xC6M1`le}PLv2nq!S1dR#^f=r8zmXVVq4FQ~;
jotc}So|z&I0;i~`psB2+AuTE_uqcVOwzs&sArSyOolA4X
diff --git a/js/dojo/dijit/themes/soria/images/spriteTree_rtl.png b/js/dojo/dijit/themes/soria/images/spriteTree_rtl.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b06afdb82c45dcc546b48a37dfd6ae61349d4245
GIT binary patch
literal 335
zc$@)G0kHmwP)<h;3K|Lk000e1NJLTq001@s000sQ1^@s65O^*90000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy@kvBMRCwC#mQf0XAP|OCJWh{2b)7EI
zJ&bNuPd)b1K_V>4WrEz+R#!uIxA233XzI6r8V9kI65SCTjYVUBY^-S-XSZ3FVN))Y
z&KamFk)|o4lp;dNA-60G5<;N1Z9gs$O2-$1Zi=(9vMldu>}t@i>s~haJkP5CA*!l6
z{I#Me*4!Q+oedWq8%dIw2M$a{J?gra!!XEk93|&`4aS(dhWn6*=ia?<)7gis&Y3Vy
zMW{GTGK`-^nWjk<L$9=t&c3LwI>E;M)<PS3o~!oqLD%`(9<zN=2!3J8YOL@3APa=j
hiD$)V?4mpb7yxI?Kctq~sT=?R002ovPDHLkV1o48jtKw&
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomActiveC.gif b/js/dojo/dijit/themes/soria/images/tabBottomActiveC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fb61df9a25154f98a5330ff5bea814f2e8867ba4
GIT binary patch
literal 482
zc${<hbhEHblw>esxXQq=@W9*i4}M>I^n2>g_h;|_x%uq(y#4P^-TgCt*Skdr-_Aeq
z_U?;c(|5nS{ruOoUGJ_u{ylr|yX#MX&)oBF=I(d*UjCZ9@7<hz@7{j?^Zv`9g$Lii
z`SfS;q4x_9ynp@i&$1)$Uw!;D|G@hN2j0)y|NiBNKT8h3Uv%*O>ra1{9)91wVDFS2
z?-?itia%Mvv<`>>`H6w;zr&OQ4;`t_g+6JMA2#?&UvS&<u);}B)!jv_(qrX@3Lm}M
z=U;58I-9rq{)Zhke(P_)|FNg;{QKYk8*-VOTUy)NTlu=WdwTnNI3`Y-JZ0)+o*6S|
z&7Lz$c>aQgixw{wTDE+}%2g`_)~;K>VdHwSEnBy3-?2?}_ny7`_U~moboj{8V@J47
zo;rQz>}iGz7cX7Da*6Z$jhnY_-(<gc|G~pY4_KZ)d;a3(bH+Ds-@X6vj_LE4uiw6Z
z<^T2j&)<K41ev&GJT^Qyz{DY}6>}mWvAJD9*=vqOVdK$m3FE9I9t#&A?^kfHJ5uoQ
kFbA)=LB@rKgD&hm@_HpN3L2lb3aaYM+&n4lD!^b30PAM@EC2ui
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif b/js/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7c2ed86d263e95f996442d0306ddaf630d457217
GIT binary patch
literal 741
zc$@*{0vi2CNk%w1VKM+R0M$JJoWAbe==zzw?v}dl(&GD-x$oEI`<J@zpTO;+!R?;E
z?$6-+)Z_b|zV6%S`j@-zo4xLtyY9{3{MqLFp}_6R-TdC^`lG_{qQUR$@%*O5@9OdV
z?DG7q$nK@X@9p#asm1P|zwe>J@9*^dq{Hu@!0(~J@4Ls?puq3o>-^s8{p#`k>+<~R
z@cg*M)#L5`?ehHf`2FVY`|tJr<?a0Q_x<7P`tkPu<n8?D?)>BI`-`Bxl(_Hz|Nj60
z00000A^8LW002DzEC2ui05SkF000L6K-X?aEE<o<q>^~rbxaqMCWN_MN*<Euf)Zg!
zq7wA7HEB>9k;oJxVKk&rDI^!6&>_$e!|VJ1fPsR8ggh5}g^7xbhdX?Wkdc0kkCK*&
zl$V->nVX(}ou8kfqMM|pm#3(bs;iK#u8Od+g|oDSwzq+~x}b=?jK9E`!o!@!#)7=V
z%fQXOlm*h$)YaD4*x3ahLmC6$;Njxq<mKiAjUor@?CtLF@bU5o8bcrt`1$(#{Qds_
z59;mk5TT&Kg9sBUT*xp2w;dn^NSsKqqQ#3CGYZf%5Q4{#AVZ2ANwOpajvxT2T*<Pf
z%a<@?0^sPOfz6vZbL!m5vu6YUfgKbG9ZIyQ(W6L{DgcV0sne%Wqe`7h6+wp~9Vlqs
z%C)Q4uVBMcxauT<*|TWVs$I*rZ340?D#)Enx31m0c=J|JF(ieAzkmY^9!$8fVF`S9
zq*%bXvE#>(BTJsV;KdLc1Tt&h%(=7Y&!7odR?MKZ>C>oFt6t5T0gfR#49K2MySDAy
zxN{p=F+|3M-@t<lA5Ofu@d><luyDY<x%21Hqf4LefWwds0kUh~&b_<$@8APu7;;00
zh4bjst6$H)eR~@*b_kg<f<uN4_gjp(4`alJ5BAx&0SEv2_dy03064-2EqqX51{@Fw
XVFoPJu)_&GG_k~n9CC;PVGsa2s`9M~
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif b/js/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0a5f0f8e3e4fd8f183c71d037a62562f693a3c04
GIT binary patch
literal 337
zc$@)I0j~Z>Nk%w1VHp520K@<Q!PxP>*YLg8@aXUT;_Un6?fll|_|)Y1%iZ(m?)=^9
z`n}cgz}WG^+40-x`SJAr>F@p0<M-d{`sMBX+2;A+>-)dg@x$5j(Bk*GyWPCi@Bjb+
z000000000000000A^8LV00000EC2ui02u%>000HfU?z@aX_82)u57z%a4gSsZQppV
z?|kq7z@TtQEE<o<q;kn@I-k6SbV{vSse-I_%k6Fh;IMd17F*8fw0fOpxZm)&91f`4
z@A&+^!SDP3fPNQ)goTEOg&2y9jE#<r5s{LUl$DbQn3<ZJoSFuoprN9pp%kX4sHv)`
z4y~@Qu(7WSw6(UkxV93zyuH4^y%oa4#Kp$M1j)+F%+1RM(9zP<)Y22z*xB0K*$Lj?
j;Njxn1LfxD=;`MW?CtLF@a_-u^!4`l^(XrK86f~W{aedQ
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif b/js/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a77da39b667e55b79cd14748a9974f63ce665b47
GIT binary patch
literal 676
zc${<hbhEHbG-5DfxT?=^`rhZKZ~r`h_vgXu-v@4d+<WcA?H4~^y#KrR>W70jJ|4dL
z>Ga*thi-m+^7hZoXFu=0{B`BYk4JBQ@4x=>(&O*fp8mM-===RwzxG}K@bdlNk6-?s
zyZ`0gr@tRQ|2uQ<^Ox`cUVixV=HuTdZ-2l3_~+TX-!I<(dHvz<wd=3ne){|B!=GzU
zzFxid>dMuZ=Px|jx%=*(s~`UV|Ia`oQ2fcl$iSe_pabH7{KUZa-ytm9Lr1Fr#F9xX
zvX+WnSW)7&HfnwM6@dq@s`fwFP~lU?xb5kds@lB5>mPP(|2ysW<uAME&AI=3e{Fqz
zV^eiYYk7M|QCD|CZ(r7giK&yPBu|^3ICEA*#@w9w3n~^Zu35S)Y0l!+3)app;n=i!
z%hqk%ckJXSVcolL|AB*t4j*C7l@&jE>hzhj=gwacmvxpEx_14>&0Dwc+!ea4E5-8o
z$<t@gU%Y(9BIPW_`QhWI&tJZN`_B3HA<v(`|Nb*DbIF`=n9s(_A*>a1V#C72?Ob14
zS2%23bhKN-IO|S?;*kjq!cJW>o|~4OoUEbFB4NbTbb7i$@~JtVo7Gwbomm2IoZP(p
z{K5GS&0I?r5;!>7Jtk|#p4zhV@^U^8o}UQ|R$W~ku{rDRsjCOt6*c5KWWBeoxw$#x
zvYmsWOH1qag2$)kdT(DB%dOPbAaP*(`uqDEn7QR_7>-O378KHsJF{cs<Kq*Q=SXZ?
z*!cAH4CCy3XLc4h^G;#zkn`QO<>loS!R!ooo0=Q0Z%95p&v*B>Tt=C;0*eE?x4*xC
zpqX2~PNAHeU)4Y({@k9OpPye?IQ_$gq@y2sZfwrJe{S#Y^7mJK_hf8ZvZwO%qh<yM
FYXA)vbM^oL
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomHoverC.gif b/js/dojo/dijit/themes/soria/images/tabBottomHoverC.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..47b9da29a27309a950286aeec37e899b3897d9b9
GIT binary patch
literal 280
zc${<hbhEHblw>esIKsg2{L`QNZ+{)R_4)MuuLo{?dimw=o!39FJ^%6O{qMb3KVEwB
z{lwibPd@(s`0d~MN8fI~{JC@Y-OXoTGY}0Ff3kpS9S{MslYw=rf=XXX=A^(?>vCT2
zE6_P#l6${m-TRvN{|_uE@X(R!Ke43fWR6vN=ZX@qwSJs8)|8#T%C+yoh6<Uu8RuVY
zk+RL$egDIc+m7pRzpvPxbpHMC|F!H*%`L5ME&QEb-95eCY!fC<nmlC^<MbIbXU(3;
yF>n5Yg^L#OEM2yI#meOjYu2t?zhNEg<}F*dZQshfYxkbL`}U|GJS3pVU=08-{fE#1
diff --git a/js/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif b/js/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59f3edd60a951e235fd228c5f0b496f53bc124b5
GIT binary patch
literal 569
zc${<hbhEHbG-5DfxT?l*;KrwG&wm`b_4)ayKPT>fdGhi1qxZk>y#9If<<GrWKi+@)
z>-?i{m!5n-egEsnZ~tC?`TOPjzZW0=T)Y1I;p<;luf2Nz<<FfLKkmK!`S|Ux*I)nM
zdiLY>r#~;=|9SQC&-<@`pT7J3;MLE!pZ{LD`ttmRCp&lF-F)`-|Ns9Ps0S2(vM@3*
zs4?h(I3PbUu>C(EnCYP-)qi5iBoD=@^De9?@md?T@bK!g)3s^4A8fd;sh7Y1nThDy
zy#Bi%gsk)CT|WBF+G73lPrsw;8^W5Jvs2n)TRQ{0d-D6!J0`YFp3*)&ysv+D&)m-W
zZ3~+hH!Q7PUbV7(b;;U7XDQCjTefc7zGLSuPAO+Gh64u=9X@jO*l`9iXK|*p=gwca
zc<J&LCUIv4mRq;)+`V`I!9x}WXJOvwFJ8WS{pRgEUSVem?k``zegE<E*KckKXL%kb
zE*Xyv3l27ONY+RkQfxTfE}-l+$75p>1D~^!!i^If7a#9eaPD#uNc3oD)(Bn|b8^$t
z)6?0lcy2COu<Yz?i{e*zP6i)r3sY3&;gI#(vf|=mkI7OThD)3pmj^8Nn(MW7)m0|Z
zwhD;@TUTFSpK!QK*80F<0S-yI6|twct-Zay;9**WgA)rU2j8bxcTaC$e}8}dOD}_q
PDV+}wx3jY|GFSru#cmp1
diff --git a/js/dojo/dijit/themes/soria/images/tabContainerSprite.gif b/js/dojo/dijit/themes/soria/images/tabContainerSprite.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f0b38421e38440cff987b698dd150ae64b792e9a
GIT binary patch
literal 2570
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
diff --git a/js/dojo/dijit/themes/soria/images/tabLeftChecked.gif b/js/dojo/dijit/themes/soria/images/tabLeftChecked.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3e7475aa5562750d94bb5fc1230cc1f50629a388
GIT binary patch
literal 795
zc$}?~Sx?gd0D!9yk6{$lAZ&Q@f(ahMBN9bPyg-amKm&>wT8%tu;)6bzr~_0mnCRBA
zgRyRSjYG+f?qKc4L^j4iK!piKqPU}UZ8yvYtceDHgWtpV{ebUi{*gV|ms5c(zzYBZ
zonN3Q1W0hyH`hNA6B_9roQ17HsfCiE)bOvE#~YJlRHHShv;{?G%Ke=k{1N;7GbZk!
zAQL4rQR9I*+&|ZVQera|oMy=|OaEq7o%E{@v{2`Vtu$<-l_)V4Vj;a>h!Ap&7V7;(
zh*e=klbx<N5(*2^Xr&<|S#Kg`7E*-x#75$sgMlqXmnYioiAqd_*2TQC5s-<541~f;
z+rG|Bg;}MIR$#%Gc3Nx-NK64~2Px9~Tw_rY;(zZ9*@vU;J&YTVj7-inprms&D(N5%
zeT>i$)VLVL%`|op*kDL%3P5@vgb*SF(T7L$ZU#mPiJ8Q{%=C{(8c|Y?lEywp*UJPL
zR-pCPDl7s64g4oI&c^?1=Dg;g0E_?JzxI${Syf%h&EQ_;rt!Gx=}*$q_t){#xV+=1
zv%zEqtW-5!EZ+>SQ8%}=ww*osCQhT(>5+n>O<;lr#jLg?=ggds-418Zi7V!n{htN~
zhj#BN1Cu=8M#u17g*(CcpOe45zWigEU}BJ>nNUvN)S^gqW_Iqvj$&{*5XVW&OMEI!
z0hec#Io`we?FVZFH*(vRU9~CFCC0+)2i?y$9IUC_$Ul_2ETc$W=6vqpyjWV^Bg@x#
zUx>g&|Cm$rx_@iw34u6Q`({9ucacn#z;B0MpH!jNFx<;;F40urYSp1HoJ;nawFO_R
zhO<@=s?WRht)&2XhvR4{K-%z(1ru_Q3wie)TNs9B3k)|eS*lh|=j<zKFaKD#KA}#Q
zk_C1`+hXpPyP?Uxd)fSCT&%q|Bsx`eX02FvW%zj#e>}k)_Ia*X@X#D-J7>j#;(8!y
hQ|01y>vC^zAAk=(+OXwuobgsuFFZBkj$a7u{R@b5wUPh;
diff --git a/js/dojo/dijit/themes/soria/images/tabRightChecked.gif b/js/dojo/dijit/themes/soria/images/tabRightChecked.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ec4b659363deacbd7cea5dca3d7f931f907c3b83
GIT binary patch
literal 793
zc$}?~>q}E{06=dUrlw?BsZ%3cflsKcP%0Ur<}5@iK~l2JTO@r*r0`3zG*c3ca1V9r
zHs4VBn(l6QZ)c{?Df!HFKGOF1d3W!fnlpFJu)m@6;haC<Tw^9g$K3aa&Os&!Vs~5E
z62L}mGv=+41t&*F3>qns#>Q9T)hc}Ir*qomtX1Ozjjc{=<H>QuJT>~mIlknqRN!0`
z=b`wVb<1eks!`#Ua@@8?VXG9ePSy7iO}zxC+al5sA}vv;0xNckE3t48P^%_55(}_X
z^=i<dBPwJ-s00EH!IfbZC|0e+c!;@D2HN^bkrI5Kc6^z3RH2|tPc~@*7sa?zAk+}r
z$<38js!mG?)wV_*QHffsP%B@7@g!#btb>PG+6U~qDM!a3X)tblTi&cuVFNRcDg`DT
zCOJ}@SWhAbQlJ3pQ9B>CawTRi0(ep|Y}}9-NRbLu$uafB=E&TJK!w$+FxfEKJw#eb
zirr-@6)M?M0{Tw`|K9hn5xd%b0`1>nJuE1EUG(NP9Fuw@fEE}K5Ex4j4588KwD+`Z
z8W#@D$~@N4*wox2Ou6IxskN=W13r1{x(gzep>lD0!U2u8N7pNUknAxqs2?)G8POLH
zkBv`EPQmAIUN~f&n_pOjBa)c=%oZzHSxUU(P1;x2*5TVxcU`xf)b=0v>_=8Eqg|*i
zbkiU4KWt*@ioNMc5qa^6<*t5FIkWv8p6>o<{7M3uoej));U)Ld209z{yb!^u3Z}Tp
zz=xBwtp&p75dovnG;7Z)_*$P>9u~Q_M_=lhQlC_l#Chx<bg(nWIN1Fm)%R%6+o0=`
zC;rgsjFdFJ<kJlD=($T=C<AFV%JY{zqIF2yyqfiE@9`UHXBKrYyy&qX^X&_LWjj~P
zs{I%&CEF#vuX>tT9ukBWmtFpzYyI4OsQIBnCSIOw4bLo#<mX`%Mfb=0wm18|P6RW$
g+(t$5`+b5K`3sA|aZi21UgoFdwxG|VUO~{MzyDgZlmGw#
diff --git a/js/dojo/dijit/themes/soria/images/tabStripe.gif b/js/dojo/dijit/themes/soria/images/tabStripe.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51a2d40aa68e09b70213e4d4f92156930d210ea3
GIT binary patch
literal 54
zc${<hbhEHbWMq(Mn8?I1Wy`bf1$+Ph|Ifg{p!k!8k%57UK?lfY0Le2ju}|q=Da8=T
Hz+epktqu)W
diff --git a/js/dojo/dijit/themes/soria/images/tabStripeBottom.gif b/js/dojo/dijit/themes/soria/images/tabStripeBottom.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..41b1ac0f61c0c52eccf99fee6b22b4a4a75606f1
GIT binary patch
literal 54
zc${<hbhEHbWMq(Mn8?I1Wy`bf1$+Ph|Ifg{p!k!8k%57UK?lfY0Le2jvGWKlI{h||
Hfx#L8tr!jT
diff --git a/js/dojo/dijit/themes/soria/images/tabStripeLeft.gif b/js/dojo/dijit/themes/soria/images/tabStripeLeft.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b2214fa41bd9becdae79e105d93174abdd1a62c5
GIT binary patch
literal 54
zc${<hbhEHblxJXMn8?I1Wy`bf1$+Ph|Ifg{p!k!8k%57UK?lfY0Le2ju}|q=Da8=T
Hz+epkt%eO(
diff --git a/js/dojo/dijit/themes/soria/images/tabStripeRight.gif b/js/dojo/dijit/themes/soria/images/tabStripeRight.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bff311553fa9ee53b1cf6baed1800f3e7c227fb2
GIT binary patch
literal 54
zc${<hbhEHblxJXMn8?I1Wy`bf1$+Ph|Ifg{p!k!8k%57UK?lfY0Le2jvGWKlI{h||
Hfx#L8t&k1$
diff --git a/js/dojo/dijit/themes/soria/images/titleBar.png b/js/dojo/dijit/themes/soria/images/titleBar.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..93c4146e9e57d1f9f33cccaa7dd5c399b8831c7d
GIT binary patch
literal 183
zc%17D@N?(olHy`uVBq!ia0vp^Oh7!114LFUpHl-;>?NMQuIx8CMR}}EKWKh<0u<sb
z@Q5sCVBq=y!i-L9OlAND!#rIaLn>~)J-3mo!GMS5La_CYpa17a2CSI!#7k&m)8b~1
zxpLxqD#7<e9kiyhy}WTEVZob8F;g8x&X<HM9sN~!ZN~%WrrM&k{l9`QZPRnp`}9-4
c`CzuxDPNQ8Z2$8$fHp9Ay85}Sb4q9e0BdPM761SM
diff --git a/js/dojo/dijit/themes/soria/images/titleBarActive.png b/js/dojo/dijit/themes/soria/images/titleBarActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fb8a2e68891c180b866cd95f74e8327a3dca7aba
GIT binary patch
literal 183
zc%17D@N?(olHy`uVBq!ia0vp^Oh7!114LFUpHl-;>?NMQuIx8CMR|ENm|lh10fjgV
zJR*x37`TN%nDNrxx<5d{Fi#i9kcwN$H9sHnGcz-vzCQoI!<GI2c@kd9&-nFwzMzj|
zrN)){^(TtV=hwAluyg-wpTVT|ux%liQ>6iKf}>iSqR&Q-BEvs_4j=gR@AiS+sZ*qu
bYAj>u<J4*YuzTYdpbZS3u6{1-oD!M<eb_%+
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif b/js/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9c3849553aa71a67ab40f153223b8394574ccd9d
GIT binary patch
literal 205
zc${<hbhEHb6lCCLI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+Zj!ZwEJ%z00R3Y;4D9Xwpv>9%LtQdQ&S25fU0
z17DtHW0y%vc%vwyabn?3<p2XUpC?XlQ>9c6s9ZMXl9BFQkfW1fG>hqWhh)MoMFwjC
DbQy8*
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorDown.png b/js/dojo/dijit/themes/soria/images/tooltipConnectorDown.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d75af71f95ed98e8d9ed98be4d150f3ef1f26b33
GIT binary patch
literal 342
zc$@)N0jd6pP)<h;3K|Lk000e1NJLTq000pH000XJ1^@s6nIL8d0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy_(?=TRCwByQacKRP!L?-5mKbF%fSM<
zgalFt0=9x}z$(W`mBI^H`2l|rv{4HSH9MkU<SDwv`^?UayKg1iwy%!kbZy&qdjmSw
z-vkjoilQ*mG^IU}Bnh$3<l|io*dvZ(D$8<{K~+@*J`AvoCJ|S6_B@ZctyKf$UDqY%
zU!a?sAgsEsb>H__O@bgG@c8%~F)`z4d7fKYmPrjbN1S_sH^qg7YYt!g191nA{9GV2
z`EcLb(031D$9pwRg9_eTOb|Lxz!)abkCP{70GE*!{#lmZ@SrG4rm8AMQG{xajD2N9
ou`-C9g{LqKb?i$9h@Suh0BSqSi~!Qew*UYD07*qoM6N<$f@OJ#%>V!Z
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif b/js/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc947e0a1997c1cd7c0bf170312a93596c2b735c
GIT binary patch
literal 205
zc${<hbhEHb<Yo|LI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+aOf_h(y+oaA7a~3UPWw16lvTY(uk;FIMG!fVH
z$22*lW-R1gT*xqGn<Lw;WUqM_79~sy=`#}SC@-;8s5o-@%p|+eIJ>Y%8<TpO6d9}m
DEje;R
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png b/js/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f3de66a74bcea7892e3bd1b69f33e1b748674f4d
GIT binary patch
literal 361
zc$@)g0ha!WP)<h;3K|Lk000e1NJLTq000XB000pP1^@s63*lDV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz3rR#lRCwBq(!XkhP!tC6qZAy}MIne5
z{PPyw@)%h%WK2oNgsxqaHITJ*>tl3wR&>$n>QHo12M4w11nkfzS3fu)-XD5CQSf~q
zX6E%_2C@jMs=AxPYe5h`Ow$CzFo1`Tk|gb2*9ApUt~YMsC!DROX=}%EKorH_gTHu>
zhezACLD%(vPZ_a>^Crvk&htFL*WcWWu!|)UDnLc>`fdrrTg$SpZKp!pUl?PMWf=^^
zFo{z{3&iI*j-hQ^E~b3rywr7l2*VJ{vgG11r>^UkNs@e~X$pPcb1~%$XH^u%DF^~+
znud$V9B}_l6h)Bd`6Q;iWBEt?S{Eum=NDx-&s9~i9{~mc8n0Yv0MM>800000NkvXX
Hu0mjfFw&Ti
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif b/js/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b0e8097f4b1fe9b8aead6c2b22d23a5702042fbf
GIT binary patch
literal 204
zc${<hbhEHb<Yo|LI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+Zz!m-|zogAK#OpVJ{Jl-aFhT-(=LIs!3(_CE|
z-)<*JH8CyMV74%kP}4J>z@!qOmNqHopTfk2=Is_SHPYU1udO;@(e3_9wqmjqgEaun
CJ8_o)
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorRight.png b/js/dojo/dijit/themes/soria/images/tooltipConnectorRight.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..64190eef7f3c6cbaca0e0217be2b6b77d169b3f3
GIT binary patch
literal 1005
zc%17D@N?(olHy`uVBq!ia0vp^+(0bI!3-pA?3cX+QtTz3zOL*ySVj0$xa=C^UI2wS
z3p^r=fl7rynDNrxx<3pI%nSiOA+G=a{d@N8*~5nqA3uKl`Sa)BzkmPz`}gkMyZ7$h
z`}y<dn>TN6+_-V+(xq$Hu0473<iUdnZ{NN>ckbNNr%$h6zkc@Y+1IaMfBEv|)2B~A
ze*Ad;{P~$PXa0i$!zdU9Ljg?CKa&ZhWJ`klg8$<I43TZmvw#Z2JzX3_DsH)+^W;0A
zz{BjYjcMs`z8(MT)Af5#W{SA>g;rW-8Q88Z@l86=JFSiXVrOHCm{g_FT#2l8kvt-&
y|DLP0tJt46>2Y$!zdyVGUj3SMe(BdMYyY!v_Y!2Cb}8;R$W5NEelF{r5}E)(=dq#y
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif b/js/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..54bcf652c6bf0f540ed3d9a2079fcb5895b0605d
GIT binary patch
literal 205
zc${<hbhEHb6lCCLI3mOF@87>?&z?Pe`0(-L$Dcoc{{8#+-@kwF-o1P8-o2kcf4+J1
z=EjX1mo8npcJ11eCr=(cc<}b^+jHm6J$?H0`t|E)&z^n#`t_GDUp{^M^y9~m=g*&?
zIdkSe7%;$q;!hSv1_l`h9S{d(Cj+aOf_k5fSwf1JSkyAnRazdim5-#DF-l)Zu{fvN
zbW_4mgy|iFp_ORI4Tgtn<k(hn9S$g!lIRL_N`4u}IjiM`pg}qF_5+9Rvg#NqGFSru
DbR2Fi
diff --git a/js/dojo/dijit/themes/soria/images/tooltipConnectorUp.png b/js/dojo/dijit/themes/soria/images/tooltipConnectorUp.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7f7a5d8fd543089c5cc59cd80ef2051519dcbbbe
GIT binary patch
literal 319
zc$@)00l@x=P)<h;3K|Lk000e1NJLTq000pH000XJ1^@s6nIL8d0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy;Ymb6RCwBAJbn5!10J9V#F;=m9f<Ga
zQpAME08vIp#(Od{GNm9I$QL5VkUB|8Nd^fC2`~nNMp6wa<>BGU0T}`UQc_Y3+}zwb
zAaP<1v1evx?ow1#WB_^tEC8aFl$02ln3%eNTuWjM$&{CuXJBV%M-c?^LE_MW#%oBI
zu&{8rkP!AT1j;c0<zhkVa2b*Sw5=3s8&060pa60eC~RWU4Uq==dp^|Pcntx`L&Iwk
zNFTBx)zBDVAO-+q4jf}ZPyr%XKnC#g@@B%KlUM*sJD)y%%K7~H^HYET0{~V_A-!M@
R0Pz3-002ovPDHLkV1l~ea@qg@
diff --git a/js/dojo/dijit/themes/soria/images/treeHover.png b/js/dojo/dijit/themes/soria/images/treeHover.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cd6d28be4357084291d71b9f35ee3234425493ed
GIT binary patch
literal 112
zc%17D@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VN3FMcVYMs
zf(!O8p9~a{@N{tuk+__kl2LKsumej%l7di=){;IahL9(W4Zeph%YbSaJYD@<);T3K
F0RY$V9|!;d
diff --git a/js/dojo/dijit/themes/soria/images/treeI.gif b/js/dojo/dijit/themes/soria/images/treeI.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6f669e24015476e1d05b9b69e042a91c9105ad2c
GIT binary patch
literal 71
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl01MzTxyT-r$z}by@u9
YCT0I`l--fKwA3$iOVFbiTUi;b0S|H*g#Z8m
diff --git a/js/dojo/dijit/themes/soria/images/treeI_half.gif b/js/dojo/dijit/themes/soria/images/treeI_half.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e5fd0155bd99e8018ab44f08c8ad22c1a429dbc3
GIT binary patch
literal 65
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfk~oAzTxyT-r$z}by@u9
SCT0I`eB?3hS?4lV25SI>jupfJ
diff --git a/js/dojo/dijit/themes/soria/images/treeI_half_rtl.gif b/js/dojo/dijit/themes/soria/images/treeI_half_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..44ad021a36dea29ecf72868965aed52ce393a41d
GIT binary patch
literal 66
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl0Ebzv1*U-oxEFmrAnZ
T%D(@}edICiS?974Mh0sDw@Vjn
diff --git a/js/dojo/dijit/themes/soria/images/treeI_rtl.gif b/js/dojo/dijit/themes/soria/images/treeI_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0d32a2f731795134a05617873080e36711806100
GIT binary patch
literal 72
zc${<hbhEHb6k-r!XkcWxeEIVK|Nj+#vM@3*Ff!;c00Bsbfl0onzv1*U-oxEFmrAnZ
Z%D(@JRWx-|EiqfUO;-E*E?-6lYXCOA7%2b%
diff --git a/js/dojo/dijit/themes/soria/images/validationInputBg.gif b/js/dojo/dijit/themes/soria/images/validationInputBg.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c28475c8d4e2f1e6a59369f4ee46c17b700dffce
GIT binary patch
literal 93
zc${<hbhEHbWMmLx*v!E2@87@QzkmPu@#D{*KR<u|{QLLsuV25ufB*jf|9=K-K=CIF
anAQOiATt<PxIV}@`be-YI9tiWU=08Y4k9i9
diff --git a/js/dojo/dijit/themes/soria/images/validationInputBg.png b/js/dojo/dijit/themes/soria/images/validationInputBg.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f3039f952046cce1a599c481603c1e4d616e5b77
GIT binary patch
literal 126
zc%17D@N?(olHy`uVBq!ia0vp^j6f{J!2~2lO_g5*DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MGBrSjv*Ddl79XBYc0&o%q*;|tgLtD$N&HJ8>DO`6b>+0
X-er>(iZbp8s%7wW^>bP0l+XkKkhddj
diff --git a/js/dojo/dijit/themes/soria/images/warning.png b/js/dojo/dijit/themes/soria/images/warning.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c52f83dc3b5ffb880302f50574758a5618bdc1fc
GIT binary patch
literal 1275
zc%0>v`%jx?6vt23a2e1Gw9xnM%>fQ7mkg6SCYq>A86_fM8HyU>bci^~v`!|M;h4@P
z%QnYAGbSUzhFumIBIzcY&>^f7Y(Xi5GB#+}b)~fQLaDvKZ+-a_{MnP7^T~65Ip6br
za!!{P7f@o@F#td*6pJJT>0231CaNHtRz`qyL{hL924}cy#AC-nvE(&?#+?8yUjz8V
z1c`oK4uItVKwbv`>yx&3mHPn5P+GJ<zbl49rBG>98l6T@N=!mn2$#cUqijBpk7M}K
z{Uv~t01+$}lAbQ`2e71lvS%uOzBaNLk#}y@?l-M_tefFAhwp{ML-~!P2ivEs8rtqX
z+E_8W9qs^9(Ixz#GpF)=>8XkOzPaXWi*54zx28>Z7uQX8@0!!M?(##m`lYjrnXlF!
zA2u3oo>hnU>bSnPN9FPcJ^o<Rjj7emK=16D#S;==7*JS(la_y$Tz;!RWOO*YC#Mdz
zwziLtUs5V>8I3ZvdPt)gSy&i*@IYlSXw7B{l~|0fv)LF-CW4|?x0}P|qHMOy=W}_z
z{!j?R@dd5c=yV(%>Ij5_PS*x}wma>ke5lwtVNgjfzXNq}W$KE2Uaoa(pI}c2vk0d+
zTn@@cd3+v*W6jDh?idy6UnbPutQyyil$3~BtRyxYO-)TnPTo;oUY3=WnVFe^2TmWW
z7j}1+;V!8~f5NBRWBPj!ZmGaMH^V`F7;}V;xo1vQ<6gDtUPBo7&y7|;RJCk8?qB(>
zaI!aBem=Xi1}1vmzIgNv#g7+nd{e)XL2`Xu{4f>f_<(smQz#r}Mo#CZXvEKrCct$h
z`nCY^IqZ|=MUP@(I1c(UlBYj>&#l)fBS98PI`?$)FE8fK9&6CHUs#`3f6Iu!ilX|T
z2B{PZokmNDk7qI%2#dw#aM&oy=kah13x~rvP7n))LV-ZQ<MFs$E~nG!a5!u>o7HMH
zo6RPZ$zU+(bh_o`<@xz}jYcy&J3BKoqgJa`DwR^HR45d3xqM(?KqixQbaXT|HA$t?
zs;a8W%1V()Boqn-0zq0@8lO+h<Z-#gd=8s%6GagONlZ*+G6`J_I-Sr+qf!a6l(@LK
zsHiA1dFvwVc02sXP;Yx&PQdxOq_`~n{|fl7x2AyDefy{4w~heBGPaTgKU_wLW^JM9
zmHmRhn*UT$?&L)0zs`F3cd=;OAH&0q5x-t9irsvF_4ed46!hu(<t6&<HI(kLU@KW<
zAB!4qB|R@n>268-zNa#;LK?qIK|Um9JiF@z$s(KUt6m~q>KyEsWbBS!;UT0mcjwQZ
aeDnC)Q^Q@tEWK&#LkjbYMT2_}eDyCckH_!;
diff --git a/js/dojo/dijit/themes/soria/layout/AccordionContainer.css b/js/dojo/dijit/themes/soria/layout/AccordionContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/AccordionContainer.css
@@ -0,0 +1,37 @@
+
+.soria .dijitAccordionContainer {
+ border-color: #b1badf;
+ background-color: #fff;
+}
+.soria .dijitAccordionTitle {
+ background:#fafafa url("../images/titleBar.png") repeat-x top left;
+ border-top: 1px solid #b9bbdd;
+ padding: 5px 4px 6px 8px;
+ cursor:pointer;
+ font-size: 0.9em;
+ font-weight: bold;
+ color: #373941;
+}
+.soria .dijitAccordionTitle-selected {
+ background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
+ font-weight: bold;
+ border-top: 1px solid #b9bbdd;
+ border-bottom: 1px solid #b9bbdd;
+ padding: 5px 4px 5px 8px;
+ cursor: default;
+ color: #243C5F;
+}
+.soria .dijitAccordionArrow {
+ background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -30px top;
+ width:15px;
+ height:15px;
+ margin-top:-1px;
+}
+.soria .dijitAccordionTitle-selected .dijitAccordionArrow {
+ background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -15px top;
+ margin-top:-1px;
+}
+.soria .dijitAccordionText {
+ margin-left: 4px;
+ margin-right: 4px;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css b/js/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .soria .dijitAccordionArrow {
+ background-position: 0px top;
+}
+.dijitRtl .soria .dijitAccordionTitle-selected .dijitAccordionArrow {
+
+ background-position: -15px top;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/BorderContainer.css b/js/dojo/dijit/themes/soria/layout/BorderContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/BorderContainer.css
@@ -0,0 +1,59 @@
+
+.soria .dijitBorderContainer {
+ background-color: #e1ebfb;
+ padding: 5px;
+}
+.soria .dijitSplitContainer-child,
+.soria .dijitBorderContainer-child {
+
+ border: 1px #b1badf solid;
+}
+.soria .dijitBorderContainer-dijitTabContainerTop,
+.soria .dijitBorderContainer-dijitTabContainerBottom,
+.soria .dijitBorderContainer-dijitTabContainerLeft,
+.soria .dijitBorderContainer-dijitTabContainerRight {
+
+ border: none;
+}
+.soria .dijitBorderContainer-dijitBorderContainer {
+
+ border: none;
+ padding: 0px;
+}
+.soria .dijitSplitterH,
+.soria .dijitGutterH {
+ background: #E1EBFB;
+ border:0;
+ border-left:0px solid #d3d3d3;
+ border-right:0px solid #d3d3d3;
+ height:5px;
+}
+.soria .dijitSplitterH .dijitSplitterThumb {
+ background:#B0B0B0 none;
+ height:1px;
+ top:2px;
+ width:19px;
+}
+.soria .dijitSplitterV,
+.soria .dijitGutterV {
+ background: #E1EBFB;
+ border:0;
+ border-top:0px solid #d3d3d3;
+ border-bottom:0px solid #d3d3d3;
+ width:5px;
+}
+.soria .dijitSplitterV .dijitSplitterThumb {
+ background:#B0B0B0 none;
+ height:19px;
+ left:2px;
+ width:1px;
+}
+.soria .dijitSplitterActive {
+ font-size: 1px;
+ background-image: none;
+ background-color: #aaa;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+ filter: Alpha(Opacity=60);
+ margin: 0;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/ContentPane.css b/js/dojo/dijit/themes/soria/layout/ContentPane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/ContentPane.css
@@ -0,0 +1,17 @@
+
+.soria .dijitContentPane {
+ padding: 0px;
+}
+.soria .dijitTabContainerTop-dijitContentPane,
+.soria .dijitTabContainerLeft-dijitContentPane,
+.soria .dijitTabContainerBottom-dijitContentPane,
+.soria .dijitTabContainerRight-dijitContentPane,
+.soria .dijitAccordionContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
+.soria .dijitSplitContainer-dijitContentPane,
+.soria .dijitBorderContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/SplitContainer.css b/js/dojo/dijit/themes/soria/layout/SplitContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/SplitContainer.css
@@ -0,0 +1,27 @@
+
+.soria .dijitSplitContainerSizerH {
+ background:url("../images/splitContainerSizerV.png") repeat-y #cddef4;
+ border:0;
+ border-left:0px solid #436496;
+ border-right:0px solid #436496;
+ width:5px;
+}
+.soria .dijitSplitContainerSizerH .thumb {
+ background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
+ left:1px;
+ width:2px;
+ height:19px;
+}
+.soria .dijitSplitContainerSizerV {
+ background:url("../images/splitContainerSizerH.png") repeat-x #cddef4;
+ border:0;
+ border-top:0px solid #436496;
+ border-bottom:0px solid #436496;
+ height:2px;
+}
+.soria .dijitSplitContainerSizerV .thumb {
+ background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
+ top:1px;
+ width:19px;
+ height:5px;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/TabContainer.css b/js/dojo/dijit/themes/soria/layout/TabContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/TabContainer.css
@@ -0,0 +1,384 @@
+
+ .soria .dijitTabContainer .tabStripRBtn {
+ margin-right: 21px;
+}
+ .soria .dijitTabContainer .tabStripLBtn {
+ margin-left: 21px;
+}
+ .soria .nowrapTabStrip .dijitTab {
+ top: 2px;
+}
+ .soria .dijitTabContainerBottom-tabs .dijitTab {
+ top: -1px;
+ bottom: 2px;
+}
+ .soria .dijitTabContainer .tabStripMenuButton-Hover {
+ cursor: pointer;
+}
+.soria .dijitTabPaneWrapper {
+ background:#fff;
+ border:1px solid #B1BADF;
+ margin: 0;
+ padding-left: 0px;
+}
+.soria .dijitTabInnerDiv {
+ padding:0px 3px 0px 0px;
+ margin: 0 0 0 4px;
+ background: url("../images/tabContainerSprite.gif") no-repeat;
+ background-position: right -400px;
+}
+.soria .dijitTab {
+ line-height:normal;
+ margin:0 2px 0 0;
+ padding:0px;
+ background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
+ color: #243C5F;
+ border-bottom: 1px #B1BADF solid;
+}
+.soria .dijitTabInnerDiv .dijitTabContent {
+ padding:4px 3px 2px 4px;
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
+ position: relative;
+}
+.soria .dijitTabListWrapper {
+ z-index: 10;
+}
+.soria .dijitTabHover {
+ color: #243C5F;
+ background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
+}
+.soria .dijitTabChecked,
+.soria .dijitTabCloseButtonChecked
+{
+
+ background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
+ color: #243C5F !important;
+}
+.soria .dijitTabContainerTabListNested {
+ background: #F0F4FC;
+ background: #D9E9F9;
+ border: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTab {
+ background: none;
+ border: none;
+ top: 0px;
+}
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+ background: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+ text-decoration: underline;
+}
+.soria .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+ text-decoration: underline;
+ font-weight: bold;
+}
+.soria .dijitTabContainerSpacerNested .dijitTabSpacer {
+
+ height: 0px;
+}
+.soria .dijitTabPaneWrapperNested {
+ border: none;
+}
+.soria .dijitTab .closeImage {
+ width: 15px;
+ height: 15px;
+ background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
+ margin-top: -1px;
+}
+.dj_ie6 .soria .dijitTab .dijitClosable .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
+}
+.soria .dijitTab .closeButton-hover .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
+}
+.dj_ie6 .soria .dijitTab .closeButton-hover .closeImage {
+ background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
+}
+.soria .dijitTab .tabLabel {
+
+ min-height: 15px;
+ display: inline-block;
+}
+.dj_ie6 .soria .dijitTabButtonIcon {
+
+ height: 18px;
+ width: 1px;
+}
+.soria .dijitTabContainerTop-tabs {
+ border-color: #B1BADF;
+ padding-left: 3px;
+}
+.soria .dijitTabContainerTopNoStrip {
+ padding-top: 3px;
+}
+.soria .dijitTabContainerTop-container {
+ border-top: none;
+}
+.soria .dijitTabContainerTop .dijitTabListWrapper {
+ border-bottom: none;
+}
+.soria .dijitTabContainerTop-tabs .dijitTab {
+ top: 1px;
+}
+.soria .dijitTabContainerTop-tabs .dijitTabChecked {
+ border-bottom-color: #94b4e6;
+}
+.soria .dijitTabContainerTopStrip {
+ border: 1px solid #B1BADF;
+ margin-top: 1px;
+ padding-top: 1px;
+ background: #F0F4FC;
+}
+.soria .dijitTabContainerTopStrip .dijitTabContainerTop-tabs {
+ padding-left: 3px;
+}
+.soria .dijitTabContainerNested .dijitTabListWrapper {
+ height: auto;
+}
+.soria .dijitTabContainerBottom-tabs {
+ margin-top: -1px;
+ padding-left: 3px;
+ border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottom .dijitTabListWrapper {
+ border-top: none;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ float: left;
+}
+.soria .dijitTabContainerBottom-container {
+ border-bottom: none;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTab {
+ border-bottom: none;
+ border-top: 1px solid #B1BADF;
+ background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
+ border-top-color:#94b4e6;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+ padding-top: 3px;
+ padding-bottom: 3px;
+ background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+ background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover {
+ color: #243C5F;
+ background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked,
+.soria .dijitTabContainerBottom-tabs .dijitTabCloseButtonChecked
+{
+
+ background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+ background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+ background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottomStrip {
+ padding-bottom: 2px;
+ border: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottomStrip {
+ background: #F0F4FC;
+}
+.soria .dijitTabContainerBottom-spacer,
+.soria .dijitTabContainerTop-spacer {
+ height: 2px;
+ border: 1px solid #8ba0bd;
+ background: #94b4e6;
+}
+.soria .dijitTabContainerTop-spacer {
+ border-top: none;
+}
+.soria .dijitTabContainerBottom-spacer {
+ border-bottom: none;
+}
+.soria .dijitTabContainerRight-tabs {
+ height: 100%;
+ border-color: #ccc;
+ padding-top: 3px;
+}
+.soria .dijitTabContainerRight-container {
+ border-right: none;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+ border-bottom: none;
+ border-left: 1px solid #B1BADF;
+ border-bottom: 1px solid #B1BADF !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+ border-bottom: solid #B1BADF 1px;
+ margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+ border-left-color: #94b4e6;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+ background: url("../images/tabRightChecked.gif") no-repeat left top !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #94b4e6 1px;
+ margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+ background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+ background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
+}
+.soria .dijitTabContainerRightStrip {
+ padding-right: 2px;
+ border: 1px solid #B1BADF;
+ background: #F0F4FC;
+ border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+ height: 100%;
+}
+.soria .dijitTabContainerLeft-container {
+ border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab {
+ border-right: 1px solid #B1BADF;
+ border-bottom: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked {
+ border-right: 1px solid #94b4e6;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+ background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ background: url("../images/tabLeftChecked.gif") no-repeat right top;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+ border-bottom: solid #B1BADF 1px;
+ margin-bottom: -1px;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+ border-bottom: solid #94b4e6 1px;
+ margin-bottom: -1px;
+}
+.soria .dijitTabContainerLeftStrip {
+ padding-left: 2px;
+ border: 1px solid #B1BADF;
+ background: #F0F4FC;
+ border-right: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab,
+.soria .dijitTabContainerRight-tabs .dijitTab {
+ margin-right:auto;
+ margin-bottom:2px;
+}
+.soria .dijitTabContainerLeft-spacer,
+.soria .dijitTabContainerRight-spacer {
+ width: 2px;
+ border: 1px solid #8ba0bd;
+ background: #94b4e6;
+}
+.soria .dijitTabContainerLeft-spacer {
+ border-left: none;
+}
+.soria .dijitTabContainerRight-spacer {
+ border-right: none;
+}
+.soria .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+ border-left: 0px solid #ccc;
+ border-top: 0px solid #ccc;
+ border-right: 0px solid #ccc;
+ padding-top: 0px;
+ padding-left: 0px;
+}
+.soria .dijitTabContainer .tabStripButton {
+ margin-right: 0;
+}
+.soria .dijitTabContainer .tabStripButton-top {
+ margin-top: 1px;
+}
+.soria .tabStripButton .dijitTabContent{
+ padding: 6px 0 5px 0;
+}
+.dj_ie6 .soria .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStripButton .dijitTabContent {
+ padding-top: 7px;
+}
+.soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+ padding: 5px 0 3px 0;
+}
+.dj_ie6 .soria .tabStrip-disabled .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+ padding-top: 6px;
+}
+.soria .dijitTabContainer .tabStripButton-bottom {
+ background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+ border-bottom: medium none;
+ border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+ background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+ background: transparent;
+}
+.soria .dijitTabContainer .tabStripButton {
+
+ width: 21px;
+}
+.soria .dijitTabContainer .tabStripButton img {
+ height: 14px;
+ background: url(../images/spriteRoundedIconsSmall.png) no-repeat;
+}
+.dj_ie6 .soria .dijitTabContainer .tabStripButton img {
+ background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.soria .dijitTabContainer .tabStripMenuButton img {
+ background-position: -15px top;
+}
+.soria .dijitTabContainer .tabStripSlideButtonLeft img {
+ background-position: 0px top;
+}
+.soria .dijitTabContainer .tabStripSlideButtonRight img {
+ background-position: -30px top;
+}
diff --git a/js/dojo/dijit/themes/soria/layout/TabContainer_rtl.css b/js/dojo/dijit/themes/soria/layout/TabContainer_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/soria/layout/TabContainer_rtl.css
@@ -0,0 +1,34 @@
+.dijitRtl .soria .dijitTab {
+ margin-right:0;
+ margin-left:2px;
+}
+.dijitRtl .soria .dijitTabContainer .tabStripButton {
+ margin-left: 0;
+}
+.dijitRtl .soria .dijitTabContainerTopStrip,
+.dijitRtl .soria .dijitTabContainerBottomStrip,
+.dijitRtl .soria .dijitTabContainerTop-tabs,
+.dijitRtl .soria .dijitTabContainerBottom-tabs {
+ padding-left: 0;
+ padding-right: 3px;
+}
+.dijitRtl .soria .dijitTabInnerDiv {
+ padding-left: 3px;
+ padding-right: 4px;
+}
+.dijitRtl .soria .dijitTabPaneWrapper {
+ #zoom: 1;
+}
+.dj_ie-rtl .soria .dijitTabContainerLeft-tabs {
+ margin-left: 0px !important;
+}
+.dj_ie-rtl .soria .dijitTabContainerRight-tabs {
+ margin-right: 0px !important;
+}
+.dijitRtl .soria .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .soria .dijitTabContainerRight-tabs .dijitTab {
+ margin-left:0px;
+}
+.dj_ie-rtl .soria .dijitTab .dijitTabInnerDiv{
+ width : 1%;
+}
diff --git a/js/dojo/dijit/themes/tundra/Calendar.css b/js/dojo/dijit/themes/tundra/Calendar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Calendar.css
@@ -0,0 +1,127 @@
+
+.tundra .dijitCalendarIncrementControl {
+
+ width:15px;
+ height:15px;
+ background-image: url("images/spriteRoundedIconsSmall.png");
+ background-repeat: no-repeat
+}
+.dj_ie6 .tundra .dijitCalendarIncrementControl {
+ font-size:.1em;
+ background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.tundra .dijitA11ySideArrow {
+ display: none;
+}
+.tundra .dijitCalendarDecrease {
+ background-position: top left;
+}
+.tundra .dijitCalendarIncrease {
+ background-position: -30px top;
+}
+.tundra table.dijitCalendarContainer {
+ font-size: 100%;
+ border-spacing: 0;
+ border-collapse: separate;
+ border: 1px solid #ccc;
+ margin: 0;
+}
+.tundra .dijitCalendarMonthContainer th {
+
+ background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+ padding-top:.3em;
+ padding-bottom:.2em;
+ text-align:center;
+}
+.dj_ie6 .tundra .dijitCalendarMonthContainer th {
+ padding-top:.2em;
+ padding-bottom:.1em;
+}
+.tundra .dijitCalendarDayLabelTemplate {
+
+ background:white url("images/calendarDayLabel.png") repeat-x bottom;
+ font-weight:normal;
+ padding-top:.15em;
+ padding-bottom:0em;
+ border-top: 1px solid #eeeeee;
+ color:#293a4b;
+ text-align:center;
+}
+.tundra .dijitCalendarBodyContainer {
+ border-bottom: 1px solid #eeeeee;
+}
+.tundra .dijitCalendarMonthLabel {
+ color:#293a4b;
+ font-weight: bold;
+}
+.tundra .dijitCalendarDateTemplate {
+
+ font-size: 0.9em;
+ font-weight: bold;
+ text-align: center;
+ padding: 0.3em 0.3em 0.05em 0.3em;
+ letter-spacing: 1px;
+}
+.dj_ie .tundra .dijitCalendarDateTemplate {
+ padding: 0.1em .33em 0.02em .33em;
+}
+.tundra .dijitCalendarPreviousMonth,
+.tundra .dijitCalendarNextMonth {
+
+ color:#999999;
+ background-color:#f8f8f8 !important;
+}
+.tundra .dijitCalendarPreviousMonthDisabled,
+.tundra .dijitCalendarNextMonthDisabled {
+
+ background-color:#a4a5a6 !important;
+}
+.tundra .dijitCalendarCurrentMonth {
+
+ background-color:white !important;
+}
+.tundra .dijitCalendarCurrentMonthDisabled {
+
+ background-color:#bbbbbc !important;
+}
+.tundra .dijitCalendarDisabledDate {
+ cursor:default !important;
+ text-decoration:line-through !important;
+}
+.tundra .dijitCalendarCurrentDate {
+
+ text-decoration:underline;
+ font-weight:bold;
+}
+.tundra .dijitCalendarHoveredDate {
+ background-color: #e2ebf2 !important;
+}
+.tundra .dijitCalendarSelectedDate {
+
+ background-color:#bbc4d0 !important;
+ color:black !important;
+}
+.tundra .dijitCalendarYearContainer {
+
+ background:white url("images/calendarYearLabel.png") repeat-x bottom;
+ border-top:1px solid #ccc;
+}
+.tundra .dijitCalendarYearLabel {
+
+ margin:0;
+ padding:0.4em 0 0.25em 0;
+ text-align:center;
+}
+.tundra .dijitCalendarSelectedYear {
+
+ color:black;
+ padding:0.2em;
+ padding-bottom:0.1em;
+ background-color:#bbc4d0 !important;
+}
+.tundra .dijitCalendarNextYear,
+.tundra .dijitCalendarPreviousYear {
+
+ color:black !important;
+ font-weight:normal;
+}
diff --git a/js/dojo/dijit/themes/tundra/Calendar_rtl.css b/js/dojo/dijit/themes/tundra/Calendar_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Calendar_rtl.css
@@ -0,0 +1,7 @@
+
+.dijitRtl .tundra .dijitCalendarDecrease {
+ background-position: -30px top;
+}
+.dijitRtl .tundra .dijitCalendarIncrease {
+ background-position: 0px top;
+}
diff --git a/js/dojo/dijit/themes/tundra/ColorPalette.css b/js/dojo/dijit/themes/tundra/ColorPalette.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/ColorPalette.css
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+ border:1px solid #7eabcd;
+ background:#fff;
+ -moz-border-radius: 0px !important;
+}
diff --git a/js/dojo/dijit/themes/tundra/Common.css b/js/dojo/dijit/themes/tundra/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Common.css
@@ -0,0 +1,27 @@
+
+.tundra .dojoDndItemBefore {
+ border-top: 2px solid #369;
+}
+.tundra .dojoDndItemAfter {
+ border-bottom: 2px solid #369;
+}
+.tundra .dojoDndItemOver {
+ cursor:pointer;
+}
+.tundra table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.tundra .dojoDndAvatar td { border: none; }
+.tundra .dojoDndAvatar tr { border: none; }
+.tundra .dojoDndAvatarHeader td { height: 20px; padding: 0 0 0 21px; }
+.tundra .dojoDndAvatarItem td { padding: 2px;}
+.tundra.dojoDndMove .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra .dijitContentPaneLoading {
+ background:url('images/loading.gif') no-repeat left center;
+ padding-left:25px;
+}
+.tundra .dijitContentPaneError {
+ background:url('images/warning.png') no-repeat left center;
+ padding-left:25px;
+}
diff --git a/js/dojo/dijit/themes/tundra/Dialog.css b/js/dojo/dijit/themes/tundra/Dialog.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Dialog.css
@@ -0,0 +1,140 @@
+
+.tundra .dijitDialog {
+ background: #fff;
+ border: 1px solid #7eabcd;
+
+ padding: 0px;
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+}
+.tundra .dijitDialog .dijitDialogPaneContent {
+ background: #fff;
+ border:none;
+ border-top: 1px solid #d3d3d3;
+ padding:10px;
+}
+.tundra .dijitDialogTitleBar {
+
+ background: #fafafa url("images/titleBar.png") repeat-x top left;
+ padding: 5px 6px 3px 6px;
+ cursor: move;
+ outline:0;
+}
+.tundra .dijitDialogTitle {
+
+ font-weight: bold;
+ padding: 0px 4px;
+}
+.tundra .dijitDialogCloseIcon {
+
+
+ background: url("images/tabClose.png") no-repeat right top;
+ position: absolute;
+ vertical-align: middle;
+ right: 6px;
+ top: 4px;
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dj_ie6 .tundra .dijitDialogCloseIcon {
+ background : url("images/tabClose.gif") no-repeat right top;
+}
+.tundra .dijitDialogCloseIcon-hover {
+ background: url("images/tabCloseHover.png") no-repeat right top;
+}
+.dj_ie6 .tundra .dijitDialogCloseIcon-hover {
+ background : url("images/tabCloseHover.gif") no-repeat right top;
+}
+.tundra .dijitTooltip,
+.tundra .dijitTooltipDialog {
+
+ background: transparent;
+}
+.dijitTooltipBelow {
+
+ padding-top: 13px;
+}
+.dijitTooltipAbove {
+
+ padding-bottom: 13px;
+}
+.tundra .dijitTooltipContainer {
+
+ background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
+ border: 1px solid #7eabcd;
+ padding: 0.45em;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+}
+.tundra .dijitTooltipConnector {
+
+ border:0px;
+ z-index: 2;
+}
+.tundra .dijitTooltipABRight .dijitTooltipConnector {
+
+ left: auto !important;
+ right: 3px;
+}
+.tundra .dijitTooltipBelow .dijitTooltipConnector {
+
+ top: 0px;
+ left: 3px;
+ background:url("images/tooltipConnectorUp.png") no-repeat top left;
+ width:16px;
+ height:14px;
+}
+.dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {
+
+ background-image: url("images/tooltipConnectorUp.gif");
+}
+.tundra .dijitTooltipAbove .dijitTooltipConnector {
+
+ bottom: 0px;
+ left: 3px;
+ background:url("images/tooltipConnectorDown.png") no-repeat top left;
+ width:16px;
+ height:14px;
+}
+.dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {
+ bottom: -3px;
+}
+.tundra .dijitTooltipLeft {
+ padding-right: 14px;
+}
+.dj_ie6 .tundra .dijitTooltipLeft {
+ padding-left: 15px;
+}
+.tundra .dijitTooltipLeft .dijitTooltipConnector {
+
+ right: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorRight.png") no-repeat top left;
+ width:16px;
+ height:14px;
+}
+.dj_ie .tundra .dijitTooltipLeft .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorRight.gif");
+}
+.tundra .dijitTooltipRight {
+ padding-left: 14px;
+}
+.tundra .dijitTooltipRight .dijitTooltipConnector {
+
+ left: 0px;
+ bottom: 3px;
+ background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+ width:16px;
+ height:14px;
+}
+.dj_ie .tundra .dijitTooltipRight .dijitTooltipConnector {
+ background-image: url("images/tooltipConnectorLeft.gif");
+}
+.dj_webkit .tundra .dijitPopup .dijitTooltipContainer,
+.dj_webkit .tundra .dijitPopup .dijitMenu {
+
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+}
diff --git a/js/dojo/dijit/themes/tundra/Dialog_rtl.css b/js/dojo/dijit/themes/tundra/Dialog_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Dialog_rtl.css
@@ -0,0 +1,5 @@
+
+.dijitRtl .tundra .dijitDialogTitleBar .dijitDialogCloseIcon {
+ right: auto;
+ left: 5px;
+}
diff --git a/js/dojo/dijit/themes/tundra/Editor.css b/js/dojo/dijit/themes/tundra/Editor.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Editor.css
@@ -0,0 +1,65 @@
+.dijitIEFixedToolbar {
+ position:absolute;
+
+ top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.tundra .dijitToolbar .dijitToolbarSeparator {
+ background: url('images/editor.gif');
+}
+.tundra .dijitEditorIcon {
+ background-image: url('images/editor.gif');
+ background-repeat: no-repeat;
+ width: 18px;
+ height: 18px;
+ text-align: center;
+}
+.tundra .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled.gif');
+}
+.tundra .dijitEditorIconSep { background-position: 0px; }
+.tundra .dijitEditorIconBackColor { background-position: -18px; }
+.tundra .dijitEditorIconBold { background-position: -36px; }
+.tundra .dijitEditorIconCancel { background-position: -54px; }
+.tundra .dijitEditorIconCopy { background-position: -72px; }
+.tundra .dijitEditorIconCreateLink { background-position: -90px; }
+.tundra .dijitEditorIconCut { background-position: -108px; }
+.tundra .dijitEditorIconDelete { background-position: -126px; }
+.tundra .dijitEditorIconForeColor { background-position: -144px; }
+.tundra .dijitEditorIconHiliteColor { background-position: -162px; }
+.tundra .dijitEditorIconIndent { background-position: -180px; }
+.tundra .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
+.tundra .dijitEditorIconInsertImage { background-position: -216px; }
+.tundra .dijitEditorIconInsertOrderedList { background-position: -234px; }
+.tundra .dijitEditorIconInsertTable { background-position: -252px; }
+.tundra .dijitEditorIconInsertUnorderedList { background-position: -270px; }
+.tundra .dijitEditorIconItalic { background-position: -288px; }
+.tundra .dijitEditorIconJustifyCenter { background-position: -306px; }
+.tundra .dijitEditorIconJustifyFull { background-position: -324px; }
+.tundra .dijitEditorIconJustifyLeft { background-position: -342px; }
+.tundra .dijitEditorIconJustifyRight { background-position: -360px; }
+.tundra .dijitEditorIconLeftToRight { background-position: -378px; }
+.tundra .dijitEditorIconListBulletIndent { background-position: -396px; }
+.tundra .dijitEditorIconListBulletOutdent { background-position: -414px; }
+.tundra .dijitEditorIconListNumIndent { background-position: -432px; }
+.tundra .dijitEditorIconListNumOutdent { background-position: -450px; }
+.tundra .dijitEditorIconOutdent { background-position: -468px; }
+.tundra .dijitEditorIconPaste { background-position: -486px; }
+.tundra .dijitEditorIconRedo { background-position: -504px; }
+.tundra .dijitEditorIconRemoveFormat { background-position: -522px; }
+.tundra .dijitEditorIconRightToLeft { background-position: -540px; }
+.tundra .dijitEditorIconSave { background-position: -558px; }
+.tundra .dijitEditorIconSpace { background-position: -576px; }
+.tundra .dijitEditorIconStrikethrough { background-position: -594px; }
+.tundra .dijitEditorIconSubscript { background-position: -612px; }
+.tundra .dijitEditorIconSuperscript { background-position: -630px; }
+.tundra .dijitEditorIconUnderline { background-position: -648px; }
+.tundra .dijitEditorIconUndo { background-position: -666px; }
+.tundra .dijitEditorIconWikiword { background-position: -684px; }
+.tundra .dijitEditorIconToggleDir { background-position: -540px; }
+.tundra .dijitEditorIconTabIndent { background-position: -702px; }
+.tundra .dijitEditorIconSelectAll { background-position: -720px; }
+.tundra .dijitEditorIconUnlink { background-position: -738px; }
+.tundra .dijitEditorIconFullScreen { background-position: -756px; }
+.tundra .dijitEditorIconViewSource { background-position: -774px; }
+.tundra .dijitEditorIconPrint { background-position: -792px; }
+.tundra .dijitEditorIconNewPage { background-position: -810px; }
diff --git a/js/dojo/dijit/themes/tundra/Editor_rtl.css b/js/dojo/dijit/themes/tundra/Editor_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Editor_rtl.css
@@ -0,0 +1,10 @@
+
+.dijitRtl .tundra .dijitEditorIcon {
+ background-image: url('images/editor_rtl.gif');
+}
+.dijitRtl .tundra .dijitDisabled .dijitEditorIcon {
+ background-image: url('images/editorDisabled_rtl.gif');
+}
+.dijitRtl .tundra .dijitToolbar .dijitToolbarSeparator {
+ background-image: url('images/editor_rtl.gif');
+}
diff --git a/js/dojo/dijit/themes/tundra/Menu.css b/js/dojo/dijit/themes/tundra/Menu.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Menu.css
@@ -0,0 +1,61 @@
+.tundra .dijitMenu,
+.tundra .dijitMenuBar {
+ border: 1px solid #7eabcd;
+ margin: 0px;
+ padding: 0px;
+ background-color: #f7f7f7;
+
+}
+.tundra .dijitBorderContainer .dijitMenuBar {
+ border:1px solid #ccc;
+}
+.tundra .dijitMenuItem {
+ font-family: sans-serif;
+ margin: 0;
+}
+.tundra .dijitMenuBar .dijitMenuItem {
+ padding: 4px 5px;
+}
+.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {
+ font-style: italic;
+}
+.tundra .dijitMenuItem td {
+ padding: 2px;
+}
+.tundra .dijitMenuPassive .dijitMenuItemHover,
+.tundra .dijitMenuItemSelected {
+ background-color: #3559ac;
+ color:#fff;
+}
+.tundra .dijitMenuItemIcon {
+ width: 16px;
+ height: 16px;
+}
+.tundra .dijitMenuExpand {
+ width: 7px;
+ height: 7px;
+ background-image: url('images/spriteArrows.png');
+ background-position: -14px 0px;
+}
+.dj_ie6 .tundra .dijitMenuExpand {
+ background-image: url('images/spriteArrows.gif');
+}
+.tundra .dijitMenuSeparatorTop {
+ border-bottom: 1px solid #9b9b9b;
+}
+.tundra .dijitMenuSeparatorBottom {
+ border-top: 1px solid #e8e8e8;
+}
+.tundra .dijitCheckedMenuItemIconChar {
+ display: none;
+}
+.tundra .dijitCheckedMenuItemIcon {
+ background-image: url('images/checkmark.png');
+ background-position: -80px;
+}
+.dj_ie6 .tundra .dijitCheckedMenuItemIcon {
+ background-image: url('images/checkmark.gif');
+}
+.tundra .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/tundra/Menu_rtl.css b/js/dojo/dijit/themes/tundra/Menu_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Menu_rtl.css
@@ -0,0 +1,7 @@
+.dijitRtl .tundra .dijitMenuItem .dijitMenuItemIcon {
+ padding-left: 3px;
+ padding-right: 0px;
+}
+.dijitRtl .tundra .dijitMenuItem .dijitMenuExpand {
+ background-position: -7px 0px;
+}
diff --git a/js/dojo/dijit/themes/tundra/ProgressBar.css b/js/dojo/dijit/themes/tundra/ProgressBar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/ProgressBar.css
@@ -0,0 +1,23 @@
+.tundra .dijitProgressBar {
+ margin:2px 0px 2px 0px;
+}
+.tundra .dijitProgressBarEmpty {
+
+ background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+ border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;
+}
+.tundra .dijitProgressBarTile {
+
+ background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.tundra .dijitProgressBarFull {
+ border-right:1px solid #b8b8b8;
+}
+.tundra .dijitProgressBarLabel {
+
+ color:#293a4b;
+}
+.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
+
+ background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
diff --git a/js/dojo/dijit/themes/tundra/TimePicker.css b/js/dojo/dijit/themes/tundra/TimePicker.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/TimePicker.css
@@ -0,0 +1,50 @@
+
+.tundra .dijitTimePickerTick,
+.tundra .dijitTimePickerMarker {
+ border-color: #ccc;
+}
+.tundra .dijitTimePickerTick {
+ color:white;
+}
+.tundra .dijitTimePickerMarker {
+ background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+ color:#293a4b;
+ font-weight: bold;
+}
+.tundra .dijitTimePickerItemSelected {
+ color: black;
+ background: #bbc4d0 none;
+}
+.tundra .dijitTimePickerItemHover {
+ background: #60a1ea none;
+ color:white;
+}
+.tundra .dijitTimePickerItemHover,
+.tundra .dijitTimePickerItemSelected {
+ position: relative;
+ z-index: 10;
+}
+.tundra .dijitTimePickerTick .dijitTimePickerItemInner {
+ font-size:0.4em;
+}
+.tundra .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.tundra .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+ font-size:1em;
+}
+.tundra .dijitTimePickerMarkerHover {
+ border-top: 1px solid #ccc;
+}
+.tundra .dijitTimePickerTickHover,
+.tundra .dijitTimePickerTickSelected {
+ margin-top:-0.3em;
+ margin-bottom:-0.3em;
+ border-bottom: none;
+}
+.dijit_a11y .dijitTimePickerTickHover {
+ background-color: #CCC !important;
+ border-top: 1px solid #333 !important;
+ border-bottom: 1px solid #333 !important;
+}
+.dijit_a11y .dijitTimePickerMarkerHover {
+ border-bottom-width: 2px;
+}
diff --git a/js/dojo/dijit/themes/tundra/TitlePane.css b/js/dojo/dijit/themes/tundra/TitlePane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/TitlePane.css
@@ -0,0 +1,62 @@
+.tundra .dijitTitlePaneTitle {
+ background: #cccccc;
+ background:#fff url("images/titleBar.png") repeat-x bottom left;
+ border:1px solid #bfbfbf;
+ padding:3px 4px;
+}
+.tundra .dijitTitlePaneTitle-hover {
+ background: #f8fafd url("images/accordionItemHover.gif") bottom repeat-x;
+ cursor: pointer;
+}
+.tundra .dijitTitlePaneTitle * {
+ vertical-align: middle;
+}
+.tundra .dijitTitlePane .dijitOpen .dijitArrowNode,
+.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-image: url('images/spriteArrows.png');
+ background-repeat: no-repeat;
+ height: 7px;
+ width: 7px;
+}
+.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
+ background-image: url('images/spriteArrows.gif');
+}
+.tundra .dijitTitlePane .dijitOpen .dijitArrowNode {
+ background-position: 0px 0px;
+}
+.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: -14px 0px;
+}
+.tundra .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+ text-decoration:underline;
+}
+.tundra .dijitTitlePane .dijitArrowNodeInner {
+
+ display:none;
+}
+.dijit_a11y .dijitTitlePane .dijitOpen .dijitArrowNodeInner,
+.dijit_a11y .dijitTitlePane .dijitClosed .dijitArrowNodeInner {
+ display:inline !important;
+ font-family:monospace;
+ padding-bottom:.2em;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+
+ display:none;
+}
+.tundra .dijitTitlePaneContentOuter {
+ background: #ffffff;
+ border:1px solid #bfbfbf;
+ border-top: 1px solid #ccc;
+}
+.tundra .dijitTitlePaneContentInner {
+ padding:10px;
+}
+.dj_ie6 .tundra .dijitTitlePaneContentOuter,
+.dj_ie6 .tundra .dijitTitlePane .dijitTitlePaneTitle {
+ zoom: 1;
+}
+.tundra .dijitTitlePaneTextNode {
+ margin-left: 4px;
+ margin-right: 4px;
+}
diff --git a/js/dojo/dijit/themes/tundra/TitlePane_rtl.css b/js/dojo/dijit/themes/tundra/TitlePane_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/TitlePane_rtl.css
@@ -0,0 +1,3 @@
+.dijitRtl .tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
+ background-position: -7px 0px;
+}
diff --git a/js/dojo/dijit/themes/tundra/Toolbar.css b/js/dojo/dijit/themes/tundra/Toolbar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Toolbar.css
@@ -0,0 +1,56 @@
+.tundra .dijitToolbar {
+ border-bottom: 1px solid #ccc;
+ background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .tundra .dijitToolbar {
+ height: 10px;
+}
+.tundra .dijitToolbar .dijitButtonNode,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ margin: 0px;
+ padding: 0px;
+ border: none;
+ font-size: 12px;
+}
+.tundra .dijitToolbar .dijitButton,
+.tundra .dijitToolbar .dijitToggleButton,
+.tundra .dijitToolbar .dijitDropDownButton,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+ background: none;
+ padding: 1px;
+}
+.tundra .dijitToolbar .dijitButtonChecked,
+.tundra .dijitToolbar .dijitToggleButtonChecked {
+ background-color:#d4dff2;
+ border:1px solid #316ac5;
+ padding: 0px;
+}
+.tundra .dijitToolbar .dijitButtonCheckedHover,
+.tundra .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+ background-color:#abc1e5;
+ border:1px solid #316ac5;
+ padding: 0px;
+}
+.tundra .dijitToolbar .dijitButtonHover,
+.tundra .dijitToolbar .dijitToggleButtonHover,
+.tundra .dijitToolbar .dijitDropDownButtonHover,
+.tundra .dijitToolbar .dijitComboButtonHover .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButtonDownArrowHover .dijitDownArrowButton {
+
+ border: 1px solid #869cbf;
+ padding: 0px;
+ background-color:#e1e5f0;
+}
+.tundra .dijitToolbar label {
+ padding: 3px 3px 0 6px;
+}
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+
+ border: 1px #555 dotted !important;
+ padding: 0px;
+}
diff --git a/js/dojo/dijit/themes/tundra/Tree.css b/js/dojo/dijit/themes/tundra/Tree.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Tree.css
@@ -0,0 +1,85 @@
+
+.tundra .dijitTreeNode {
+ background-image : url('images/i.gif');
+ background-repeat : repeat-y;
+ zoom: 1;
+}
+.tundra .dijitTreeIsLast {
+ background: url('images/i_half.gif') no-repeat;
+}
+.tundra .dijitTreeIsRoot {
+ margin-left: 0;
+ background-image: none;
+}
+.tundra .dijitTreeExpando {
+ width: 18px;
+ height: 18px;
+}
+.tundra .dijitTreeRow {
+
+ padding-bottom: 2px;
+}
+.tundra .dijitTreeContent {
+ min-height: 18px;
+ min-width: 18px;
+ }
+.tundra .dijitTreeExpand {
+ width: 18px;
+ height: 18px;
+ background-repeat : no-repeat;
+}
+.tundra .dijitTreeNodeEmphasized {
+ background-color: Highlight;
+ color: HighlightText;
+}
+.tundra .dijitTreeLabelFocused {
+ outline: 1px invert dotted;
+}
+.tundra .dijitTreeNodeSelected .dijitTreeLabel {
+ background:#e2ebfe;
+}
+.tundra .dijitTreeNodeHover {
+
+
+ background-image: url(images/treeHover.png);
+ background-repeat: repeat;
+ background-color: none !important;
+}
+.tundra .dijitTreeExpandoOpened {
+ background-image: url('images/treeExpand_minus.gif');
+}
+.tundra .dijitTreeExpandoClosed {
+ background-image: url('images/treeExpand_plus.gif');
+}
+.tundra .dijitTreeExpandoLeaf {
+ background-image: url('images/treeExpand_leaf.gif');
+}
+.tundra .dijitTreeExpandoLoading {
+ background-image: url('images/treeExpand_loading.gif');
+}
+.tundra .dijitTreeIcon {
+ width: 16px;
+ height: 16px;
+}
+.tundra .dijitFolderOpened {
+ background: url('images/folderOpened.gif') no-repeat;
+}
+.tundra .dijitFolderClosed {
+ background: url('images/folderClosed.gif') no-repeat;
+}
+.tundra .dijitLeaf {
+ background: url('images/leaf.gif') no-repeat;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore,
+.tundra .dijitTreeNode .dojoDndItemAfter {
+ border-bottom: none;
+ border-top: none;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+
+ border-top: 2px solid #369;
+}
+.tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+
+ border-bottom: 2px solid #369;
+}
diff --git a/js/dojo/dijit/themes/tundra/Tree_rtl.css b/js/dojo/dijit/themes/tundra/Tree_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/Tree_rtl.css
@@ -0,0 +1,13 @@
+
+.dijitRtl .tundra .dijitTreeContainer .dijitTreeNode {
+ background-image : none;
+}
+.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoOpened {
+ background-image: url('images/treeExpand_minus_rtl.gif');
+}
+.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoClosed {
+ background-image: url('images/treeExpand_plus_rtl.gif');
+}
+.dijitRtl .tundra .dijitTreeContainer .dijitTreeExpandoLeaf {
+ background-image: none;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Button.css b/js/dojo/dijit/themes/tundra/form/Button.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Button.css
@@ -0,0 +1,128 @@
+
+.tundra .dijitButtonNode {
+
+ border: 1px solid #c0c0c0;
+ border-bottom: 1px solid #9b9b9b;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #fff url("../images/buttonEnabled.png") repeat-x bottom left;
+}
+.tundra .dijitSelect .dijitButtonContents {
+ border-right: none;
+}
+.dijitRtl .tundra .dijitSelect .dijitButtonContents {
+ border-left: none;
+ border-right-width: 1px;
+}
+.tundra .dijitButtonNode button {
+ border: 0px;
+ background-color: transparent;
+}
+.tundra .dijitButtonText {
+ text-align: center;
+ padding: 0 0.3em;
+}
+.tundra .dijitDisabled .dijitButtonText {
+ color: #7F7F7F;
+}
+.tundra .dijitArrowButton {
+ color: #111;
+}
+.tundra .dijitComboButton .dijitDownArrowButton {
+ padding-right:4px;
+}
+.tundra .dijitComboBoxReadOnly,
+.tundra .dijitSpinnerReadOnly,
+.tundra .dijitSpinnerReadOnly .dijitButtonNode,
+.tundra .dijitButtonDisabled .dijitButtonNode,
+.tundra .dijitToggleButtonDisabled .dijitButtonNode,
+.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
+.tundra .dijitComboButtonDisabled .dijitButtonNode,
+.tundra .dijitComboBoxDisabled,
+.tundra .dijitSpinnerDisabled,
+.tundra .dijitSpinnerDisabled .dijitButtonNode {
+
+
+ border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
+ background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
+}
+.tundra .dijitButtonHover .dijitButtonNode,
+.tundra .dijitButtonNodeHover,
+.tundra .dijitToggleButtonHover .dijitButtonNode,
+.tundra .dijitDropDownButtonHover .dijitButtonNode,
+.tundra .dijitComboButtonHover .dijitButtonContents,
+.tundra .dijitComboButtonDownArrowHover .dijitArrowButton {
+
+
+ border-color: #a5beda;
+ border-bottom-color:#5c7590;
+ color:#243C5F;
+ background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitComboBoxHover .dijitDownArrowButton,
+.tundra .dijitSpinnerUpArrowHover .dijitUpArrowButton,
+.tundra .dijitSpinnerDownArrowHover .dijitDownArrowButton {
+
+ color:#243C5F;
+ background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitSpinnerUpArrowActive .dijitUpArrowButton,
+.tundra .dijitSpinnerDownArrowActive .dijitDownArrowButton,
+.tundra .dijitButtonActive .dijitButtonNode,
+.tundra .dijitToggleButtonActive .dijitButtonNode,
+.tundra .dijitDropDownButtonActive .dijitButtonNode,
+.tundra .dijitComboButtonActive .dijitButtonContents,
+.tundra .dijitDownArrowActive .dijitDownArrowButton,
+.tundra .dijitComboBoxActive .dijitDownArrowButton,
+.tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+
+ border-color:#366dba;
+ background: #ededed url("../images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dijitArrowButtonInner {
+ background:url("../images/spriteArrows.png") no-repeat scroll 0px center;
+ width: 7px;
+ height: 7px;
+ font-size: 1px;
+ margin: 0px 4px 0px 5px;
+}
+.dj_ie6 .tundra .dijitArrowButtonInner {
+ background-image:url("../images/spriteArrows.gif");
+}
+.tundra .dijitLeftArrowButton .dijitArrowButtonInner {
+ background-position: -7px center;
+}
+.tundra .dijitRightArrowButton .dijitArrowButtonInner {
+ background-position: -14px center;
+}
+.tundra .dijitUpArrowButton .dijitArrowButtonInner {
+ background-position: -21px center;
+}
+.tundra .dijitDisabled .dijitArrowButtonInner {
+ background-position: -28px center;
+}
+.tundra .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+ background-position: -35px center;
+}
+.tundra .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+ background-position: -42px center;
+}
+.tundra .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+ background-position: -49px center;
+}
+.tundra .dijitComboBox .dijitArrowButton .dijitArrowButtonInner {
+ height: auto;
+ font-size: 100%;
+ font-size: inherit;
+}
+.tundra .dijitComboBoxHover .dijitArrowButtonInner {
+
+}
+.tundra .dijitSpinner .dijitArrowButtonInner {
+ display: block;
+ position:absolute;
+ top: 50%;
+ margin-top: -4px;
+ left: 50%;
+ margin-left: -4px;
+ line-height: 2px;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Checkbox.css b/js/dojo/dijit/themes/tundra/form/Checkbox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Checkbox.css
@@ -0,0 +1,45 @@
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+ background-image: url('../images/checkmarkNoBorder.png');
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitCheckBoxIcon {
+ background-image: url('../images/checkmarkNoBorder.gif');
+}
+.tundra .dijitCheckBox,
+.tundra .dijitCheckBoxIcon {
+ background-image: url('../images/checkmark.png');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0 2px 0 0;
+ padding: 0;
+}
+.dj_ie6 .tundra .dijitCheckBox,
+.dj_ie6 .tundra .dijitCheckBoxIcon {
+ background-image: url('../images/checkmark.gif');
+}
+.tundra .dijitCheckBox,
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+
+ background-position: -16px;
+}
+.tundra .dijitCheckBoxChecked,
+.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
+
+ background-position: 0px;
+}
+.tundra .dijitCheckBoxDisabled {
+
+ background-position: -48px;
+}
+.tundra .dijitCheckBoxCheckedDisabled {
+
+ background-position: -32px;
+}
+.tundra .dijitCheckBoxHover {
+
+ background-position: -80px;
+}
+.tundra .dijitCheckBoxCheckedHover {
+
+ background-position: -64px;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Common.css b/js/dojo/dijit/themes/tundra/form/Common.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Common.css
@@ -0,0 +1,105 @@
+
+.tundra .dijitInputField INPUT,
+.tundra .dijitTextBox,
+.tundra .dijitComboBox,
+.tundra .dijitSpinner {
+ margin: 0em 0.1em;
+}
+.tundra .dijitTextBox,
+.tundra .dijitComboBox,
+.tundra .dijitSpinner,
+.tundra .dijitTextArea {
+ font-family: sans-serif;
+ font-size: 100%;
+}
+.tundra .dijitTextArea {
+ padding: 3px;
+}
+.tundra .dijitTextBox,
+.tundra .dijitComboBox,
+.tundra .dijitSpinner,
+.tundra .dijitTextArea,
+.tundra .dijitInlineEditor input {
+
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #b3b3b3;
+ line-height: normal;
+}
+.tundra .dijitComboBox .dijitInputField {
+ padding: 1px 0;
+}
+.tundra .dijitComboBox .dijitButtonNode {
+ padding: 1px 0.2em;
+}
+.tundra .dijitComboBox .dijitButtonNode,
+.tundra .dijitSpinner .dijitButtonNode {
+
+ border-color: #9b9b9b;
+ border-width: 0px 0px 0px 1px;
+ border-style: solid;
+}
+.tundra .dijitTextBoxFocused,
+.tundra .dijitComboBoxFocused,
+.tundra .dijitSpinnerFocused, .tundra .dijitSpinnerUpArrowActive, .tundra .dijitSpinnerDownArrowActive,
+.tundra .dijitTextAreaFocused {
+
+ border-color:#406b9b;
+}
+.tundra .dijitComboBoxFocused .dijitButtonNode,
+.tundra .dijitSpinnerFocused .dijitButtonNode,
+.tundra .dijitSpinnerUpArrowActive .dijitButtonNode,
+.tundra .dijitSpinnerDownArrowActive .dijitButtonNode {
+ border-left-color:#366dba;
+}
+.tundra .dijitSpinnerFocused .dijitDownArrowButton,
+.tundra .dijitSpinnerUpArrowActive .dijitDownArrowButton,
+.tundra .dijitSpinnerDownArrowActive .dijitDownArrowButton {
+ border-top-color:#366dba;
+}
+.tundra .dijitError {
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .tundra .dijitError INPUT {
+
+ background-color:#f9f7ba !important;
+}
+.tundra .dijitErrorFocused {
+ background-color:#f9f999;
+ background-image:none;
+}
+.dj_ie6 .tundra .dijitErrorFocused INPUT {
+
+ background-color:#f9f999 !important;
+}
+.tundra .dijitValidationIcon {
+
+ width: 16px;
+ background: transparent url('../images/warning.png') no-repeat center center;
+}
+.tundra .dijitInlineValue {
+
+ padding:3px;
+ margin:4px;
+}
+.tundra .dijitInlineEditor {
+
+ display: inline-block;
+ #display:inline;
+}
+.dijitInlineEditor .saveButton,
+.dijitInlineEditor .cancelButton {
+ margin:3px 3px 3px 0px;
+}
+.RichTextEditable {
+ border:1px solid #bfbfbf;
+ border-top:0;
+}
+.tundra .dijitComboBoxHighlightMatch {
+ background-color:#a5beda;
+}
+.tundra .dijitFocusedLabel {
+
+ outline: 1px dotted #666666;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Common_rtl.css b/js/dojo/dijit/themes/tundra/form/Common_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Common_rtl.css
@@ -0,0 +1,6 @@
+.dijitRtl .tundra .dijitComboBox .dijitButtonNode,
+.dijitRtl .tundra .dijitSpinner .dijitButtonNode {
+
+ border-left-width: 0px;
+ border-right-width: 1px;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/RadioButton.css b/js/dojo/dijit/themes/tundra/form/RadioButton.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/RadioButton.css
@@ -0,0 +1,44 @@
+.tundra .dijitToggleButton .dijitRadio,
+.tundra .dijitToggleButton .dijitRadioIcon {
+ background-image: url('../images/checkmarkNoBorder.png');
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitRadio,
+.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
+ background-image: url('../images/checkmarkNoBorder.gif');
+}
+.tundra .dijitRadio,
+.tundra .dijitRadioIcon {
+ background-image: url('../images/checkmark.png');
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ padding: 0;
+}
+.dj_ie6 .tundra .dijitRadio,
+.dj_ie6 .tundra .dijitRadioIcon {
+ background-image: url('../images/checkmark.gif');
+}
+.tundra .dijitRadio,
+.tundra .dijitToggleButton .dijitRadioIcon {
+
+ background-position: -112px;
+}
+.tundra .dijitRadioDisabled {
+
+ background-position: -144px;
+}
+.tundra .dijitRadioHover {
+
+ background-position: -176px;
+}
+.tundra .dijitRadioChecked,
+.tundra .dijitRadioCheckedHover,
+.tundra .dijitToggleButtonChecked .dijitRadioIcon {
+
+ background-position: -96px;
+}
+.tundra .dijitRadioCheckedDisabled {
+
+ background-position: -128px;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Select.css b/js/dojo/dijit/themes/tundra/form/Select.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Select.css
@@ -0,0 +1,55 @@
+
+.tundra .dijitSelectDisabled * {
+ cursor: not-allowed !important;
+}
+.tundra .dijitSelectReadOnly * {
+ cursor: default !important;
+}
+.tundra .dijitSelect .dijitButtonNode {
+ padding: 0px;
+}
+.tundra .dijitSelect .dijitButtonContents {
+ padding-top: 1px;
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.tundra .dijitSelectHover .dijitButtonContents,
+.tundra .dijitSelectActive .dijitButtonContents,
+.tundra .dijitSelectOpened .dijitButtonContents,
+.tundra .dijitSelectDisabled .dijitButtonContents,
+.tundra .dijitSelectReadOnly .dijitButtonContents{
+ background: transparent none;
+}
+.dj_ie .tundra .dijitSelect .dijitButtonContents {
+ padding-top: 0px;
+}
+.tundra .dijitSelectDisabled .dijitButtonNode {
+ border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+ background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .tundra .dijitSelectDisabled .dijitButtonNode * {
+ filter: gray() alpha(opacity=50);
+}
+.tundra .dijitSelectHover .dijitButtonNode {
+ border-color:#a5beda;
+ border-bottom-color:#5c7590;
+ border-right-color:#5c7590;
+ color:#243C5F;
+ background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitSelectActive .dijitButtonNode,
+.tundra .dijitSelectOpened .dijitButtonNode {
+ border-color:#366dba;
+ background: #ededed url("../images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dijitSelectMenu td {
+ padding: 0em;
+}
+.tundra .dijitSelectMenu .dijitMenuItemIcon {
+ margin: 0.1em 0.2em;
+ display: none;
+}
+.tundra .dijitSelectMenu .dijitMenuItemLabel,
+.tundra .dijitSelectMenu .dijitMenuArrowCell {
+ padding: 0.1em 0.2em;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Slider.css b/js/dojo/dijit/themes/tundra/form/Slider.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Slider.css
@@ -0,0 +1,135 @@
+.tundra .dijitSliderProgressBarH {
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.tundra .dijitSliderProgressBarV {
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarH,
+.tundra .dijitSliderFocused .dijitSliderLeftBumper {
+ background-image:url("../images/sliderFullFocus.png");
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarV,
+.tundra .dijitSliderFocused .dijitSliderBottomBumper {
+ background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.tundra .dijitSliderRemainingBarV {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderRemainingBarH {
+ border-color: #b4b4b4;
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.tundra .dijitSliderBar {
+ border-style: solid;
+ outline:1px;
+}
+.tundra .dijitSliderFocused .dijitSliderBar {
+ border-color:#888;
+}
+.dijit_a11y .dijitSliderProgressBar {
+ background-color:#888 !important;
+}
+.tundra .dijitSliderImageHandleH {
+ border:0px;
+ width:16px;
+ height:16px;
+ background:url("../images/preciseSliderThumb.png") no-repeat center top;
+ cursor:pointer;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleH {
+ background-image:url("../images/preciseSliderThumbFocus.png");
+ #background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.dj_ie6 .tundra .dijitSliderImageHandleH {
+ background-image:url("../images/preciseSliderThumb.gif");
+}
+.tundra .dijitSliderLeftBumper {
+ border-left-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.tundra .dijitSliderRightBumper {
+ background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+ border-color: #b4b4b4;
+ border-right-width: 1px;
+}
+.tundra .dijitSliderImageHandleV {
+ border:0px;
+ width:16px;
+ height:16px;
+ background:url("../images/sliderThumb.png") no-repeat center center;
+ cursor:pointer;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleV {
+ background-image:url("../images/sliderThumbFocus.png");
+}
+.dj_ie6 .tundra .dijitSliderFocused .dijitSliderImageHandleV {
+ background-image:url("../images/sliderThumbFocus.gif");
+}
+.tundra .dijitSliderBottomBumper {
+ border-bottom-width: 1px;
+ border-color: #aab0bb;
+ background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderTopBumper {
+ background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+ border-color: #b4b4b4;
+ border-top-width: 1px;
+}
+.tundra .dijitSliderDecrementIconH,
+.tundra .dijitSliderDecrementIconV,
+.tundra .dijitSliderIncrementIconH,
+.tundra .dijitSliderIncrementIconV {
+ cursor: pointer;
+ background-image: url('../images/spriteArrows.png');
+ background-repeat: no-repeat;
+ margin: 5px;
+ height: 7px;
+ width: 7px;
+ font-size: 1px;
+}
+.dj_ie6 .tundra .dijitSliderDecrementIconH,
+.dj_ie6 .tundra .dijitSliderDecrementIconV,
+.dj_ie6 .tundra .dijitSliderIncrementIconH,
+.dj_ie6 .tundra .dijitSliderIncrementIconV {
+ background-image: url('../images/spriteArrows.gif');
+}
+.tundra .dijitSliderDecrementIconH {
+ background-position: -7px 0px;
+}
+.tundra .dijitSliderIncrementIconH {
+ background-position: -14px 0px;
+}
+.tundra .dijitSliderDecrementIconV {
+ background-position: 0px 0px;
+}
+.tundra .dijitSliderIncrementIconV {
+ background-position: -21px 0px;
+}
+.tundra .dijitSliderButtonInner {
+ visibility:hidden;
+}
+.tundra .dijitSliderReadOnly *,
+.tundra .dijitSliderDisabled * {
+ border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+ color: #bdbdbd;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconH {
+ background-position: -35px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconH {
+ background-position: -42px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconV {
+ background-position: -28px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconV {
+ background-position: -49px 0px;
+}
diff --git a/js/dojo/dijit/themes/tundra/form/Slider_rtl.css b/js/dojo/dijit/themes/tundra/form/Slider_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/form/Slider_rtl.css
@@ -0,0 +1,26 @@
+.dijitRtl .tundra .dijitSliderProgressBarH,
+.dijitRtl .tundra .dijitSliderRemainingBarH,
+.dijitRtl .tundra .dijitSliderLeftBumper,
+.dijitRtl .tundra .dijitSliderRightBumper,
+.dijitRtl .tundra .dijitSliderTopBumper {
+ background-position: top right;
+}
+.dijitRtl .tundra .dijitSliderProgressBarV,
+.dijitRtl .tundra .dijitSliderRemainingBarV,
+.dijitRtl .tundra .dijitSliderBottomBumper {
+ background-position: bottom right;
+}
+.dijitRtl .tundra .dijitSliderLeftBumper {
+ border-left-width: 0px;
+ border-right-width: 1px;
+}
+.dijitRtl .tundra .dijitSliderRightBumper {
+ border-left-width: 1px;
+ border-right-width: 0px;
+}
+.dijitRtl .tundra .dijitSliderIncrementIconH {
+ background-position: -7px 0px;
+}
+.dijitRtl .tundra .dijitSliderDecrementIconH {
+ background-position: -14px 0px;
+}
diff --git a/js/dojo/dijit/themes/tundra/images/accordionItemActive.gif b/js/dojo/dijit/themes/tundra/images/accordionItemActive.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ccff3835a4335cd94adfca2d12f8f605f4c625cd
GIT binary patch
literal 107
zc${<hbhEHbWMYtE*vtR||NsC0_wV1IKYxDz{{8dk&mTX2eEat8>({TJKY#x8>C^l7
z@87<C3seJE%b@s^g^_`Qmq7=_0hz(TB4KdCbM;=Q9!C$&w!$9vCY8=bTBi@~@nK=G
F1^{&!G(G?T
diff --git a/js/dojo/dijit/themes/tundra/images/accordionItemHover.gif b/js/dojo/dijit/themes/tundra/images/accordionItemHover.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..96bd3a439aa739f71b47928ebe7972b31c180ec0
GIT binary patch
literal 171
zc${<hbhEHbWMWWYIKlt||NsC0@$2vXm)~B0{Q2(luRG7b-hJ`)!K-hNUVnS~_WO(X
zKR$f@ee2nmCvU$$fB)mv$DeOM|N8m+FHjc)5kT=L3nK%AFoO<=1G1BWRbzpQflr{z
qL{9;M-3|s{bWRy-?|7u*ap*J05r#qu3Etk6!v}KAruGUjSOWn4uu0<p
diff --git a/js/dojo/dijit/themes/tundra/images/comboArrowDown.gif b/js/dojo/dijit/themes/tundra/images/comboArrowDown.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e00a87b36ab1b596dfe61d49af171b3a452f027f
GIT binary patch
literal 49
uc${<hbhEHbWM^PuXkcW30L7myKqe!D4u}JiVPN8D;ct}8;*Hc`um%8^Wd-&C
diff --git a/js/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif b/js/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0da12393b3b94174a900fc06715629bdf5ec502d
GIT binary patch
literal 65
zc${<hbhEHbWMtrCSj50^^ytyen>R08wrtLvIn$<1n>=~)#EBFC|NpP}lZBCift^8z
T0SG{98JO8JT$LHs)flV+O0N}e
diff --git a/js/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png b/js/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ac118dd76d972f112bb410b4285c9264ee61ae72
GIT binary patch
literal 135
zc%17D@N?(olHy`uVBq!ia0vp^j6lrA!3HEtFPV4&DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MVg*2jv*44lYjjF{$83*;iJ6E9R@*b$$x);oAbMvG<B2+
gJmgp6act3HSZt>pAuw@%El?AKr>mdKI;Vst07ot-_W%F@
diff --git a/js/dojo/dijit/themes/tundra/images/editorDisabled.gif b/js/dojo/dijit/themes/tundra/images/editorDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e40460d7a8a76619dea2ce71df1b9f388b1c8551
GIT binary patch
literal 4979
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
diff --git a/js/dojo/dijit/themes/tundra/images/editorDisabled_rtl.gif b/js/dojo/dijit/themes/tundra/images/editorDisabled_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a0f6c1074e109611b782c8fc82d12fff98da50a3
GIT binary patch
literal 4994
zc$^i}i9gd10{~!Vv(2vWm@~8?_ub)$%srCkNReueBqaA)m~%$VJvkb=8p3i%xs6nm
z9Hnwqiuy@}3h(EA{)flX%0gGq&45pkXPf8$czJn2AP^rP9~caVKp_15{7@(q27|%j
zZ~*}U1OkCXB2g$58jZ$aFaQ8xu~<PtK_MX_91bTeEG!}-A}T5>CMG5>E-oP<ap=$?
zNl8g5DJf}b>BEN)<MDU`fgmFzBP%N_CntC0$PsyYc?AUpMMXs=B_(BLWfc__RaI3r
zH8pj0bqx&-O-)TLEiG+r?W0GJ9y@mI`0?W>PMpxu(b3h_)zj0{*VjLJ@}z-*fuW({
zsZ*znjEsmxqOq~DiHV7+si~QnnYp>Sg@uKsr6q|(va+(WwzfWf`m~LW&6zW2Y;A4N
zo;^z@lkM#6?CtFx92^`S9nYOR=j7yc{`~n17cMwEJG;2JT)cSE)z$UVrAwDDU%qnX
z3WY*(b8~ZdclYq{@bvV&diAQ8m)Esx*Sx*GuV26J<KyG&>+9#|cjLwle}Dg*H*W?6
z1Ox^K1_cEL2M33QgoK8MhJ}TNhlfW*L_|hLMny$MM@Qefb?f%++c7aQv9YmnadA{C
zH9kH*At50#F)=AADLFYgB_)MMqot;%(&_ZHw6yf}^gDO%WMpJyW@a)NjI6Az?Ck8E
zoSfX;+`PQJ{QUfaf&wO!Sy)(j_wL=IqN3vB;*ye*($dm<_wKP+tg^DQ^78Wg_wQF!
zR8&@0R#jD1S6A26)I50bfX!yt*4Eb5)z#P6KYaMGp`oF%v9YPCiNoPMdi1Edxw)mK
zrM0!St*x!Sy}hHOqqDQ~@#Du`U0vPX-A|r8dHVEePft&8Z*N~;Uw?o9z`(%Z;NZ~E
z(D3jum&+X)85tcNefI3x*x1<f=g(ifc=7V(%klB?iHV6<uU@@={d#h8^39t!Q&UsZ
z)6+9EGqba^Z{NOs_wL=?+}!*3?>~I_@bTlv`T6;Ug@wh%#igaC<>lp1pFVy5{Q1k5
zFDol6U%!6+_U+s1>gw9s+V}6@fBg9I-+%wDudo07`Ez4q<JYfWo12?kTU)<>|K8r-
z-r3pN-QE53=g;52fB*gax3{;qzrTNQa6s4v^YZW<@TmTO!v9b3!1j3#;B|71tlk8e
zkg_Ycv8+D@khLx*HI)yhi5>Ns<2KzN&cvJ2C9OCWBRPr=Y)2AVhFzfP@x(Q6;?9{O
z@1XeIjU(x%Zo~uuQ}2;iqxVTU%9lo)A2?*r4H=eLx3JIUsmYFVhFfaSN7wj-?K#!^
zwOnbRJBIUGn<povzuh}3(Iirtn<S%FG1%7d@rlZLxU>y3z{K#pkctQ#;_i_{^Lb<9
z`BO^X7y8}MHyKqlnXzP>S{hOp^3|&R?ClS*7at9&?vj@`vR`MEoNCAZZbH41s0tT?
z!yAOEBbZBWQEXKSZ2GUH7rk;g^KSjE7L$+K&HhquPBhM+eXO9FbWY^2-}d6^jtcg2
z#-Uus&6ag}+Y*D@GGpjTRv0yXUPe^*DZ_+r+Jx77Zu$T}0XHeZmt8hp)osf#X<qNg
zsC{oXO*{5#oWqrA76T8aDpt*4m9MnGL`-T8rpSkmi72E<MlILKnkd*ip2iS=2MoK5
zjqEVe4Q+EP%(PBTR+t)?D}55h2n#;TYr<_XBKi01(ejX42fFfLuJdOfdF#y?CD5fD
zM$tiIhux70VSADvYS#FWMC+^__XzZ-NS3q%jy_`)RUF}M%*_3jX6&kMM$`Rx%j3DT
z_d@yCa+rDNIE|Goq3jwo@re;qEhA@r5t_;Y$ouU()8lMd;Np9;#?2*~Y~NnCwag;T
zBeNDFet!^UfFoF|h0fv4)dZ9{FPkTwYPm6WB67%+9PY-;SkPAjzC1{3W?X7qKhf+c
zS^`ISj5fE2iM1-qr6qGh6cIE|`bxd^gPGvc$WVsPWg{W!%^3{`X)sq6F!ht5y$Vn!
zXI56UFPqqC_A-X>wHL@-LJ^5GB!4e`k$b>0;Lu4YL_9{|Te^?92(`7Ky9fU`M=f5d
zf?yIkI77IEto0*+Nzwju_Voc!ZmsV4#okMOZhc1k#l?oMDq@hd+_f38KtBG`UyEM>
zCA}>-b(1i_(7Q}N{Lit9a1A-heZqjSC^TqTX&}Tj4M0z~gC)3(kP4cFkNg44Wt=@Z
z$!2J_lN~bZ5O)5%#vcurt&P$(v*GHqbLB&f-!ndB6&;*$GO=agGT0D)sdoHSr?0Qg
zr((pWqRHZDrDX?v(0*LXRDaX|@qxhs-gJ!wwIIBc%N_ka7yh!_jC^G?)o`BnYgMQ3
z`zXoiUJnd%=IE5z@E!dh+=&y0tch{Mf7|~(J>cKH$MaXThgYC6jvqWfi0p&Mh$S9=
z7=0(pUQl*Nt0G<;e$Uv+4y`r+IpH>7s;3&ks4}j%JBTYL!tChoj`cpZJSlx*D?RZ<
zGF}iz>)<*8dfh15eRrV$>3(1}ZM+JDG)@rR*D88DC$Ga#n8bZ^>WjTKay{}i_XK-z
z@cI_|rn4hyK@!T2#i`Sm^gkHIFd62Ki+2JNm&C<)PR?tQ37sU8v~XXle#{GeSui*0
z3AWDfmd7C<md&b5Uft{-Uzq(k=m#2<VcJ!WZ_rId9yDQ$#mq!wB+c9Q%MkvNzL`*h
z`OnRD#Ih6^9!{1%g4+bXTHU-6l?v`|-p&ZG0EzXG1{E!`1c*H4w}GFN=4Ni0v2(_#
zHZH%qwq55IwpQlV-6`domNOb*%a*wW`>a;^6r2P&C}?E@Jm`$QDw3G+iB@g!$*M2D
zMl-2zpJ^tq{6#SV0Ewwryj5<jx`Sw1GyBw4t@nDCIm{?Oysc|)ByT+tQyd@b*Gvl@
z7)Q?3JSSK>l5F#LFot>)XXEHH?=L3<8hZ&6Om3p4Z4E<pX0u9181^3!^wMT$vl=Gu
zap*az>)73I4teXAr~dU$Ryw(7KmtpM19mB~lg5(vh9v1<GNTUaa<x$2RU=RbP&fdV
zWc4Hw)&eJEY2{fUY|<k+s}WP4zU%|;@};XYBWD*U8eneVa`aVr$I2l7HEmFeq514F
zEYYCUhAYP)Bjv~<@Eo8b9~{*Eb<-Z#GdHAZ?l$HdhPq~R^d&*PFV#!N1eMC&2NTTf
z;OeQz?Y73=p8~rZBVx2<b62PyQYM_c5B#ob{GHA6p3<fkYaw6DLDV-N(InZPB^hqq
z+=z`#(_)2mJ}qB^HZ7Ax&nf&DT}$H{Ed%Pz(!CA<c>>JI@ayuTn(aYDjuI|?b1A@W
zvWAsFHuF3frnGoHtYm;E*?Ml8c9|$+Hj~WXCgoKrdhv_K8uLR!aT~sI$5KR4+uhcp
z6@NH?&3K4pQC1a{hjC6+V_JJuy#=vByPD_D{KPo8Zs7+M2Sq)zGE+r5xSSmmC7RoZ
zRJK?M*2-MB%GJiB%3UIyY_76~?QFBiMtY8$VA*uWHOWQm6z;%&p+_L?T0pkLV=<Ck
zr?s_1wl*QqSymoZWbn+NLJEx&d4w~8jXLE680Vp_wdG>Jno<3?JSivIe=%_3I{m{X
ztRrh~FxR-n>>-l5YQWE$R!$v(zFx|XecVEyD}xTl(RhWjdkzR>Dz<P7^qtHI&+VV?
zR)sYvv^N#IwGqzVC2?dqE(sU@2sNx9R@Q%A7-d^tK2y4)@!6NL%?2H6=ztpjXv(-g
z*QV7a0&9##Nm7v)@dcXe2A?A5b6w29J1^RvY`+II%r3|fy4P{eQGnk+nRhd`TBm@C
zF;Z?H?rDUh$jr~QC*|#gI~M|Dj%O^z!cJI1_58^D*IYdgh5ze1sZPrrbYs}V284I#
zecCn_1gPzE{lZ)8_4ticrIaP1Ap?0Gd2@m23vZvf)Ff$v36DdhmW88$F-0dV!q7E4
zCq$DAU^rX#Io2<OmFl<{?K{re8pyA&FeU=up+<P#37oQ7H#jJrf0}LI3Q7@aT!7kk
zEuh@Z3oAADGF_Hj@J0Sf%FKey6VCV5s{H+5=Bm)%cZLQ*+>Q?sr+{M-=_R7n_zSxv
zzrw&L{yHbSr{rHAPg+U$MftWqLV&(s8SfX!Vht<Q^+x+LTe0dJqk7sIKmY&=U%fEg
zK21g6AO&o~7Y01kd(mMRWRK6ZS!{jZzmX+zR9AnS@-0EM+zf6iH$TuHP>X#<3kE+`
z8E9MVv#NV76fU|ToYx)vd}i^EsGPc=C(h$Mpxx?tB;4ck5g@e3gMYz;-%VY!03)bN
zJq`_f;pB-s9!=)Q7S9J410lsdsD?OH4h8dc%ZX!pvh}Fd5nO0|8I&1t`7hZPf|cHz
zm%j7{!=YH~w*!$D0+C+u^V8RI0mNy%cuONVI|=MRoXC6w%;WWn&%v68h!NG{(bM52
zWyjFGw=S2(3faY1;L(WyOg#l{9;`;qRTRkq@)Q93Bj<h>V5Ll53%%sRX({1M?cqUf
zHzMW-fSF|=6Pd_a0JHyth&dJLCqp$J{e4O(5OxI{>z{;%SYXPDsJkRo8Q-mqap4Vs
zUN!@pO9p0H0;@#-6~?WVIJEtQSgaT=;Q}p%NlRmTyeUZQtVv5akBtzNdRYcM&hkGX
z$M9_51hrYs^FVIwU}nZ)<zjS}Hzv164{;5nd({Egh7plX{T+u<2PI2Y2U0@;^9eNH
zife{b&^`ktwG9($@xZkNVZ<oxAw%ALyG%{0-Zmz)F&JZq1L-m51CT50nBRbHj?l>r
z@JVw#L=~pwOo8DFAzC#KJ`|uM`^GL0LTm;@_?*BOuZyIDM}J{P`uI+-guPoz>{bMx
zQT7#}S{g;d=Zbsa(*U%d1({~SrsI-a0u;wWVLt+37Vu<2yZD?qR0A=~{{);KpjLN6
zG0-vZ=484s)#%S7qvT<uHYeXJg+#XpzS${avqVTOQL2^*$*6)(L81^%mmGs~&EUz!
z0nr;-(Z!9a#WWxVkLkwU847?^GJ&^o^i9UCk!^|9buq8he4mkgn){_39&|n&{UfWe
z0FKsB!tUew_t!D|6oIN9iU2_o5(vNDa~q$OK4_^}Pbt(hISi+wQYgp?F($<uHsuX_
z{5tuAHzwqIuJK^3=W?t7Hqq1@NMoR0>=wVA4NQxpZjdrpo6=^SZ-3p_E&0c!N?AIo
zPN;Fn@Ec#CAF~*QX;QoFd3!Q+Z(K>}IxLu+#bojSF3f^psd<{$j*3zRFHmJt6|XNR
zF9&8LCh(!_i3gg_@VlC#Zt&p%%sc=cibo}AmJPAOizb1ALM(mUW+edGLxHi^F-wim
z!pca-4B)H)bpLWwV`HoFt^wDvC<w$+(<yEf<H)j|ZYlQxRb<g}^W#eLDM*qJ(lZp+
zy@|Hai^l{qYuo9N3FgI|`yY(~!?$D*7G9ti_G!K{f3^_2fT56+Kuu8hIC*}oj^{UE
zs0OHKL7m9eQN$udZ?45`1!))4<&55;z_tVK?I+UjL3=A~eRP*r+!1bYUTr+wPC%^{
zrZZeD#Kbt}Va_LcxOWzo`V_v4d~kRc^HCg2$CuK{rF2bn!8kjQoO6JOjo5?DSr8XI
zM2F}F<wgFyp4BaYgfHAH|0XctQirxXGnk+V#d;rTdLJodDGjkm44{!*KNVF!<pTf$
zxzQ=8*aXFkyTEOIEK&hjp&;2T)OBk>K+jaw1rT_^(6SB?#JU=I`VCfU7FIRv{?Sqh
z_5n@sf3Nbt5oelh*|6_(U*ID4wmy7~0*M?!=V&7P<0|G;YnD2J;W#?93}qqH$o~@!
zxfqcx3hzoO#BL+X7b?37_A_vS7*thyl~s(~Rcs&|C>{0d&TWcyK|dMsGk;LCr;~AT
z&48~Hs3Z#H-31cx>;iolbOF|_)8goh%7_EbtTvlFu>mS<F%|Y{_92Xlnj+rlnigMU
z0P_q;FeU43f2(t28Gn|5OA!XGkJa=7ycGbSY5=7jkrUbm;zjWCBk&snQ~=h<XeXpb
zY_lNq6!=Lcl*Av5%REQc?je%UdJt!P>UETkU}w2Xr@<?+N*?~vbAXYc+`=e8i3BdC
z0u8I3?j1y<1ntV{4t9ZC=evd<e>%8ZT75a4RT8R0Drh>f35O_spI0Lkh_r1(e~Y@`
z8|~t{FLAtE6z*jwA^$A;d=a(^kovf72i39{FS}c(1k_U?_T=i&w@>Wjsu8^v;wnIL
zBjWM;qcNwaT<2mWwa)U8p1zrdjzW@iZ422Kc+BZR&h>os1)yuq@UHtnla7e0q;ylO
z0<JA4I`dru79S2+DvDe0U=vScl2uS?we9KA07C^Z-o;4x)Vcsr=8&s|n}U8<zrkA6
z@jv~i(oHWr1Fb_ef?aopogY7;z>WjZC|#fU&@@(8^B^Flk8NQ*#L}-M=?s|I5HpQo
zvnpqkfU0h2I5AP#*zC#is6iw)<lZzkM_(DpY6BH3L$qK~UBkBwdO^m>o2rfi@dn&P
z8<<TPaJ!hx10PVy$|g|j8LsvGSZM1XOzywFT-Oe>AeoLqZt1@fh2DOB$&k1JgbYDk
zf{GID8ja=~wXsW~WBZDQ)8SYtQC@CcmrhDLc5HR@$-iekl4E@aV*{>ZL#npCygWQ7
F{|CzGzdir}
diff --git a/js/dojo/dijit/themes/tundra/images/editorMaster.png b/js/dojo/dijit/themes/tundra/images/editorMaster.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2e6772f461249a3fc76b6b617cad6c3cb5b00672
GIT binary patch
literal 10338
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
AIsgCw
diff --git a/js/dojo/dijit/themes/tundra/images/editor_rtl.gif b/js/dojo/dijit/themes/tundra/images/editor_rtl.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a9740c213601c736ff0fe7fd070914e7aa940dcd
GIT binary patch
literal 5424
zc$^i}i6hgE!vOH_W*57@W4TH;RFtwLSIXwd@kk?QQJcH+)aIx;9?gAc?km~cBF&MI
z%6%n|n@}kVousHI=J&pz|KVe1aavc8X&@#EEbRaQN*9#Gw*U~}u&<b=zZB&X<|L;V
zw_oLivkKKaOcS7-VgZ)1M~s4$Plr&<IO!*W1N3N3JI;Q`v<+pg!%pFQ&*vR-N`8G<
zL)$Upgkwyt5s+`Lc+|C!<`U}aY|A`vRA9Y({n)7@8*HDELB=`TeOH=is1{|8fUg@>
z`%2*(BPz?|<hp?^mh;HuYHpD$!P$pveKoQE+=bgdxX>#)UVmQ}I=LAHRQA}>pWB-_
zu+uVpwDa6N<Jnryfdv}DYuEgeLIciv`WL6MOdUCu_gJ_-Z@kyd^b~(PAZ_egP*OO@
zz06NDi$kdk1lS?bNx^^B-M|$ED@=H>Eu;I?bG+%%t(PJiQg59uyb(0&>u~Ru{FSJx
zhhb6`VHUZOCLz)B?3m)<=<J)34<n-^Vq=5vMXR<(VsFL^7K4Dtk-NYA?Pj0x$Rl~u
zF>SaYCNd@Y#=S(t#>lIGt_OGDiq7F(X-Twv9TMKi)5}Q@2+OMHX0|>~I}(-gEH<m`
zX70d7C@1L7v$FKe#5{gyVtR4j<*E4Ke-je&b5n})S*@9uvhuSl3cTX^Pq!nJOYX+`
zmpyO2Yg@?=U(FHA71Z*I`|p=Bs!BrYO4)+4veu%A)XMg<@`9lf`=F+*cR7Nvx_6JN
zZ!}g%ZfEBA-@ndloJ)N)_PWNltASnmaH6%o?oV;SWP{JtLzm5Z>B^?T+UCX&k4`Vu
zRF*#7$m<>2e$Y79+WfrjetXBj?@sdjwtwb2qrUZ#=DKc|46e2J4K((@{q*$NY;W$9
zfytrXo^QRLeFMF-{Us%1D_=UB1_#?Kr@G$v_OuOut(t!Gv3G1|(C5+k*Ur%o-4pNr
z9iRFzR`X$^bb503)63+Sv(uxmR(4*dZNCX$dDFT5CgIOw)bIDH>u=t^dH-o*<;(U`
zvgkwc`=!M{%lW_F_q_Nb`u(x;^~c|n-?u+}-B|e|+WOY`XCr=Vec;oNt*sx^JO34~
zZ+u_d{4Ls?Sov>f`@hAl|3n*GqMfZT+dEr3J3HjxFo*=O1E>T4=l@RtC=swDuC6TP
zw@0F+4!ZOS1)Z^=vgIA~+M@16*<)Ac`f7`NQ%J@Mdo1co`qNd<-Lo^N7YVW{?oWL)
zMxxH-EBKwyp}dXgw4+9r8F4-g4iuZGA9NjPs63a_!9Q7G`S6~7=3!+w+uny&j)5^(
zZe(s$ebzW9u+p-cNGQDU$QWz=_QStECTHAjaVvF{^f%AAJ2k#0O+sd;INQZ_&}k7G
zmvZLF+pf#;rq_K!6^J^CnTIdfo^Vh$(YLA|EAQm(x4Xa4aB~Uf#mYGyfy8Tie4b8b
znO);O9p>aamHa~Q>eEntHhj)=Bu=_WBk3BMdH2)wg9p3hvzZ&8QS~CDuEm<Zl=bVQ
z<&NcjjBFX#mMxCpZEJC~4*TQciWK=K|N7ck0recG1AFpZ#;BPh&OU;A1dmk$_MqCy
zZ6w@fsRC^YPsy_exvb7J`=9(s>nE6bxD7+q8<*Y8VnX*RJE2S^osIV_${L}RlYq_?
zs#2GdX&#Z`0XeD_Gm?ydrMqZy*3x6a_?&*%Sf-QpDkzy5;4ChQ7lg;qN?neXQQwV+
zBh`HC<Ys7A`b0VM=A2lPA?L#io)Re8L6F-8OMpq%A6JR|yXk$5i9B*!nt;Qa+?zJk
z73yB5`M8`*pt)(=!H$obOATt2^LGtYW-E=W8QV8}{8%Nb88FRu#o0R^G74(gMKTOh
zhh-dq;Cx&U1-3lI8~R1*jHrBNgqyO<R61bC$193sX+jeU06~0i??;R2w#6G+H@JUo
zUe<qGSaZF!E_q)TDh|XVMvcW>G1|n){dn=VfhdIYuLs7i7$)t21oJz2zml7+(tcI9
zx-_Ma71^)ROSwzdAx07bmRZO(YJZ>dGq<`UEkB@<ycEbgw+!??9$>67wdF?Bo^5p-
z()c#$pQyVtc5FyP|94KZ{sAqOQ5_B9OEu#M%j|L4x1%up-Z;TS*}YmLup?-}$iKPJ
z_%k=~9D||_W#3auR=swc2Hu4m<A48qGH@&?MN}w%@*GWIzJ(o8eDq~C)=1N1+o$A2
zmA-a)iiVvFp_g3V;Wwb>al_btc}4H8eV_gH2(+eMfuiu~#~#B*>5M}fkk^sbMwOh7
z=f?vl)jrc6EM4@iL&k4{DqmgL(Ypo2`hMim#bWC{NIgw1L>|@E{{xYf&Xf8b@a@Uw
zmx`<41tIdPx?%p%g>O%OEQZkc!Mk}S#!#`Xv)e??hBJZEm|82N1QZ`Ys#4>5UzBdp
zd$lUahrNlt&W@~Dg)0qQb6pj)J<~QRT%yWt^<rSJPoLgt^A5?ZVbXppvbaq}2eD2V
zeSnBc9|!S~UB*~ZlbP?kD9PQ<LbB-8U>^iqhq~&)&@rE*A*yRpFMcZf?ey6hPSSaM
z$HR$NFYH#xgB*w)9*)r+7YxI`$DVqzkQAt2{2EuDit%WZgp=(|eCx$xI8^9P#f!iF
zBD*4~_aMn9;-&|qDi7dBNPX07r5F27(d5(oMdk%nN<m<-!tzBCtI+5kJ;pkCG+l5a
zZqNC4^u=E_)@{adszbUdb1#gEXgN={3oDQ9q)j+-EwRTc>@l9|3t|?_z3aF-<Td+m
zilhEiSi?=8*YZ60`a~2iZ{*31Uu~o!QmNW+;6X^-JJ+mLFQfk$7V;VIsCh&b)D3uc
z)L@zXtFzE}t1bJ;9t`)jXf;NO3Xw1shGP?S+r{^zQtg>0_>X;Nm{Y=dx2O(mPvZPT
zb=xEU$KScgczT#6c*yNLY~h2J4L7WC;vN6x4l{lyFjI4*E1h2`r6gaLBGe)NnGV2K
zu6D?C1o$&@iwJ&O(aiFEqdQC0M_p3Q0`6v;acaNjEmp4{>h0}&=O+}RWXZdaNmgKn
zjkKeKQ3|{Kb{mKm=plB*V$AnmYTAnYfAes8Rstgb;{p$=$Gy1O;uyB59IEy3lRV-t
zr>KA$|H2d1{~fWYie`OR_{@p*P`(gDmp8#ZE$%^oU4vekmdszDM(Z428*r*i%WD4f
z*^t!?=603H`LBvhaN|sboBaCTooVBytd~{_cjj|{^FCa!ynM#@uIA06d8D6|COl+>
zO7hkPWpHVUmR$hk>tG^vXk9GYhX#~@00+*G#$W}c?Z4voey>D^9a$(02A54do$8Ge
z#IdKF%=e6sq^N{)#V<6q@15b@4Wj;=vMa#6xn&CV?RZm2@_3)D1m9I}AJ*DXOn#(d
zvIK4RL0q(qgc;PvoZ>*C+pE1&H<~0fwd2Xo@A?gsSeI0#7tuBUsA=ZJfg1A*y@o@l
zwYh_dKLp|xDSR;nUuH_EPqA!ms(?yWcazMQ?LO$WW+<ZEW`hxX76AY3ep=j->${Y>
z15^>b4}7m@$-f<WXf78$>QF>3A+`c_yznh|jXfTcJGyO~tv7*Z(o>|1{MaIy7e0o&
z7lmndpJ{!U`AhmG5(T{KvVF7S&!u6Q=CNwhS909YUXxwi9AN*njlDy?yp$9Wbr6Kc
z+`FrNlR=j@Arg`=BJKDIO{U_qHmE?<gPehJE<%aHl~M7K)<>C;0)){%XG5g7e9W*I
z&4iG_NQ|rOeVukS>!`uff8eQ60aEWsFo0yCAv^VmI4ZUp^9YHrG~J0|P|!p%axjY1
zmU1-N9c3_&U+a*PxqFG{rEBd)H^UhmjWwQg-xXhBqH1+CW#-_Sb{HloO0;qzRhCGS
z1}`&>7(N{`Jrt#b*_smH7qM5z4GM#d+GSr^9+Np%Vkrd)Hc1k$9?)+g-QbysV~-}4
z;oZyNYfytS>!0^Ji;11ngV<F@qW|K;o(0`lZ9l^M-oZU*bsjbA_&r_M3djYg;vUaE
zu=&8Qo=}4HJ$}78v>9VQ|3Xsks++9$QY5CB=x}yxWGD5uN}RHyD-cDpVkd;|VeBr~
zZJ@T2QieiA>)&}DG~AzNbKCEv7p38)Xw6qqjNq}nuUhy2RlVYnl_!sYm=uuOaU&gx
z3cLy_lFvW(4wGtA?TK*;!3x+Dr~rP)GUT|3f15Jxkb8&Qjjs^t9EsW!0kiZHQ-IPU
zjGIao)G4U_)*<JuRwFYd-H+%CcE6fbR+0Id@dn=VMlovq0!)bn{F(%3C@_>VSj&Jk
z5s^dl7&Zkz215GzF!nt32#ay*n97}4e8HwWw%1SN07!5|CDEb#+Hiju2igI&!X|qM
zIDSSMJT;74=i!6fEOj`im65hP^O}2Nz`c}XhXM&`uJJbGT%r3pwK4>|PV47{uGM;!
z!g_?EZZxHW3595$UUgSc#hYaZlu~f`VfX?A`IHs&l!Zi);mgA@*M7w;^RPv+;EQ3g
zMHYUBk7br)r&*X29#Q7YdX~$0D^>8a5G$GmF;%s3?cBJV-h})zuW(z)63O}RM(`%g
z8zgg3Hr^_+pe+x}(oOLHg`XPcgdO*Z-f*0<15fif4pS^R<Z@a-a9x_UHx<9J=~DnY
z3lD@KAqeju(1^CMQZFz}81h+|G>8ffe1~l4x#Hj%+UE^cmxAoJQ1)sln}ms@Vwij!
zopE8@{p56~6_N&@FZWQP!kMfvHGY`=F2&;axE#QGqX}G^MEcvvqzOTsCL*&9$Y>YG
z@W3~_xKNP$z8f4H)`yN5s(OQ%WiCNAoS1{@2effy_=nY0MYTjC;r1;m_9R6tP>7!f
z5ljHS&iyMhO>|J=Xr%WK?(u%h`%MH*cP2hN+;Ab?KrBN~N(-dpUIDls653J?-2>oW
z(Q%;A|6~S(W|nD;OjC4D*x@6mhdnP=B1`QoFR?&hS==>QoKJj~EiX{q29w0cy2WCH
z;;_@h@+meMX1N)Ez05c(mzhdN#L4DFsO7i`3DKJI;dS6svKTxyJ{-x3oC3y3;Fu85
zR0BIn@XPU8-toBe&FJ!FPH3rPPWj(RCQPvz=Omt{^cx>%AI$G`LD~@Kgo*V|nBPFi
zH#+9-e$bh2U*u)~C^pG83)K^Jr}w4jFb8yQOX}9aJM*vNnTT=cf{B-yS}s;3;^P$T
z!4~`5eOf1R+}j8m961bK4g$V%!bl8o(9iz9w)p5Wj$4+3v?Xo!gDAjor|mF|%R>i|
zB|CU%8}!x<5aEB3D2HSNn1k~u0)U|d7#TT8x*zlOF!r=ia9@q^Ru<94Md|UxrYF<r
zEc}8G;rObB`i#YFBSDd9qy&plUi4G<E~Z2kAARIcq2qh_Kq3oyQ;3paV15E(=e48I
z1o!hD0=bzyHYw&OEru;bJG7wPgYw?4V&4dJYZx%!O0ah|Yk?OV#KDR9*wm3?L-`Wp
z^Cf2YJl!bR0DbHlyF5@I8=Xt|#)EuY#eXBABKTgSxXv6zD&oXy9B%Dq9tRu))NWJD
zb-7}jsbD7qRwK-Hk;mP)fbny2Cc;D4nR(?aG1e`Dm|YgBUWpqkDK(B5p?p>CO#TiC
zAC<k+xw1F1xhk$t2Fa`%(o41>72s?Tg{*2%K5XDTVoQi08Yn=Hz<Wwgw!8;4=5Z+I
z-Q{@5iUpjsdjE?v*xHMm*FN7imBbqcm%J=C(!jayLNu97q+W!sxvnRW<(P<C7H*6W
zec6F=7=9oG!_!y5iaY|Hk2@%b=JUijLi_|nj48ycwH!0-0@Zo=YY_PLwcFQH!*<h9
z#Ih3UH9IsP_{l4UuEBruMSxnVq`F@%flx2a79yC4$5#;dh4uIObqFTR<v;B1gW}8q
z(EVVx-(@_fsEia{cj|fFkw13O5qRJXeCT8K6!l?1OS$YCZWkpL$`q4Z-Je{fEAuu-
z;w?&d74ZG55_=SrCKS+S1v~SV<>s&@peA^CO?iK5z#pHoY^Ulx(3@L`N&~szWqV5K
zvzes4Zd}3f>aVHg8TsW;uYhgx)%N?ECuIqAR&^l&AGimj)3KLXEuO%B_?p<98-M^I
zgn2-0-WLUtSb7Ql81xtkNQfV;dC`=_16w;jf#>M0pId^VgzGz$>liYyKEwO@u@%Y#
zv*}MJMIlcnL+Wek0zw;RkfkT$iYZV6<ZEFPRcTdRWbb^nc3btUm!{a%+H1A2>$GQz
z&ozlhnW3HOGL1|_wG5|aEt;AqycY6?0lpDJ^fF2cr$LG`;nY&w@qCae#NsKXvml~^
zD^W8qaq3Tf*a<@IYL;c<fejYM%B>Am-R4G=a|JQ&jPf!{X9?{gCA3+Fjl1d~9HUm`
z_&7+1H%ic&jb%C{n2)BYFv+zNUP)7AVsLiDDGUS^*489JhCQ22GGc*FK<CA+?n_B<
zRCu@Z;FUWee-Ub7{Kv53KTlCKOgk0hhw1cd#fpz$kX*>e-}n!ey)IFpD4yQ)nTL|G
zu}0S3f{xshAd`nLfN!E7Alc&Y>9}mVQk)Qah$T)1VA-ttB@i;kK!6Eo*e5)J+nL6G
z>iBqI=wr_gXyW**O^x!r!R2{F(lagtV*d+o>ZhWqUwq;`sFeWfNDLl~vOB7(BfBwR
zYwl;$^!#l7b6ex+qq+n-_3*S6mM(1Hz12?IdW0dM^B6iaEQ~u*$5a_Ko$q#KNSCj5
zP}F<m$f$JHcqTmRW(FbdUIp|m3O^6{K5qoR0GR_I6+Hx{!HOvomaSc=FL}b;0}Tnm
zJ%_ppYG6gWeiAy>!=>kfFE}JQs&sPnyDz9v(5?7N)C>|}>aRu*e<5(J;Be;MTbRDS
zpfOoNFp9>@VDl8o{TVJw+1&oT!G0uU0Lm1Is6ydx$U*8Q<9<S<=7gQ=gan~orK&`y
z&Zr~Q$Z4AZ!N}o#L95_>=vvrxD|Ji=n+rw0-m1sn2lLucy}}2uExgNN@UV>Br_fHn
zSeWytZqwn@y8wsHI}_T^K?C8m(KI39&p`sSPv)OPa560GpO-lWqfmi_DS*1W{gRJG
znNqGIQ(u;ysdj!MDUy?%o}HPv3LXR=?|`%B3bU|JHd^^JEl*}GZ6?k=nNEBnt|SoO
zN+Wbp^!f_sy4z>Z)TSp1#+LUfNGQ@2WZGX2B+r#36Q=s+=3c#ez5Qxl;q|+duNPmu
Jf<S;1{{tM<k7fV>
diff --git a/js/dojo/dijit/themes/tundra/images/folderClosed.gif b/js/dojo/dijit/themes/tundra/images/folderClosed.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9d5fcbc6d6cfe07fcb7b310feb9753741b537b56
GIT binary patch
literal 933
zc$|Gx%S+U85dQ=c)k*T?>yXFj5Y5G?!_pzEV^F6&<Y5kyy?lh-vQTnisSssccVU-;
zWe;XrW)ft1h-!!)5L8M&DyX1C647az`ThZYZ^O)d=JWXd+72IV-FvbYwfF;AJT((D
zHX}1crD`gsY)Ynxrl^USunCzUW?7BJn2pI8u}W$rMr=eza3q5o#J~nJAb<nfv3%L5
z5qIK=Dyxzz;;dI9Dy%{(2o~OCQD$XQMv(GZ5+zn5B{)Z4RfvKWq(D#(4NlrwIxU2P
zxa81|<;w^`QTt;N5<%$mvtBU^lQ2TAv+yRd5DCH6J1L(Puz&;zGr}z2b~{`@!kduf
zU{2auBCLwTj_uHng>Wv~Ui%|vgpsb#&w53~1ozeDIty<yh=H&<QjwSqqY<u$cM_{%
z2O@+}D1j8D5t#%J3E+T6L=@8!cjCblb0b}!pY@6m9|uzWNC6{7h!hf13`j;JS&3v8
zk{w8bkt89JMxupu7zr9_8L91crBWRo9qaDtE0u5NCyK9Lza6@o9k??1^x2C?j~8d>
z<|n77SJ&3xfA~1}VE*pC*~!~ew<^_<(XrgM>w`l>Gcz;QYPDQ0mrA8#v6#!{ve|5Z
zf4_g+`0v~Cw`LRY8@r;2e*#+u@MCM!p{bS3#f|N=)VjO)@WRiQmzUe_bnL&h(bBn8
zIakc|eLXPTRKF*`(Ea&n^@RMI$n<>acs@~ISIC@NKL345>hcR+D+Ak_8+!7Y)2laj
zwvUhGGreo&BZY=zg@xYr>CWZx-a_Wgw<p8RjqmcAu1{~O?fK)4i}%m2Z?3_<e{HVB
AeE<Le
diff --git a/js/dojo/dijit/themes/tundra/images/folderOpened.gif b/js/dojo/dijit/themes/tundra/images/folderOpened.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a514c7bf11cebdd290bccfe459c402386ef524fa
GIT binary patch
literal 941
zc$^(mO-Pkd5ItFo+6e`L=AstWqD3*AB#0oiY%8@+v#AI|ArUNIKQ6?4g_#M12ELby
zsXYbFOu-^Fl&)rANN83_8c33~h@hBe?%fSDbLRYf--)8a!}%rI$i{C#{RLG~WmQsz
zS0QK+4XlAQz?%|OM1@sI1wP9`S(I6sl;NuslthV@NC}3d2ntcKf)sFIhc+x*wrThs
ze-Z+RKq0`-S|t*MgHRAS3v03j=D-vfPReFU0&yS;1mkF{0TRFg6ac5}8jQ5DG+J;4
ze#xK>%a-ASytc<8Bm&oGXRTruCSkZ-V_{8VArgYAH&Qk$U;zo>X1H0lZFZP`xHm4z
zz>Ku9gj?l@4cnj%3+|k^t+q$Za3f8howbUH3FfQGH5S%n5Cd+rry@S<M#Eiq@5EQ#
z4tNNzP#nog!!vOn;=m3KkI1LR@A!iyW=5JmJ8KoeKMutB5d%hy5HTdg7!Zv{v=Y%Q
zL^}`#BT7OfjYtdeFd{VKGGg26mDTT`zkHqhFhBKndhFHffuZ5<?(VLhOh-p&Yinz5
zZS9R)HGO^kJw3gtRJtwQ(Qv=9_i5(l?V7gq<8x(Y?`CJGXJ$r5M_-JLq|)gJO-&mc
z8*_7W6B85d?d_>ls=2v2nM~H#*Von6B@&6s%F2q03j6eT|Jkz1*&Hwq@P7hZ??AWh
zI@#ZLtorYG-LDG`ZDZG$_AD*z%#;>f+dNUQIC-daIGJ}mv7_sK?$Pr7#p&el^}PJM
zXBJCZiU#%$Rpop;zc4khI#Zo9eJS_UVAs%99sjZLX7EXI=g-FUa^bV?(^uA3{;gGI
oTIT!Cjy~Kzx!&?|;Nr_im-ii<9e!TEe6M)EKl5o+v$AmHKPm|2+W-In
diff --git a/js/dojo/dijit/themes/tundra/images/leaf.gif b/js/dojo/dijit/themes/tundra/images/leaf.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..85b017810f2927d14f63bbed423f34874083456c
GIT binary patch
literal 403
zc${<hbhEHb6krfwxN6F9^ytw&d-fbWcyRmn?S~E>I)424fddE5oH_I2#fuLgKK%Lf
z=f{s9`}Xa7_3G8RbLSpBc(7&5mfgE|fB*jd)TvX)jvagY^y#*3+fJM~@$A{ND_5@E
zzJ2@Kw{Ks*e0lu%@ynMlA3b{X=FOY?_wRrF`0@Jn>nBg1yl~;d=g*&S+_>@k_wOA$
zcI@B3|HzRefB*jd`t|G1ojVU7KK$#~uYdpk?b@~L=g*)2!GHlTQ2fcl$iQIApabH7
z{KUYv!J)tLgO*e;lhb0g-#Td*GC~$jyc)wDm2>*(B_BOCt*{A8W7dhN99opS#weoa
z2*(L7ex5~ln@-EJFtO=Z>(nF`8nUzTXc>vfa<=;v32QMjYUwNUPVSt>D9FGsBQ&pw
zok@#_MOAc?iEc-|J`)o=yCetK#?4&fWt!>=oVo@&o2D3OYl<;53os~hYv^i*YiJk*
j1sZT&GiBDjbtk|;Ly6f`ON5m{`@=_VhIeeHjttfSW;en`
diff --git a/js/dojo/dijit/themes/tundra/images/minusButton.gif b/js/dojo/dijit/themes/tundra/images/minusButton.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..48d5172470f250383e7696c7b61c727b9df06eb0
GIT binary patch
literal 148
zc${<hbhEHb<YVAt*v!E2=FOY$-@g|Y7M7NlK6&!w_wU~?Uc7kv^y$x^Kc78&_V@4K
zSFc|E|NnpX?AZ)pp!kyoOzVIMkQodtjvG#TYVWp)UuiwrOQUaL$efHSFOS#z){3w=
v=U(5;!r=7&yY<N=4;?<$wk1U~r>M-k@FKWqMb!FG&cxGi^RyGZSQxAUy8cA)
diff --git a/js/dojo/dijit/themes/tundra/images/plusButton.gif b/js/dojo/dijit/themes/tundra/images/plusButton.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..103c021daa0668c5b0ba53ac0bace43eb1f1f7ee
GIT binary patch
literal 212
zc${<hbhEHb<YVAtIKsf-<>lq!;ZasrmY<(rP*6}_UjF9IoA2Mh7Zw(lmX`kh{rkm>
z7e9ageD>_w-@kufy?XWJ$&;r~pZ@><fA;Lz3`79MpDbWn2SkAEWMB<^pwgG3IX9!K
zD@(i6Pe!~|rrT@Y<tjZRhXoD-EM0u<EkX<dY7>;286A09R&cC*aqy`SN9?)`N45IX
dDS^p*<#=vn2d4O~KkqtWPu+a|pPq^g)&M@BPOty~
diff --git a/js/dojo/dijit/themes/tundra/images/progressBarAnim.gif b/js/dojo/dijit/themes/tundra/images/progressBarAnim.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d3df139dcec6d74a38d67a78ace35f274e0e7b0e
GIT binary patch
literal 2624
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
diff --git a/js/dojo/dijit/themes/tundra/images/spriteArrows.gif b/js/dojo/dijit/themes/tundra/images/spriteArrows.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..56a37f43b68b62aa112bf4259dd545218010dc55
GIT binary patch
literal 116
zc${<hbhEHbv|wOoSjfZx1Qit(|G_}<CkrDN0~3P|NE9T`z~nlmpJ~U-dZtMm<Sy`(
z-DJzE;p><>yC_TZR?Rw%9l|n~(vppq?mC|D`}ttplF<I+r#aIXEd8+jVM*B3wA{3l
Oew%MDyBf&AU=09BATF=~
diff --git a/js/dojo/dijit/themes/tundra/images/spriteArrows.png b/js/dojo/dijit/themes/tundra/images/spriteArrows.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e0229c9f70d4873f3e198d2c1519da2d62ea6c03
GIT binary patch
literal 338
zc%17D@N?(olHy`uVBq!ia0vp^7C_9-!3HE_SM{X<DYhhUcNd2LAh=-f^2tCE&H|6f
zVg?3oVGw3ym^DWNq^HEw*OmPSD-Ww67pn))d7#jJPZ!4!i_>$b1o9nG;BZObW2*k(
z#%BAZ2(hTmD#yG;E1CrOm0s3NzN2M$ZIZ*M7n_#+k1sou^X2)w()oAhZY(RGar0uS
z&~K-(vVUyX9p6MY%Q1+&=K9EXoppb@Zvn#;{ld2o>fBgt51MYM{J(Sg4CnpLza<5~
zuv|Z|qM5s%ap$g2w<MqF#<c1boR|<?xzjrTq1KZEzqB?{15v%Hn)$L`kL-+DS2nCH
zSn0F=ud4N8`)S+F%z6wa&Gs>~3q2IgwyWn^&l9!JC7zSl=oLF3et4zhUt={_(Ww-Z
eMbQ=vKNzfqw_7-C?eGVBmBG{1&t;ucLK6TN7=uRu
diff --git a/js/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif b/js/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..251389a285e06380d4e8eda1ff98e6679c817fbd
GIT binary patch
literal 1863
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
BjY9wc
diff --git a/js/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png b/js/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e81ba07f8d99a772a5e09cc5c8f732670204b294
GIT binary patch
literal 2195
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
V5GgrqL(KpH002ovPDHLkV1hgq7(f63
diff --git a/js/dojo/dijit/themes/tundra/images/treeExpand_mius.gif b/js/dojo/dijit/themes/tundra/images/treeExpand_mius.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5977782378ff197130fda60586c23fb92fe6d322
GIT binary patch
literal 211
zc${<hbhEHb6k-r!I3mdK;>C;m_wO?>FdRL4G%_;s*s)`$PMy-z)4Ouz%C~RdZr;54
z_wU~e7cTtz^=tO**`1x8|NsAIAO$G?WMO1r5M<B+aX@x5um&Wk^rd9Z%UHGU#p8V+
zitT)IZ=dUVV>5p?e`|ropQ&<<hY~V5EP9u)GZY9!a0b74G4Vy!-l&U<9rdOko_IXz
ZY}#V^2|Hr?%5J=`Fv&iDzny`>8UPO8QXK#Q
diff --git a/js/dojo/dijit/themes/tundra/images/treeHover.png b/js/dojo/dijit/themes/tundra/images/treeHover.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cd6d28be4357084291d71b9f35ee3234425493ed
GIT binary patch
literal 112
zc%17D@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4F%}28J29*~C-V}>VN3FMcVYMs
zf(!O8p9~a{@N{tuk+__kl2LKsumej%l7di=){;IahL9(W4Zeph%YbSaJYD@<);T3K
F0RY$V9|!;d
diff --git a/js/dojo/dijit/themes/tundra/layout/AccordionContainer.css b/js/dojo/dijit/themes/tundra/layout/AccordionContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/AccordionContainer.css
@@ -0,0 +1,22 @@
+
+.tundra .dijitAccordionContainer {
+ border-color: #ccc;
+ background-color: #fff;
+}
+.tundra .dijitAccordionTitle {
+ background:#fafafa url("../images/titleBar.png") repeat-x bottom left;
+ border-top: 1px solid #bfbfbf;
+ padding: 4px 4px 4px 8px;
+ cursor:pointer;
+}
+.tundra .dijitAccordionTitle-hover {
+ background: #f8fafd url("../images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dijitAccordionTitle-selected {
+ background: #f9f9f9 url("../images/accordionItemActive.gif") bottom repeat-x;
+ font-weight: bold;
+ border-top: 1px solid #aaaaaa;
+ border-bottom: 1px solid #bfbfbf;
+ padding: 4px 4px 4px 8px;
+ cursor: default;
+}
diff --git a/js/dojo/dijit/themes/tundra/layout/BorderContainer.css b/js/dojo/dijit/themes/tundra/layout/BorderContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/BorderContainer.css
@@ -0,0 +1,55 @@
+
+.tundra .dijitBorderContainer {
+ background-color: #fcfcfc;
+ padding: 5px;
+}
+.tundra .dijitSplitContainer-child,
+.tundra .dijitBorderContainer-child {
+
+ border: 1px #ccc solid;
+}
+.tundra .dijitBorderContainer-dijitTabContainerTop,
+.tundra .dijitBorderContainer-dijitTabContainerBottom,
+.tundra .dijitBorderContainer-dijitTabContainerLeft,
+.tundra .dijitBorderContainer-dijitTabContainerRight {
+
+ border: none;
+}
+.tundra .dijitBorderContainer-dijitBorderContainer {
+
+ border: none;
+ padding: 0px;
+}
+.tundra .dijitSplitterH,
+.tundra .dijitGutterH {
+ background:#fcfcfc;
+ border:0;
+ height:5px;
+}
+.tundra .dijitSplitterH .dijitSplitterThumb {
+ background:#B0B0B0 none;
+ height:1px;
+ top:2px;
+ width:19px;
+}
+.tundra .dijitSplitterV,
+.tundra .dijitGutterV {
+ background:#fcfcfc;
+ border:0;
+ width:5px;
+}
+.tundra .dijitSplitterV .dijitSplitterThumb {
+ background:#B0B0B0 none;
+ height:19px;
+ left:2px;
+ width:1px;
+}
+.tundra .dijitSplitterActive {
+ font-size: 1px;
+ background-image: none;
+ background-color: #aaa;
+ -moz-opacity: 0.6;
+ opacity: 0.6;
+ filter: Alpha(Opacity=60);
+ margin: 0;
+}
diff --git a/js/dojo/dijit/themes/tundra/layout/ContentPane.css b/js/dojo/dijit/themes/tundra/layout/ContentPane.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/ContentPane.css
@@ -0,0 +1,17 @@
+
+.tundra .dijitContentPane {
+ padding: 0px;
+}
+.tundra .dijitTabContainerTop-dijitContentPane,
+.tundra .dijitTabContainerLeft-dijitContentPane,
+.tundra .dijitTabContainerBottom-dijitContentPane,
+.tundra .dijitTabContainerRight-dijitContentPane,
+.tundra .dijitAccordionContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
+.tundra .dijitSplitContainer-dijitContentPane,
+.tundra .dijitBorderContainer-dijitContentPane {
+ background-color: #fff;
+ padding: 5px;
+}
diff --git a/js/dojo/dijit/themes/tundra/layout/SplitContainer.css b/js/dojo/dijit/themes/tundra/layout/SplitContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/SplitContainer.css
@@ -0,0 +1,31 @@
+.tundra .dijitSplitContainerSizerH {
+ background:url("../images/splitContainerSizerV.png") repeat-y #fff;
+ border:0;
+ border-left:1px solid #bfbfbf;
+ border-right:1px solid #bfbfbf;
+ width:7px;
+}
+.tundra .dijitSplitContainerSizerH .thumb {
+ background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
+ left:1px;
+ width:3px;
+ height:19px;
+ overflow: hidden;
+}
+.tundra .dijitSplitContainerSizerV {
+ background:url("../images/splitContainerSizerH.png") repeat-x #fff;
+ border:0;
+ border-top:1px solid #bfbfbf;
+ border-bottom:1px solid #bfbfbf;
+ height:7px;
+}
+.tundra .dijitSplitContainerSizerV .thumb {
+ background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
+ top:1px;
+ width:19px;
+ height:3px;
+ overflow: hidden;
+}
+.tundra .dijitSplitter {
+ border-color: #bfbfbf;
+}
diff --git a/js/dojo/dijit/themes/tundra/layout/TabContainer.css b/js/dojo/dijit/themes/tundra/layout/TabContainer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/TabContainer.css
@@ -0,0 +1,263 @@
+
+.tundra .dijitTabPaneWrapper {
+ background:#fff;
+ border:1px solid #ccc;
+ margin: 0;
+ padding: 0;
+}
+.tundra .dijitTab {
+ line-height:normal;
+ margin-right:4px;
+ padding:0px;
+ border:1px solid #ccc;
+ background:#e2e2e2 url("../images/tabEnabled.png") repeat-x;
+}
+.tundra .dijitTabInnerDiv {
+ padding:2px 8px 2px 9px;
+}
+.tundra .dijitTabSpacer {
+ display: none;
+}
+.tundra .dijitTabContainer .tabStripRBtn {
+ margin-right: 20px;
+}
+.tundra .dijitTabContainer .tabStripLBtn {
+ margin-left: 20px;
+}
+.tundra .nowrapTabStrip .dijitTab {
+ top: 2px;
+}
+.tundra .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+ top: 0px;
+ bottom: 2px;
+}
+.tundra .dijitTabContainer .tabStripMenuButton-Hover {
+ cursor: pointer;
+}
+.tundra .dijitTabChecked {
+
+ background-color:#fff;
+ border-color: #ccc;
+ background-image:none;
+}
+.tundra .dijitTabHover {
+ color: #243C5F;
+ border-top-color:#92a0b3;
+ border-left-color:#92a0b3;
+ border-right-color:#92a0b3;
+ border-bottom-color:#92a0b3;
+ background:#e2e2e2 url("../images/tabHover.gif") repeat-x;
+}
+.tundra .dijitTabContainerTop .dijitTabHover {
+ border-bottom-color:#ccc;
+}
+.tundra .dijitTabContainerBottom .dijitTabHover {
+ border-top-color:#ccc;
+}
+.tundra .dijitTabContainerLeft .dijitTabHover {
+ border-right-color:#ccc;
+}
+.tundra .dijitTabContainerRight .dijitTabHover {
+ border-left-color:#ccc;
+}
+.tundra .dijitTabContainer .dijitTabCheckedHover {
+ color: inherit;
+ border:1px solid #ccc;
+ background:#fff;
+}
+.tundra .dijitTab .dijitClosable .closeImage {
+ background: url("../images/tabClose.png") no-repeat right top;
+ width: 12px;
+ height: 12px;
+}
+.tundra .dijitTab .tabLabel {
+
+ min-height: 12px;
+ display: inline-block;
+}
+.tundra .dijitTabContainerNested .dijitTabListWrapper {
+ height: auto;
+}
+.tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {
+ border-bottom: 1px solid #CCC;
+}
+.tundra .dijitTabContainerTabListNested .dijitTab {
+ background: none;
+ border: none;
+ top: 0px;
+}
+.tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+}
+.tundra .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+ text-decoration: underline;
+}
+.tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {
+ text-decoration: underline;
+ font-weight: bold;
+
+}
+.tundra .dijitTabContainer .dijitTabPaneWrapperNested {
+ border: none;
+}
+.tundra .dijitTab .closeImage {
+ background-image : url("../images/tabClose.png");
+}
+.dj_ie6 .tundra .dijitTab .closeImage {
+ background-image : url("../images/tabClose.gif");
+}
+.tundra .dijitTab .closeButton-hover .closeImage {
+ background-image : url("../images/tabCloseHover.png");
+}
+.dj_ie6 .tundra .dijitTab .closeButton-hover .closeImage {
+ background-image : url("../images/tabCloseHover.gif");
+}
+.tundra .dijitTabContainerTop-tabs {
+ margin-bottom: 0px;
+ border-color: #cccccc;
+ padding-left: 3px;
+ background-position: bottom;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTab {
+ top: 0px;
+ margin-bottom: -1px;
+}
+.tundra .dijitTabContainerTop-container {
+ border-top: none;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTabChecked {
+ border-bottom-color:white;
+}
+.tundra .dijitTabContainerTop-tabs,
+.tundra .dijitTabContainerBottom-tabs {
+ padding-left: 3px;
+ padding-right: 3px;
+}
+.tundra .dijitTabContainerTopStrip {
+ border-top: 1px solid #CCC;
+ border-right: 1px solid #CCC;
+ border-left: 1px solid #CCC;
+ padding-top: 2px;
+ background: #f2f2f2;
+}
+.tundra .dijitTabContainerTopNone {
+ padding-top: 0px;
+}
+.tundra .dijitTabContainerBottom-tabs {
+ margin-top: 0px;
+ border-color: #cccccc;
+ background-position: top;
+ padding-left: 3px;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTab {
+ bottom: 0px;
+ margin-top: -1px;
+}
+.tundra .dijitTabContainerBottom-container {
+ border-bottom: none;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTabChecked {
+ border-top-color:white;
+}
+.tundra .dijitTabContainerBottomStrip {
+ padding-bottom: 2px;
+ border: 1px solid #ccc;
+ background: #f2f2f2;
+ border-top: none;
+}
+.tundra .dijitTabContainerRight-tabs {
+ border-color: #ccc;
+ height: 100%;
+ padding-top: 3px;
+}
+.tundra .dijitTabContainerRightStrip {
+ margin-left: -1px;
+}
+.tundra .dijitTabContainerRight-container {
+ border-right: none;
+}
+.tundra .dijitTabContainerRight-tabs .dijitTabChecked {
+ border-left-color:white;
+}
+.tundra .dijitTabContainerRightStrip {
+ padding-right: 2px;
+ border: 1px solid #ccc;
+}
+.tundra .dijitTabContainerRightStrip {
+ background: #f2f2f2;
+}
+.tundra .dijitTabContainerLeft-tabs {
+ border-color: #ccc;
+ padding-top: 3px;
+ height: 100%;
+}
+.tundra .dijitTabContainerLeft .dijitTabListWrapper {
+}
+.tundra .dijitTabContainerLeft-container {
+ border-left: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabChecked {
+ border-right-color:white;
+}
+.tundra .dijitTabContainerLeftStrip {
+ padding-left: 2px;
+ border: 1px solid #ccc;
+ background: #f2f2f2;
+ border-right: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTab,
+.tundra .dijitTabContainerRight-tabs .dijitTab {
+ margin-right:0px;
+ margin-bottom:4px;
+}
+.tundra .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+ border-left: 0px solid #ccc;
+ border-top: 0px solid #ccc;
+ border-right: 0px solid #ccc;
+ padding-top: 0px;
+ padding-left: 0px;
+}
+.tundra .dijitTabContainer .tabStripButton {
+ margin-right: 0;
+ padding-top: 2px;
+ z-index: 12;
+}
+.tundra .dijitTabContainerBottom .tabStripButton {
+ padding-top: 2px;
+}
+.tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+ padding-bottom: 3px;
+ padding-top: 1px;
+}
+.tundra .tabStripButton .dijitTabInnerDiv {
+ padding: 3px 2px 4px 2px;
+}
+.dj_ie6 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStripButton .dijitTabInnerDiv {
+ padding-bottom: 5px;
+}
+.dj_ie6 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+ padding-bottom: 4px;
+}
+.tundra .dijitTabContainer .tabStripButton {
+
+ width: 21px;
+}
+.tundra .dijitTabContainer .tabStripButton img {
+ height: 14px;
+ background: url(../images/spriteRoundedIconsSmall.png) no-repeat;
+}
+.dj_ie6 .tundra .dijitTabContainer .tabStripButton img {
+ background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.tundra .dijitTabContainer .tabStripMenuButton img {
+ background-position: -15px top;
+}
+.tundra .dijitTabContainer .tabStripSlideButtonLeft img {
+ background-position: 0px top;
+}
+.tundra .dijitTabContainer .tabStripSlideButtonRight img {
+ background-position: -30px top;
+}
diff --git a/js/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css b/js/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css
@@ -0,0 +1,31 @@
+.dijitRtl .tundra .dijitTab {
+ -moz-box-orient:horizontal;
+ text-align: right;
+}
+.dijitRtl .tundra .dijitTabInnerDiv {
+ padding:2px 9px 2px 8px;
+}
+.dijitRtl .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+ padding-bottom: 3px;
+ padding-top: 1px;
+}
+.dijitRtl .tundra .tabStripButton .dijitTabInnerDiv {
+ padding: 3px 2px 4px 2px;
+}
+.dijitRtl .tundra .dijitTabPaneWrapper {
+ #zoom: 1;
+}
+.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
+ margin-left: 1px !important;
+}
+.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
+ margin-right: 1px !important;
+}
+.dijitRtl .tundra .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .tundra .dijitTabContainerRight-tabs .dijitTab {
+ margin-left:0px;
+}
+.dj_ie-rtl .tundra .dijitTab .dijitTabInnerDiv {
+
+ width : 0.1% !important;
+}
diff --git a/js/dojo/dijit/tree/ForestStoreModel.js b/js/dojo/dijit/tree/ForestStoreModel.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/ForestStoreModel.js
@@ -0,0 +1,83 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){
+dojo._hasResource["dijit.tree.ForestStoreModel"]=true;
+dojo.provide("dijit.tree.ForestStoreModel");
+dojo.require("dijit.tree.TreeStoreModel");
+dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_1){
+this.root={store:this,root:true,id:_1.rootId,label:_1.rootLabel,children:_1.rootChildren};
+},mayHaveChildren:function(_2){
+return _2===this.root||this.inherited(arguments);
+},getChildren:function(_3,_4,_5){
+if(_3===this.root){
+if(this.root.children){
+_4(this.root.children);
+}else{
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_6){
+this.root.children=_6;
+_4(_6);
+}),onError:_5});
+}
+}else{
+this.inherited(arguments);
+}
+},isItem:function(_7){
+return (_7===this.root)?true:this.inherited(arguments);
+},fetchItemByIdentity:function(_8){
+if(_8.identity==this.root.id){
+var _9=_8.scope?_8.scope:dojo.global;
+if(_8.onItem){
+_8.onItem.call(_9,this.root);
+}
+}else{
+this.inherited(arguments);
+}
+},getIdentity:function(_a){
+return (_a===this.root)?this.root.id:this.inherited(arguments);
+},getLabel:function(_b){
+return (_b===this.root)?this.root.label:this.inherited(arguments);
+},newItem:function(_c,_d,_e){
+if(_d===this.root){
+this.onNewRootItem(_c);
+return this.store.newItem(_c);
+}else{
+return this.inherited(arguments);
+}
+},onNewRootItem:function(_f){
+},pasteItem:function(_10,_11,_12,_13,_14){
+if(_11===this.root){
+if(!_13){
+this.onLeaveRoot(_10);
+}
+}
+dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_10,_11===this.root?null:_11,_12===this.root?null:_12,_13,_14);
+if(_12===this.root){
+this.onAddToRoot(_10);
+}
+},onAddToRoot:function(_15){
+},onLeaveRoot:function(_16){
+},_requeryTop:function(){
+var _17=this.root.children||[];
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_18){
+this.root.children=_18;
+if(_17.length!=_18.length||dojo.some(_17,function(_19,idx){
+return _18[idx]!=_19;
+})){
+this.onChildrenChange(this.root,_18);
+}
+})});
+},onNewItem:function(_1a,_1b){
+this._requeryTop();
+this.inherited(arguments);
+},onDeleteItem:function(_1c){
+if(dojo.indexOf(this.root.children,_1c)!=-1){
+this._requeryTop();
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dijit/tree/TreeStoreModel.js b/js/dojo/dijit/tree/TreeStoreModel.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/TreeStoreModel.js
@@ -0,0 +1,145 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){
+dojo._hasResource["dijit.tree.TreeStoreModel"]=true;
+dojo.provide("dijit.tree.TreeStoreModel");
+dojo.declare("dijit.tree.TreeStoreModel",null,{store:null,childrenAttrs:["children"],newItemIdAttr:"id",labelAttr:"",root:null,query:null,deferItemLoadingUntilExpand:false,constructor:function(_1){
+dojo.mixin(this,_1);
+this.connects=[];
+var _2=this.store;
+if(!_2.getFeatures()["dojo.data.api.Identity"]){
+throw new Error("dijit.Tree: store must support dojo.data.Identity");
+}
+if(_2.getFeatures()["dojo.data.api.Notification"]){
+this.connects=this.connects.concat([dojo.connect(_2,"onNew",this,"onNewItem"),dojo.connect(_2,"onDelete",this,"onDeleteItem"),dojo.connect(_2,"onSet",this,"onSetItem")]);
+}
+},destroy:function(){
+dojo.forEach(this.connects,dojo.disconnect);
+},getRoot:function(_3,_4){
+if(this.root){
+_3(this.root);
+}else{
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_5){
+if(_5.length!=1){
+throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_5.length+" items, but must return exactly one item");
+}
+this.root=_5[0];
+_3(this.root);
+}),onError:_4});
+}
+},mayHaveChildren:function(_6){
+return dojo.some(this.childrenAttrs,function(_7){
+return this.store.hasAttribute(_6,_7);
+},this);
+},getChildren:function(_8,_9,_a){
+var _b=this.store;
+if(!_b.isItemLoaded(_8)){
+var _c=dojo.hitch(this,arguments.callee);
+_b.loadItem({item:_8,onItem:function(_d){
+_c(_d,_9,_a);
+},onError:_a});
+return;
+}
+var _e=[];
+for(var i=0;i<this.childrenAttrs.length;i++){
+var _f=_b.getValues(_8,this.childrenAttrs[i]);
+_e=_e.concat(_f);
+}
+var _10=0;
+if(!this.deferItemLoadingUntilExpand){
+dojo.forEach(_e,function(_11){
+if(!_b.isItemLoaded(_11)){
+_10++;
+}
+});
+}
+if(_10==0){
+_9(_e);
+}else{
+var _12=function _12(_13){
+if(--_10==0){
+_9(_e);
+}
+};
+dojo.forEach(_e,function(_14){
+if(!_b.isItemLoaded(_14)){
+_b.loadItem({item:_14,onItem:_12,onError:_a});
+}
+});
+}
+},isItem:function(_15){
+return this.store.isItem(_15);
+},fetchItemByIdentity:function(_16){
+this.store.fetchItemByIdentity(_16);
+},getIdentity:function(_17){
+return this.store.getIdentity(_17);
+},getLabel:function(_18){
+if(this.labelAttr){
+return this.store.getValue(_18,this.labelAttr);
+}else{
+return this.store.getLabel(_18);
+}
+},newItem:function(_19,_1a,_1b){
+var _1c={parent:_1a,attribute:this.childrenAttrs[0],insertIndex:_1b};
+if(this.newItemIdAttr&&_19[this.newItemIdAttr]){
+this.fetchItemByIdentity({identity:_19[this.newItemIdAttr],scope:this,onItem:function(_1d){
+if(_1d){
+this.pasteItem(_1d,null,_1a,true,_1b);
+}else{
+this.store.newItem(_19,_1c);
+}
+}});
+}else{
+this.store.newItem(_19,_1c);
+}
+},pasteItem:function(_1e,_1f,_20,_21,_22){
+var _23=this.store,_24=this.childrenAttrs[0];
+if(_1f){
+dojo.forEach(this.childrenAttrs,function(_25){
+if(_23.containsValue(_1f,_25,_1e)){
+if(!_21){
+var _26=dojo.filter(_23.getValues(_1f,_25),function(x){
+return x!=_1e;
+});
+_23.setValues(_1f,_25,_26);
+}
+_24=_25;
+}
+});
+}
+if(_20){
+if(typeof _22=="number"){
+var _27=_23.getValues(_20,_24);
+_27.splice(_22,0,_1e);
+_23.setValues(_20,_24,_27);
+}else{
+_23.setValues(_20,_24,_23.getValues(_20,_24).concat(_1e));
+}
+}
+},onChange:function(_28){
+},onChildrenChange:function(_29,_2a){
+},onDelete:function(_2b,_2c){
+},onNewItem:function(_2d,_2e){
+if(!_2e){
+return;
+}
+this.getChildren(_2e.item,dojo.hitch(this,function(_2f){
+this.onChildrenChange(_2e.item,_2f);
+}));
+},onDeleteItem:function(_30){
+this.onDelete(_30);
+},onSetItem:function(_31,_32,_33,_34){
+if(dojo.indexOf(this.childrenAttrs,_32)!=-1){
+this.getChildren(_31,dojo.hitch(this,function(_35){
+this.onChildrenChange(_31,_35);
+}));
+}else{
+this.onChange(_31);
+}
+}});
+}
diff --git a/js/dojo/dijit/tree/_dndContainer.js b/js/dojo/dijit/tree/_dndContainer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/_dndContainer.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree._dndContainer"]){
+dojo._hasResource["dijit.tree._dndContainer"]=true;
+dojo.provide("dijit.tree._dndContainer");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.Container");
+dojo.declare("dijit.tree._dndContainer",null,{constructor:function(_1,_2){
+this.tree=_1;
+this.node=_1.domNode;
+dojo.mixin(this,_2);
+this.map={};
+this.current=null;
+this.containerState="";
+dojo.addClass(this.node,"dojoDndContainer");
+this.events=[dojo.connect(this.node,"onmouseenter",this,"onOverEvent"),dojo.connect(this.node,"onmouseleave",this,"onOutEvent"),dojo.connect(this.tree,"_onNodeMouseEnter",this,"onMouseOver"),dojo.connect(this.tree,"_onNodeMouseLeave",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",dojo,"stopEvent"),dojo.connect(this.node,"onselectstart",dojo,"stopEvent")];
+},getItem:function(_3){
+var _4=this.selection[_3],_5={data:dijit.getEnclosingWidget(_4),type:["treeNode"]};
+return _5;
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+this.node=this.parent=null;
+},onMouseOver:function(_6,_7){
+this.current=_6.rowNode;
+this.currentWidget=_6;
+},onMouseOut:function(_8,_9){
+this.current=null;
+this.currentWidget=null;
+},_changeState:function(_a,_b){
+var _c="dojoDnd"+_a;
+var _d=_a.toLowerCase()+"State";
+dojo.removeClass(this.node,_c+this[_d]);
+dojo.addClass(this.node,_c+_b);
+this[_d]=_b;
+},_addItemClass:function(_e,_f){
+dojo.addClass(_e,"dojoDndItem"+_f);
+},_removeItemClass:function(_10,_11){
+dojo.removeClass(_10,"dojoDndItem"+_11);
+},onOverEvent:function(){
+this._changeState("Container","Over");
+},onOutEvent:function(){
+this._changeState("Container","");
+}});
+}
diff --git a/js/dojo/dijit/tree/_dndSelector.js b/js/dojo/dijit/tree/_dndSelector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/_dndSelector.js
@@ -0,0 +1,125 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree._dndSelector"]){
+dojo._hasResource["dijit.tree._dndSelector"]=true;
+dojo.provide("dijit.tree._dndSelector");
+dojo.require("dojo.dnd.common");
+dojo.require("dijit.tree._dndContainer");
+dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(_1,_2){
+this.selection={};
+this.anchor=null;
+this.simpleSelection=false;
+this.events.push(dojo.connect(this.tree.domNode,"onmousedown",this,"onMouseDown"),dojo.connect(this.tree.domNode,"onmouseup",this,"onMouseUp"),dojo.connect(this.tree.domNode,"onmousemove",this,"onMouseMove"));
+},singular:false,getSelectedNodes:function(){
+return this.selection;
+},selectNone:function(){
+return this._removeSelection()._removeAnchor();
+},destroy:function(){
+this.inherited(arguments);
+this.selection=this.anchor=null;
+},onMouseDown:function(e){
+if(!this.current){
+return;
+}
+if(e.button==dojo.mouseButtons.RIGHT){
+return;
+}
+var _3=dijit.getEnclosingWidget(this.current),id=_3.id+"-dnd";
+if(!dojo.hasAttr(this.current,"id")){
+dojo.attr(this.current,"id",id);
+}
+if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){
+this.simpleSelection=true;
+dojo.stopEvent(e);
+return;
+}
+if(this.singular){
+if(this.anchor==this.current){
+if(dojo.isCopyKey(e)){
+this.selectNone();
+}
+}else{
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+}else{
+if(!this.singular&&e.shiftKey){
+if(dojo.isCopyKey(e)){
+}else{
+}
+}else{
+if(dojo.isCopyKey(e)){
+if(this.anchor==this.current){
+delete this.selection[this.anchor.id];
+this._removeAnchor();
+}else{
+if(this.current.id in this.selection){
+this._removeItemClass(this.current,"Selected");
+delete this.selection[this.current.id];
+}else{
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this._addItemClass(this.anchor,"Selected");
+}
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+}
+}else{
+if(!(id in this.selection)){
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[id]=this.current;
+}
+}
+}
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+if(!this.simpleSelection){
+return;
+}
+this.simpleSelection=false;
+this.selectNone();
+if(this.current){
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+},onMouseMove:function(e){
+this.simpleSelection=false;
+},_removeSelection:function(){
+var e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+var _4=dojo.byId(i);
+if(_4){
+this._removeItemClass(_4,"Selected");
+}
+}
+this.selection={};
+return this;
+},_removeAnchor:function(){
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this.anchor=null;
+}
+return this;
+},forInSelectedItems:function(f,o){
+o=o||dojo.global;
+for(var id in this.selection){
+f.call(o,this.getItem(id),id,this);
+}
+}});
+}
diff --git a/js/dojo/dijit/tree/dndSource.js b/js/dojo/dijit/tree/dndSource.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/dndSource.js
@@ -0,0 +1,240 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.dndSource"]){
+dojo._hasResource["dijit.tree.dndSource"]=true;
+dojo.provide("dijit.tree.dndSource");
+dojo.require("dijit.tree._dndSelector");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(_1,_2){
+if(!_2){
+_2={};
+}
+dojo.mixin(this,_2);
+this.isSource=typeof _2.isSource=="undefined"?true:_2.isSource;
+var _3=_2.accept instanceof Array?_2.accept:["text","treeNode"];
+this.accept=null;
+if(_3.length){
+this.accept={};
+for(var i=0;i<_3.length;++i){
+this.accept[_3[i]]=1;
+}
+}
+this.isDragging=false;
+this.mouseDown=false;
+this.targetAnchor=null;
+this.targetBox=null;
+this.dropPosition="";
+this._lastX=0;
+this._lastY=0;
+this.sourceState="";
+if(this.isSource){
+dojo.addClass(this.node,"dojoDndSource");
+}
+this.targetState="";
+if(this.accept){
+dojo.addClass(this.node,"dojoDndTarget");
+}
+this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")];
+},checkAcceptance:function(_4,_5){
+return true;
+},copyState:function(_6){
+return this.copyOnly||_6;
+},destroy:function(){
+this.inherited("destroy",arguments);
+dojo.forEach(this.topics,dojo.unsubscribe);
+this.targetAnchor=null;
+},_onDragMouse:function(e){
+var m=dojo.dnd.manager(),_7=this.targetAnchor,_8=this.current,_9=this.currentWidget,_a=this.dropPosition;
+var _b="Over";
+if(_8&&this.betweenThreshold>0){
+if(!this.targetBox||_7!=_8){
+this.targetBox=dojo.position(_8,true);
+}
+if((e.pageY-this.targetBox.y)<=this.betweenThreshold){
+_b="Before";
+}else{
+if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){
+_b="After";
+}
+}
+}
+if(_8!=_7||_b!=_a){
+if(_7){
+this._removeItemClass(_7,_a);
+}
+if(_8){
+this._addItemClass(_8,_b);
+}
+if(!_8){
+m.canDrop(false);
+}else{
+if(_9==this.tree.rootNode&&_b!="Over"){
+m.canDrop(false);
+}else{
+if(m.source==this&&(_8.id in this.selection)){
+m.canDrop(false);
+}else{
+if(this.checkItemAcceptance(_8,m.source,_b.toLowerCase())&&!this._isParentChildDrop(m.source,_8)){
+m.canDrop(true);
+}else{
+m.canDrop(false);
+}
+}
+}
+}
+this.targetAnchor=_8;
+this.dropPosition=_b;
+}
+},onMouseMove:function(e){
+if(this.isDragging&&this.targetState=="Disabled"){
+return;
+}
+this.inherited(arguments);
+var m=dojo.dnd.manager();
+if(this.isDragging){
+this._onDragMouse(e);
+}else{
+if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>=this.dragThreshold||Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){
+var n=this.getSelectedNodes();
+var _c=[];
+for(var i in n){
+_c.push(n[i]);
+}
+if(_c.length){
+m.startDrag(this,_c,this.copyState(dojo.isCopyKey(e)));
+}
+}
+}
+},onMouseDown:function(e){
+this.mouseDown=true;
+this.mouseButton=e.button;
+this._lastX=e.pageX;
+this._lastY=e.pageY;
+this.inherited("onMouseDown",arguments);
+},onMouseUp:function(e){
+if(this.mouseDown){
+this.mouseDown=false;
+this.inherited("onMouseUp",arguments);
+}
+},onMouseOut:function(){
+this.inherited(arguments);
+this._unmarkTargetAnchor();
+},checkItemAcceptance:function(_d,_e,_f){
+return true;
+},onDndSourceOver:function(_10){
+if(this!=_10){
+this.mouseDown=false;
+this._unmarkTargetAnchor();
+}else{
+if(this.isDragging){
+var m=dojo.dnd.manager();
+m.canDrop(false);
+}
+}
+},onDndStart:function(_11,_12,_13){
+if(this.isSource){
+this._changeState("Source",this==_11?(_13?"Copied":"Moved"):"");
+}
+var _14=this.checkAcceptance(_11,_12);
+this._changeState("Target",_14?"":"Disabled");
+if(this==_11){
+dojo.dnd.manager().overSource(this);
+}
+this.isDragging=true;
+},itemCreator:function(_15,_16,_17){
+return dojo.map(_15,function(_18){
+return {"id":_18.id,"name":_18.textContent||_18.innerText||""};
+});
+},onDndDrop:function(_19,_1a,_1b){
+if(this.containerState=="Over"){
+var _1c=this.tree,_1d=_1c.model,_1e=this.targetAnchor,_1f=false;
+this.isDragging=false;
+var _20=dijit.getEnclosingWidget(_1e);
+var _21;
+var _22;
+_21=(_20&&_20.item)||_1c.item;
+if(this.dropPosition=="Before"||this.dropPosition=="After"){
+_21=(_20.getParent()&&_20.getParent().item)||_1c.item;
+_22=_20.getIndexInParent();
+if(this.dropPosition=="After"){
+_22=_20.getIndexInParent()+1;
+}
+}else{
+_21=(_20&&_20.item)||_1c.item;
+}
+var _23;
+dojo.forEach(_1a,function(_24,idx){
+var _25=_19.getItem(_24.id);
+if(dojo.indexOf(_25.type,"treeNode")!=-1){
+var _26=_25.data,_27=_26.item,_28=_26.getParent().item;
+}
+if(_19==this){
+if(typeof _22=="number"){
+if(_21==_28&&_26.getIndexInParent()<_22){
+_22-=1;
+}
+}
+_1d.pasteItem(_27,_28,_21,_1b,_22);
+}else{
+if(_1d.isItem(_27)){
+_1d.pasteItem(_27,_28,_21,_1b,_22);
+}else{
+if(!_23){
+_23=this.itemCreator(_1a,_1e,_19);
+}
+_1d.newItem(_23[idx],_21,_22);
+}
+}
+},this);
+this.tree._expandNode(_20);
+}
+this.onDndCancel();
+},onDndCancel:function(){
+this._unmarkTargetAnchor();
+this.isDragging=false;
+this.mouseDown=false;
+delete this.mouseButton;
+this._changeState("Source","");
+this._changeState("Target","");
+},onOverEvent:function(){
+this.inherited(arguments);
+dojo.dnd.manager().overSource(this);
+},onOutEvent:function(){
+this._unmarkTargetAnchor();
+var m=dojo.dnd.manager();
+if(this.isDragging){
+m.canDrop(false);
+}
+m.outSource(this);
+this.inherited(arguments);
+},_isParentChildDrop:function(_29,_2a){
+if(!_29.tree||_29.tree!=this.tree){
+return false;
+}
+var _2b=_29.tree.domNode;
+var ids={};
+for(var x in _29.selection){
+ids[_29.selection[x].parentNode.id]=true;
+}
+var _2c=_2a.parentNode;
+while(_2c!=_2b&&(!_2c.id||!ids[_2c.id])){
+_2c=_2c.parentNode;
+}
+return _2c.id&&ids[_2c.id];
+},_unmarkTargetAnchor:function(){
+if(!this.targetAnchor){
+return;
+}
+this._removeItemClass(this.targetAnchor,this.dropPosition);
+this.targetAnchor=null;
+this.targetBox=null;
+this.dropPosition=null;
+},_markDndStatus:function(_2d){
+this._changeState("Source",_2d?"Copied":"Moved");
+}});
+}
diff --git a/js/dojo/dijit/tree/model.js b/js/dojo/dijit/tree/model.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dijit/tree/model.js
@@ -0,0 +1,20 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.declare("dijit.tree.model",null,{destroy:function(){
+},getRoot:function(_1){
+},mayHaveChildren:function(_2){
+},getChildren:function(_3,_4){
+},isItem:function(_5){
+},fetchItemByIdentity:function(_6){
+},getIdentity:function(_7){
+},getLabel:function(_8){
+},newItem:function(_9,_a,_b){
+},pasteItem:function(_c,_d,_e,_f){
+},onChange:function(_10){
+},onChildrenChange:function(_11,_12){
+}});
diff --git a/js/dojo/dojo/NodeList-html.js b/js/dojo/dojo/NodeList-html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/NodeList-html.js
@@ -0,0 +1,21 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-html"]){
+dojo._hasResource["dojo.NodeList-html"]=true;
+dojo.provide("dojo.NodeList-html");
+dojo.require("dojo.html");
+dojo.extend(dojo.NodeList,{html:function(_1,_2){
+var _3=new dojo.html._ContentSetter(_2||{});
+this.forEach(function(_4){
+_3.node=_4;
+_3.set(_1);
+_3.tearDown();
+});
+return this;
+}});
+}
diff --git a/js/dojo/dojo/NodeList-manipulate.js b/js/dojo/dojo/NodeList-manipulate.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/NodeList-manipulate.js
@@ -0,0 +1,212 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-manipulate"]){
+dojo._hasResource["dojo.NodeList-manipulate"]=true;
+dojo.provide("dojo.NodeList-manipulate");
+(function(){
+function _1(_2){
+var _3="",ch=_2.childNodes;
+for(var i=0,n;n=ch[i];i++){
+if(n.nodeType!=8){
+if(n.nodeType==1){
+_3+=_1(n);
+}else{
+_3+=n.nodeValue;
+}
+}
+}
+return _3;
+};
+function _4(_5){
+while(_5.childNodes[0]&&_5.childNodes[0].nodeType==1){
+_5=_5.childNodes[0];
+}
+return _5;
+};
+function _6(_7,_8){
+if(typeof _7=="string"){
+_7=dojo._toDom(_7,(_8&&_8.ownerDocument));
+if(_7.nodeType==11){
+_7=_7.childNodes[0];
+}
+}else{
+if(_7.nodeType==1&&_7.parentNode){
+_7=_7.cloneNode(false);
+}
+}
+return _7;
+};
+dojo.extend(dojo.NodeList,{_placeMultiple:function(_9,_a){
+var _b=typeof _9=="string"||_9.nodeType?dojo.query(_9):_9;
+var _c=[];
+for(var i=0;i<_b.length;i++){
+var _d=_b[i];
+var _e=this.length;
+for(var j=_e-1,_f;_f=this[j];j--){
+if(i>0){
+_f=this._cloneNode(_f);
+_c.unshift(_f);
+}
+if(j==_e-1){
+dojo.place(_f,_d,_a);
+}else{
+_d.parentNode.insertBefore(_f,_d);
+}
+_d=_f;
+}
+}
+if(_c.length){
+_c.unshift(0);
+_c.unshift(this.length-1);
+Array.prototype.splice.apply(this,_c);
+}
+return this;
+},innerHTML:function(_10){
+if(arguments.length){
+return this.addContent(_10,"only");
+}else{
+return this[0].innerHTML;
+}
+},text:function(_11){
+if(arguments.length){
+for(var i=0,_12;_12=this[i];i++){
+if(_12.nodeType==1){
+dojo.empty(_12);
+_12.appendChild(_12.ownerDocument.createTextNode(_11));
+}
+}
+return this;
+}else{
+var _13="";
+for(i=0;_12=this[i];i++){
+_13+=_1(_12);
+}
+return _13;
+}
+},val:function(_14){
+if(arguments.length){
+var _15=dojo.isArray(_14);
+for(var _16=0,_17;_17=this[_16];_16++){
+var _18=_17.nodeName.toUpperCase();
+var _19=_17.type;
+var _1a=_15?_14[_16]:_14;
+if(_18=="SELECT"){
+var _1b=_17.options;
+for(var i=0;i<_1b.length;i++){
+var opt=_1b[i];
+if(_17.multiple){
+opt.selected=(dojo.indexOf(_14,opt.value)!=-1);
+}else{
+opt.selected=(opt.value==_1a);
+}
+}
+}else{
+if(_19=="checkbox"||_19=="radio"){
+_17.checked=(_17.value==_1a);
+}else{
+_17.value=_1a;
+}
+}
+}
+return this;
+}else{
+_17=this[0];
+if(!_17||_17.nodeType!=1){
+return undefined;
+}
+_14=_17.value||"";
+if(_17.nodeName.toUpperCase()=="SELECT"&&_17.multiple){
+_14=[];
+_1b=_17.options;
+for(i=0;i<_1b.length;i++){
+opt=_1b[i];
+if(opt.selected){
+_14.push(opt.value);
+}
+}
+if(!_14.length){
+_14=null;
+}
+}
+return _14;
+}
+},append:function(_1c){
+return this.addContent(_1c,"last");
+},appendTo:function(_1d){
+return this._placeMultiple(_1d,"last");
+},prepend:function(_1e){
+return this.addContent(_1e,"first");
+},prependTo:function(_1f){
+return this._placeMultiple(_1f,"first");
+},after:function(_20){
+return this.addContent(_20,"after");
+},insertAfter:function(_21){
+return this._placeMultiple(_21,"after");
+},before:function(_22){
+return this.addContent(_22,"before");
+},insertBefore:function(_23){
+return this._placeMultiple(_23,"before");
+},remove:dojo.NodeList.prototype.orphan,wrap:function(_24){
+if(this[0]){
+_24=_6(_24,this[0]);
+for(var i=0,_25;_25=this[i];i++){
+var _26=this._cloneNode(_24);
+if(_25.parentNode){
+_25.parentNode.replaceChild(_26,_25);
+}
+var _27=_4(_26);
+_27.appendChild(_25);
+}
+}
+return this;
+},wrapAll:function(_28){
+if(this[0]){
+_28=_6(_28,this[0]);
+this[0].parentNode.replaceChild(_28,this[0]);
+var _29=_4(_28);
+for(var i=0,_2a;_2a=this[i];i++){
+_29.appendChild(_2a);
+}
+}
+return this;
+},wrapInner:function(_2b){
+if(this[0]){
+_2b=_6(_2b,this[0]);
+for(var i=0;i<this.length;i++){
+var _2c=this._cloneNode(_2b);
+this._wrap(dojo._toArray(this[i].childNodes),null,this._NodeListCtor).wrapAll(_2c);
+}
+}
+return this;
+},replaceWith:function(_2d){
+_2d=this._normalize(_2d,this[0]);
+for(var i=0,_2e;_2e=this[i];i++){
+this._place(_2d,_2e,"before",i>0);
+_2e.parentNode.removeChild(_2e);
+}
+return this;
+},replaceAll:function(_2f){
+var nl=dojo.query(_2f);
+var _30=this._normalize(this,this[0]);
+for(var i=0,_31;_31=nl[i];i++){
+this._place(_30,_31,"before",i>0);
+_31.parentNode.removeChild(_31);
+}
+return this;
+},clone:function(){
+var ary=[];
+for(var i=0;i<this.length;i++){
+ary.push(this._cloneNode(this[i]));
+}
+return this._wrap(ary,this,this._NodeListCtor);
+}});
+if(!dojo.NodeList.prototype.html){
+dojo.NodeList.prototype.html=dojo.NodeList.prototype.innerHTML;
+}
+})();
+}
diff --git a/js/dojo/dojo/NodeList-traverse.js b/js/dojo/dojo/NodeList-traverse.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/NodeList-traverse.js
@@ -0,0 +1,131 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-traverse"]){
+dojo._hasResource["dojo.NodeList-traverse"]=true;
+dojo.provide("dojo.NodeList-traverse");
+dojo.extend(dojo.NodeList,{_buildArrayFromCallback:function(_1){
+var _2=[];
+for(var i=0;i<this.length;i++){
+var _3=_1.call(this[i],this[i],_2);
+if(_3){
+_2=_2.concat(_3);
+}
+}
+return _2;
+},_filterQueryResult:function(_4,_5){
+var _6=dojo.filter(_4,function(_7){
+return dojo.query(_5,_7.parentNode).indexOf(_7)!=-1;
+});
+var _8=this._wrap(_6);
+return _8;
+},_getUniqueAsNodeList:function(_9){
+var _a=[];
+for(var i=0,_b;_b=_9[i];i++){
+if(_b.nodeType==1&&dojo.indexOf(_a,_b)==-1){
+_a.push(_b);
+}
+}
+return this._wrap(_a,null,this._NodeListCtor);
+},_getUniqueNodeListWithParent:function(_c,_d){
+var _e=this._getUniqueAsNodeList(_c);
+_e=(_d?this._filterQueryResult(_e,_d):_e);
+return _e._stash(this);
+},_getRelatedUniqueNodes:function(_f,_10){
+return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(_10),_f);
+},children:function(_11){
+return this._getRelatedUniqueNodes(_11,function(_12,ary){
+return dojo._toArray(_12.childNodes);
+});
+},closest:function(_13){
+var _14=this;
+return this._getRelatedUniqueNodes(_13,function(_15,ary){
+do{
+if(_14._filterQueryResult([_15],_13).length){
+return _15;
+}
+}while((_15=_15.parentNode)&&_15.nodeType==1);
+return null;
+});
+},parent:function(_16){
+return this._getRelatedUniqueNodes(_16,function(_17,ary){
+return _17.parentNode;
+});
+},parents:function(_18){
+return this._getRelatedUniqueNodes(_18,function(_19,ary){
+var _1a=[];
+while(_19.parentNode){
+_19=_19.parentNode;
+_1a.push(_19);
+}
+return _1a;
+});
+},siblings:function(_1b){
+return this._getRelatedUniqueNodes(_1b,function(_1c,ary){
+var _1d=[];
+var _1e=(_1c.parentNode&&_1c.parentNode.childNodes);
+for(var i=0;i<_1e.length;i++){
+if(_1e[i]!=_1c){
+_1d.push(_1e[i]);
+}
+}
+return _1d;
+});
+},next:function(_1f){
+return this._getRelatedUniqueNodes(_1f,function(_20,ary){
+var _21=_20.nextSibling;
+while(_21&&_21.nodeType!=1){
+_21=_21.nextSibling;
+}
+return _21;
+});
+},nextAll:function(_22){
+return this._getRelatedUniqueNodes(_22,function(_23,ary){
+var _24=[];
+var _25=_23;
+while((_25=_25.nextSibling)){
+if(_25.nodeType==1){
+_24.push(_25);
+}
+}
+return _24;
+});
+},prev:function(_26){
+return this._getRelatedUniqueNodes(_26,function(_27,ary){
+var _28=_27.previousSibling;
+while(_28&&_28.nodeType!=1){
+_28=_28.previousSibling;
+}
+return _28;
+});
+},prevAll:function(_29){
+return this._getRelatedUniqueNodes(_29,function(_2a,ary){
+var _2b=[];
+var _2c=_2a;
+while((_2c=_2c.previousSibling)){
+if(_2c.nodeType==1){
+_2b.push(_2c);
+}
+}
+return _2b;
+});
+},andSelf:function(){
+return this.concat(this._parent);
+},first:function(){
+return this._wrap(((this[0]&&[this[0]])||[]),this);
+},last:function(){
+return this._wrap((this.length?[this[this.length-1]]:[]),this);
+},even:function(){
+return this.filter(function(_2d,i){
+return i%2!=0;
+});
+},odd:function(){
+return this.filter(function(_2e,i){
+return i%2==0;
+});
+}});
+}
diff --git a/js/dojo/dojo/_base/_loader/hostenv_ff_ext.js b/js/dojo/dojo/_base/_loader/hostenv_ff_ext.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/_base/_loader/hostenv_ff_ext.js
@@ -0,0 +1,175 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(typeof window!="undefined"){
+dojo.isBrowser=true;
+dojo._name="browser";
+(function(){
+var d=dojo;
+d.baseUrl=d.config.baseUrl;
+var n=navigator;
+var _1=n.userAgent;
+var _2=n.appVersion;
+var tv=parseFloat(_2);
+d.isMozilla=d.isMoz=tv;
+if(d.isMoz){
+d.isFF=parseFloat(_1.split("Firefox/")[1])||undefined;
+}
+d.isQuirks=document.compatMode=="BackCompat";
+d.locale=dojo.config.locale||n.language.toLowerCase();
+d._xhrObj=function(){
+return new XMLHttpRequest();
+};
+var _3=d._loadUri;
+d._loadUri=function(_4,cb){
+var _5=["file:","chrome:","resource:"].some(function(_6){
+return String(_4).indexOf(_6)==0;
+});
+if(_5){
+var l=Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
+var _7=l.loadSubScript(_4,d.global);
+if(cb){
+cb(_7);
+}
+return true;
+}else{
+return _3.apply(d,arguments);
+}
+};
+d._isDocumentOk=function(_8){
+var _9=_8.status||0;
+return (_9>=200&&_9<300)||_9==304||_9==1223||(!_9&&(location.protocol=="file:"||location.protocol=="chrome:"));
+};
+var _a=false;
+d._getText=function(_b,_c){
+var _d=d._xhrObj();
+if(!_a&&dojo._Url){
+_b=(new dojo._Url(_b)).toString();
+}
+if(d.config.cacheBust){
+_b+="";
+_b+=(_b.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");
+}
+var _e=["file:","chrome:","resource:"].some(function(_f){
+return String(_b).indexOf(_f)==0;
+});
+if(_e){
+var _10=Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+var _11=Components.classes["@mozilla.org/scriptableinputstream;1"].getService(Components.interfaces.nsIScriptableInputStream);
+var _12=_10.newChannel(_b,null,null);
+var _13=_12.open();
+_11.init(_13);
+var str=_11.read(_13.available());
+_11.close();
+_13.close();
+return str;
+}else{
+_d.open("GET",_b,false);
+try{
+_d.send(null);
+if(!d._isDocumentOk(_d)){
+var err=Error("Unable to load "+_b+" status:"+_d.status);
+err.status=_d.status;
+err.responseText=_d.responseText;
+throw err;
+}
+}
+catch(e){
+if(_c){
+return null;
+}
+throw e;
+}
+return _d.responseText;
+}
+};
+d._windowUnloaders=[];
+d.windowUnloaded=function(){
+var mll=d._windowUnloaders;
+while(mll.length){
+(mll.pop())();
+}
+};
+d.addOnWindowUnload=function(obj,_14){
+d._onto(d._windowUnloaders,obj,_14);
+};
+var _15=[];
+var _16=null;
+dojo._defaultContext=[window,document];
+dojo.pushContext=function(g,d){
+var old=[dojo.global,dojo.doc];
+_15.push(old);
+var n;
+if(!g&&!d){
+n=dojo._defaultContext;
+}else{
+n=[g,d];
+if(!d&&dojo.isString(g)){
+var t=document.getElementById(g);
+if(t.contentDocument){
+n=[t.contentWindow,t.contentDocument];
+}
+}
+}
+_16=n;
+dojo.setContext.apply(dojo,n);
+return old;
+};
+dojo.popContext=function(){
+var oc=_16;
+if(!_15.length){
+return oc;
+}
+dojo.setContext.apply(dojo,_15.pop());
+return oc;
+};
+dojo._inContext=function(g,d,f){
+var a=dojo._toArray(arguments);
+f=a.pop();
+if(a.length==1){
+d=null;
+}
+dojo.pushContext(g,d);
+var r=f();
+dojo.popContext();
+return r;
+};
+})();
+dojo._initFired=false;
+dojo._loadInit=function(e){
+dojo._initFired=true;
+var _17=(e&&e.type)?e.type.toLowerCase():"load";
+if(arguments.callee.initialized||(_17!="domcontentloaded"&&_17!="load")){
+return;
+}
+arguments.callee.initialized=true;
+if(dojo._inFlightCount==0){
+dojo._modulesLoaded();
+}
+};
+if(!dojo.config.afterOnLoad){
+window.addEventListener("DOMContentLoaded",function(e){
+dojo._loadInit(e);
+},false);
+}
+}
+(function(){
+var mp=dojo.config["modulePaths"];
+if(mp){
+for(var _18 in mp){
+dojo.registerModulePath(_18,mp[_18]);
+}
+}
+})();
+if(dojo.config.isDebug){
+console.log=function(m){
+var s=Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
+s.logStringMessage(m);
+};
+console.debug=function(){
+};
+}
diff --git a/js/dojo/dojo/_base/browser.js b/js/dojo/dojo/_base/browser.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/_base/browser.js
@@ -0,0 +1,22 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.browser"]){
+dojo._hasResource["dojo._base.browser"]=true;
+dojo.provide("dojo._base.browser");
+dojo.require("dojo._base.window");
+dojo.require("dojo._base.connect");
+dojo.require("dojo._base.event");
+dojo.require("dojo._base.html");
+dojo.require("dojo._base.NodeList");
+dojo.require("dojo._base.query");
+dojo.require("dojo._base.xhr");
+dojo.require("dojo._base.fx");
+dojo.forEach(dojo.config.require,function(i){
+dojo["require"](i);
+});
+}
diff --git a/js/dojo/dojo/_base/query-sizzle.js b/js/dojo/dojo/_base/query-sizzle.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/_base/query-sizzle.js
@@ -0,0 +1,628 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.query"]){
+dojo._hasResource["dojo._base.query"]=true;
+if(typeof dojo!="undefined"){
+dojo.provide("dojo._base.query");
+dojo.require("dojo._base.NodeList");
+dojo.query=function(_1,_2,_3){
+_3=_3||dojo.NodeList;
+if(!_1){
+return new _3();
+}
+if(_1.constructor==_3){
+return _1;
+}
+if(!dojo.isString(_1)){
+return new _3(_1);
+}
+if(dojo.isString(_2)){
+_2=dojo.byId(_2);
+if(!_2){
+return new _3();
+}
+}
+return dojo.Sizzle(_1,_2,new _3());
+};
+dojo._filterQueryResult=function(_4,_5){
+return dojo.Sizzle.filter(_5,_4);
+};
+}
+(function(ns){
+var _6=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,_7=0,_8=Object.prototype.toString;
+var _9=function(_a,_b,_c,_d){
+_c=_c||[];
+_b=_b||document;
+if(_b.nodeType!==1&&_b.nodeType!==9){
+return [];
+}
+if(!_a||typeof _a!=="string"){
+return _c;
+}
+var _e=[],m,_f,_10,_11,_12,_13,_14=true;
+_6.lastIndex=0;
+while((m=_6.exec(_a))!==null){
+_e.push(m[1]);
+if(m[2]){
+_13=RegExp.rightContext;
+break;
+}
+}
+if(_e.length>1&&_15.match.POS.exec(_a)){
+if(_e.length===2&&_15.relative[_e[0]]){
+var _16="",_17;
+while((_17=_15.match.POS.exec(_a))){
+_16+=_17[0];
+_a=_a.replace(_15.match.POS,"");
+}
+_f=_9.filter(_16,_9(_a,_b));
+}else{
+_f=_15.relative[_e[0]]?[_b]:_9(_e.shift(),_b);
+while(_e.length){
+var _18=[];
+_a=_e.shift();
+if(_15.relative[_a]){
+_a+=_e.shift();
+}
+for(var i=0,l=_f.length;i<l;i++){
+_9(_a,_f[i],_18);
+}
+_f=_18;
+}
+}
+}else{
+var ret=_d?{expr:_e.pop(),set:_19(_d)}:_9.find(_e.pop(),_e.length===1&&_b.parentNode?_b.parentNode:_b);
+_f=_9.filter(ret.expr,ret.set);
+if(_e.length>0){
+_10=_19(_f);
+}else{
+_14=false;
+}
+while(_e.length){
+var cur=_e.pop(),pop=cur;
+if(!_15.relative[cur]){
+cur="";
+}else{
+pop=_e.pop();
+}
+if(pop==null){
+pop=_b;
+}
+_15.relative[cur](_10,pop);
+}
+}
+if(!_10){
+_10=_f;
+}
+if(!_10){
+throw "Syntax error, unrecognized expression: "+(cur||_a);
+}
+if(_8.call(_10)==="[object Array]"){
+if(!_14){
+_c.push.apply(_c,_10);
+}else{
+if(_b.nodeType===1){
+for(var i=0;_10[i]!=null;i++){
+if(_10[i]&&(_10[i]===true||_10[i].nodeType===1&&_1a(_b,_10[i]))){
+_c.push(_f[i]);
+}
+}
+}else{
+for(var i=0;_10[i]!=null;i++){
+if(_10[i]&&_10[i].nodeType===1){
+_c.push(_f[i]);
+}
+}
+}
+}
+}else{
+_19(_10,_c);
+}
+if(_13){
+_9(_13,_b,_c,_d);
+}
+return _c;
+};
+_9.matches=function(_1b,set){
+return _9(_1b,null,null,set);
+};
+_9.find=function(_1c,_1d){
+var set,_1e;
+if(!_1c){
+return [];
+}
+for(var i=0,l=_15.order.length;i<l;i++){
+var _1f=_15.order[i],_1e;
+if((_1e=_15.match[_1f].exec(_1c))){
+var _20=RegExp.leftContext;
+if(_20.substr(_20.length-1)!=="\\"){
+_1e[1]=(_1e[1]||"").replace(/\\/g,"");
+set=_15.find[_1f](_1e,_1d);
+if(set!=null){
+_1c=_1c.replace(_15.match[_1f],"");
+break;
+}
+}
+}
+}
+if(!set){
+set=_1d.getElementsByTagName("*");
+}
+return {set:set,expr:_1c};
+};
+_9.filter=function(_21,set,_22,not){
+var old=_21,_23=[],_24=set,_25,_26;
+while(_21&&set.length){
+for(var _27 in _15.filter){
+if((_25=_15.match[_27].exec(_21))!=null){
+var _28=_15.filter[_27],_29=null,_2a=0,_2b,_2c;
+_26=false;
+if(_24==_23){
+_23=[];
+}
+if(_15.preFilter[_27]){
+_25=_15.preFilter[_27](_25,_24,_22,_23,not);
+if(!_25){
+_26=_2b=true;
+}else{
+if(_25[0]===true){
+_29=[];
+var _2d=null,_2e;
+for(var i=0;(_2e=_24[i])!==undefined;i++){
+if(_2e&&_2d!==_2e){
+_29.push(_2e);
+_2d=_2e;
+}
+}
+}
+}
+}
+if(_25){
+for(var i=0;(_2c=_24[i])!==undefined;i++){
+if(_2c){
+if(_29&&_2c!=_29[_2a]){
+_2a++;
+}
+_2b=_28(_2c,_25,_2a,_29);
+var _2f=not^!!_2b;
+if(_22&&_2b!=null){
+if(_2f){
+_26=true;
+}else{
+_24[i]=false;
+}
+}else{
+if(_2f){
+_23.push(_2c);
+_26=true;
+}
+}
+}
+}
+}
+if(_2b!==undefined){
+if(!_22){
+_24=_23;
+}
+_21=_21.replace(_15.match[_27],"");
+if(!_26){
+return [];
+}
+break;
+}
+}
+}
+_21=_21.replace(/\s*,\s*/,"");
+if(_21==old){
+if(_26==null){
+throw "Syntax error, unrecognized expression: "+_21;
+}else{
+break;
+}
+}
+old=_21;
+}
+return _24;
+};
+var _15=_9.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u0128-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u0128-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u0128-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[((?:[\w\u0128-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/,TAG:/^((?:[\w\u0128-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child\(?(even|odd|[\dn+-]*)\)?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)\(?(\d*)\)?(?:[^-]|$)/,PSEUDO:/:((?:[\w\u0128-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},relative:{"+":function(_30,_31){
+for(var i=0,l=_30.length;i<l;i++){
+var _32=_30[i];
+if(_32){
+var cur=_32.previousSibling;
+while(cur&&cur.nodeType!==1){
+cur=cur.previousSibling;
+}
+_30[i]=typeof _31==="string"?cur||false:cur===_31;
+}
+}
+if(typeof _31==="string"){
+_9.filter(_31,_30,true);
+}
+},">":function(_33,_34){
+if(typeof _34==="string"&&!/\W/.test(_34)){
+_34=_34.toUpperCase();
+for(var i=0,l=_33.length;i<l;i++){
+var _35=_33[i];
+if(_35){
+var _36=_35.parentNode;
+_33[i]=_36.nodeName===_34?_36:false;
+}
+}
+}else{
+for(var i=0,l=_33.length;i<l;i++){
+var _35=_33[i];
+if(_35){
+_33[i]=typeof _34==="string"?_35.parentNode:_35.parentNode===_34;
+}
+}
+if(typeof _34==="string"){
+_9.filter(_34,_33,true);
+}
+}
+},"":function(_37,_38){
+var _39="done"+(_7++),_3a=_3b;
+if(!_38.match(/\W/)){
+var _3c=_38=_38.toUpperCase();
+_3a=_3d;
+}
+_3a("parentNode",_38,_39,_37,_3c);
+},"~":function(_3e,_3f){
+var _40="done"+(_7++),_41=_3b;
+if(typeof _3f==="string"&&!_3f.match(/\W/)){
+var _42=_3f=_3f.toUpperCase();
+_41=_3d;
+}
+_41("previousSibling",_3f,_40,_3e,_42);
+}},find:{ID:function(_43,_44){
+if(_44.getElementById){
+var m=_44.getElementById(_43[1]);
+return m?[m]:[];
+}
+},NAME:function(_45,_46){
+return _46.getElementsByName?_46.getElementsByName(_45[1]):null;
+},TAG:function(_47,_48){
+return _48.getElementsByTagName(_47[1]);
+}},preFilter:{CLASS:function(_49,_4a,_4b,_4c,not){
+_49=" "+_49[1].replace(/\\/g,"")+" ";
+for(var i=0;_4a[i];i++){
+if(not^(" "+_4a[i].className+" ").indexOf(_49)>=0){
+if(!_4b){
+_4c.push(_4a[i]);
+}
+}else{
+if(_4b){
+_4a[i]=false;
+}
+}
+}
+return false;
+},ID:function(_4d){
+return _4d[1];
+},TAG:function(_4e){
+return _4e[1].toUpperCase();
+},CHILD:function(_4f){
+if(_4f[1]=="nth"){
+var _50=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(_4f[2]=="even"&&"2n"||_4f[2]=="odd"&&"2n+1"||!/\D/.test(_4f[2])&&"0n+"+_4f[2]||_4f[2]);
+_4f[2]=(_50[1]+(_50[2]||1))-0;
+_4f[3]=_50[3]-0;
+}
+_4f[0]="done"+(_7++);
+return _4f;
+},ATTR:function(_51){
+var _52=_51[1];
+if(_15.attrMap[_52]){
+_51[1]=_15.attrMap[_52];
+}
+if(_51[2]==="~="){
+_51[4]=" "+_51[4]+" ";
+}
+return _51;
+},PSEUDO:function(_53,_54,_55,_56,not){
+if(_53[1]==="not"){
+if(_53[3].match(_6).length>1){
+_53[3]=_9(_53[3],null,null,_54);
+}else{
+var ret=_9.filter(_53[3],_54,_55,true^not);
+if(!_55){
+_56.push.apply(_56,ret);
+}
+return false;
+}
+}
+return _53;
+},POS:function(_57){
+_57.unshift(true);
+return _57;
+}},filters:{enabled:function(_58){
+return _58.disabled===false&&_58.type!=="hidden";
+},disabled:function(_59){
+return _59.disabled===true;
+},checked:function(_5a){
+return _5a.checked===true;
+},selected:function(_5b){
+_5b.parentNode.selectedIndex;
+return _5b.selected===true;
+},parent:function(_5c){
+return !!_5c.firstChild;
+},empty:function(_5d){
+return !_5d.firstChild;
+},has:function(_5e,i,_5f){
+return !!_9(_5f[3],_5e).length;
+},header:function(_60){
+return /h\d/i.test(_60.nodeName);
+},text:function(_61){
+return "text"===_61.type;
+},radio:function(_62){
+return "radio"===_62.type;
+},checkbox:function(_63){
+return "checkbox"===_63.type;
+},file:function(_64){
+return "file"===_64.type;
+},password:function(_65){
+return "password"===_65.type;
+},submit:function(_66){
+return "submit"===_66.type;
+},image:function(_67){
+return "image"===_67.type;
+},reset:function(_68){
+return "reset"===_68.type;
+},button:function(_69){
+return "button"===_69.type||_69.nodeName.toUpperCase()==="BUTTON";
+},input:function(_6a){
+return /input|select|textarea|button/i.test(_6a.nodeName);
+}},setFilters:{first:function(_6b,i){
+return i===0;
+},last:function(_6c,i,_6d,_6e){
+return i===_6e.length-1;
+},even:function(_6f,i){
+return i%2===0;
+},odd:function(_70,i){
+return i%2===1;
+},lt:function(_71,i,_72){
+return i<_72[3]-0;
+},gt:function(_73,i,_74){
+return i>_74[3]-0;
+},nth:function(_75,i,_76){
+return _76[3]-0==i;
+},eq:function(_77,i,_78){
+return _78[3]-0==i;
+}},filter:{CHILD:function(_79,_7a){
+var _7b=_7a[1],_7c=_79.parentNode;
+var _7d=_7a[0];
+if(_7c&&!_7c[_7d]){
+var _7e=1;
+for(var _7f=_7c.firstChild;_7f;_7f=_7f.nextSibling){
+if(_7f.nodeType==1){
+_7f.nodeIndex=_7e++;
+}
+}
+_7c[_7d]=_7e-1;
+}
+if(_7b=="first"){
+return _79.nodeIndex==1;
+}else{
+if(_7b=="last"){
+return _79.nodeIndex==_7c[_7d];
+}else{
+if(_7b=="only"){
+return _7c[_7d]==1;
+}else{
+if(_7b=="nth"){
+var add=false,_80=_7a[2],_81=_7a[3];
+if(_80==1&&_81==0){
+return true;
+}
+if(_80==0){
+if(_79.nodeIndex==_81){
+add=true;
+}
+}else{
+if((_79.nodeIndex-_81)%_80==0&&(_79.nodeIndex-_81)/_80>=0){
+add=true;
+}
+}
+return add;
+}
+}
+}
+}
+},PSEUDO:function(_82,_83,i,_84){
+var _85=_83[1],_86=_15.filters[_85];
+if(_86){
+return _86(_82,i,_83,_84);
+}else{
+if(_85==="contains"){
+return (_82.textContent||_82.innerText||"").indexOf(_83[3])>=0;
+}else{
+if(_85==="not"){
+var not=_83[3];
+for(var i=0,l=not.length;i<l;i++){
+if(not[i]===_82){
+return false;
+}
+}
+return true;
+}
+}
+}
+},ID:function(_87,_88){
+return _87.nodeType===1&&_87.getAttribute("id")===_88;
+},TAG:function(_89,_8a){
+return (_8a==="*"&&_89.nodeType===1)||_89.nodeName===_8a;
+},CLASS:function(_8b,_8c){
+return _8c.test(_8b.className);
+},ATTR:function(_8d,_8e){
+var _8f=_8d[_8e[1]]||_8d.getAttribute(_8e[1]),_90=_8f+"",_91=_8e[2],_92=_8e[4];
+return _8f==null?false:_91==="="?_90===_92:_91==="*="?_90.indexOf(_92)>=0:_91==="~="?(" "+_90+" ").indexOf(_92)>=0:!_8e[4]?_8f:_91==="!="?_90!=_92:_91==="^="?_90.indexOf(_92)===0:_91==="$="?_90.substr(_90.length-_92.length)===_92:_91==="|="?_90===_92||_90.substr(0,_92.length+1)===_92+"-":false;
+},POS:function(_93,_94,i,_95){
+var _96=_94[2],_97=_15.setFilters[_96];
+if(_97){
+return _97(_93,i,_94,_95);
+}
+}}};
+for(var _98 in _15.match){
+_15.match[_98]=RegExp(_15.match[_98].source+/(?![^\[]*\])(?![^\(]*\))/.source);
+}
+var _19=function(_99,_9a){
+_99=Array.prototype.slice.call(_99);
+if(_9a){
+_9a.push.apply(_9a,_99);
+return _9a;
+}
+return _99;
+};
+try{
+Array.prototype.slice.call(document.documentElement.childNodes);
+}
+catch(e){
+_19=function(_9b,_9c){
+var ret=_9c||[];
+if(_8.call(_9b)==="[object Array]"){
+Array.prototype.push.apply(ret,_9b);
+}else{
+if(typeof _9b.length==="number"){
+for(var i=0,l=_9b.length;i<l;i++){
+ret.push(_9b[i]);
+}
+}else{
+for(var i=0;_9b[i];i++){
+ret.push(_9b[i]);
+}
+}
+}
+return ret;
+};
+}
+(function(){
+var _9d=document.createElement("form"),id="script"+(new Date).getTime();
+_9d.innerHTML="<input name='"+id+"'/>";
+var _9e=document.documentElement;
+_9e.insertBefore(_9d,_9e.firstChild);
+if(!!document.getElementById(id)){
+_15.find.ID=function(_9f,_a0){
+if(_a0.getElementById){
+var m=_a0.getElementById(_9f[1]);
+return m?m.id===_9f[1]||m.getAttributeNode&&m.getAttributeNode("id").nodeValue===_9f[1]?[m]:undefined:[];
+}
+};
+_15.filter.ID=function(_a1,_a2){
+var _a3=_a1.getAttributeNode&&_a1.getAttributeNode("id");
+return _a1.nodeType===1&&_a3&&_a3.nodeValue===_a2;
+};
+}
+_9e.removeChild(_9d);
+})();
+(function(){
+var div=document.createElement("div");
+div.appendChild(document.createComment(""));
+if(div.getElementsByTagName("*").length>0){
+_15.find.TAG=function(_a4,_a5){
+var _a6=_a5.getElementsByTagName(_a4[1]);
+if(_a4[1]==="*"){
+var tmp=[];
+for(var i=0;_a6[i];i++){
+if(_a6[i].nodeType===1){
+tmp.push(_a6[i]);
+}
+}
+_a6=tmp;
+}
+return _a6;
+};
+}
+})();
+if(document.querySelectorAll){
+(function(){
+var _a7=_9;
+_9=function(_a8,_a9,_aa,_ab){
+_a9=_a9||document;
+if(!_ab&&_a9.nodeType===9){
+try{
+return _19(_a9.querySelectorAll(_a8),_aa);
+}
+catch(e){
+}
+}
+return _a7(_a8,_a9,_aa,_ab);
+};
+_9.find=_a7.find;
+_9.filter=_a7.filter;
+_9.selectors=_a7.selectors;
+_9.matches=_a7.matches;
+})();
+}
+if(document.documentElement.getElementsByClassName){
+_15.order.splice(1,0,"CLASS");
+_15.find.CLASS=function(_ac,_ad){
+return _ad.getElementsByClassName(_ac[1]);
+};
+}
+function _3d(dir,cur,_ae,_af,_b0){
+for(var i=0,l=_af.length;i<l;i++){
+var _b1=_af[i];
+if(_b1){
+_b1=_b1[dir];
+var _b2=false;
+while(_b1&&_b1.nodeType){
+var _b3=_b1[_ae];
+if(_b3){
+_b2=_af[_b3];
+break;
+}
+if(_b1.nodeType===1){
+_b1[_ae]=i;
+}
+if(_b1.nodeName===cur){
+_b2=_b1;
+break;
+}
+_b1=_b1[dir];
+}
+_af[i]=_b2;
+}
+}
+};
+function _3b(dir,cur,_b4,_b5,_b6){
+for(var i=0,l=_b5.length;i<l;i++){
+var _b7=_b5[i];
+if(_b7){
+_b7=_b7[dir];
+var _b8=false;
+while(_b7&&_b7.nodeType){
+if(_b7[_b4]){
+_b8=_b5[_b7[_b4]];
+break;
+}
+if(_b7.nodeType===1){
+_b7[_b4]=i;
+if(typeof cur!=="string"){
+if(_b7===cur){
+_b8=true;
+break;
+}
+}else{
+if(_9.filter(cur,[_b7]).length>0){
+_b8=_b7;
+break;
+}
+}
+}
+_b7=_b7[dir];
+}
+_b5[i]=_b8;
+}
+}
+};
+var _1a=document.compareDocumentPosition?function(a,b){
+return a.compareDocumentPosition(b)&16;
+}:function(a,b){
+return a!==b&&(a.contains?a.contains(b):true);
+};
+(ns||window).Sizzle=_9;
+})(typeof dojo=="undefined"?null:dojo);
+}
diff --git a/js/dojo/dojo/_firebug/tab_lft_norm.png b/js/dojo/dojo/_firebug/tab_lft_norm.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f0479a28a551462b2c3ad3066582fe94e2d07a25
GIT binary patch
literal 193
zc%17D@N?(olHy`uVBq!ia0vp^oIotZ!3-q##j#WYDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MG^r%A+EP?-+uY><<qB6A3l6|<Hn7*Z{L3S@ZtLP>zcLh
zXMt+$JzX3_DsJ_hJIKeNz`+z?GWq}i#}P|oAAd1B#uhY_S%rnaD0_nYxz&<OZ+m8Z
q49<VJ*5!0mW}ug|=e4V<2N+UonO~pLy66Zriow&>&t;ucLK6V%bxhv?
diff --git a/js/dojo/dojo/_firebug/tab_lft_over.png b/js/dojo/dojo/_firebug/tab_lft_over.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2f36cca926242ebdd8eda81d60ee859299f55b19
GIT binary patch
literal 196
zc%17D@N?(olHy`uVBq!ia0vp^oIotZ!3-q##j#WYDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MG^r%A+Bf6oO$~6>Gtj0moH!5*49>8S^43^htks0tI?IA
zKs8RDE{-7;w|dTb^D!85Fa>N0eOLc@q5Rvjn7s}jF0XQYgqqlQnx0U8KGpSQ*`=J1
s%kLeE4pS6b>oVojnrSI}e{mWxq}wom70zU+2b#v<>FVdQ&MBb@0R0C^Qvd(}
diff --git a/js/dojo/dojo/_firebug/tab_rgt_norm.png b/js/dojo/dojo/_firebug/tab_rgt_norm.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..464af3ef17bff273ffd6d42b45e17e0c384a3cfb
GIT binary patch
literal 208
zc%17D@N?(olHy`uVBq!ia0vp^(LgN3!3-ps_XqI<DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MG^r%A+C4t-u>|5!>d=X9zJ|{^XAQG&z{}Bef#?L>k-Zo
zcY$jBJY5_^DsEkwdXksHfa7owSIYn1>NgMAB@c8tNJx5IubMb9r66aw!?)bNjk*)w
zGTf9-Q9tqR!aduP>4u-mCVf6Byl_RML*LcD|I&R7%nU}2+81veXkH35nZeW5&t;uc
GLK6TYOjalW
diff --git a/js/dojo/dojo/_firebug/tab_rgt_over.png b/js/dojo/dojo/_firebug/tab_rgt_over.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2bc2cd07569b762a9dabd5ef9c46e20b478d3323
GIT binary patch
literal 208
zc%17D@N?(olHy`uVBq!ia0vp^(LgN3!3-ps_XqI<DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MG^r%A+GK1?N6URy>jKs!i5XV%gYZQJow?mhtks0uJiBK
z0oC|<x;TbZ+`4kbQjo!bhuQI`X#FuyhZsS|8^<0`Zp=)2pOWHru8co@_vFpG7rr%=
zHEwg*ZNK&FOWnzvyMN2FrtKGSDr3ETBW!QgdpSln25DU#jhQ(ML2hR7boFyt=akR{
E001#hG5`Po
diff --git a/js/dojo/dojo/cache.js b/js/dojo/dojo/cache.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cache.js
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.cache"]){
+dojo._hasResource["dojo.cache"]=true;
+dojo.provide("dojo.cache");
+(function(){
+var _1={};
+dojo.cache=function(_2,_3,_4){
+if(typeof _2=="string"){
+var _5=dojo.moduleUrl(_2,_3);
+}else{
+_5=_2;
+_4=_3;
+}
+var _6=_5.toString();
+var _7=_4;
+if(_4!==undefined&&!dojo.isString(_4)){
+_7=("value" in _4?_4.value:undefined);
+}
+var _8=_4&&_4.sanitize?true:false;
+if(_7||_7===null){
+if(_7==null){
+delete _1[_6];
+}else{
+_7=_1[_6]=_8?dojo.cache._sanitize(_7):_7;
+}
+}else{
+if(!(_6 in _1)){
+_7=dojo._getText(_6);
+_1[_6]=_8?dojo.cache._sanitize(_7):_7;
+}
+_7=_1[_6];
+}
+return _7;
+};
+dojo.cache._sanitize=function(_9){
+if(_9){
+_9=_9.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
+var _a=_9.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_a){
+_9=_a[1];
+}
+}else{
+_9="";
+}
+return _9;
+};
+})();
+}
diff --git a/js/dojo/dojo/cldr/nls/ar/currency.js b/js/dojo/dojo/cldr/nls/ar/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","CAD_displayName":"دولار كندي","CNY_displayName":"يوان صيني","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","USD_displayName":"دولار أمريكي","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","EUR_displayName":"يورو","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ar/gregorian.js b/js/dojo/dojo/cldr/nls/ar/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"field-week":"الأسبوع","dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"dateFormatItem-yyQ":"Q yy","timeFormat-long":"z h:mm:ss a","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","field-month":"الشهر","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"pm":"م","dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"am":"ص","days-standAlone-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ق.م","م"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormat-long":"{1} {0}","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ar/hebrew.js b/js/dojo/dojo/cldr/nls/ar/hebrew.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/hebrew.js
@@ -0,0 +1,1 @@
+({"quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-medium":"dd‏/MM‏/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/‏M","months-standAlone-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار الثاني","نيسان","أيار","سيفان","تموز","آب"],"days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMMd":"d MMMM","months-standAlone-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار الثاني","نيسان","أيار","سيفان","تموز","آب","أيلول"],"quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","months-format-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار الثاني","نيسان","أيار","سيفان","تموز","آب"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-yM":"M‏/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار الثاني","نيسان","أيار","سيفان","تموز","آب","أيلول"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"timeFormat-long":"z h:mm:ss a","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","eraNames":["AM"],"dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12","13"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","eraAbbr":["AM"],"dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","pm":"PM","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12","13"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","am":"AM","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d","eraNarrow":["AM"]})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ar/islamic-civil.js b/js/dojo/dojo/cldr/nls/ar/islamic-civil.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/islamic-civil.js
@@ -0,0 +1,1 @@
+({"quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-medium":"dd‏/MM‏/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","eraNarrow":["ه"],"timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/‏M","months-standAlone-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraNames":["ه"],"days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMMd":"d MMMM","months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormatItem-yMMMM":"MMMM y","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-yM":"M‏/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraAbbr":["ه"],"timeFormat-long":"z h:mm:ss a","days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"patternChars":"GanjkHmsSEDFwWxhKzAeugXZvcL","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-MMMd":"d MMM","dateFormat-full":"EEEE، d MMMM، y","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"*@localeAlias195":{"bundle":"islamic","target":"*"},"dateFormatItem-yQQQ":"y QQQ","eraNames@localeAlias213":{"bundle":"islamic","target":"eraAbbr"},"dateFormat@localeAlias215":{"bundle":"gregorian","target":"dateFormat"},"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","timeFormat@localeAlias216":{"bundle":"gregorian","target":"timeFormat"},"days-standAlone-wide@localeAlias206":{"bundle":"gregorian","target":"days-format-wide"},"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","am":"AM","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"days-standAlone-abbr@localeAlias204":{"bundle":"gregorian","target":"days-format-abbr"},"days-standAlone-abbr@localeAlias205":{"bundle":"gregorian","target":"days-format-wide"},"dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-standAlone-wide@localeAlias212":{"bundle":"gregorian","target":"quarters-format-wide"},"quarters-format-narrow":["1","2","3","4"],"months-standAlone-abbr@localeAlias198":{"bundle":"islamic","target":"months-format-abbr"},"months-standAlone-abbr@localeAlias199":{"bundle":"islamic","target":"months-format-wide"},"months-format-abbr@localeAlias196":{"bundle":"islamic","target":"months-format-wide"},"dateTimeFormat-long":"{1} {0}","days-format-abbr@localeAlias202":{"bundle":"gregorian","target":"days-format-wide"},"dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","days-format-narrow@localeAlias203":{"bundle":"gregorian","target":"days-standAlone-narrow"},"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","days@localeAlias201":{"bundle":"gregorian","target":"days"},"dateTime@localeAlias217":{"bundle":"gregorian","target":"dateTime"},"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","eraNarrow@localeAlias214":{"bundle":"islamic","target":"eraAbbr"},"months-format-narrow@localeAlias197":{"bundle":"islamic","target":"months-standAlone-narrow"},"quarters-format-abbr@localeAlias208":{"bundle":"gregorian","target":"quarters-format-wide"},"quarters-format-narrow@localeAlias209":{"bundle":"gregorian","target":"quarters-standAlone-narrow"},"days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","quarters-standAlone-abbr@localeAlias210":{"bundle":"gregorian","target":"quarters-format-abbr"},"pm":"PM","quarters-standAlone-abbr@localeAlias211":{"bundle":"gregorian","target":"quarters-format-wide"},"dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","months-standAlone-wide@localeAlias200":{"bundle":"islamic","target":"months-format-wide"},"dateTimeFormats-appendItem-Timezone":"{0} {1}","quarters@localeAlias207":{"bundle":"gregorian","target":"quarters"},"dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ar/islamic.js b/js/dojo/dojo/cldr/nls/ar/islamic.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/islamic.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M‏/yyyy","dateFormatItem-yQ":"yyyy Q","eraNames":["هـ"],"dateFormatItem-MMMEd":"E d MMM","months-standAlone-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["هـ"],"dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","dateFormat-medium":"dd‏/MM‏/yyyy","dateFormatItem-yMMMM":"MMMM y","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","timeFormat-long":"z h:mm:ss a","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"timeFormat-short":"h:mm a","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"pm":"م","months-format-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"am":"ص","dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d‏/M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["هـ"],"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ar/number.js b/js/dojo/dojo/cldr/nls/ar/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ar/number.js
@@ -0,0 +1,1 @@
+({"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ca/currency.js b/js/dojo/dojo/cldr/nls/ca/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ca/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"dòlar de Hong Kong","CHF_displayName":"franc suís","CAD_displayName":"dòlar canadenc","CNY_displayName":"iuan renmimbi xinès","AUD_displayName":"dòlar australià","JPY_displayName":"ien japonès","USD_displayName":"dòlar dels Estats Units","GBP_displayName":"lliura esterlina britànica","EUR_displayName":"euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ca/gregorian.js b/js/dojo/dojo/cldr/nls/ca/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ca/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M/yyyy","field-dayperiod":"a.m./p.m.","dateFormatItem-yQ":"Q yyyy","field-minute":"minut","eraNames":["aC","dC"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"dia de la setmana","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"era","field-hour":"hora","quarters-standAlone-abbr":["1T","2T","3T","4T"],"dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["g","l","t","c","j","v","s"],"eraAbbr":["aC","dC"],"dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-long":"d 'de' MMMM 'de' y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE d","field-zone":"zona","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-yMMMM":"LLLL 'del' y","dateFormatItem-ms":"mm:ss","field-year":"any","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH:mm:ss","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"field-week":"setmana","dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"timeFormat-short":"H:mm","field-month":"mes","dateFormatItem-MMMMd":"d 'de' MMMM","quarters-format-abbr":["1T","2T","3T","4T"],"days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"pm":"p.m.","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["g","l","t","c","j","v","s"],"field-second":"segon","field-day":"dia","dateFormatItem-MEd":"E d/M","months-format-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"am":"a.m.","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E d/M/yyyy","months-format-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"dateFormatItem-d":"d","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"eraNarrow":["aC","dC"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ca/number.js b/js/dojo/dojo/cldr/nls/ca/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ca/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/cs/currency.js b/js/dojo/dojo/cldr/nls/cs/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/cs/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Dolar hongkongský","CHF_displayName":"Frank švýcarský","CAD_displayName":"Dolar kanadský","CNY_displayName":"Juan renminbi","AUD_displayName":"Dolar australský","JPY_displayName":"Jen","USD_displayName":"Dolar americký","GBP_displayName":"Libra šterlinků","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/cs/gregorian.js b/js/dojo/dojo/cldr/nls/cs/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/cs/gregorian.js
@@ -0,0 +1,1 @@
+({"quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"dateFormat-medium":"d.M.yyyy","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"eraNarrow":["př.Kr.","po Kr."],"months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"pm":"odp.","months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"eraNames":["př.Kr.","po Kr."],"am":"dop.","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"timeFormat-medium":"H:mm:ss","dateFormat-long":"d. MMMM y","dateFormat-short":"d.M.yy","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"timeFormat-short":"H:mm","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraAbbr":["př.Kr.","po Kr."],"quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"dateFormat-full":"EEEE, d. MMMM y","days-format-abbr":["ne","po","út","st","čt","pá","so"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateFormatItem-Md":"M-d","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","timeFormat-long":"HH:mm:ss z","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","dateFormatItem-MMMMd":"MMMM d","dateFormatItem-Hm":"H:mm","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"y MMMM","field-day":"Day","field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","field-month":"Month","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/cs/number.js b/js/dojo/dojo/cldr/nls/cs/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/cs/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/da/currency.js b/js/dojo/dojo/cldr/nls/da/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/da/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkong dollar","CHF_displayName":"Schweizisk franc","CAD_displayName":"Canadisk dollar","CNY_displayName":"Kinesisk yuan renminbi","USD_symbol":"$","AUD_displayName":"Australsk dollar","JPY_displayName":"Japansk yen","USD_displayName":"Amerikansk dollar","GBP_displayName":"Britisk pund","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/da/gregorian.js b/js/dojo/dojo/cldr/nls/da/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/da/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M-yyyy","field-dayperiod":"dagtid","dateFormatItem-yQ":"Q yyyy","field-minute":"minut","eraNames":["f.Kr.","e.Kr."],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"ugedag","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd/MM","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-MMM":"MMM","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"æra","field-hour":"time","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH.mm.ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","O","T","F","L"],"eraAbbr":["f.Kr.","e.Kr."],"dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-long":"d. MMM y","timeFormat-medium":"HH.mm.ss","field-zone":"zone","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM/yy","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-yyMMM":"MMM yy","quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm.ss","field-year":"år","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH.mm.ss","field-week":"uge","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH.mm","dateFormatItem-H":"H","field-month":"måned","quarters-format-abbr":["K1","K2","K3","K4"],"dateFormatItem-MMMMd":"d. MMMM","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"pm":"e.m.","dateFormatItem-M":"M","days-format-narrow":["S","M","T","O","T","F","L"],"field-second":"sekund","field-day":"dag","dateFormatItem-MEd":"E. d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h.mm a","am":"f.m.","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE. d. MMM y","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE. d-M-yyyy","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-d":"d.","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"eraNarrow":["f.Kr.","e.Kr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/da/number.js b/js/dojo/dojo/cldr/nls/da/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/da/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/el/currency.js b/js/dojo/dojo/cldr/nls/el/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/el/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Δολάριο Χονγκ Κονγκ","CHF_displayName":"Φράγκο Ελβετίας","CAD_displayName":"Δολάριο Καναδά","CNY_displayName":"Γιουάν Ρενμίμπι Κίνας","AUD_displayName":"Δολάριο Αυστραλίας","JPY_displayName":"Γιεν Ιαπωνίας","USD_displayName":"Δολάριο ΗΠΑ","GBP_displayName":"Λίρα Στερλίνα Βρετανίας","EUR_displayName":"Ευρώ","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/el/gregorian.js b/js/dojo/dojo/cldr/nls/el/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/el/gregorian.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"dd MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dateFormat-full":"EEEE, dd MMMM y","dateFormatItem-Md":"d/M","field-era":"Περίοδος","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],"timeFormat-short":"h:mm a","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"timeFormat-long":"h:mm:ss a z","field-year":"Έτος","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"y Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Ώρα","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","am":"π.μ.","dateFormatItem-H":"H","months-standAlone-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"quarters-standAlone-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"LLLL y","field-day":"Ημέρα","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"field-zone":"Ζώνη","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"eraNames":["π.Χ.","μ.Χ."],"days-format-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"field-month":"Μήνας","days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"μ.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yyyy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/el/number.js b/js/dojo/dojo/cldr/nls/el/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/el/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/en-au/number.js b/js/dojo/dojo/cldr/nls/en-au/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/en-au/number.js
@@ -0,0 +1,1 @@
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/en-gb/number.js b/js/dojo/dojo/cldr/nls/en-gb/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/en-gb/number.js
@@ -0,0 +1,1 @@
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/fi/currency.js b/js/dojo/dojo/cldr/nls/fi/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/fi/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","EUR_symbol":"€","GBP_symbol":"£"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/fi/gregorian.js b/js/dojo/dojo/cldr/nls/fi/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/fi/gregorian.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","am":"ap.","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-HHmmss":"HH.mm.ss","dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-MMMMd":"d. MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap/ip","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","dateFormatItem-yMMMM":"LLLL y","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","pm":"ip.","dateFormatItem-MMMMEd":"E d. MMMM","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-hms":"h.mm.ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/fi/number.js b/js/dojo/dojo/cldr/nls/fi/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/fi/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/he/currency.js b/js/dojo/dojo/cldr/nls/he/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/he/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/he/gregorian.js b/js/dojo/dojo/cldr/nls/he/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/he/gregorian.js
@@ -0,0 +1,1 @@
+({"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateTimeFormat-medium":"{1} {0}","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","am":"לפנה\"צ","dateFormatItem-H":"H","months-standAlone-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"Dayperiod","days-standAlone-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","days-format-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"אחה\"צ","dateFormatItem-MMMMEd":"E MMMM d","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, y MMM d","dateFormatItem-Ed":"E d","field-week":"שבוע","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/he/hebrew.js b/js/dojo/dojo/cldr/nls/he/hebrew.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/he/hebrew.js
@@ -0,0 +1,1 @@
+({"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-medium":"dd/MM/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE, d.M.yyyy","eraNarrow":["לבה\"ע"],"months-format-narrow":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"pm":"אחה\"צ","dateFormatItem-Md":"d/M","months-standAlone-narrow":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"months-standAlone-wide":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"eraNames":["לבה\"ע"],"am":"לפנה\"צ","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMMMEd":"E, d בMMMM","dateFormatItem-MMMMd":"d בMMMM","months-standAlone-abbr":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"dateFormat-long":"d בMMMM y","dateFormat-short":"dd/MM/yy","months-format-wide":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-yM":"M.yyyy","months-format-abbr":["תשרי","חשון","כסלו","טבת","שבט","אדר א'","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"eraAbbr":["לבה\"ע"],"dateFormatItem-yQ":"yyyy Q","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-full":"EEEE, d בMMMM y","days-format-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","timeFormat-medium":"HH:mm:ss","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"HH:mm:ss z","timeFormat-short":"HH:mm","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/he/islamic.js b/js/dojo/dojo/cldr/nls/he/islamic.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/he/islamic.js
@@ -0,0 +1,1 @@
+({"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-medium":"dd/MM/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE, d.M.yyyy","eraNarrow":["שנת היג׳רה"],"dateFormatItem-Md":"d/M","months-standAlone-wide":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"eraNames":["שנת היג׳רה"],"days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMMMd":"d בMMMM","months-standAlone-abbr":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"dateFormat-long":"d בMMMM y","dateFormat-short":"dd/MM/yy","months-format-wide":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-yM":"M.yyyy","months-format-abbr":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"eraAbbr":["שנת היג׳רה"],"dateFormatItem-yQ":"yyyy Q","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-full":"EEEE, d בMMMM y","days-format-abbr":["יום א'","יום ב'","יום ג'","יום ד'","יום ה'","יום ו'","שבת"],"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","timeFormat-medium":"HH:mm:ss","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"HH:mm:ss z","timeFormat-short":"HH:mm","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","pm":"PM","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","am":"AM","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/he/number.js b/js/dojo/dojo/cldr/nls/he/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/he/number.js
@@ -0,0 +1,1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/hebrew.js b/js/dojo/dojo/cldr/nls/hebrew.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/hebrew.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","eraNames":["AM"],"dateFormatItem-MMMEd":"E MMM d","dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12","13"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","months-standAlone-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","days-standAlone-narrow":["1","2","3","4","5","6","7"],"eraAbbr":["AM"],"dateFormat-long":"y MMMM d","timeFormat-medium":"HH:mm:ss","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormat-medium":"y MMM d","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-yMMMM":"y MMMM","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","months-standAlone-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"HH:mm:ss z","months-format-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"timeFormat-short":"HH:mm","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateFormatItem-MMMMd":"MMMM d","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["1","2","3","4","5","6","7"],"pm":"PM","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12","13"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","am":"AM","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormat-short":"yyyy-MM-dd","dateFormatItem-yMMMEd":"EEE, y MMM d","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dateFormatItem-yMEd":"EEE, y-M-d","months-format-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d","quarters-format-wide":["Q1","Q2","Q3","Q4"],"eraNarrow":["AM"],"days-format-wide":["1","2","3","4","5","6","7"]})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/hu/currency.js b/js/dojo/dojo/cldr/nls/hu/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/hu/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkongi dollár","CHF_displayName":"Svájci frank","JPY_symbol":"¥","CAD_displayName":"Kanadai dollár","CNY_displayName":"Kínai jüan renminbi","USD_symbol":"$","AUD_displayName":"Ausztrál dollár","JPY_displayName":"Japán jen","USD_displayName":"USA dollár","GBP_displayName":"Brit font sterling","EUR_displayName":"Euro","CHF_symbol":"Fr.","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/hu/gregorian.js b/js/dojo/dojo/cldr/nls/hu/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/hu/gregorian.js
@@ -0,0 +1,1 @@
+({"field-dayperiod":"napszak","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"field-weekday":"hét napja","dateFormatItem-MMdd":"MM.dd.","days-standAlone-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","Á","M","J","J","A","S","O","N","D"],"field-era":"éra","field-hour":"óra","quarters-standAlone-abbr":["N1","N2","N3","N4"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"days-standAlone-narrow":["V","H","K","S","C","P","S"],"eraAbbr":["i. e.","i. sz."],"dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"yyyy.MM.dd.","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","quarters-standAlone-narrow":["1","2","3","4"],"months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"field-week":"hét","dateFormatItem-MMMd":"MMM d.","dateFormatItem-yyQ":"yy/Q","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"timeFormat-short":"H:mm","field-month":"hónap","dateFormatItem-MMMMd":"MMMM d.","quarters-format-abbr":["N1","N2","N3","N4"],"days-format-abbr":["V","H","K","Sze","Cs","P","Szo"],"pm":"du.","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","S","C","P","S"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","S","O","N","D"],"am":"de.","days-standAlone-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormat-short":"yyyy.MM.dd.","dateFormat-full":"y. MMMM d., EEEE","dateFormatItem-Md":"M. d.","months-format-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"days-format-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"eraNarrow":["i. e.","i. sz."],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"y MMMM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/hu/number.js b/js/dojo/dojo/cldr/nls/hu/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/hu/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/islamic-civil.js b/js/dojo/dojo/cldr/nls/islamic-civil.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/islamic-civil.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"*@localeAlias195":{"bundle":"islamic","target":"*"},"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["AH"],"eraNames@localeAlias213":{"bundle":"islamic","target":"eraAbbr"},"dateFormat@localeAlias215":{"bundle":"gregorian","target":"dateFormat"},"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateFormat-full":"EEEE, y MMMM dd","timeFormat@localeAlias216":{"bundle":"gregorian","target":"timeFormat"},"dateFormatItem-Md":"M-d","days-standAlone-wide@localeAlias206":{"bundle":"gregorian","target":"days-format-wide"},"dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","months-standAlone-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","am":"AM","months-standAlone-abbr":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"days-standAlone-abbr@localeAlias204":{"bundle":"gregorian","target":"days-format-abbr"},"dateFormatItem-MMMMd":"MMMM d","days-standAlone-abbr@localeAlias205":{"bundle":"gregorian","target":"days-format-wide"},"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["AH"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-standAlone-wide@localeAlias212":{"bundle":"gregorian","target":"quarters-format-wide"},"quarters-format-narrow":["1","2","3","4"],"months-standAlone-abbr@localeAlias198":{"bundle":"islamic","target":"months-format-abbr"},"months-standAlone-abbr@localeAlias199":{"bundle":"islamic","target":"months-format-wide"},"months-format-abbr@localeAlias196":{"bundle":"islamic","target":"months-format-wide"},"dateTimeFormat-long":"{1} {0}","days-format-abbr@localeAlias202":{"bundle":"gregorian","target":"days-format-wide"},"dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"y MMMM","days-format-wide":["1","2","3","4","5","6","7"],"days-format-narrow@localeAlias203":{"bundle":"gregorian","target":"days-standAlone-narrow"},"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"days@localeAlias201":{"bundle":"gregorian","target":"days"},"dateTime@localeAlias217":{"bundle":"gregorian","target":"dateTime"},"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","eraNarrow@localeAlias214":{"bundle":"islamic","target":"eraAbbr"},"days-format-abbr":["1","2","3","4","5","6","7"],"months-format-narrow@localeAlias197":{"bundle":"islamic","target":"months-standAlone-narrow"},"quarters-format-abbr@localeAlias208":{"bundle":"gregorian","target":"quarters-format-wide"},"quarters-format-narrow@localeAlias209":{"bundle":"gregorian","target":"quarters-standAlone-narrow"},"eraNames":["AH"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","quarters-standAlone-abbr@localeAlias210":{"bundle":"gregorian","target":"quarters-format-abbr"},"pm":"PM","quarters-standAlone-abbr@localeAlias211":{"bundle":"gregorian","target":"quarters-format-wide"},"dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","months-standAlone-wide@localeAlias200":{"bundle":"islamic","target":"months-format-wide"},"dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"y MMM d","quarters@localeAlias207":{"bundle":"gregorian","target":"quarters"},"dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/islamic.js b/js/dojo/dojo/cldr/nls/islamic.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/islamic.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","eraNames":["AH"],"dateFormatItem-MMMEd":"E MMM d","dateTimeFormat-full":"{1} {0}","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"y QQQ","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateTimeFormat-medium":"{1} {0}","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","months-standAlone-abbr":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","days-standAlone-narrow":["1","2","3","4","5","6","7"],"eraAbbr":["AH"],"dateFormat-long":"y MMMM d","timeFormat-medium":"HH:mm:ss","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-Hm":"H:mm","dateFormat-medium":"y MMM d","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-yMMMM":"y MMMM","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","months-standAlone-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"HH:mm:ss z","months-format-abbr":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"timeFormat-short":"HH:mm","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateFormatItem-MMMMd":"MMMM d","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["1","2","3","4","5","6","7"],"pm":"PM","dateFormatItem-M":"L","days-format-narrow":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-MEd":"E, M-d","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","am":"AM","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormat-short":"yyyy-MM-dd","dateFormatItem-yMMMEd":"EEE, y MMM d","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dateFormatItem-yMEd":"EEE, y-M-d","months-format-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateFormatItem-d":"d","quarters-format-wide":["Q1","Q2","Q3","Q4"],"eraNarrow":["AH"],"days-format-wide":["1","2","3","4","5","6","7"]})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ja/number.js b/js/dojo/dojo/cldr/nls/ja/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ja/number.js
@@ -0,0 +1,1 @@
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ko/number.js b/js/dojo/dojo/cldr/nls/ko/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ko/number.js
@@ -0,0 +1,1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nb/currency.js b/js/dojo/dojo/cldr/nls/nb/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nb/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkong-dollar","CHF_displayName":"sveitsiske franc","CHF_symbol":"CHF","JPY_symbol":"JPY","CAD_displayName":"kanadiske dollar","CNY_displayName":"kinesiske yuan renminbi","USD_symbol":"USD","AUD_displayName":"australske dollar","JPY_displayName":"japanske yen","CAD_symbol":"CAD","USD_displayName":"amerikanske dollar","EUR_symbol":"EUR","CNY_symbol":"CNY","GBP_displayName":"britiske pund sterling","GBP_symbol":"GBP","AUD_symbol":"AUD","EUR_displayName":"euro","HKD_symbol":"HK$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nb/gregorian.js b/js/dojo/dojo/cldr/nls/nb/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nb/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M yyyy","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","field-minute":"minutt","eraNames":["f.Kr.","e.Kr."],"dateFormatItem-MMMEd":"E d. MMM","field-weekday":"ukedag","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"tidsalder","field-hour":"time","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"'kl'. HH.mm.ss zzzz","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["S","M","T","O","T","F","L"],"eraAbbr":["f.Kr.","e.Kr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d. MMMM y","timeFormat-medium":"HH.mm.ss","dateFormatItem-EEEd":"EEE d","field-zone":"sone","dateFormatItem-Hm":"HH.mm","dateFormatItem-yyMM":"MM.yy","dateFormat-medium":"d. MMM y","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm.ss","field-year":"år","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH.mm.ss","field-week":"uke","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-MMMMEd":"E d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH.mm.ss z","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"timeFormat-short":"HH.mm","field-month":"måned","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"pm":"PM","dateFormatItem-M":"L","days-format-narrow":["S","M","T","O","T","F","L"],"field-second":"sekund","field-day":"dag","dateFormatItem-MEd":"E d.M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h.mm a","am":"AM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"EEE d. MMM y","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE d.M.yyyy","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-d":"d.","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"eraNarrow":["f.Kr.","e.Kr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nb/number.js b/js/dojo/dojo/cldr/nls/nb/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nb/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nl/currency.js b/js/dojo/dojo/cldr/nls/nl/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nl/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nl/gregorian.js b/js/dojo/dojo/cldr/nls/nl/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nl/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M-yyyy","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","field-minute":"Minuut","eraNames":["Voor Christus","Anno Domini"],"dateFormatItem-MMMEd":"E d MMM","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd-MM","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormatItem-yyMM":"MM-yy","dateFormat-medium":"d MMM y","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"Jaar","quarters-standAlone-narrow":["1","2","3","4"],"field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"pm":"PM","dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"am":"AM","days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-yyyy","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/nl/number.js b/js/dojo/dojo/cldr/nls/nl/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/nl/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/pl/currency.js b/js/dojo/dojo/cldr/nls/pl/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/pl/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"dolar hongkoński","CHF_displayName":"frank szwajcarski","CAD_displayName":"dolar kanadyjski","CNY_displayName":"juan renminbi","AUD_displayName":"dolar australijski","JPY_displayName":"jen japoński","USD_displayName":"dolar amerykański ","GBP_displayName":"funt szterling","EUR_displayName":"euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/pl/gregorian.js b/js/dojo/dojo/cldr/nls/pl/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/pl/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"yyyy-M","field-dayperiod":"Dayperiod","dateFormatItem-yQ":"yyyy Q","field-minute":"Minuta","eraNames":["p.n.e.","n.e."],"dateFormatItem-MMMEd":"d MMM E","field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"MM-dd","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-era":"Era","field-hour":"Godzina","dateFormatItem-hhmm":"hh:mm a","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"eraAbbr":["p.n.e.","n.e."],"dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Strefa","dateFormatItem-Hm":"H:mm","dateFormatItem-yyMM":"MM/yy","dateFormat-medium":"dd-MM-yyyy","dateFormatItem-yyMMM":"MMM yy","quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-yMMMM":"LLLL y","dateFormatItem-ms":"mm:ss","field-year":"Rok","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH:mm:ss","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"field-week":"Tydzień","dateFormatItem-MMMMEd":"d MMMM E","dateFormatItem-MMMd":"MMM d","dateFormatItem-HHmm":"HH:mm","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"timeFormat-short":"HH:mm","field-month":"Miesiąc","quarters-format-abbr":["K1","K2","K3","K4"],"dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"pm":"PM","dateFormatItem-M":"L","dateFormatItem-mmss":"mm:ss","days-format-narrow":["N","P","W","Ś","C","P","S"],"field-second":"Sekunda","field-day":"Dzień","dateFormatItem-MEd":"E, M-d","months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-hhmmss":"hh:mm:ss a","am":"AM","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.yyyy","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dateFormatItem-d":"d","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"eraNarrow":["p.n.e.","n.e."],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/pl/number.js b/js/dojo/dojo/cldr/nls/pl/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/pl/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/pt-pt/gregorian.js b/js/dojo/dojo/cldr/nls/pt-pt/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/pt-pt/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yyQ":"QQQ 'de' yy","quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormat-medium":"d 'de' MMM 'de' yyyy","am":"Antes do meio-dia","months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQ":"QQQ 'de' yyyy","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"pm":"Depois do meio-dia","dateFormatItem-yQQQ":"QQQ 'de' y","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dateFormat-long":"d 'de' MMMM 'de' y","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"Era","dateFormatItem-yM":"MM/yyyy","timeFormat-short":"HH:mm","timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","timeFormat-full":"HH'h'mm'min'ss's' zzzz","dateFormatItem-HHmmss":"H'h'mm'min'ss's'","dateFormatItem-M":"L","days-standAlone-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"H'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","days-standAlone-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"Dia","days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormatItem-MMMMEd":"EEE, d 'de' MMMM","dateFormat-short":"dd/MM/yy","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormatItem-mmss":"mm'min'ss's'","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/pt-pt/number.js b/js/dojo/dojo/cldr/nls/pt-pt/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/pt-pt/number.js
@@ -0,0 +1,1 @@
+({"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ru/currency.js b/js/dojo/dojo/cldr/nls/ru/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ru/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Гонконгский доллар","CHF_displayName":"Швейцарский франк","CAD_displayName":"Канадский доллар","CNY_displayName":"Юань Ренминби","USD_symbol":"$","AUD_displayName":"Австралийский доллар","JPY_displayName":"Японская иена","USD_displayName":"Доллар США","GBP_displayName":"Английский фунт стерлингов","EUR_displayName":"Евро","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ru/gregorian.js b/js/dojo/dojo/cldr/nls/ru/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ru/gregorian.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, yyyy-M-d","dateFormatItem-yyyyLLLL":"LLLL y","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["до н.э.","н.э."],"dateFormat-long":"d MMMM y 'г'.","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","field-era":"Эра","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"timeFormat-short":"H:mm","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"timeFormat-long":"H:mm:ss z","field-year":"Год","dateFormatItem-yMMM":"MMM y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Час","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H:mm:ss zzzz","am":"AM","dateFormatItem-H":"H","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"eraAbbr":["до н.э.","н.э."],"field-minute":"Минута","field-dayperiod":"AM/PM","days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, M-d","dateFormatItem-yMMMM":"MMMM y","field-day":"День","days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"field-zone":"Часовой пояс","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"dateFormatItem-yyMM":"MM.yy","days-format-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"eraNames":["до н.э.","н.э."],"days-format-narrow":["В","П","В","С","Ч","П","С"],"field-month":"Месяц","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"PM","dateFormatItem-MMMMEd":"E MMMM d","dateFormat-short":"dd.MM.yy","field-second":"Секунда","dateFormatItem-yMMMEd":"E, d MMM y","dateFormatItem-Ed":"E d","field-week":"Неделя","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","dateFormatItem-yyyy":"y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/ru/number.js b/js/dojo/dojo/cldr/nls/ru/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/ru/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sk/currency.js b/js/dojo/dojo/cldr/nls/sk/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sk/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hong Kongský dolár","CHF_displayName":"Švajčiarský frank","CAD_displayName":"Kanadský dolár","CNY_displayName":"Čínsky Yuan Renminbi","AUD_displayName":"Austrálsky dolár","JPY_displayName":"Japonský yen","USD_displayName":"US dolár","GBP_displayName":"Britská libra","EUR_displayName":"Euro","CHF_symbol":"Fr.","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sk/gregorian.js b/js/dojo/dojo/cldr/nls/sk/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sk/gregorian.js
@@ -0,0 +1,1 @@
+({"field-dayperiod":"Časť dňa","dateFormatItem-yQ":"Q yyyy","field-minute":"Minúta","eraNames":["pred n.l.","n.l."],"dateFormatItem-MMMEd":"E, d. MMM","field-weekday":"Deň v týždni","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Éra","field-hour":"Hodina","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["N","P","U","S","Š","P","S"],"eraAbbr":["pred n.l.","n.l."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","field-zone":"Pásmo","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"Rok","months-standAlone-wide":["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],"field-week":"Týždeň","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"timeFormat-short":"H:mm","field-month":"Mesiac","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ne","po","ut","st","št","pi","so"],"pm":"popoludní","dateFormatItem-mmss":"mm:ss","days-format-narrow":["N","P","U","S","Š","P","S"],"field-second":"Sekunda","field-day":"Deň","dateFormatItem-MEd":"E, d.M.","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"am":"dopoludnia","days-standAlone-abbr":["ne","po","ut","st","št","pi","so"],"dateFormat-short":"d.M.yyyy","dateFormatItem-yyyyM":"M.yyyy","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE, d.M.yyyy","months-format-wide":["januára","februára","marca","apríla","mája","júna","júla","augusta","septembra","októbra","novembra","decembra"],"dateFormatItem-d":"d.","quarters-format-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"days-format-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"eraNarrow":["pred n.l.","n.l."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sk/number.js b/js/dojo/dojo/cldr/nls/sk/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sk/number.js
@@ -0,0 +1,1 @@
+({"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","percentFormat":"#,##0%","decimalFormat":"#,##0.###","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sl/currency.js b/js/dojo/dojo/cldr/nls/sl/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sl/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"hongkonški dolar","CHF_displayName":"švicarski frank","JPY_symbol":"¥","CAD_displayName":"kanadski dolar","CNY_displayName":"kitajski juan renminbi","USD_symbol":"$","AUD_displayName":"avstralski dolar","JPY_displayName":"japonski jen","USD_displayName":"ameriški dolar","GBP_displayName":"britanski funt","EUR_displayName":"evro","CHF_symbol":"Fr.","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sl/gregorian.js b/js/dojo/dojo/cldr/nls/sl/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sl/gregorian.js
@@ -0,0 +1,1 @@
+({"field-dayperiod":"Čas dneva","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-weekday":"Dan v tednu","days-standAlone-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Doba","field-hour":"Ura","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormat-medium":"d. MMM. yyyy","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-HHmmss":"HH:mm:ss","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","dateFormatItem-HHmm":"HH:mm","dateFormatItem-yyQ":"Q/yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"timeFormat-short":"HH:mm","field-month":"Mesec","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormatItem-MMMMdd":"dd. MMMM","pm":"pop.","dateFormatItem-mmss":"mm:ss","days-format-narrow":["n","p","t","s","č","p","s"],"field-second":"Sekunda","field-day":"Dan","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"am":"dop.","days-standAlone-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormat-short":"d. MM. yy","dateFormatItem-yyyyM":"M/yyyy","dateFormat-full":"EEEE, dd. MMMM y","dateFormatItem-Md":"d. M.","months-format-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"quarters-format-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"days-format-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"eraNarrow":["pr. n. št.","po Kr."],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"y MMMM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateFormatItem-MMMMEd":"E MMMM d","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sl/number.js b/js/dojo/dojo/cldr/nls/sl/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sl/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sv/currency.js b/js/dojo/dojo/cldr/nls/sv/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sv/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hongkong-dollar","CHF_displayName":"schweizisk franc","CHF_symbol":"CHF","CAD_displayName":"kanadensisk dollar","CNY_displayName":"kinesisk yuan renminbi","AUD_displayName":"australisk dollar","JPY_displayName":"japansk yen","CAD_symbol":"CAD","USD_displayName":"US-dollar","CNY_symbol":"CNY","GBP_displayName":"brittiskt pund sterling","EUR_displayName":"euro","JPY_symbol":"JP¥","HKD_symbol":"HK$","USD_symbol":"US$","EUR_symbol":"€","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sv/gregorian.js b/js/dojo/dojo/cldr/nls/sv/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sv/gregorian.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"veckodag","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, yyyy-MM-dd","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d MMMM y","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-MMMMEEEd":"EEE d MMMM","field-era":"era","dateFormatItem-yM":"yyyy-MM","months-standAlone-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","field-hour":"timme","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH.mm.ss zzzz","am":"fm","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"dateFormatItem-HHmmss":"HH.mm.ss","dateFormatItem-hhmmss":"h.mm.ss a","dateFormatItem-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"fm/em","days-standAlone-abbr":["sön","mån","tis","ons","tors","fre","lör"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","dateFormatItem-yMMMM":"y MMMM","field-day":"dag","days-format-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"field-zone":"tidszon","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"yy-MM","days-format-abbr":["sön","mån","tis","ons","tors","fre","lör"],"eraNames":["före Kristus","efter Kristus"],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"månad","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH.mm","pm":"em","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormatItem-hhmm":"hh.mm a","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/sv/number.js b/js/dojo/dojo/cldr/nls/sv/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/sv/number.js
@@ -0,0 +1,1 @@
+({"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/th/buddhist.js b/js/dojo/dojo/cldr/nls/th/buddhist.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/th/buddhist.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M/yyyy","dateFormatItem-yQ":"Q yyyy","eraNames":["พุทธศักราช"],"dateFormatItem-MMMEd":"Eท d MMM","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yQQQ":"QQQ y","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateTimeFormat-short":"{1}, {0}","dateTimeFormat-medium":"{1}, {0}","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","dateFormatItem-yMMM":"MMM yyyy","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"eraAbbr":["พ.ศ."],"dateFormat-long":"d MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEEท d","dateFormatItem-yyMM":"M/yyyy","dateFormat-medium":"d MMM y","dateFormatItem-yyMMM":"MMM y","dateFormatItem-yMMMM":"MMMM y","dateTimeFormat-long":"{1}, {0}","dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","timeFormat-long":"H นาฬิกา m นาที ss วินาที z","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"timeFormat-short":"H:mm","dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"pm":"หลังเที่ยง","dateFormatItem-MEd":"Eท d/M","dateFormatItem-MMMEEEd":"EEEท d MMM","am":"ก่อนเที่ยง","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE d/M/y","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"eraNarrow":["พ.ศ."]})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/th/currency.js b/js/dojo/dojo/cldr/nls/th/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/th/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"ดอลลาร์ฮ่องกง","CHF_displayName":"ฟรังก์สวิส","JPY_symbol":"¥","CAD_displayName":"ดอลลาร์แคนาดา","CNY_displayName":"หยวนเหรินหมินปี้ (สาธารณรัฐประชาชนจีน)","AUD_displayName":"ดอลลาร์ออสเตรเลีย","JPY_displayName":"เยนญี่ปุ่น","USD_displayName":"ดอลลาร์สหรัฐ","GBP_displayName":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","EUR_displayName":"ยูโร","CHF_symbol":"Fr.","HKD_symbol":"HK$","USD_symbol":"US$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/th/gregorian.js b/js/dojo/dojo/cldr/nls/th/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/th/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"M/yyyy","field-dayperiod":"ช่วงวัน","dateFormatItem-yQ":"Q yyyy","field-minute":"นาที","eraNames":["ปีก่อนคริสต์ศักราช","คริสต์ศักราช"],"dateFormatItem-MMMEd":"E d MMM","dateTimeFormat-full":"{1}, {0}","field-weekday":"วันในสัปดาห์","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateTimeFormat-short":"{1}, {0}","field-era":"สมัย","field-hour":"ชั่วโมง","dateTimeFormat-medium":"{1}, {0}","dateFormatItem-y":"y","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","months-standAlone-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"eraAbbr":["ปีก่อน ค.ศ.","ค.ศ."],"dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE d","field-zone":"เขต","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d MMM y","quarters-standAlone-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"ปี","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1}, {0}","dateFormatItem-HHmmss":"HH:mm:ss","field-week":"สัปดาห์","months-standAlone-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","dateFormatItem-HHmm":"HH:mm","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H นาฬิกา m นาที ss วินาที z","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"timeFormat-short":"H:mm","field-month":"เดือน","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"pm":"หลังเที่ยง","dateFormatItem-M":"L","dateFormatItem-mmss":"mm:ss","days-format-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"field-second":"วินาที","field-day":"วัน","dateFormatItem-MEd":"E, d/M","months-format-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"am":"ก่อนเที่ยง","days-standAlone-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormat-short":"d/M/yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE d/M/yyyy","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateFormatItem-d":"d","quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"eraNarrow":"ก่อน ค.ศ.","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/th/number.js b/js/dojo/dojo/cldr/nls/th/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/th/number.js
@@ -0,0 +1,1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/tr/currency.js b/js/dojo/dojo/cldr/nls/tr/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/tr/currency.js
@@ -0,0 +1,1 @@
+({"HKD_displayName":"Hong Kong Doları","CHF_displayName":"İsviçre Frangı","JPY_symbol":"¥","CAD_displayName":"Kanada Doları","CNY_displayName":"Çin Yuanı Renminbi","USD_symbol":"$","AUD_displayName":"Avustralya Doları","JPY_displayName":"Japon Yeni","USD_displayName":"ABD Doları","GBP_displayName":"İngiliz Sterlini","EUR_displayName":"Euro","CHF_symbol":"Fr.","HKD_symbol":"HK$","CAD_symbol":"CA$","EUR_symbol":"€","CNY_symbol":"CN¥","GBP_symbol":"£","AUD_symbol":"AU$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/tr/gregorian.js b/js/dojo/dojo/cldr/nls/tr/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/tr/gregorian.js
@@ -0,0 +1,1 @@
+({"months-format-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Haftanın Günü","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"dd.MM.yyyy EEE","dateFormatItem-MMMEd":"dd MMM E","eraNarrow":["MÖ","MS"],"dateFormat-long":"dd MMMM y","months-format-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"dateFormatItem-EEEd":"d EEE","dateFormat-full":"dd MMMM y EEEE","dateFormatItem-Md":"dd/MM","field-era":"Miladi Dönem","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"timeFormat-long":"HH:mm:ss z","field-year":"Yıl","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"Saat","months-format-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","am":"AM","dateFormatItem-H":"H","months-standAlone-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"quarters-format-abbr":["Ç1","Ç2","Ç3","Ç4"],"quarters-standAlone-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-hhmmss":"hh:mm:ss a","dateFormatItem-M":"L","days-standAlone-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"dateFormatItem-MMMMd":"dd MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Ç1","Ç2","Ç3","Ç4"],"eraAbbr":["MÖ","MS"],"field-minute":"Dakika","field-dayperiod":"AM/PM","days-standAlone-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","dateFormatItem-MMMd":"dd MMM","dateFormatItem-MEd":"dd/MM E","dateFormatItem-yMMMM":"MMMM y","field-day":"Gün","days-format-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"field-zone":"Saat Dilimi","dateFormatItem-y":"y","months-standAlone-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"eraNames":["Milattan Önce","Milattan Sonra"],"days-format-narrow":["P","P","S","Ç","P","C","C"],"field-month":"Ay","days-standAlone-narrow":["P","P","S","Ç","P","C","C"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","pm":"PM","dateFormatItem-MMMMEd":"dd MMMM E","dateFormat-short":"dd.MM.yyyy","field-second":"Saniye","dateFormatItem-yMMMEd":"dd MMM y EEE","dateFormatItem-hhmm":"hh:mm a","dateFormatItem-Ed":"d E","field-week":"Hafta","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/tr/number.js b/js/dojo/dojo/cldr/nls/tr/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/tr/number.js
@@ -0,0 +1,1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/zh-tw/currency.js b/js/dojo/dojo/cldr/nls/zh-tw/currency.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/zh-tw/currency.js
@@ -0,0 +1,1 @@
+({"BRE_displayName":"巴西克魯賽羅 (1990-1993)","DEM_displayName":"德國馬克","KGS_symbol":"som","CUP_displayName":"古巴披索","HUF_symbol":"Ft","BDT_symbol":"Tk","LSL_symbol":"M","VEF_symbol":"BsF","MDL_displayName":"摩杜雲列伊","DOP_displayName":"多明尼加披索","MTL_symbol":"Lm","NGN_displayName":"奈及利亞奈拉","KZT_displayName":"卡扎克斯坦坦吉","BGL_symbol":"lev","LTT_displayName":"立陶宛特羅","LAK_displayName":"寮國基普","LKR_displayName":"斯里蘭卡盧布","AOR_displayName":"安哥拉新寬扎 Reajustado (1995-1999)","XEU_displayName":"歐洲貨幣單位 XEU","SYP_symbol":"LS","USS_displayName":"美元 (同一天)","MNT_displayName":"蒙古圖格里克","AMD_symbol":"dram","MOP_displayName":"澳門元","TJR_displayName":"塔吉克斯坦盧布","LUC_displayName":"盧森堡可兌換法郎","LUL_displayName":"盧森堡金融法郎","MRO_symbol":"UM","AON_displayName":"安哥拉新寬扎 (1990-2000)","BEF_displayName":"比利時法郎","IEP_displayName":"愛爾蘭鎊","SBD_displayName":"索羅門群島元","GRD_displayName":"希臘德拉克馬","AZM_displayName":"阿塞拜彊馬特納","MTP_displayName":"馬爾他鎊","UGX_symbol":"U Sh","ARS_symbol":"Arg$","LVR_displayName":"拉脫維亞盧布","GNF_displayName":"幾內亞法郎","GIP_displayName":"直布羅陀鎊","SRG_displayName":"蘇里南盾","BAD_displayName":"波士尼亞-黑塞哥維那第納爾","FJD_displayName":"斐濟元","BAM_displayName":"波士尼亞-黑塞哥維那可轉換馬克","XBB_displayName":"歐洲貨幣單位 XBB","CDF_displayName":"剛果法郎","HRD_displayName":"克羅地亞第納爾","EQE_displayName":"埃奎維勒","BZD_displayName":"伯利茲元","MLF_displayName":"馬里法郎","VEB_symbol":"Be","EGP_displayName":"埃及鎊","MVR_displayName":"馬爾地夫海島盧非亞","KWD_symbol":"KD","TRL_symbol":"TL","ALL_symbol":"lek","SDP_displayName":"蘇丹鎊","NPR_displayName":"尼泊爾盧布","PHP_displayName":"菲律賓披索","DJF_symbol":"DF","WST_displayName":"西薩摩亞塔拉","JPY_displayName":"日圓","TMM_displayName":"土庫曼馬納特","STD_symbol":"Db","BGN_displayName":"保加利亞新列弗","KYD_displayName":"開曼群島美元","VUV_displayName":"萬那杜萬杜","IRR_displayName":"伊朗里亞爾","DJF_displayName":"吉布地法郎","BTN_symbol":"Nu","XDR_displayName":"特殊提款權","ECS_displayName":"厄瓜多蘇克雷","LSM_displayName":"馬洛蒂","MNT_symbol":"Tug","NLG_displayName":"荷蘭盾","MWK_displayName":"馬拉維克瓦查","IRR_symbol":"RI","OMR_symbol":"RO","JMD_symbol":"J$","PES_displayName":"秘魯太陽幣","SRG_symbol":"Sf","LYD_displayName":"利比亞第納爾","BRR_displayName":"巴西克魯賽羅","ETB_symbol":"Br","KMF_symbol":"CF","DKK_symbol":"DKr","XXX_displayName":"XXX","IDR_displayName":"印尼 - 盧布","DZD_symbol":"DA","TZS_symbol":"T Sh","SGD_symbol":"SGD","KGS_displayName":"吉爾吉斯索馬","BRN_displayName":"巴西克如爾達農瓦","AFN_symbol":"Af","ISK_displayName":"冰島克朗","LUF_displayName":"盧森堡法郎","MXN_symbol":"MEX$","GYD_symbol":"G$","TOP_symbol":"T$","SVC_displayName":"薩爾瓦多科郎","ZMK_displayName":"尚比亞克瓦查","TOP_displayName":"東加潘加","ITL_displayName":"義大利里拉","USN_displayName":"美元 (第二天)","KWD_displayName":"科威特第納爾","GEL_symbol":"lari","KMF_displayName":"科摩羅法郎","COP_symbol":"Col$","MYR_displayName":"馬來西亞 - 林吉特","XFU_displayName":"法國 UIC 法郎","GMD_displayName":"甘比亞達拉西","LVL_displayName":"拉脫維亞拉特銀幣","AUD_displayName":"澳幣","XPF_displayName":"CFP 法郎","LBP_displayName":"黎巴嫩鎊","SKK_symbol":"Sk","BYB_displayName":"白俄羅斯新盧布 (1994-1999)","MKD_displayName":"馬其頓第納爾","GWP_displayName":"幾內亞披索披索","CNY_displayName":"人民幣","HNL_symbol":"L","BOB_symbol":"Bs","JOD_displayName":"約旦第納爾","OMR_displayName":"阿曼里奧","BOV_displayName":"玻利維亞幕多","XPT_displayName":"白金","AUD_symbol":"AU$","NOK_displayName":"挪威克羅納","SCR_displayName":"塞舌爾群島盧布","XBA_displayName":"歐洲綜合單位","CSK_displayName":"捷克斯洛伐克硬克朗","PLZ_displayName":"波蘭茲羅提 (1950-1995)","UAK_displayName":"烏克蘭卡本瓦那茲","MGF_displayName":"馬達加斯加法郎","GNS_displayName":"幾內亞西里","YUN_displayName":"南斯拉夫 可轉換第納爾","UYU_symbol":"Ur$","GYD_displayName":"圭亞那元","QAR_displayName":"卡達爾里亞爾","BZD_symbol":"BZ$","JOD_symbol":"JD","ALL_displayName":"阿爾巴尼亞列克","BBD_displayName":"巴貝多元","RON_displayName":"羅馬尼亞列伊","XCD_symbol":"EC$","AMD_displayName":"亞美尼亞德拉姆","CYP_displayName":"賽浦路斯鎊","GBP_symbol":"£","SEK_displayName":"瑞典克羅納","MZN_symbol":"MTn","MMK_displayName":"緬甸元","ZAR_displayName":"南非蘭特","ECV_displayName":"厄瓜多爾由里達瓦康斯坦 (UVC)","LYD_symbol":"LD","VUV_symbol":"VT","AWG_displayName":"阿魯巴盾","CVE_symbol":"CVEsc","STD_displayName":"聖多美島和普林西比島多布拉","CAD_displayName":"加幣","ADP_displayName":"安道爾陪士特","MRO_displayName":"茅利塔尼亞烏吉亞","LSL_displayName":"賴索托羅蒂","TND_displayName":"突尼西亞第納爾","USD_symbol":"$","BMD_symbol":"Ber$","BAM_symbol":"KM","BRC_displayName":"巴西克魯賽羅 (1986-1989)","BMD_displayName":"百慕達幣","BRL_displayName":"巴西里拉","JMD_displayName":"牙買加元","SOS_displayName":"索馬利亞先令","SAR_displayName":"沙烏地里雅","PEI_displayName":"祕魯因蒂","ESP_displayName":"西班牙陪士特","HKD_displayName":"港幣","ESP_symbol":"₧","BWP_displayName":"波札那 - 普拉","TTD_displayName":"千里達及托巴哥元","BSD_displayName":"巴哈馬元","BIF_displayName":"蒲隆地法郎","FRF_displayName":"法國法郎","DKK_displayName":"丹麥克羅納","AED_displayName":"阿拉伯聯合大公國迪爾汗","GHS_symbol":"GH¢","AOK_displayName":"安哥拉寬扎(1977-1990)","ATS_displayName":"奧地利先令","PEN_displayName":"秘魯新太陽幣","CRC_displayName":"哥斯大黎加科郎","PAB_displayName":"巴拿馬巴波亞","CHE_displayName":"WIR 歐元","GQE_displayName":"赤道幾內亞埃奎勒","DZD_displayName":"阿爾及利亞第納爾","EEK_displayName":"愛沙尼亞克朗","YDD_displayName":"葉門第納爾","GHC_displayName":"迦納仙蔕","YER_symbol":"YRl","PLN_symbol":"Zl","NPR_symbol":"Nrs","MXP_displayName":"墨西哥銀披索 (1861-1992)","XAG_displayName":"XAG","XFO_displayName":"法國金法郎","GWE_displayName":"葡屬幾內亞埃斯庫多","BOB_displayName":"玻利維亞貨幣單位","CAD_symbol":"CA$","ZWD_displayName":"辛巴威元","SRD_displayName":"蘇利南元","ZRN_displayName":"薩伊新扎伊爾","XAU_displayName":"黃金","GTQ_symbol":"Q","KRW_symbol":"KRW","BOP_displayName":"玻利維亞披索","LBP_symbol":"LL","XBD_displayName":"歐洲會計單位(XBD)","TZS_displayName":"坦尚尼亞先令","XPF_symbol":"CFPF","TTD_symbol":"TT$","LRD_displayName":"賴比瑞亞元","KRW_displayName":"韓國圜","SHP_displayName":"聖赫勒拿鎊","NAD_symbol":"N$","MZE_displayName":"莫桑比克埃斯庫多","SDD_displayName":"蘇丹第納爾","HRK_displayName":"克羅地亞庫納","FKP_displayName":"福克蘭群島鎊","COP_displayName":"哥倫比亞披索","YUD_displayName":"南斯拉夫第納爾硬幣","YUM_displayName":"南斯拉夫挪威亞第納爾","BYR_symbol":"Rbl","THB_displayName":"泰銖","MGA_displayName":"馬達加斯加艾瑞爾","TWD_displayName":"新臺幣","UGS_displayName":"烏干達先令 (1966-1987)","SBD_symbol":"SI$","ZAL_displayName":"南非 - 蘭特 (金融)","GEL_displayName":"喬治拉里","ILP_displayName":"以色列鎊","MKD_symbol":"MDen","KES_displayName":"肯尼亞先令","CZK_displayName":"捷克克朗","UGX_displayName":"烏干達先令","KZT_symbol":"T","BGL_displayName":"保加利亞硬列弗","ARP_displayName":"阿根廷披索(1983-1985)","BBD_symbol":"BDS$","MYR_symbol":"RM","RUR_displayName":"俄羅斯盧布 (1991-1998)","ERN_displayName":"厄立特里亞納克法","BEF_symbol":"BF","CLF_displayName":"卡林油達佛曼跎","BRB_displayName":"巴西克魯薩多農瓦(1967-1986)","IDR_symbol":"Rp","IEP_symbol":"IR£","BHD_displayName":"巴林第納爾","SYP_displayName":"敘利亞鎊","BIF_symbol":"Fbu","SZL_displayName":"史瓦濟蘭里朗吉尼","INR_displayName":"印度盧布","PTE_displayName":"葡萄牙埃斯庫多","KPW_displayName":"北朝鮮幣","XOF_displayName":"西非法郎 BCEAO","DOP_symbol":"RD$","MXN_displayName":"墨西哥 - 披索","RWF_displayName":"盧安達法郎","ETB_displayName":"衣索比亞比爾","LTL_displayName":"立陶宛里塔","SZL_symbol":"E","QAR_symbol":"QR","SOS_symbol":"Sh.","BND_displayName":"汶萊元","SUR_displayName":"蘇聯盧布","AOA_displayName":"安哥拉寬扎","FJD_symbol":"F$","CVE_displayName":"維德角埃斯庫多","XTS_displayName":"XTS","CLP_displayName":"智利披索","HUF_displayName":"匈牙利 - 福林","LKR_symbol":"SL Re","SCR_symbol":"SR","TJS_displayName":"塔吉克索莫尼","MWK_symbol":"MK","GBP_displayName":"英鎊","TPE_displayName":"帝汶埃斯庫多","GNF_symbol":"GF","SGD_displayName":"新加坡幣","SLL_displayName":"獅子山利昂","MZM_symbol":"Mt","PHP_symbol":"Php","CYP_symbol":"£C","XAF_displayName":"西非法郎 BEAC","MTL_displayName":"馬爾他里拉","KHR_displayName":"柬埔寨瑞爾","ZRZ_displayName":"扎伊爾扎伊爾","KES_symbol":"K Sh","PKR_symbol":"Pra","IQD_symbol":"ID","BEC_displayName":"比利時法郎 (可轉換)","BEL_displayName":"比利時法郎 (金融)","AZN_displayName":"亞塞拜然蒙納特","FIM_displayName":"芬蘭馬克","PKR_displayName":"巴基斯坦盧布","UYP_displayName":"烏拉圭披索 (1975-1993)","ANG_symbol":"NA f.","CHW_displayName":"WIR 法郎","PLN_displayName":"波蘭茲羅提","RON_symbol":"0≤lei|1≤leu|1","BTN_displayName":"不丹那特倫","UAH_displayName":"烏克蘭格里夫那","YER_displayName":"也門里亞爾","UYU_displayName":"烏拉圭披索","CRC_symbol":"C","PGK_displayName":"巴布亞紐幾內亞基那","XBC_displayName":"歐洲會計單位(XBC)","EUR_displayName":"歐元","MUR_displayName":"模里西斯盧布","BYR_displayName":"白俄羅斯盧布","SEK_symbol":"SKr","BHD_symbol":"BD","IQD_displayName":"伊拉克第納爾","VEB_displayName":"委內瑞拉博利瓦","CLP_symbol":"Ch$","MZM_displayName":"莫三比克梅蒂卡爾","NZD_symbol":"$NZ","CHF_symbol":"Fr.","SIT_displayName":"斯洛維尼亞托勒","NOK_symbol":"NKr","XCD_displayName":"格瑞那達元","RUB_displayName":"俄羅斯盧布","BUK_displayName":"緬甸元 BUK","ILS_displayName":"以色列新謝克爾","KHR_symbol":"CR","NAD_displayName":"納米比亞元","HNL_displayName":"洪都拉斯倫皮拉","GTQ_displayName":"瓜地馬拉格查爾","EUR_symbol":"€","NZD_displayName":"紐西蘭幣","ARA_displayName":"阿根廷奧斯特納爾","ARS_displayName":"阿根廷披索","ANG_displayName":"荷屬安地列斯盾","MOP_symbol":"MOP","ZWD_symbol":"Z$","ITL_symbol":"₤","ZAR_symbol":"R","CHF_displayName":"瑞士法郎","USD_displayName":"美元","CNY_symbol":"¥","JPY_symbol":"JP¥","HKD_symbol":"HK$"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/zh-tw/gregorian.js b/js/dojo/dojo/cldr/nls/zh-tw/gregorian.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/zh-tw/gregorian.js
@@ -0,0 +1,1 @@
+({"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"年代","field-hour":"小時","quarters-standAlone-abbr":["第1季","第2季","第3季","第4季"],"timeFormat-full":"zzzzah時mm分ss秒","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"y年M月","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormatItem-yyMM":"yyyy/MM","dateFormat-medium":"yyyy/M/d","quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"dateFormatItem-yMMMM":"y年M月","dateFormatItem-HHmmss":"H:mm:ss","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-week":"週","dateFormatItem-HHmm":"H:mm","timeFormat-long":"zah時mm分ss秒","dateFormatItem-H":"H時","quarters-format-abbr":["第1季","第2季","第3季","第4季"],"days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"field-second":"秒","dateFormatItem-MEd":"M-d(E)","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"days-standAlone-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormat-short":"yy/M/d","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"yyyy/M/d(EEE)","dateTimeAvailableFormats":["d日(E)","H:mm","H:mm:ss","M-d(E)","MM/dd","M/d","yyyy/M","yyyy/M/d(EEE)","yyyy年M月","yyyy年M月","yyyy/MM","MMMMdd日","MMMd日","MM-dd","M-d","d日","mm:ss","mm:ss","yyyy年","yyyy-M","yyyy年M月d日,E","yyyy年MMM","yyyy年MMMd日EEE","yyyy年MMMM","yyyy年QQQ","y年QQQ","yy-MM","yy年MMM","yy年第Q季度","yyyy年","yyyy年M月","yyyy年MMMM"],"quarters-format-wide":["第1季","第2季","第3季","第4季"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dateFormat-full":"y年M月d日EEEE","timeFormat-short":"ah:mm","field-year":"年","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","am":"上午","dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-MMMMd":"MMMMd日","dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","eraAbbr":["公元前","公元"],"field-dayperiod":"上午/下午","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","dateTimeFormat-long":"{1}{0}","dateFormatItem-MMMd":"MMMd日","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-y":"y年","dateFormatItem-hm":"ah:mm","dateFormatItem-yMMMd":"y年MMMd日","days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","pm":"下午","dateFormatItem-MMMMEd":"MMMMd日E","dateFormatItem-MMMMdd":"MMMMdd日","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormatItem-Hms":"H:mm:ss"})
\ No newline at end of file
diff --git a/js/dojo/dojo/cldr/nls/zh/number.js b/js/dojo/dojo/cldr/nls/zh/number.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/cldr/nls/zh/number.js
@@ -0,0 +1,1 @@
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
diff --git a/js/dojo/dojo/dnd/TimedMoveable.js b/js/dojo/dojo/dnd/TimedMoveable.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/dnd/TimedMoveable.js
@@ -0,0 +1,40 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){
+dojo._hasResource["dojo.dnd.TimedMoveable"]=true;
+dojo.provide("dojo.dnd.TimedMoveable");
+dojo.require("dojo.dnd.Moveable");
+(function(){
+var _1=dojo.dnd.Moveable.prototype.onMove;
+dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(_2,_3){
+if(!_3){
+_3={};
+}
+if(_3.timeout&&typeof _3.timeout=="number"&&_3.timeout>=0){
+this.timeout=_3.timeout;
+}
+},markupFactory:function(_4,_5){
+return new dojo.dnd.TimedMoveable(_5,_4);
+},onMoveStop:function(_6){
+if(_6._timer){
+clearTimeout(_6._timer);
+_1.call(this,_6,_6._leftTop);
+}
+dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);
+},onMove:function(_7,_8){
+_7._leftTop=_8;
+if(!_7._timer){
+var _9=this;
+_7._timer=setTimeout(function(){
+_7._timer=null;
+_1.call(_9,_7,_7._leftTop);
+},this.timeout);
+}
+}});
+})();
+}
diff --git a/js/dojo/dojo/fx/Toggler.js b/js/dojo/dojo/fx/Toggler.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/fx/Toggler.js
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.fx.Toggler"]){
+dojo._hasResource["dojo.fx.Toggler"]=true;
+dojo.provide("dojo.fx.Toggler");
+dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(_1){
+var _2=this;
+dojo.mixin(_2,_1);
+_2.node=_1.node;
+_2._showArgs=dojo.mixin({},_1);
+_2._showArgs.node=_2.node;
+_2._showArgs.duration=_2.showDuration;
+_2.showAnim=_2.showFunc(_2._showArgs);
+_2._hideArgs=dojo.mixin({},_1);
+_2._hideArgs.node=_2.node;
+_2._hideArgs.duration=_2.hideDuration;
+_2.hideAnim=_2.hideFunc(_2._hideArgs);
+dojo.connect(_2.showAnim,"beforeBegin",dojo.hitch(_2.hideAnim,"stop",true));
+dojo.connect(_2.hideAnim,"beforeBegin",dojo.hitch(_2.showAnim,"stop",true));
+},show:function(_3){
+return this.showAnim.play(_3||0);
+},hide:function(_4){
+return this.hideAnim.play(_4||0);
+}});
+}
diff --git a/js/dojo/dojo/fx/easing.js b/js/dojo/dojo/fx/easing.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/fx/easing.js
@@ -0,0 +1,166 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.fx.easing"]){
+dojo._hasResource["dojo.fx.easing"]=true;
+dojo.provide("dojo.fx.easing");
+dojo.fx.easing={linear:function(n){
+return n;
+},quadIn:function(n){
+return Math.pow(n,2);
+},quadOut:function(n){
+return n*(n-2)*-1;
+},quadInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,2)/2;
+}
+return -1*((--n)*(n-2)-1)/2;
+},cubicIn:function(n){
+return Math.pow(n,3);
+},cubicOut:function(n){
+return Math.pow(n-1,3)+1;
+},cubicInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,3)/2;
+}
+n-=2;
+return (Math.pow(n,3)+2)/2;
+},quartIn:function(n){
+return Math.pow(n,4);
+},quartOut:function(n){
+return -1*(Math.pow(n-1,4)-1);
+},quartInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,4)/2;
+}
+n-=2;
+return -1/2*(Math.pow(n,4)-2);
+},quintIn:function(n){
+return Math.pow(n,5);
+},quintOut:function(n){
+return Math.pow(n-1,5)+1;
+},quintInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,5)/2;
+}
+n-=2;
+return (Math.pow(n,5)+2)/2;
+},sineIn:function(n){
+return -1*Math.cos(n*(Math.PI/2))+1;
+},sineOut:function(n){
+return Math.sin(n*(Math.PI/2));
+},sineInOut:function(n){
+return -1*(Math.cos(Math.PI*n)-1)/2;
+},expoIn:function(n){
+return (n==0)?0:Math.pow(2,10*(n-1));
+},expoOut:function(n){
+return (n==1)?1:(-1*Math.pow(2,-10*n)+1);
+},expoInOut:function(n){
+if(n==0){
+return 0;
+}
+if(n==1){
+return 1;
+}
+n=n*2;
+if(n<1){
+return Math.pow(2,10*(n-1))/2;
+}
+--n;
+return (-1*Math.pow(2,-10*n)+2)/2;
+},circIn:function(n){
+return -1*(Math.sqrt(1-Math.pow(n,2))-1);
+},circOut:function(n){
+n=n-1;
+return Math.sqrt(1-Math.pow(n,2));
+},circInOut:function(n){
+n=n*2;
+if(n<1){
+return -1/2*(Math.sqrt(1-Math.pow(n,2))-1);
+}
+n-=2;
+return 1/2*(Math.sqrt(1-Math.pow(n,2))+1);
+},backIn:function(n){
+var s=1.70158;
+return Math.pow(n,2)*((s+1)*n-s);
+},backOut:function(n){
+n=n-1;
+var s=1.70158;
+return Math.pow(n,2)*((s+1)*n+s)+1;
+},backInOut:function(n){
+var s=1.70158*1.525;
+n=n*2;
+if(n<1){
+return (Math.pow(n,2)*((s+1)*n-s))/2;
+}
+n-=2;
+return (Math.pow(n,2)*((s+1)*n+s)+2)/2;
+},elasticIn:function(n){
+if(n==0||n==1){
+return n;
+}
+var p=0.3;
+var s=p/4;
+n=n-1;
+return -1*Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p);
+},elasticOut:function(n){
+if(n==0||n==1){
+return n;
+}
+var p=0.3;
+var s=p/4;
+return Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p)+1;
+},elasticInOut:function(n){
+if(n==0){
+return 0;
+}
+n=n*2;
+if(n==2){
+return 1;
+}
+var p=0.3*1.5;
+var s=p/4;
+if(n<1){
+n-=1;
+return -0.5*(Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p));
+}
+n-=1;
+return 0.5*(Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p))+1;
+},bounceIn:function(n){
+return (1-dojo.fx.easing.bounceOut(1-n));
+},bounceOut:function(n){
+var s=7.5625;
+var p=2.75;
+var l;
+if(n<(1/p)){
+l=s*Math.pow(n,2);
+}else{
+if(n<(2/p)){
+n-=(1.5/p);
+l=s*Math.pow(n,2)+0.75;
+}else{
+if(n<(2.5/p)){
+n-=(2.25/p);
+l=s*Math.pow(n,2)+0.9375;
+}else{
+n-=(2.625/p);
+l=s*Math.pow(n,2)+0.984375;
+}
+}
+}
+return l;
+},bounceInOut:function(n){
+if(n<0.5){
+return dojo.fx.easing.bounceIn(n*2)/2;
+}
+return (dojo.fx.easing.bounceOut(n*2-1)/2)+0.5;
+}};
+}
diff --git a/js/dojo/dojo/gears.js b/js/dojo/dojo/gears.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/gears.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.gears"]){
+dojo._hasResource["dojo.gears"]=true;
+dojo.provide("dojo.gears");
+dojo.gears._gearsObject=function(){
+var _1;
+var _2;
+var _3=dojo.getObject("google.gears");
+if(_3){
+return _3;
+}
+if(typeof GearsFactory!="undefined"){
+_1=new GearsFactory();
+}else{
+if(dojo.isIE){
+try{
+_1=new ActiveXObject("Gears.Factory");
+}
+catch(e){
+}
+}else{
+if(navigator.mimeTypes["application/x-googlegears"]){
+_1=document.createElement("object");
+_1.setAttribute("type","application/x-googlegears");
+_1.setAttribute("width",0);
+_1.setAttribute("height",0);
+_1.style.display="none";
+document.documentElement.appendChild(_1);
+}
+}
+}
+if(!_1){
+return null;
+}
+dojo.setObject("google.gears.factory",_1);
+return dojo.getObject("google.gears");
+};
+dojo.gears.available=(!!dojo.gears._gearsObject())||0;
+}
diff --git a/js/dojo/dojo/hash.js b/js/dojo/dojo/hash.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/hash.js
@@ -0,0 +1,133 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.hash"]){
+dojo._hasResource["dojo.hash"]=true;
+dojo.provide("dojo.hash");
+(function(){
+dojo.hash=function(_1,_2){
+if(!arguments.length){
+return _3();
+}
+if(_1.charAt(0)=="#"){
+_1=_1.substring(1);
+}
+if(_2){
+_4(_1);
+}else{
+location.href="#"+_1;
+}
+return _1;
+};
+var _5=null,_6=null,_7=dojo.config.hashPollFrequency||100;
+function _3(){
+var h=location.href,i=h.indexOf("#");
+return (i>=0)?h.substring(i+1):"";
+};
+function _8(){
+dojo.publish("/dojo/hashchange",[_3()]);
+};
+function _9(){
+if(_3()===_5){
+return;
+}
+_5=_3();
+_8();
+};
+function _4(_a){
+if(_6){
+if(_6.isTransitioning()){
+setTimeout(dojo.hitch(null,_4,_a),_7);
+return;
+}
+var _b=_6.iframe.location.href;
+var _c=_b.indexOf("?");
+_6.iframe.location.replace(_b.substring(0,_c)+"?"+_a);
+return;
+}
+location.replace("#"+_a);
+_9();
+};
+function _d(){
+var _e=document.createElement("iframe"),_f="dojo-hash-iframe",_10=dojo.config.dojoBlankHtmlUrl||dojo.moduleUrl("dojo","resources/blank.html");
+_e.id=_f;
+_e.src=_10+"?"+_3();
+_e.style.display="none";
+document.body.appendChild(_e);
+this.iframe=dojo.global[_f];
+var _11,_12,_13,_14,_15,_16=this.iframe.location,_17=dojo.global.location;
+function _18(){
+_5=_17.hash;
+_11=_15?_5:_16.search;
+_12=false;
+_13=null;
+};
+this.isTransitioning=function(){
+return _12;
+};
+this.pollLocation=function(){
+if(!_15){
+try{
+_16.search;
+if(document.title!=_14){
+_14=this.iframe.document.title=document.title;
+}
+}
+catch(e){
+_15=true;
+console.error("dojo.hash: Error adding history entry. Server unreachable.");
+}
+}
+if(_12&&_5===_17.hash){
+if(_15||_16.search===_13){
+_18();
+_8();
+}else{
+setTimeout(dojo.hitch(this,this.pollLocation),0);
+return;
+}
+}else{
+if(_5===_17.hash&&(_15||_11===_16.search)){
+}else{
+if(_5!==_17.hash){
+_5=_17.hash;
+_12=true;
+_13="?"+_3();
+_e.src=_10+_13;
+_15=false;
+setTimeout(dojo.hitch(this,this.pollLocation),0);
+return;
+}else{
+if(!_15){
+_17.href="#"+_16.search.substring(1);
+_18();
+_8();
+}
+}
+}
+}
+setTimeout(dojo.hitch(this,this.pollLocation),_7);
+};
+_18();
+setTimeout(dojo.hitch(this,this.pollLocation),_7);
+};
+dojo.addOnLoad(function(){
+if("onhashchange" in dojo.global&&(!dojo.isIE||(dojo.isIE>=8&&document.compatMode!="BackCompat"))){
+dojo.connect(dojo.global,"onhashchange",_8);
+}else{
+if(document.addEventListener){
+_5=_3();
+setInterval(_9,_7);
+}else{
+if(document.attachEvent){
+_6=new _d();
+}
+}
+}
+});
+})();
+}
diff --git a/js/dojo/dojo/html.js b/js/dojo/dojo/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/html.js
@@ -0,0 +1,148 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.html"]){
+dojo._hasResource["dojo.html"]=true;
+dojo.provide("dojo.html");
+dojo.require("dojo.parser");
+(function(){
+var _1=0,d=dojo;
+dojo.html._secureForInnerHtml=function(_2){
+return _2.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");
+};
+dojo.html._emptyNode=dojo.empty;
+dojo.html._setNodeContent=function(_3,_4){
+d.empty(_3);
+if(_4){
+if(typeof _4=="string"){
+_4=d._toDom(_4,_3.ownerDocument);
+}
+if(!_4.nodeType&&d.isArrayLike(_4)){
+for(var _5=_4.length,i=0;i<_4.length;i=_5==_4.length?i+1:0){
+d.place(_4[i],_3,"last");
+}
+}else{
+d.place(_4,_3,"last");
+}
+}
+return _3;
+};
+dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_6,_7){
+dojo.mixin(this,_6||{});
+_7=this.node=dojo.byId(this.node||_7);
+if(!this.id){
+this.id=["Setter",(_7)?_7.id||_7.tagName:"",_1++].join("_");
+}
+if(!(this.node||_7)){
+new Error(this.declaredClass+": no node provided to "+this.id);
+}
+},set:function(_8,_9){
+if(undefined!==_8){
+this.content=_8;
+}
+if(_9){
+this._mixin(_9);
+}
+this.onBegin();
+this.setContent();
+this.onEnd();
+return this.node;
+},setContent:function(){
+var _a=this.node;
+if(!_a){
+console.error("setContent given no node");
+}
+try{
+_a=dojo.html._setNodeContent(_a,this.content);
+}
+catch(e){
+var _b=this.onContentError(e);
+try{
+_a.innerHTML=_b;
+}
+catch(e){
+console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);
+}
+}
+this.node=_a;
+},empty:function(){
+if(this.parseResults&&this.parseResults.length){
+dojo.forEach(this.parseResults,function(w){
+if(w.destroy){
+w.destroy();
+}
+});
+delete this.parseResults;
+}
+dojo.html._emptyNode(this.node);
+},onBegin:function(){
+var _c=this.content;
+if(dojo.isString(_c)){
+if(this.cleanContent){
+_c=dojo.html._secureForInnerHtml(_c);
+}
+if(this.extractContent){
+var _d=_c.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_d){
+_c=_d[1];
+}
+}
+}
+this.empty();
+this.content=_c;
+return this.node;
+},onEnd:function(){
+if(this.parseContent){
+this._parse();
+}
+return this.node;
+},tearDown:function(){
+delete this.parseResults;
+delete this.node;
+delete this.content;
+},onContentError:function(_e){
+return "Error occured setting content: "+_e;
+},_mixin:function(_f){
+var _10={},key;
+for(key in _f){
+if(key in _10){
+continue;
+}
+this[key]=_f[key];
+}
+},_parse:function(){
+var _11=this.node;
+try{
+this.parseResults=dojo.parser.parse(_11,true);
+}
+catch(e){
+this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);
+}
+},_onError:function(_12,err,_13){
+var _14=this["on"+_12+"Error"].call(this,err);
+if(_13){
+console.error(_13,err);
+}else{
+if(_14){
+dojo.html._setNodeContent(this.node,_14,true);
+}
+}
+}});
+dojo.html.set=function(_15,_16,_17){
+if(undefined==_16){
+console.warn("dojo.html.set: no cont argument provided, using empty string");
+_16="";
+}
+if(!_17){
+return dojo.html._setNodeContent(_15,_16,true);
+}else{
+var op=new dojo.html._ContentSetter(dojo.mixin(_17,{content:_16,node:_15}));
+return op.set();
+}
+};
+})();
+}
diff --git a/js/dojo/dojo/jaxer.js b/js/dojo/dojo/jaxer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/jaxer.js
@@ -0,0 +1,19 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.jaxer"]){
+dojo._hasResource["dojo.jaxer"]=true;
+dojo.provide("dojo.jaxer");
+if(typeof print=="function"){
+console.debug=Jaxer.Log.debug;
+console.warn=Jaxer.Log.warn;
+console.error=Jaxer.Log.error;
+console.info=Jaxer.Log.info;
+console.log=Jaxer.Log.warn;
+}
+onserverload=dojo._loadInit;
+}
diff --git a/js/dojo/dojo/nls/ar/colors.js b/js/dojo/dojo/nls/ar/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/ar/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"أزرق معدني فاتح","orangered":"أحمر مائل للبرتقالي","midnightblue":"أزرق بحري","cadetblue":"أزرق ملون بالرمادي","seashell":"أبيض مائل للأصفر فاتح","slategrey":"رمادي اردوازي","coral":"مرجاني","darkturquoise":"تركواز داكن","antiquewhite":"أبيض عتيق","mediumspringgreen":"أخضر ربيعي متوسط","salmon":"برتقالي وردي شاحب","darkgrey":"رمادي داكن","ivory":"عاجي","greenyellow":"أخضر مائل للأصفر","mistyrose":"وردي","lightsalmon":"فضي فاتح","silver":"فضي","dimgrey":"رمادي شاحب","orange":"برتقالي","white":"أبيض","navajowhite":"أبيض ملاحي","royalblue":"أزرق ملكي","deeppink":"أحمر وردي غامق","lime":"ليموني","oldlace":"برتقالي مائل للأصفر شاحب","chartreuse":"أخضر مائل للصفرة","darkcyan":"أزرق سماوي داكن","yellow":"أصفر","linen":"كتاني","olive":"أخضر زيتوني داكن","gold":"ذهبي","lawngreen":"أخضر بلون العشب","lightyellow":"أصفر فاتح","tan":"خمري","darkviolet":"بنفسجي داكن","lightslategrey":"رمادي اردوازي فاتح","grey":"رمادي","darkkhaki":"كاكي داكن","green":"أخضر","deepskyblue":"أزرق سماوي غامق","aqua":"أزرق مائي","sienna":"بني محروق","mintcream":"أصفر شاحب مائل للأخضر الزرعي","rosybrown":"بني وردي","mediumslateblue":"أزرق اردوازي متوسط","magenta":"أحمر قرمزي","lightseagreen":"أخضر مائل للأزرق فاتح","cyan":"أزرق سماوي","olivedrab":"أسود فاتح","darkgoldenrod":"أصفر ذهبي داكن","slateblue":"أزرق اردوازي","mediumaquamarine":"أزرق مائل للأخضر (زبرجد) متوسط","lavender":"أرجواني شاحب","mediumseagreen":"أخضر مائل للأزرق متوسط","maroon":"أحمر داكن","darkslategray":"رمادي اردوازي داكن","mediumturquoise":"تركواز متوسط","ghostwhite":"أبيض شفاف","darkblue":"أزرق داكن","mediumvioletred":"أحمر-بنفسجي متوسط","brown":"بني","lightgray":"رمادي فاتح","sandybrown":"بني مائل للصفرة","pink":"وردي","firebrick":"أصفر زاهي","indigo":"نيلي","snow":"أبيض ثلجي","darkorchid":"أرجواني داكن","turquoise":"تركواز","chocolate":"بني غامق","springgreen":"أخضر ربيعي","moccasin":"نحاسي أحمر","navy":"أزرق داكن","lemonchiffon":"أصفر شفاف","teal":"بترولي","floralwhite":"أبيض زهري","cornflowerblue":"أزرق عنبري","paleturquoise":"تركواز شاحب","purple":"ارجواني","gainsboro":"رمادي مائل للأزرق فاتح","plum":"أرجواني داكن","red":"أحمر","blue":"أزرق","forestgreen":"أخضر بلون أشجار الغابات","darkgreen":"أخضر داكن","honeydew":"أبيض مائل للأخضر","darkseagreen":"أخضر مائل للأزرق داكن","lightcoral":"مرجاني فاتح","palevioletred":"أحمر-بنفسجي شاحب","mediumpurple":"قرمزي متوسط","saddlebrown":"بني فاتح","darkmagenta":"قرمزي داكن","thistle":"ارجواني شاحب","whitesmoke":"دخان أبيض","wheat":"أخضر قمحي","violet":"بنفسجي","lightskyblue":"أزرق سماوي فاتح","goldenrod":"أصفر ذهبي","mediumblue":"أزرق متوسط","skyblue":"أزرق سماوي","crimson":"قرمزي","darksalmon":"فضي داكن","darkred":"أحمر داكن","darkslategrey":"رمادي اردوازي داكن","peru":"بني جملي","lightgrey":"رمادي فاتح","lightgoldenrodyellow":"أصفر ذهبي فاتح","blanchedalmond":"أخضر مائل للبياض","aliceblue":"أزرق فاتح","bisque":"أصفر برتقالي الى رمادي مصفر","slategray":"رمادي اردوازي","palegoldenrod":"أصفر ذهبي شاحب","darkorange":"برتقالي داكن","aquamarine":"أزرق مائل للأخضر (زبرجد)","lightgreen":"أخضر فاتح","burlywood":"خشبي","dodgerblue":"أزرق عنبري","darkgray":"رمادي داكن","lightcyan":"سماوي فاتح","powderblue":"أزرق مائل للأصفر","blueviolet":"أزرق-بنفسجي","orchid":"أرجواني فاتح","dimgray":"رمادي شاحب","beige":"بيج","fuchsia":"فوشيا","lavenderblush":"أحمر أرجواني","hotpink":"أحمر وردي زاهي","steelblue":"أزرق معدني","tomato":"أحمر مائل للأصفر","lightpink":"وردي فاتح","limegreen":"أخضر ليموني","indianred":"أحمر هندي","papayawhip":"خوخي فاتح","lightslategray":"رمادي اردوازي فاتح","gray":"رمادي","mediumorchid":"أرجواني متوسط","cornsilk":"حريري","black":"أسود","seagreen":"أخضر مائل للأزرق","darkslateblue":"أزرق اردوازي داكن","khaki":"كاكي","lightblue":"أزرق فاتح","palegreen":"أخضر شاحب","azure":"أزرق سماوي","peachpuff":"خوخي مائل للأصفر","darkolivegreen":"أخضر زيتوني داكن","yellowgreen":"أخضر مائل للأصفر"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/ca/colors.js b/js/dojo/dojo/nls/ca/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/ca/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/da/colors.js b/js/dojo/dojo/nls/da/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/da/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/el/colors.js b/js/dojo/dojo/nls/el/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/el/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"ανοιχτό μπλε ατσαλιού","orangered":"πορτοκαλοκόκκινο","midnightblue":"πολύ σκούρο μπλε","cadetblue":"μπλε του στρατού","seashell":"κοχύλι","slategrey":"μεταλλικό γκρι","coral":"κοραλί","darkturquoise":"σκούρο τυρκουάζ","antiquewhite":"ξεθωριασμένο λευκό","mediumspringgreen":"μεσαίο πράσινο της άνοιξης","salmon":"σομόν","darkgrey":"σκούρο γκρι","ivory":"ιβουάρ","greenyellow":"πρασινοκίτρινο","mistyrose":"τριανταφυλλί","lightsalmon":"ανοιχτό σομόν","silver":"ασημί","dimgrey":"αχνό γκρι","orange":"πορτοκαλί","white":"λευκό","navajowhite":"άσπρο Ναβάχο","royalblue":"έντονο μπλε","deeppink":"βαθύ ροζ","lime":"λαχανί","oldlace":"εκρού","chartreuse":"φωτεινό κιτρινοπράσινο","darkcyan":"σκούρο κυανό","yellow":"κίτρινο","linen":"σπαγγί","olive":"πράσινο λαδί","gold":"χρυσαφί","lawngreen":"σκούρο πράσινο","lightyellow":"ανοιχτό κίτρινο","tan":"ώχρα","darkviolet":"σκούρο βιολετί","lightslategrey":"ανοιχτό μεταλλικό γκρι","grey":"γκρι","darkkhaki":"σκούρο χακί","green":"πράσινο","deepskyblue":"βαθύ μπλε το ουρανού","aqua":"γαλάζιο","sienna":"καφεκίτρινο","mintcream":"βεραμάν","rosybrown":"καστανό","mediumslateblue":"μεσαίο μεταλλικό μπλε","magenta":"ματζέντα","lightseagreen":"ανοιχτό πράσινο της θάλασσας","cyan":"κυανό","olivedrab":"λαδί","darkgoldenrod":"σκούρο χρυσοκίτρινο","slateblue":"μεταλλικό μπλε","mediumaquamarine":"μεσαίο γαλαζοπράσινο","lavender":"λίλα","mediumseagreen":"μεσαίο πράσινο της θάλασσας","maroon":"βυσσινί","darkslategray":"σκούρο μεταλλικό γκρι","mediumturquoise":"μεσαίο τυρκουάζ","ghostwhite":"άσπρο","darkblue":"σκούρο μπλε","mediumvioletred":"μεσαίο κόκκινο βιολετί","brown":"καφέ","lightgray":"ανοιχτό γκρι","sandybrown":"μπεζ της άμμου","pink":"ροζ","firebrick":"κεραμιδί","indigo":"λουλακί","snow":"χιονί","darkorchid":"σκούρα ορχιδέα","turquoise":"τυρκουάζ","chocolate":"σοκολατί","springgreen":"πράσινο της άνοιξης","moccasin":"μόκα","navy":"μπλε του ναυτικού","lemonchiffon":"λεμονί","teal":"πετρόλ","floralwhite":"λευκό των ανθών","cornflowerblue":"μεσαίο μπλε","paleturquoise":"αχνό τυρκουάζ","purple":"μωβ","gainsboro":"γκρι σιέλ","plum":"δαμασκηνί","red":"κόκκινο","blue":"μπλε","forestgreen":"πράσινο του δάσους","darkgreen":"σκούρο πράσινο","honeydew":"μελί","darkseagreen":"σκούρο πράσινο της θάλασσας","lightcoral":"ανοιχτό κοραλί","palevioletred":"αχνό κόκκινο βιολετί","mediumpurple":"μεσαίο μωβ","saddlebrown":"βαθύ καφέ","darkmagenta":"σκούρο ματζέντα","thistle":"μωβ βιολετί","whitesmoke":"λευκός καπνός","wheat":"σταρένιο","violet":"βιολετί","lightskyblue":"ανοιχτό μπλε το ουρανού","goldenrod":"χρυσοκίτρινο","mediumblue":"μεσαίο μπλε","skyblue":"μπλε του ουρανού","crimson":"βαθύ κόκκινο","darksalmon":"σκούρο σομόν","darkred":"σκούρο κόκκινο","darkslategrey":"σκούρο μεταλλικό γκρι","peru":"περού","lightgrey":"ανοιχτό γκρι","lightgoldenrodyellow":"ανοιχτό χρυσοκίτρινο","blanchedalmond":"ζαχαρί","aliceblue":"σιέλ","bisque":"σκούρο κρεμ","slategray":"μεταλλικό γκρι","palegoldenrod":"αχνό χρυσοκίτρινο","darkorange":"σκούρο πορτοκαλί","aquamarine":"γαλαζοπράσινο","lightgreen":"ανοιχτό πράσινο","burlywood":"καφέ του ξύλου","dodgerblue":"σκούρο ελεκτρίκ","darkgray":"σκούρο γκρι","lightcyan":"ανοιχτό κυανό","powderblue":"αχνό μπλε","blueviolet":"βιολετί","orchid":"ορχιδέα","dimgray":"αχνό γκρι","beige":"μπεζ","fuchsia":"φούξια","lavenderblush":"μωβ λεβάντας","hotpink":"έντονο ροζ","steelblue":"μπλε ατσαλιού","tomato":"κόκκινο της ντομάτας","lightpink":"ανοιχτό ροζ","limegreen":"πράσινο λαχανί","indianred":"ινδικό κόκκινο","papayawhip":"αχνό ροζ","lightslategray":"ανοιχτό μεταλλικό γκρι","gray":"γκρι","mediumorchid":"μεσαία ορχιδέα","cornsilk":"ασημί του καλαμποκιού","black":"μαύρο","seagreen":"πράσινο της θάλασσας","darkslateblue":"σκούρο μεταλλικό μπλε","khaki":"χακί","lightblue":"ανοιχτό μπλε","palegreen":"αχνό πράσινο","azure":"μπλε του ουρανού","peachpuff":"ροδακινί","darkolivegreen":"σκούρο πράσινο λαδί","yellowgreen":"κιτρινοπράσινο"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/fi/colors.js b/js/dojo/dojo/nls/fi/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/fi/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/he/colors.js b/js/dojo/dojo/nls/he/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/he/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/nb/colors.js b/js/dojo/dojo/nls/nb/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/nb/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/nl/colors.js b/js/dojo/dojo/nls/nl/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/nl/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/pt-pt/colors.js b/js/dojo/dojo/nls/pt-pt/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/pt-pt/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/sk/colors.js b/js/dojo/dojo/nls/sk/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/sk/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/sl/colors.js b/js/dojo/dojo/nls/sl/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/sl/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/sv/colors.js b/js/dojo/dojo/nls/sv/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/sv/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/th/colors.js b/js/dojo/dojo/nls/th/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/th/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"})
\ No newline at end of file
diff --git a/js/dojo/dojo/nls/tr/colors.js b/js/dojo/dojo/nls/tr/colors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/nls/tr/colors.js
@@ -0,0 +1,1 @@
+({"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"})
\ No newline at end of file
diff --git a/js/dojo/dojo/resources/_modules.js b/js/dojo/dojo/resources/_modules.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/resources/_modules.js
@@ -0,0 +1,7 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
diff --git a/js/dojo/dojo/resources/blank.gif b/js/dojo/dojo/resources/blank.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e565824aafafe632011b281cba976baf8b3ba89a
GIT binary patch
literal 43
qc${<hbhEHbWMp7uXkcLY4+e@qSs1y10y+#p0Fq%~V)9{Rum%7ZWeN!Z
diff --git a/js/dojo/dojo/robot.js b/js/dojo/dojo/robot.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/robot.js
@@ -0,0 +1,44 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.robot"]){
+dojo._hasResource["dojo.robot"]=true;
+dojo.provide("dojo.robot");
+dojo.experimental("dojo.robot");
+dojo.require("doh.robot");
+(function(){
+dojo.mixin(doh.robot,{_resolveNode:function(n){
+if(typeof n=="function"){
+n=n();
+}
+return n?dojo.byId(n):null;
+},_scrollIntoView:function(_1){
+_1.scrollIntoView(false);
+},_position:function(n){
+return dojo.position(n,false);
+},scrollIntoView:function(_2,_3){
+doh.robot.sequence(function(){
+doh.robot._scrollIntoView(doh.robot._resolveNode(_2));
+},_3);
+},mouseMoveAt:function(_4,_5,_6,_7,_8){
+doh.robot._assertRobot();
+_6=_6||100;
+this.sequence(function(){
+_4=doh.robot._resolveNode(_4);
+doh.robot._scrollIntoView(_4);
+var _9=doh.robot._position(_4);
+if(_8===undefined){
+_7=_9.w/2;
+_8=_9.h/2;
+}
+var x=_9.x+_7;
+var y=_9.y+_8;
+doh.robot._mouseMove(x,y,false,_6);
+},_5,_6);
+}});
+})();
+}
diff --git a/js/dojo/dojo/robotx.js b/js/dojo/dojo/robotx.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojo/robotx.js
@@ -0,0 +1,80 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.robotx"]){
+dojo._hasResource["dojo.robotx"]=true;
+dojo.provide("dojo.robotx");
+dojo.require("dojo.robot");
+dojo.experimental("dojo.robotx");
+(function(){
+doh.robot._runsemaphore.lock.push("dojo.robotx.lock");
+var _1=document.getElementById("robotapplication");
+var _2=dojo.connect(doh,"_groupStarted",function(){
+dojo.disconnect(_2);
+_1.style.visibility="visible";
+});
+var _3=function(){
+doh.robot._updateDocument();
+_3=null;
+var _4=(document.compatMode=="BackCompat")?document.body:document.documentElement;
+var _5=document.getElementById("robotconsole").offsetHeight;
+if(_5){
+_1.style.height=(_4.clientHeight-_5)+"px";
+}
+doh.run();
+};
+var _6=function(){
+if(_3){
+_3();
+}
+var _7=dojo.connect(dojo.body(),"onunload",function(){
+dojo.global=window;
+dojo.doc=document;
+dojo.disconnect(_7);
+});
+};
+dojo.config.debugContainerId="robotconsole";
+dojo.config.debugHeight=dojo.config.debugHeight||200;
+document.write("<div id=\"robotconsole\" style=\"position:absolute;left:0px;bottom:0px;width:100%;\"></div>");
+_1=document.createElement("iframe");
+_1.setAttribute("ALLOWTRANSPARENCY","true");
+_1.scrolling=dojo.isIE?"yes":"auto";
+dojo.style(_1,{visibility:"hidden",border:"0px none",padding:"0px",margin:"0px",position:"absolute",left:"0px",top:"0px",width:"100%",height:"100%"});
+if(_1["attachEvent"]!==undefined){
+_1.attachEvent("onload",_6);
+}else{
+dojo.connect(_1,"onload",_6);
+}
+dojo.mixin(doh.robot,{_updateDocument:function(){
+dojo.setContext(_1.contentWindow,_1.contentWindow.document);
+var _8=dojo.global;
+if(_8["dojo"]){
+dojo._topics=_8.dojo._topics;
+}
+},initRobot:function(_9){
+_1.src=_9;
+dojo.addOnLoad(function(){
+var _a={overflow:dojo.isWebKit?"hidden":"visible",margin:"0px",borderWidth:"0px",height:"100%",width:"100%"};
+dojo.style(document.documentElement,_a);
+dojo.style(document.body,_a);
+document.body.appendChild(_1);
+var _b=document.createElement("base");
+_b.href=_9;
+document.getElementsByTagName("head")[0].appendChild(_b);
+});
+},waitForPageToLoad:function(_c){
+var d=new doh.Deferred();
+_3=function(){
+_3=null;
+doh.robot._updateDocument();
+d.callback(true);
+};
+_c();
+return d;
+}});
+})();
+}
diff --git a/js/dojo/dojox/analytics.js b/js/dojo/dojox/analytics.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics"]){
+dojo._hasResource["dojox.analytics"]=true;
+dojo.provide("dojox.analytics");
+dojo.require("dojox.analytics._base");
+}
diff --git a/js/dojo/dojox/analytics/README b/js/dojo/dojox/analytics/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/README
@@ -0,0 +1,139 @@
+-------------------------------------------------------------------------------
+dojox.analytics
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 12/17/2007
+-------------------------------------------------------------------------------
+Project state:
+[base]: alpha
+[Urchin]: alpha
+-------------------------------------------------------------------------------
+Project authors
+ Dustin Machi (dmachi)
+ Peter Higgins (dante)
+-------------------------------------------------------------------------------
+Project description
+ analytics and client monitoring system. Including the base analytics
+system and any number of plugins enables logging of different system data
+back to the server. Plugins included at this time:
+
+ dojo - reports dojo startup collected information
+ window - reports available window information to the server
+ mouseOver - allows periodic sampling of mouseOver
+ mouseClick - reports any mouse clicks to the server
+ idle - reports idle/activity
+ consoleMessages - reports console.* messages to the server
+
+ Additionally, a Google Analytics (Urchin tracker) helper is included
+ in this project, though is unrelated to the Core dojox.analytics
+ project code.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+Usage:
+
+The primary intended usage will be to create a custom build layer that includes
+the particular plugins you need for your project. However in practice you
+can use the system as such:
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="parseOnLoad: true, isDebug: false, usePlainJson: true, sendMethod: 'script', sendInterval: 5000"></script>
+
+ <script language="JavaScript" type="text/javascript">
+ // include the analytics system
+ dojo.require("dojox.analytics");
+
+ //tracks mouse clicks on the page
+ dojo.require("dojox.analytics.plugins.mouseClick");
+
+ // this plugin returns the informatin dojo collects when it launches
+ dojo.require("dojox.analytics.plugins.dojo");
+
+ // this plugin return the information the window has when it launches
+ // and it also ties to a few events such as window.option
+ dojo.require("dojox.analytics.plugins.window");
+
+ // this plugin tracks console. message, It logs console.error, warn, and
+ // info messages to the tracker. It also defines console.rlog() which
+ // can be used to log only to the server. Note that if isDebug() is disabled
+ // you will still see the console messages on the sever, but not in the actual
+ // browser console.
+ dojo.require("dojox.analytics.plugins.consoleMessages");
+
+ // tracks where a mouse is on a page an what it is over, periodically sampling
+ // and storing this data
+ dojo.require("dojox.analytics.plugins.mouseOver");
+
+ //tracks when the user has gone idle
+ dojo.require("dojox.analytics.plugins.idle");
+
+ </script>
+
+When done using a build, none of the dojo.require() statement will be requires
+would already be in the build.
+
+Most of the plugins and the base itself have a number of configurable params
+that are passed in via the djConfig variable set. This approach is taken so that
+the parameters can be easily provided in the case of a build or for a custom
+dojo.js build with analytics built in. Examples for different build profiles
+are in the profiles directory.
+
+Available Configuration Parameters:
+
+ Base Configs
+ sendInterval - Normal send interval. Default 5000
+ sendMethod - "script" || "xhrPost"
+ inTransitRetry - Delay before retrying an a send if it was in transit
+ or if there is still data to be sent after a post.
+ Default 1000
+ analyticsUrl - url to send logging data to. defaults to the test php
+ file for now
+ maxRequestSize - Maximum size of GET style requests. Capped at 2000 for
+ IE, and 4000 otherwise
+
+ consoleMessages Config:
+
+ consoleLogFuncs - functions from the console object that you will log to
+ the server. If the console object doesn't exist
+ or a particuarl method doesn't exist it will be
+ created as a remote logging only method. This provides
+ a quick and convient way to automatically define
+ a remote logging funciton that includes the functions
+ name in the log. The 'rlog' in the default paramerters
+ is an example of this. Defaults to ["error", "warn", "info", "rlog"]
+
+ idle Config:
+
+ idleTime - Number of ms to be idle before being reported to the server as idle
+
+ mouseOver config:
+ targetProps - the properties whose values will be reported for each target from
+ a mouse over sample. defaults to ["id","className","localName","href", "spellcheck", "lang", "textContent", "value" ]
+
+ sampleDelay - the delay in ms between mouseover samples. Defaults to 2500
+
+ window config:
+ windowConnects - methods on the window objec that will be attached to
+ have its data passed to the server when called.
+
+
+Note that the basic usage of this system simply serializes json with toJson() when passed
+to the analytics addData() method. If data is passed that has circular references
+it will die. Take care not to do that or be surprised when it doens't work
+in those cases.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/analytics
+
+Install into the following directory structure:
+/dojox/analytics/
+
+...which should be at the same level as your Dojo checkout.
diff --git a/js/dojo/dojox/analytics/Urchin.js b/js/dojo/dojox/analytics/Urchin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/Urchin.js
@@ -0,0 +1,31 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.Urchin"]){
+dojo._hasResource["dojox.analytics.Urchin"]=true;
+dojo.provide("dojox.analytics.Urchin");
+dojo.declare("dojox.analytics.Urchin",null,{acct:"",constructor:function(_1){
+this.tracker=null;
+dojo.mixin(this,_1);
+this.acct=this.acct||dojo.config.urchin;
+var re=/loaded|complete/,_2=("https:"==dojo.doc.location.protocol)?"https://ssl.":"http://www.",h=dojo.doc.getElementsByTagName("head")[0],n=dojo.create("script",{src:_2+"google-analytics.com/ga.js"},h);
+n.onload=n.onreadystatechange=dojo.hitch(this,function(e){
+if(e&&e.type=="load"||re.test(n.readyState)){
+n.onload=n.onreadystatechange=null;
+this._gotGA();
+h.removeChild(n);
+}
+});
+},_gotGA:function(){
+this.tracker=_gat._getTracker(this.acct);
+this.GAonLoad.apply(this,arguments);
+},GAonLoad:function(){
+this.trackPageView();
+},trackPageView:function(_3){
+this.tracker._trackPageview.apply(this,arguments);
+}});
+}
diff --git a/js/dojo/dojox/analytics/_base.js b/js/dojo/dojox/analytics/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/_base.js
@@ -0,0 +1,82 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics._base"]){
+dojo._hasResource["dojox.analytics._base"]=true;
+dojo.provide("dojox.analytics._base");
+dojox.analytics=function(){
+this._data=[];
+this._id=1;
+this.sendInterval=dojo.config["sendInterval"]||5000;
+this.inTransitRetry=dojo.config["inTransitRetry"]||200;
+this.dataUrl=dojo.config["analyticsUrl"]||dojo.moduleUrl("dojox.analytics.logger","dojoxAnalytics.php");
+this.sendMethod=dojo.config["sendMethod"]||"xhrPost";
+this.maxRequestSize=dojo.isIE?2000:dojo.config["maxRequestSize"]||4000;
+dojo.addOnLoad(this,"schedulePusher");
+dojo.addOnUnload(this,"pushData",true);
+};
+dojo.extend(dojox.analytics,{schedulePusher:function(_1){
+setTimeout(dojo.hitch(this,"checkData"),_1||this.sendInterval);
+},addData:function(_2,_3){
+if(arguments.length>2){
+var c=[];
+for(var i=1;i<arguments.length;i++){
+c.push(arguments[i]);
+}
+_3=c;
+}
+this._data.push({plugin:_2,data:_3});
+},checkData:function(){
+if(this._inTransit){
+this.schedulePusher(this.inTransitRetry);
+return;
+}
+if(this.pushData()){
+return;
+}
+this.schedulePusher();
+},pushData:function(){
+if(this._data.length){
+this._inTransit=this._data;
+this._data=[];
+var _4;
+switch(this.sendMethod){
+case "script":
+_4=dojo.io.script.get({url:this.getQueryPacket(),preventCache:1,callbackParamName:"callback"});
+break;
+case "xhrPost":
+default:
+_4=dojo.xhrPost({url:this.dataUrl,content:{id:this._id++,data:dojo.toJson(this._inTransit)}});
+break;
+}
+_4.addCallback(this,"onPushComplete");
+return _4;
+}
+return false;
+},getQueryPacket:function(){
+while(true){
+var _5={id:this._id++,data:dojo.toJson(this._inTransit)};
+var _6=this.dataUrl+"?"+dojo.objectToQuery(_5);
+if(_6.length>this.maxRequestSize){
+this._data.unshift(this._inTransit.pop());
+this._split=1;
+}else{
+return _6;
+}
+}
+},onPushComplete:function(_7){
+if(this._inTransit){
+delete this._inTransit;
+}
+if(this._data.length>0){
+this.schedulePusher(this.inTransitRetry);
+}else{
+this.schedulePusher();
+}
+}});
+dojox.analytics=new dojox.analytics();
+}
diff --git a/js/dojo/dojox/analytics/plugins/consoleMessages.js b/js/dojo/dojox/analytics/plugins/consoleMessages.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/consoleMessages.js
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.consoleMessages"]){
+dojo._hasResource["dojox.analytics.plugins.consoleMessages"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.consoleMessages");
+dojox.analytics.plugins.consoleMessages=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","consoleMessages");
+var _1=dojo.config["consoleLogFuncs"]||["error","warn","info","rlog"];
+if(!console){
+console={};
+}
+for(var i=0;i<_1.length;i++){
+if(console[_1[i]]){
+dojo.connect(console,_1[i],dojo.hitch(this,"addData",_1[i]));
+}else{
+console[_1[i]]=dojo.hitch(this,"addData",_1[i]);
+}
+}
+})();
+}
diff --git a/js/dojo/dojox/analytics/plugins/dojo.js b/js/dojo/dojox/analytics/plugins/dojo.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/dojo.js
@@ -0,0 +1,23 @@
+if(!dojo._hasResource["dojox.analytics.plugins.dojo"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.analytics.plugins.dojo"] = true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.dojo");
+
+dojox.analytics.plugins.dojo = new (function(){
+ // summary:
+ // plugin to have analyitcs return the base info dojo collects
+ this.addData = dojo.hitch(dojox.analytics, "addData", "dojo");
+ dojo.addOnLoad(dojo.hitch(this, function(){
+ var data = {};
+ for(var i in dojo){
+ if ((i=="version") || ((!dojo.isObject(dojo[i]))&&(i[0]!="_"))){
+ data[i]=dojo[i];
+ }
+ }
+
+ if (dojo.config){data.djConfig=dojo.config}
+ this.addData(data);
+ }));
+})();
+
+}
diff --git a/js/dojo/dojox/analytics/plugins/idle.js b/js/dojo/dojox/analytics/plugins/idle.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/idle.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.idle"]){
+dojo._hasResource["dojox.analytics.plugins.idle"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.idle");
+dojox.analytics.plugins.idle=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","idle");
+this.idleTime=dojo.config["idleTime"]||60000;
+this.idle=true;
+this.setIdle=function(){
+this.addData("isIdle");
+this.idle=true;
+};
+dojo.addOnLoad(dojo.hitch(this,function(){
+var _1=["onmousemove","onkeydown","onclick","onscroll"];
+for(var i=0;i<_1.length;i++){
+dojo.connect(dojo.doc,_1[i],this,function(e){
+if(this.idle){
+this.idle=false;
+this.addData("isActive");
+this.idleTimer=setTimeout(dojo.hitch(this,"setIdle"),this.idleTime);
+}else{
+clearTimeout(this.idleTimer);
+this.idleTimer=setTimeout(dojo.hitch(this,"setIdle"),this.idleTime);
+}
+});
+}
+}));
+})();
+}
diff --git a/js/dojo/dojox/analytics/plugins/mouseClick.js b/js/dojo/dojox/analytics/plugins/mouseClick.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/mouseClick.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.mouseClick"]){
+dojo._hasResource["dojox.analytics.plugins.mouseClick"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.mouseClick");
+dojox.analytics.plugins.mouseClick=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","mouseClick");
+this.onClick=function(e){
+this.addData(this.trimEvent(e));
+};
+dojo.connect(dojo.doc,"onclick",this,"onClick");
+this.trimEvent=function(e){
+var t={};
+for(var i in e){
+switch(i){
+case "target":
+case "originalTarget":
+case "explicitOriginalTarget":
+var _1=["id","className","nodeName","localName","href","spellcheck","lang"];
+t[i]={};
+for(var j=0;j<_1.length;j++){
+if(e[i][_1[j]]){
+if(_1[j]=="text"||_1[j]=="textContent"){
+if((e[i]["localName"]!="HTML")&&(e[i]["localName"]!="BODY")){
+t[i][_1[j]]=e[i][_1[j]].substr(0,50);
+}
+}else{
+t[i][_1[j]]=e[i][_1[j]];
+}
+}
+}
+break;
+case "clientX":
+case "clientY":
+case "pageX":
+case "pageY":
+case "screenX":
+case "screenY":
+t[i]=e[i];
+break;
+}
+}
+return t;
+};
+})();
+}
diff --git a/js/dojo/dojox/analytics/plugins/mouseOver.js b/js/dojo/dojox/analytics/plugins/mouseOver.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/mouseOver.js
@@ -0,0 +1,77 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.mouseOver"]){
+dojo._hasResource["dojox.analytics.plugins.mouseOver"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.mouseOver");
+dojox.analytics.plugins.mouseOver=new (function(){
+this.watchMouse=dojo.config["watchMouseOver"]||true;
+this.mouseSampleDelay=dojo.config["sampleDelay"]||2500;
+this.addData=dojo.hitch(dojox.analytics,"addData","mouseOver");
+this.targetProps=dojo.config["targetProps"]||["id","className","localName","href","spellcheck","lang","textContent","value"];
+this.toggleWatchMouse=function(){
+if(this._watchingMouse){
+dojo.disconnect(this._watchingMouse);
+delete this._watchingMouse;
+return;
+}
+dojo.connect(dojo.doc,"onmousemove",this,"sampleMouse");
+};
+if(this.watchMouse){
+dojo.connect(dojo.doc,"onmouseover",this,"toggleWatchMouse");
+dojo.connect(dojo.doc,"onmouseout",this,"toggleWatchMouse");
+}
+this.sampleMouse=function(e){
+if(!this._rateLimited){
+this.addData("sample",this.trimMouseEvent(e));
+this._rateLimited=true;
+setTimeout(dojo.hitch(this,function(){
+if(this._rateLimited){
+this.trimMouseEvent(this._lastMouseEvent);
+delete this._lastMouseEvent;
+delete this._rateLimited;
+}
+}),this.mouseSampleDelay);
+}
+this._lastMouseEvent=e;
+return e;
+};
+this.trimMouseEvent=function(e){
+var t={};
+for(var i in e){
+switch(i){
+case "target":
+var _1=this.targetProps;
+t[i]={};
+for(var j=0;j<_1.length;j++){
+if(dojo.isObject(e[i])&&_1[j] in e[i]){
+if(_1[j]=="text"||_1[j]=="textContent"){
+if(e[i]["localName"]&&(e[i]["localName"]!="HTML")&&(e[i]["localName"]!="BODY")){
+t[i][_1[j]]=e[i][_1[j]].substr(0,50);
+}
+}else{
+t[i][_1[j]]=e[i][_1[j]];
+}
+}
+}
+break;
+case "x":
+case "y":
+if(e[i]){
+var _2=e[i];
+t[i]=_2+"";
+}
+break;
+default:
+break;
+}
+}
+return t;
+};
+})();
+}
diff --git a/js/dojo/dojox/analytics/plugins/window.js b/js/dojo/dojox/analytics/plugins/window.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/plugins/window.js
@@ -0,0 +1,37 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.window"]){
+dojo._hasResource["dojox.analytics.plugins.window"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.window");
+dojox.analytics.plugins.window=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","window");
+this.windowConnects=dojo.config["windowConnects"]||["open","onerror"];
+for(var i=0;i<this.windowConnects.length;i++){
+dojo.connect(window,this.windowConnects[i],dojo.hitch(this,"addData",this.windowConnects[i]));
+}
+dojo.addOnLoad(dojo.hitch(this,function(){
+var _1={};
+for(var i in window){
+if(dojo.isObject(window[i])){
+switch(i){
+case "location":
+case "console":
+_1[i]=window[i];
+break;
+default:
+break;
+}
+}else{
+_1[i]=window[i];
+}
+}
+this.addData(_1);
+}));
+})();
+}
diff --git a/js/dojo/dojox/analytics/profiles/analytics.profile.js b/js/dojo/dojox/analytics/profiles/analytics.profile.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/profiles/analytics.profile.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={layers:[{name:"../dojox/analytics.js",dependencies:["dojox.analytics","dojox.analytics.plugins.dojo","dojox.analytics.plugins.window","dojox.analytics.plugins.consoleMessages","dojox.analytics.plugins.mouseOver","dojox.analytics.plugins.mouseClick","dojox.analytics.plugins.idle"]}],prefixes:[["dojox","../dojox"],["dijit","../dijit"]]};
diff --git a/js/dojo/dojox/analytics/profiles/analyticsInBase.profile.js b/js/dojo/dojox/analytics/profiles/analyticsInBase.profile.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/analytics/profiles/analyticsInBase.profile.js
@@ -0,0 +1,8 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={layers:[{name:"dojo.js",dependencies:["dojox.analytics","dojox.analytics.plugins.dojo","dojox.analytics.plugins.window","dojox.analytics.plugins.consoleMessages","dojox.analytics.plugins.mouseOver","dojox.analytics.plugins.mouseClick","dojox.analytics.plugins.idle"]}],prefixes:[["dojox","../dojox"],["dijit","../dijit"]]};
diff --git a/js/dojo/dojox/atom/README b/js/dojo/dojox/atom/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/README
@@ -0,0 +1,53 @@
+-------------------------------------------------------------------------------
+DojoX Data
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/18/2008
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+ Jared Jurkiewicz (jared.jurkiewicz@gmail.com)
+ Benjamin Schell (Corporate CLA)
+
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX Atom project is an implementation of the ATOM document format in a
+JavaScript model and a full Atom Publishing Protocol (APP) io library for working
+with ATOM feeds
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Atom has dependencies on core dojo (dojo.data) and the D.O.H. unit test
+framework.
+-------------------------------------------------------------------------------
+Documentation:
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+as well as dojocampus (http://docs.dojocampus.org/dojox/atom)
+-------------------------------------------------------------------------------
+Contributions:
+
+Constributions of documentation, examples, and fixes are always welcome.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojo/dojox/trunk/atom/*
+
+Install into the following directory structure:
+/dojox/atom/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/atom/*
+
+Require in the sections you wish to use (the model, IO library, etc)
+-------------------------------------------------------------------------------
+Additional Notes:
+ This library is still undergoing some work and as such the API may change
+ hence the marking of 'experimental'.
+
diff --git a/js/dojo/dojox/atom/io/Connection.js b/js/dojo/dojox/atom/io/Connection.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/io/Connection.js
@@ -0,0 +1,255 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.io.Connection"]){
+dojo._hasResource["dojox.atom.io.Connection"]=true;
+dojo.provide("dojox.atom.io.Connection");
+dojo.require("dojox.atom.io.model");
+dojo.declare("dojox.atom.io.Connection",null,{constructor:function(_1,_2){
+this.sync=_1;
+this.preventCache=_2;
+},preventCache:false,alertsEnabled:false,getFeed:function(_3,_4,_5,_6){
+this._getXmlDoc(_3,"feed",new dojox.atom.io.model.Feed(),dojox.atom.io.model._Constants.ATOM_NS,_4,_5,_6);
+},getService:function(_7,_8,_9,_a){
+this._getXmlDoc(_7,"service",new dojox.atom.io.model.Service(_7),dojox.atom.io.model._Constants.APP_NS,_8,_9,_a);
+},getEntry:function(_b,_c,_d,_e){
+this._getXmlDoc(_b,"entry",new dojox.atom.io.model.Entry(),dojox.atom.io.model._Constants.ATOM_NS,_c,_d,_e);
+},_getXmlDoc:function(_f,_10,_11,_12,_13,_14,_15){
+if(!_15){
+_15=dojo.global;
+}
+var ae=this.alertsEnabled;
+var _16={url:_f,handleAs:"xml",sync:this.sync,preventCache:this.preventCache,load:function(_17,_18){
+var _19=null;
+var _1a=_17;
+var _1b;
+if(_1a){
+if(typeof (_1a.getElementsByTagNameNS)!="undefined"){
+_1b=_1a.getElementsByTagNameNS(_12,_10);
+if(_1b&&_1b.length>0){
+_19=_1b.item(0);
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}
+}
+}else{
+if(typeof (_1a.getElementsByTagName)!="undefined"){
+_1b=_1a.getElementsByTagName(_10);
+if(_1b&&_1b.length>0){
+for(var i=0;i<_1b.length;i++){
+if(_1b[i].namespaceURI==_12){
+_19=_1b[i];
+break;
+}
+}
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}
+}
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}else{
+_13.call(_15,null,null,_18);
+return;
+}
+}
+}
+_11.buildFromDom(_19);
+if(_13){
+_13.call(_15,_11,_1a,_18);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}else{
+_13.call(_15,null,null,_18);
+}
+}};
+if(this.user&&this.user!==null){
+_16.user=this.user;
+}
+if(this.password&&this.password!==null){
+_16.password=this.password;
+}
+if(_14){
+_16.error=function(_1c,_1d){
+_14.call(_15,_1c,_1d);
+};
+}else{
+_16.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+dojo.xhrGet(_16);
+},updateEntry:function(_1e,_1f,_20,_21,_22,_23){
+if(!_23){
+_23=dojo.global;
+}
+_1e.updated=new Date();
+var url=_1e.getEditHref();
+if(!url){
+throw new Error("A URL has not been specified for editing this entry.");
+}
+var _24=this;
+var ae=this.alertsEnabled;
+var _25={url:url,handleAs:"text",contentType:"text/xml",sync:this.sync,preventCache:this.preventCache,load:function(_26,_27){
+var _28=null;
+if(_21){
+_28=_27.xhr.getResponseHeader("Location");
+if(!_28){
+_28=url;
+}
+var _29=function(_2a,dom,_2b){
+if(_1f){
+_1f.call(_23,_2a,_28,_2b);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+};
+_24.getEntry(_28,_29);
+}else{
+if(_1f){
+_1f.call(_23,_1e,_27.xhr.getResponseHeader("Location"),_27);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}
+return _26;
+}};
+if(this.user&&this.user!==null){
+_25.user=this.user;
+}
+if(this.password&&this.password!==null){
+_25.password=this.password;
+}
+if(_20){
+_25.error=function(_2c,_2d){
+_20.call(_23,_2c,_2d);
+};
+}else{
+_25.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+if(_22){
+_25.postData=_1e.toString(true);
+_25.headers={"X-Method-Override":"PUT"};
+dojo.rawXhrPost(_25);
+}else{
+_25.putData=_1e.toString(true);
+var xhr=dojo.rawXhrPut(_25);
+}
+},addEntry:function(_2e,url,_2f,_30,_31,_32){
+if(!_32){
+_32=dojo.global;
+}
+_2e.published=new Date();
+_2e.updated=new Date();
+var _33=_2e.feedUrl;
+var ae=this.alertsEnabled;
+if(!url&&_33){
+url=_33;
+}
+if(!url){
+if(ae){
+throw new Error("The request cannot be processed because the URL parameter is missing.");
+}
+return;
+}
+var _34=this;
+var _35={url:url,handleAs:"text",contentType:"text/xml",sync:this.sync,preventCache:this.preventCache,postData:_2e.toString(true),load:function(_36,_37){
+var _38=_37.xhr.getResponseHeader("Location");
+if(!_38){
+_38=url;
+}
+if(!_37.retrieveEntry){
+if(_2f){
+_2f.call(_32,_2e,_38,_37);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}else{
+var _39=function(_3a,dom,_3b){
+if(_2f){
+_2f.call(_32,_3a,_38,_3b);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+};
+_34.getEntry(_38,_39);
+}
+return _36;
+}};
+if(this.user&&this.user!==null){
+_35.user=this.user;
+}
+if(this.password&&this.password!==null){
+_35.password=this.password;
+}
+if(_30){
+_35.error=function(_3c,_3d){
+_30.call(_32,_3c,_3d);
+};
+}else{
+_35.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+dojo.rawXhrPost(_35);
+},deleteEntry:function(_3e,_3f,_40,_41,_42){
+if(!_42){
+_42=dojo.global;
+}
+var url=null;
+if(typeof (_3e)=="string"){
+url=_3e;
+}else{
+url=_3e.getEditHref();
+}
+if(!url){
+_3f.call(_42,false,null);
+throw new Error("The request cannot be processed because the URL parameter is missing.");
+}
+var _43={url:url,handleAs:"text",sync:this.sync,preventCache:this.preventCache,load:function(_44,_45){
+_3f.call(_42,_45);
+return _44;
+}};
+if(this.user&&this.user!==null){
+_43.user=this.user;
+}
+if(this.password&&this.password!==null){
+_43.password=this.password;
+}
+if(_40){
+_43.error=function(_46,_47){
+_40.call(_42,_46,_47);
+};
+}else{
+_43.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+if(_41){
+_43.headers={"X-Method-Override":"DELETE"};
+dojo.xhrPost(_43);
+}else{
+dojo.xhrDelete(_43);
+}
+}});
+}
diff --git a/js/dojo/dojox/atom/io/model.js b/js/dojo/dojox/atom/io/model.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/io/model.js
@@ -0,0 +1,949 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.io.model"]){
+dojo._hasResource["dojox.atom.io.model"]=true;
+dojo.provide("dojox.atom.io.model");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.string");
+dojo.require("dojo.date.stamp");
+dojox.atom.io.model._Constants={"ATOM_URI":"http://www.w3.org/2005/Atom","ATOM_NS":"http://www.w3.org/2005/Atom","PURL_NS":"http://purl.org/atom/app#","APP_NS":"http://www.w3.org/2007/app"};
+dojox.atom.io.model._actions={"link":function(_1,_2){
+if(_1.links===null){
+_1.links=[];
+}
+var _3=new dojox.atom.io.model.Link();
+_3.buildFromDom(_2);
+_1.links.push(_3);
+},"author":function(_4,_5){
+if(_4.authors===null){
+_4.authors=[];
+}
+var _6=new dojox.atom.io.model.Person("author");
+_6.buildFromDom(_5);
+_4.authors.push(_6);
+},"contributor":function(_7,_8){
+if(_7.contributors===null){
+_7.contributors=[];
+}
+var _9=new dojox.atom.io.model.Person("contributor");
+_9.buildFromDom(_8);
+_7.contributors.push(_9);
+},"category":function(_a,_b){
+if(_a.categories===null){
+_a.categories=[];
+}
+var _c=new dojox.atom.io.model.Category();
+_c.buildFromDom(_b);
+_a.categories.push(_c);
+},"icon":function(_d,_e){
+_d.icon=dojox.xml.parser.textContent(_e);
+},"id":function(_f,_10){
+_f.id=dojox.xml.parser.textContent(_10);
+},"rights":function(obj,_11){
+obj.rights=dojox.xml.parser.textContent(_11);
+},"subtitle":function(obj,_12){
+var cnt=new dojox.atom.io.model.Content("subtitle");
+cnt.buildFromDom(_12);
+obj.subtitle=cnt;
+},"title":function(obj,_13){
+var cnt=new dojox.atom.io.model.Content("title");
+cnt.buildFromDom(_13);
+obj.title=cnt;
+},"updated":function(obj,_14){
+obj.updated=dojox.atom.io.model.util.createDate(_14);
+},"issued":function(obj,_15){
+obj.issued=dojox.atom.io.model.util.createDate(_15);
+},"modified":function(obj,_16){
+obj.modified=dojox.atom.io.model.util.createDate(_16);
+},"published":function(obj,_17){
+obj.published=dojox.atom.io.model.util.createDate(_17);
+},"entry":function(obj,_18){
+if(obj.entries===null){
+obj.entries=[];
+}
+var _19=obj.createEntry?obj.createEntry():new dojox.atom.io.model.Entry();
+_19.buildFromDom(_18);
+obj.entries.push(_19);
+},"content":function(obj,_1a){
+var cnt=new dojox.atom.io.model.Content("content");
+cnt.buildFromDom(_1a);
+obj.content=cnt;
+},"summary":function(obj,_1b){
+var _1c=new dojox.atom.io.model.Content("summary");
+_1c.buildFromDom(_1b);
+obj.summary=_1c;
+},"name":function(obj,_1d){
+obj.name=dojox.xml.parser.textContent(_1d);
+},"email":function(obj,_1e){
+obj.email=dojox.xml.parser.textContent(_1e);
+},"uri":function(obj,_1f){
+obj.uri=dojox.xml.parser.textContent(_1f);
+},"generator":function(obj,_20){
+obj.generator=new dojox.atom.io.model.Generator();
+obj.generator.buildFromDom(_20);
+}};
+dojox.atom.io.model.util={createDate:function(_21){
+var _22=dojox.xml.parser.textContent(_21);
+if(_22){
+return dojo.date.stamp.fromISOString(dojo.trim(_22));
+}
+return null;
+},escapeHtml:function(str){
+return str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/'/gm,"&#39;");
+},unEscapeHtml:function(str){
+return str.replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"").replace(/&#39;/gm,"'").replace(/&amp;/gm,"&");
+},getNodename:function(_23){
+var _24=null;
+if(_23!==null){
+_24=_23.localName?_23.localName:_23.nodeName;
+if(_24!==null){
+var _25=_24.indexOf(":");
+if(_25!==-1){
+_24=_24.substring((_25+1),_24.length);
+}
+}
+}
+return _24;
+}};
+dojo.declare("dojox.atom.io.model.Node",null,{constructor:function(_26,_27,_28,_29,_2a){
+this.name_space=_26;
+this.name=_27;
+this.attributes=[];
+if(_28){
+this.attributes=_28;
+}
+this.content=[];
+this.rawNodes=[];
+this.textContent=null;
+if(_29){
+this.content.push(_29);
+}
+this.shortNs=_2a;
+this._objName="Node";
+},buildFromDom:function(_2b){
+this._saveAttributes(_2b);
+this.name_space=_2b.namespaceURI;
+this.shortNs=_2b.prefix;
+this.name=dojox.atom.io.model.util.getNodename(_2b);
+for(var x=0;x<_2b.childNodes.length;x++){
+var c=_2b.childNodes[x];
+if(dojox.atom.io.model.util.getNodename(c)!="#text"){
+this.rawNodes.push(c);
+var n=new dojox.atom.io.model.Node();
+n.buildFromDom(c,true);
+this.content.push(n);
+}else{
+this.content.push(c.nodeValue);
+}
+}
+this.textContent=dojox.xml.parser.textContent(_2b);
+},_saveAttributes:function(_2c){
+if(!this.attributes){
+this.attributes=[];
+}
+var _2d=function(_2e){
+var _2f=_2e.attributes;
+if(_2f===null){
+return false;
+}
+return (_2f.length!==0);
+};
+if(_2d(_2c)&&this._getAttributeNames){
+var _30=this._getAttributeNames(_2c);
+if(_30&&_30.length>0){
+for(var x in _30){
+var _31=_2c.getAttribute(_30[x]);
+if(_31){
+this.attributes[_30[x]]=_31;
+}
+}
+}
+}
+},addAttribute:function(_32,_33){
+this.attributes[_32]=_33;
+},getAttribute:function(_34){
+return this.attributes[_34];
+},_getAttributeNames:function(_35){
+var _36=[];
+for(var i=0;i<_35.attributes.length;i++){
+_36.push(_35.attributes[i].nodeName);
+}
+return _36;
+},toString:function(){
+var xml=[];
+var x;
+var _37=(this.shortNs?this.shortNs+":":"")+this.name;
+var _38=(this.name=="#cdata-section");
+if(_38){
+xml.push("<![CDATA[");
+xml.push(this.textContent);
+xml.push("]]>");
+}else{
+xml.push("<");
+xml.push(_37);
+if(this.name_space){
+xml.push(" xmlns='"+this.name_space+"'");
+}
+if(this.attributes){
+for(x in this.attributes){
+xml.push(" "+x+"='"+this.attributes[x]+"'");
+}
+}
+if(this.content){
+xml.push(">");
+for(x in this.content){
+xml.push(this.content[x]);
+}
+xml.push("</"+_37+">\n");
+}else{
+xml.push("/>\n");
+}
+}
+return xml.join("");
+},addContent:function(_39){
+this.content.push(_39);
+}});
+dojo.declare("dojox.atom.io.model.AtomItem",dojox.atom.io.model.Node,{constructor:function(_3a){
+this.ATOM_URI=dojox.atom.io.model._Constants.ATOM_URI;
+this.links=null;
+this.authors=null;
+this.categories=null;
+this.contributors=null;
+this.icon=this.id=this.logo=this.xmlBase=this.rights=null;
+this.subtitle=this.title=null;
+this.updated=this.published=null;
+this.issued=this.modified=null;
+this.content=null;
+this.extensions=null;
+this.entries=null;
+this.name_spaces={};
+this._objName="AtomItem";
+},_getAttributeNames:function(){
+return null;
+},_accepts:{},accept:function(tag){
+return Boolean(this._accepts[tag]);
+},_postBuild:function(){
+},buildFromDom:function(_3b){
+var i,c,n;
+for(i=0;i<_3b.attributes.length;i++){
+c=_3b.attributes.item(i);
+n=dojox.atom.io.model.util.getNodename(c);
+if(c.prefix=="xmlns"&&c.prefix!=n){
+this.addNamespace(c.nodeValue,n);
+}
+}
+c=_3b.childNodes;
+for(i=0;i<c.length;i++){
+if(c[i].nodeType==1){
+var _3c=dojox.atom.io.model.util.getNodename(c[i]);
+if(!_3c){
+continue;
+}
+if(c[i].namespaceURI!=dojox.atom.io.model._Constants.ATOM_NS&&_3c!="#text"){
+if(!this.extensions){
+this.extensions=[];
+}
+var _3d=new dojox.atom.io.model.Node();
+_3d.buildFromDom(c[i]);
+this.extensions.push(_3d);
+}
+if(!this.accept(_3c.toLowerCase())){
+continue;
+}
+var fn=dojox.atom.io.model._actions[_3c];
+if(fn){
+fn(this,c[i]);
+}
+}
+}
+this._saveAttributes(_3b);
+if(this._postBuild){
+this._postBuild();
+}
+},addNamespace:function(_3e,_3f){
+if(_3e&&_3f){
+this.name_spaces[_3f]=_3e;
+}
+},addAuthor:function(_40,_41,uri){
+if(!this.authors){
+this.authors=[];
+}
+this.authors.push(new dojox.atom.io.model.Person("author",_40,_41,uri));
+},addContributor:function(_42,_43,uri){
+if(!this.contributors){
+this.contributors=[];
+}
+this.contributors.push(new dojox.atom.io.model.Person("contributor",_42,_43,uri));
+},addLink:function(_44,rel,_45,_46,_47){
+if(!this.links){
+this.links=[];
+}
+this.links.push(new dojox.atom.io.model.Link(_44,rel,_45,_46,_47));
+},removeLink:function(_48,rel){
+if(!this.links||!dojo.isArray(this.links)){
+return;
+}
+var _49=0;
+for(var i=0;i<this.links.length;i++){
+if((!_48||this.links[i].href===_48)&&(!rel||this.links[i].rel===rel)){
+this.links.splice(i,1);
+_49++;
+}
+}
+return _49;
+},removeBasicLinks:function(){
+if(!this.links){
+return;
+}
+var _4a=0;
+for(var i=0;i<this.links.length;i++){
+if(!this.links[i].rel){
+this.links.splice(i,1);
+_4a++;
+i--;
+}
+}
+return _4a;
+},addCategory:function(_4b,_4c,_4d){
+if(!this.categories){
+this.categories=[];
+}
+this.categories.push(new dojox.atom.io.model.Category(_4b,_4c,_4d));
+},getCategories:function(_4e){
+if(!_4e){
+return this.categories;
+}
+var arr=[];
+for(var x in this.categories){
+if(this.categories[x].scheme===_4e){
+arr.push(this.categories[x]);
+}
+}
+return arr;
+},removeCategories:function(_4f,_50){
+if(!this.categories){
+return;
+}
+var _51=0;
+for(var i=0;i<this.categories.length;i++){
+if((!_4f||this.categories[i].scheme===_4f)&&(!_50||this.categories[i].term===_50)){
+this.categories.splice(i,1);
+_51++;
+i--;
+}
+}
+return _51;
+},setTitle:function(str,_52){
+if(!str){
+return;
+}
+this.title=new dojox.atom.io.model.Content("title");
+this.title.value=str;
+if(_52){
+this.title.type=_52;
+}
+},addExtension:function(_53,_54,_55,_56,_57){
+if(!this.extensions){
+this.extensions=[];
+}
+this.extensions.push(new dojox.atom.io.model.Node(_53,_54,_55,_56,_57||"ns"+this.extensions.length));
+},getExtensions:function(_58,_59){
+var arr=[];
+if(!this.extensions){
+return arr;
+}
+for(var x in this.extensions){
+if((this.extensions[x].name_space===_58||this.extensions[x].shortNs===_58)&&(!_59||this.extensions[x].name===_59)){
+arr.push(this.extensions[x]);
+}
+}
+return arr;
+},removeExtensions:function(_5a,_5b){
+if(!this.extensions){
+return;
+}
+for(var i=0;i<this.extensions.length;i++){
+if((this.extensions[i].name_space==_5a||this.extensions[i].shortNs===_5a)&&this.extensions[i].name===_5b){
+this.extensions.splice(i,1);
+i--;
+}
+}
+},destroy:function(){
+this.links=null;
+this.authors=null;
+this.categories=null;
+this.contributors=null;
+this.icon=this.id=this.logo=this.xmlBase=this.rights=null;
+this.subtitle=this.title=null;
+this.updated=this.published=null;
+this.issued=this.modified=null;
+this.content=null;
+this.extensions=null;
+this.entries=null;
+}});
+dojo.declare("dojox.atom.io.model.Category",dojox.atom.io.model.Node,{constructor:function(_5c,_5d,_5e){
+this.scheme=_5c;
+this.term=_5d;
+this.label=_5e;
+this._objName="Category";
+},_postBuild:function(){
+},_getAttributeNames:function(){
+return ["label","scheme","term"];
+},toString:function(){
+var s=[];
+s.push("<category ");
+if(this.label){
+s.push(" label=\""+this.label+"\" ");
+}
+if(this.scheme){
+s.push(" scheme=\""+this.scheme+"\" ");
+}
+if(this.term){
+s.push(" term=\""+this.term+"\" ");
+}
+s.push("/>\n");
+return s.join("");
+},buildFromDom:function(_5f){
+this._saveAttributes(_5f);
+this.label=this.attributes.label;
+this.scheme=this.attributes.scheme;
+this.term=this.attributes.term;
+if(this._postBuild){
+this._postBuild();
+}
+}});
+dojo.declare("dojox.atom.io.model.Content",dojox.atom.io.model.Node,{constructor:function(_60,_61,src,_62,_63){
+this.tagName=_60;
+this.value=_61;
+this.src=src;
+this.type=_62;
+this.xmlLang=_63;
+this.HTML="html";
+this.TEXT="text";
+this.XHTML="xhtml";
+this.XML="xml";
+this._useTextContent="true";
+},_getAttributeNames:function(){
+return ["type","src"];
+},_postBuild:function(){
+},buildFromDom:function(_64){
+var _65=_64.getAttribute("type");
+if(_65){
+_65=_65.toLowerCase();
+if(_65=="xml"||"text/xml"){
+_65=this.XML;
+}
+}else{
+_65="text";
+}
+if(_65===this.XML){
+if(_64.firstChild){
+var i;
+this.value="";
+for(i=0;i<_64.childNodes.length;i++){
+var c=_64.childNodes[i];
+if(c){
+this.value+=dojox.xml.parser.innerXML(c);
+}
+}
+}
+}else{
+if(_64.innerHTML){
+this.value=_64.innerHTML;
+}else{
+this.value=dojox.xml.parser.textContent(_64);
+}
+}
+this._saveAttributes(_64);
+if(this.attributes){
+this.type=this.attributes.type;
+this.scheme=this.attributes.scheme;
+this.term=this.attributes.term;
+}
+if(!this.type){
+this.type="text";
+}
+var _66=this.type.toLowerCase();
+if(_66==="html"||_66==="text/html"||_66==="xhtml"||_66==="text/xhtml"){
+this.value=dojox.atom.io.model.util.unEscapeHtml(this.value);
+}
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<"+this.tagName+" ");
+if(!this.type){
+this.type="text";
+}
+if(this.type){
+s.push(" type=\""+this.type+"\" ");
+}
+if(this.xmlLang){
+s.push(" xml:lang=\""+this.xmlLang+"\" ");
+}
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\" ");
+}
+if(this.type.toLowerCase()==this.HTML){
+s.push(">"+dojox.atom.io.model.util.escapeHtml(this.value)+"</"+this.tagName+">\n");
+}else{
+s.push(">"+this.value+"</"+this.tagName+">\n");
+}
+var ret=s.join("");
+return ret;
+}});
+dojo.declare("dojox.atom.io.model.Link",dojox.atom.io.model.Node,{constructor:function(_67,rel,_68,_69,_6a){
+this.href=_67;
+this.hrefLang=_68;
+this.rel=rel;
+this.title=_69;
+this.type=_6a;
+},_getAttributeNames:function(){
+return ["href","jrefLang","rel","title","type"];
+},_postBuild:function(){
+},buildFromDom:function(_6b){
+this._saveAttributes(_6b);
+this.href=this.attributes.href;
+this.hrefLang=this.attributes.hreflang;
+this.rel=this.attributes.rel;
+this.title=this.attributes.title;
+this.type=this.attributes.type;
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<link ");
+if(this.href){
+s.push(" href=\""+this.href+"\" ");
+}
+if(this.hrefLang){
+s.push(" hrefLang=\""+this.hrefLang+"\" ");
+}
+if(this.rel){
+s.push(" rel=\""+this.rel+"\" ");
+}
+if(this.title){
+s.push(" title=\""+this.title+"\" ");
+}
+if(this.type){
+s.push(" type = \""+this.type+"\" ");
+}
+s.push("/>\n");
+return s.join("");
+}});
+dojo.declare("dojox.atom.io.model.Person",dojox.atom.io.model.Node,{constructor:function(_6c,_6d,_6e,uri){
+this.author="author";
+this.contributor="contributor";
+if(!_6c){
+_6c=this.author;
+}
+this.personType=_6c;
+this.name=_6d||"";
+this.email=_6e||"";
+this.uri=uri||"";
+this._objName="Person";
+},_getAttributeNames:function(){
+return null;
+},_postBuild:function(){
+},accept:function(tag){
+return Boolean(this._accepts[tag]);
+},buildFromDom:function(_6f){
+var c=_6f.childNodes;
+for(var i=0;i<c.length;i++){
+var _70=dojox.atom.io.model.util.getNodename(c[i]);
+if(!_70){
+continue;
+}
+if(c[i].namespaceURI!=dojox.atom.io.model._Constants.ATOM_NS&&_70!="#text"){
+if(!this.extensions){
+this.extensions=[];
+}
+var _71=new dojox.atom.io.model.Node();
+_71.buildFromDom(c[i]);
+this.extensions.push(_71);
+}
+if(!this.accept(_70.toLowerCase())){
+continue;
+}
+var fn=dojox.atom.io.model._actions[_70];
+if(fn){
+fn(this,c[i]);
+}
+}
+this._saveAttributes(_6f);
+if(this._postBuild){
+this._postBuild();
+}
+},_accepts:{"name":true,"uri":true,"email":true},toString:function(){
+var s=[];
+s.push("<"+this.personType+">\n");
+if(this.name){
+s.push("\t<name>"+this.name+"</name>\n");
+}
+if(this.email){
+s.push("\t<email>"+this.email+"</email>\n");
+}
+if(this.uri){
+s.push("\t<uri>"+this.uri+"</uri>\n");
+}
+s.push("</"+this.personType+">\n");
+return s.join("");
+}});
+dojo.declare("dojox.atom.io.model.Generator",dojox.atom.io.model.Node,{constructor:function(uri,_72,_73){
+this.uri=uri;
+this.version=_72;
+this.value=_73;
+},_postBuild:function(){
+},buildFromDom:function(_74){
+this.value=dojox.xml.parser.textContent(_74);
+this._saveAttributes(_74);
+this.uri=this.attributes.uri;
+this.version=this.attributes.version;
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<generator ");
+if(this.uri){
+s.push(" uri=\""+this.uri+"\" ");
+}
+if(this.version){
+s.push(" version=\""+this.version+"\" ");
+}
+s.push(">"+this.value+"</generator>\n");
+var ret=s.join("");
+return ret;
+}});
+dojo.declare("dojox.atom.io.model.Entry",dojox.atom.io.model.AtomItem,{constructor:function(id){
+this.id=id;
+this._objName="Entry";
+this.feedUrl=null;
+},_getAttributeNames:function(){
+return null;
+},_accepts:{"author":true,"content":true,"category":true,"contributor":true,"created":true,"id":true,"link":true,"published":true,"rights":true,"summary":true,"title":true,"updated":true,"xmlbase":true,"issued":true,"modified":true},toString:function(_75){
+var s=[];
+var i;
+if(_75){
+s.push("<?xml version='1.0' encoding='UTF-8'?>");
+s.push("<entry xmlns='"+dojox.atom.io.model._Constants.ATOM_URI+"'");
+}else{
+s.push("<entry");
+}
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\" ");
+}
+for(i in this.name_spaces){
+s.push(" xmlns:"+i+"=\""+this.name_spaces[i]+"\"");
+}
+s.push(">\n");
+s.push("<id>"+(this.id?this.id:"")+"</id>\n");
+if(this.issued&&!this.published){
+this.published=this.issued;
+}
+if(this.published){
+s.push("<published>"+dojo.date.stamp.toISOString(this.published)+"</published>\n");
+}
+if(this.created){
+s.push("<created>"+dojo.date.stamp.toISOString(this.created)+"</created>\n");
+}
+if(this.issued){
+s.push("<issued>"+dojo.date.stamp.toISOString(this.issued)+"</issued>\n");
+}
+if(this.modified){
+s.push("<modified>"+dojo.date.stamp.toISOString(this.modified)+"</modified>\n");
+}
+if(this.modified&&!this.updated){
+this.updated=this.modified;
+}
+if(this.updated){
+s.push("<updated>"+dojo.date.stamp.toISOString(this.updated)+"</updated>\n");
+}
+if(this.rights){
+s.push("<rights>"+this.rights+"</rights>\n");
+}
+if(this.title){
+s.push(this.title.toString());
+}
+if(this.summary){
+s.push(this.summary.toString());
+}
+var _76=[this.authors,this.categories,this.links,this.contributors,this.extensions];
+for(var x in _76){
+if(_76[x]){
+for(var y in _76[x]){
+s.push(_76[x][y]);
+}
+}
+}
+if(this.content){
+s.push(this.content.toString());
+}
+s.push("</entry>\n");
+return s.join("");
+},getEditHref:function(){
+if(this.links===null||this.links.length===0){
+return null;
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="edit"){
+return this.links[x].href;
+}
+}
+return null;
+},setEditHref:function(url){
+if(this.links===null){
+this.links=[];
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="edit"){
+this.links[x].href=url;
+return;
+}
+}
+this.addLink(url,"edit");
+}});
+dojo.declare("dojox.atom.io.model.Feed",dojox.atom.io.model.AtomItem,{_accepts:{"author":true,"content":true,"category":true,"contributor":true,"created":true,"id":true,"link":true,"published":true,"rights":true,"summary":true,"title":true,"updated":true,"xmlbase":true,"entry":true,"logo":true,"issued":true,"modified":true,"icon":true,"subtitle":true},addEntry:function(_77){
+if(!_77.id){
+throw new Error("The entry object must be assigned an ID attribute.");
+}
+if(!this.entries){
+this.entries=[];
+}
+_77.feedUrl=this.getSelfHref();
+this.entries.push(_77);
+},getFirstEntry:function(){
+if(!this.entries||this.entries.length===0){
+return null;
+}
+return this.entries[0];
+},getEntry:function(_78){
+if(!this.entries){
+return null;
+}
+for(var x in this.entries){
+if(this.entries[x].id==_78){
+return this.entries[x];
+}
+}
+return null;
+},removeEntry:function(_79){
+if(!this.entries){
+return;
+}
+var _7a=0;
+for(var i=0;i<this.entries.length;i++){
+if(this.entries[i]===_79){
+this.entries.splice(i,1);
+_7a++;
+}
+}
+return _7a;
+},setEntries:function(_7b){
+for(var x in _7b){
+this.addEntry(_7b[x]);
+}
+},toString:function(){
+var s=[];
+var i;
+s.push("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+s.push("<feed xmlns=\""+dojox.atom.io.model._Constants.ATOM_URI+"\"");
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\"");
+}
+for(i in this.name_spaces){
+s.push(" xmlns:"+i+"=\""+this.name_spaces[i]+"\"");
+}
+s.push(">\n");
+s.push("<id>"+(this.id?this.id:"")+"</id>\n");
+if(this.title){
+s.push(this.title);
+}
+if(this.copyright&&!this.rights){
+this.rights=this.copyright;
+}
+if(this.rights){
+s.push("<rights>"+this.rights+"</rights>\n");
+}
+if(this.issued){
+s.push("<issued>"+dojo.date.stamp.toISOString(this.issued)+"</issued>\n");
+}
+if(this.modified){
+s.push("<modified>"+dojo.date.stamp.toISOString(this.modified)+"</modified>\n");
+}
+if(this.modified&&!this.updated){
+this.updated=this.modified;
+}
+if(this.updated){
+s.push("<updated>"+dojo.date.stamp.toISOString(this.updated)+"</updated>\n");
+}
+if(this.published){
+s.push("<published>"+dojo.date.stamp.toISOString(this.published)+"</published>\n");
+}
+if(this.icon){
+s.push("<icon>"+this.icon+"</icon>\n");
+}
+if(this.language){
+s.push("<language>"+this.language+"</language>\n");
+}
+if(this.logo){
+s.push("<logo>"+this.logo+"</logo>\n");
+}
+if(this.subtitle){
+s.push(this.subtitle.toString());
+}
+if(this.tagline){
+s.push(this.tagline.toString());
+}
+var _7c=[this.alternateLinks,this.authors,this.categories,this.contributors,this.otherLinks,this.extensions,this.entries];
+for(i in _7c){
+if(_7c[i]){
+for(var x in _7c[i]){
+s.push(_7c[i][x]);
+}
+}
+}
+s.push("</feed>");
+return s.join("");
+},createEntry:function(){
+var _7d=new dojox.atom.io.model.Entry();
+_7d.feedUrl=this.getSelfHref();
+return _7d;
+},getSelfHref:function(){
+if(this.links===null||this.links.length===0){
+return null;
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="self"){
+return this.links[x].href;
+}
+}
+return null;
+}});
+dojo.declare("dojox.atom.io.model.Service",dojox.atom.io.model.AtomItem,{constructor:function(_7e){
+this.href=_7e;
+},buildFromDom:function(_7f){
+var i;
+this.workspaces=[];
+if(_7f.tagName!="service"){
+return;
+}
+if(_7f.namespaceURI!=dojox.atom.io.model._Constants.PURL_NS&&_7f.namespaceURI!=dojox.atom.io.model._Constants.APP_NS){
+return;
+}
+var ns=_7f.namespaceURI;
+this.name_space=_7f.namespaceURI;
+var _80;
+if(typeof (_7f.getElementsByTagNameNS)!="undefined"){
+_80=_7f.getElementsByTagNameNS(ns,"workspace");
+}else{
+_80=[];
+var _81=_7f.getElementsByTagName("workspace");
+for(i=0;i<_81.length;i++){
+if(_81[i].namespaceURI==ns){
+_80.push(_81[i]);
+}
+}
+}
+if(_80&&_80.length>0){
+var _82=0;
+var _83;
+for(i=0;i<_80.length;i++){
+_83=(typeof (_80.item)==="undefined"?_80[i]:_80.item(i));
+var _84=new dojox.atom.io.model.Workspace();
+_84.buildFromDom(_83);
+this.workspaces[_82++]=_84;
+}
+}
+},getCollection:function(url){
+for(var i=0;i<this.workspaces.length;i++){
+var _85=this.workspaces[i].collections;
+for(var j=0;j<_85.length;j++){
+if(_85[j].href==url){
+return _85;
+}
+}
+}
+return null;
+}});
+dojo.declare("dojox.atom.io.model.Workspace",dojox.atom.io.model.AtomItem,{constructor:function(_86){
+this.title=_86;
+this.collections=[];
+},buildFromDom:function(_87){
+var _88=dojox.atom.io.model.util.getNodename(_87);
+if(_88!="workspace"){
+return;
+}
+var c=_87.childNodes;
+var len=0;
+for(var i=0;i<c.length;i++){
+var _89=c[i];
+if(_89.nodeType===1){
+_88=dojox.atom.io.model.util.getNodename(_89);
+if(_89.namespaceURI==dojox.atom.io.model._Constants.PURL_NS||_89.namespaceURI==dojox.atom.io.model._Constants.APP_NS){
+if(_88==="collection"){
+var _8a=new dojox.atom.io.model.Collection();
+_8a.buildFromDom(_89);
+this.collections[len++]=_8a;
+}
+}else{
+if(_89.namespaceURI===dojox.atom.io.model._Constants.ATOM_NS){
+if(_88==="title"){
+this.title=dojox.xml.parser.textContent(_89);
+}
+}
+}
+}
+}
+}});
+dojo.declare("dojox.atom.io.model.Collection",dojox.atom.io.model.AtomItem,{constructor:function(_8b,_8c){
+this.href=_8b;
+this.title=_8c;
+this.attributes=[];
+this.features=[];
+this.children=[];
+this.memberType=null;
+this.id=null;
+},buildFromDom:function(_8d){
+this.href=_8d.getAttribute("href");
+var c=_8d.childNodes;
+for(var i=0;i<c.length;i++){
+var _8e=c[i];
+if(_8e.nodeType===1){
+var _8f=dojox.atom.io.model.util.getNodename(_8e);
+if(_8e.namespaceURI==dojox.atom.io.model._Constants.PURL_NS||_8e.namespaceURI==dojox.atom.io.model._Constants.APP_NS){
+if(_8f==="member-type"){
+this.memberType=dojox.xml.parser.textContent(_8e);
+}else{
+if(_8f=="feature"){
+if(_8e.getAttribute("id")){
+this.features.push(_8e.getAttribute("id"));
+}
+}else{
+var _90=new dojox.atom.io.model.Node();
+_90.buildFromDom(_8e);
+this.children.push(_90);
+}
+}
+}else{
+if(_8e.namespaceURI===dojox.atom.io.model._Constants.ATOM_NS){
+if(_8f==="id"){
+this.id=dojox.xml.parser.textContent(_8e);
+}else{
+if(_8f==="title"){
+this.title=dojox.xml.parser.textContent(_8e);
+}
+}
+}
+}
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/atom/widget/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/FeedEntryEditor.js
@@ -0,0 +1,735 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]){
+dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]=true;
+dojo.provide("dojox.atom.widget.FeedEntryEditor");
+dojo.require("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.Editor");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.SimpleTextarea");
+dojo.requireLocalization("dojox.atom.widget","FeedEntryEditor",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.atom.widget","PeopleEditor",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedEntryEditor");
+dojo.declare("dojox.atom.widget.FeedEntryEditor",dojox.atom.widget.FeedEntryViewer,{_contentEditor:null,_oldContent:null,_setObject:null,enableEdit:false,_contentEditorCreator:null,_editors:{},entryNewButton:null,_editable:false,templateString:dojo.cache("dojox.atom","widget/templates/FeedEntryEditor.html","<div class=\"feedEntryViewer\">\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\n \t<td align=\"left\" dojoAttachPoint=\"entryNewButton\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"doNew\" dojoAttachEvent=\"onclick:_toggleNew\"></span>\n \t</td>\n <td align=\"left\" dojoAttachPoint=\"entryEditButton\" style=\"display: none;\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"edit\" dojoAttachEvent=\"onclick:_toggleEdit\"></span>\n </td>\n <td align=\"left\" dojoAttachPoint=\"entrySaveCancelButtons\" style=\"display: none;\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"save\" dojoAttachEvent=\"onclick:saveEdits\"></span>\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"cancel\" dojoAttachEvent=\"onclick:cancelEdits\"></span>\n </td>\n <td align=\"right\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n </td>\n </tr>\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\n <td dojoAttachPoint=\"feedEntryCelltitle\">\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellauthors\">\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellid\">\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\n </td>\n <td rowspan=\"2\" align=\"right\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n </td>\n\t\t</tr>\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\n <td dojoAttachPoint=\"feedEntryCellupdated\">\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellsummary\">\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellcontent\">\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\n </td>\n </tr>\n </table>\n \n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td>\n \t<select dojoAttachPoint=\"entryTitleSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n \t</select>\n </td>\n </tr>\n <tr>\n <td colspan=\"2\" dojoAttachPoint=\"entryTitleNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryAuthorNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\" colspan=\"2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td>\n \t<select dojoAttachPoint=\"entrySummarySelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n \t</select>\n </td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entrySummaryNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td>\n \t<select dojoAttachPoint=\"entryContentSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n \t</select>\n </td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryContentNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n</div>\n"),postCreate:function(){
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+var _1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+this.displayOptions.innerHTML=_1.displayOptions;
+this.feedEntryCheckBoxLabelTitle.innerHTML=_1.title;
+this.feedEntryCheckBoxLabelAuthors.innerHTML=_1.authors;
+this.feedEntryCheckBoxLabelContributors.innerHTML=_1.contributors;
+this.feedEntryCheckBoxLabelId.innerHTML=_1.id;
+this.close.innerHTML=_1.close;
+this.feedEntryCheckBoxLabelUpdated.innerHTML=_1.updated;
+this.feedEntryCheckBoxLabelSummary.innerHTML=_1.summary;
+this.feedEntryCheckBoxLabelContent.innerHTML=_1.content;
+_1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryEditor");
+this.doNew.innerHTML=_1.doNew;
+this.edit.innerHTML=_1.edit;
+this.save.innerHTML=_1.save;
+this.cancel.innerHTML=_1.cancel;
+},setEntry:function(_2,_3,_4){
+if(this._entry!==_2){
+this._editMode=false;
+_4=false;
+}else{
+_4=true;
+}
+dojox.atom.widget.FeedEntryEditor.superclass.setEntry.call(this,_2,_3);
+this._editable=this._isEditable(_2);
+if(!_4&&!this._editable){
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","none");
+}
+if(this._editable&&this.enableEdit){
+if(!_4){
+dojo.style(this.entryEditButton,"display","");
+if(this.enableMenuFade&&this.entrySaveCancelButton){
+dojo.fadeOut({node:this.entrySaveCancelButton,duration:250}).play();
+}
+}
+}
+},_toggleEdit:function(){
+if(this._editable&&this.enableEdit){
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","");
+this._editMode=true;
+this.setEntry(this._entry,this._feed,true);
+}
+},_handleEvent:function(_5){
+if(_5.source!=this&&_5.action=="delete"&&_5.entry&&_5.entry==this._entry){
+dojo.style(this.entryEditButton,"display","none");
+}
+dojox.atom.widget.FeedEntryEditor.superclass._handleEvent.call(this,_5);
+},_isEditable:function(_6){
+var _7=false;
+if(_6&&_6!==null&&_6.links&&_6.links!==null){
+for(var x in _6.links){
+if(_6.links[x].rel&&_6.links[x].rel=="edit"){
+_7=true;
+break;
+}
+}
+}
+return _7;
+},setTitle:function(_8,_9,_a){
+if(!_9){
+dojox.atom.widget.FeedEntryEditor.superclass.setTitle.call(this,_8,_9,_a);
+if(_a.title&&_a.title.value&&_a.title.value!==null){
+this.setFieldValidity("title",true);
+}
+}else{
+if(_a.title&&_a.title.value&&_a.title.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entryTitleSelect.value=_a.title.type;
+var _b=this._createEditor(_8,_a.title,true,_a.title.type==="html"||_a.title.type==="xhtml");
+_b.name="title";
+this._toLoad.push(_b);
+this.setFieldValidity("titleedit",true);
+this.setFieldValidity("title",true);
+}
+}
+},setAuthors:function(_c,_d,_e){
+if(!_d){
+dojox.atom.widget.FeedEntryEditor.superclass.setAuthors.call(this,_c,_d,_e);
+if(_e.authors&&_e.authors.length>0){
+this.setFieldValidity("authors",true);
+}
+}else{
+if(_e.authors&&_e.authors.length>0){
+this._editors.authors=this._createPeopleEditor(this.entryAuthorNode,{data:_e.authors,name:"Author"});
+this.setFieldValidity("authors",true);
+}
+}
+},setContributors:function(_f,_10,_11){
+if(!_10){
+dojox.atom.widget.FeedEntryEditor.superclass.setContributors.call(this,_f,_10,_11);
+if(_11.contributors&&_11.contributors.length>0){
+this.setFieldValidity("contributors",true);
+}
+}else{
+if(_11.contributors&&_11.contributors.length>0){
+this._editors.contributors=this._createPeopleEditor(this.entryContributorNode,{data:_11.contributors,name:"Contributor"});
+this.setFieldValidity("contributors",true);
+}
+}
+},setId:function(_12,_13,_14){
+if(!_13){
+dojox.atom.widget.FeedEntryEditor.superclass.setId.call(this,_12,_13,_14);
+if(_14.id&&_14.id!==null){
+this.setFieldValidity("id",true);
+}
+}else{
+if(_14.id&&_14.id!==null){
+this._editors.id=this._createEditor(_12,_14.id);
+this.setFieldValidity("id",true);
+}
+}
+},setUpdated:function(_15,_16,_17){
+if(!_16){
+dojox.atom.widget.FeedEntryEditor.superclass.setUpdated.call(this,_15,_16,_17);
+if(_17.updated&&_17.updated!==null){
+this.setFieldValidity("updated",true);
+}
+}else{
+if(_17.updated&&_17.updated!==null){
+this._editors.updated=this._createEditor(_15,_17.updated);
+this.setFieldValidity("updated",true);
+}
+}
+},setSummary:function(_18,_19,_1a){
+if(!_19){
+dojox.atom.widget.FeedEntryEditor.superclass.setSummary.call(this,_18,_19,_1a);
+if(_1a.summary&&_1a.summary.value&&_1a.summary.value!==null){
+this.setFieldValidity("summary",true);
+}
+}else{
+if(_1a.summary&&_1a.summary.value&&_1a.summary.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entrySummarySelect.value=_1a.summary.type;
+var _1b=this._createEditor(_18,_1a.summary,true,_1a.summary.type==="html"||_1a.summary.type==="xhtml");
+_1b.name="summary";
+this._toLoad.push(_1b);
+this.setFieldValidity("summaryedit",true);
+this.setFieldValidity("summary",true);
+}
+}
+},setContent:function(_1c,_1d,_1e){
+if(!_1d){
+dojox.atom.widget.FeedEntryEditor.superclass.setContent.call(this,_1c,_1d,_1e);
+if(_1e.content&&_1e.content.value&&_1e.content.value!==null){
+this.setFieldValidity("content",true);
+}
+}else{
+if(_1e.content&&_1e.content.value&&_1e.content.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entryContentSelect.value=_1e.content.type;
+var _1f=this._createEditor(_1c,_1e.content,true,_1e.content.type==="html"||_1e.content.type==="xhtml");
+_1f.name="content";
+this._toLoad.push(_1f);
+this.setFieldValidity("contentedit",true);
+this.setFieldValidity("content",true);
+}
+}
+},_createEditor:function(_20,_21,_22,rte){
+var _23;
+var box;
+if(!_21){
+if(rte){
+return {anchorNode:_20,entryValue:"",editor:null,generateEditor:function(){
+var _24=document.createElement("div");
+_24.innerHTML=this.entryValue;
+this.anchorNode.appendChild(_24);
+var _25=new dijit.Editor({},_24);
+this.editor=_25;
+return _25;
+}};
+}
+if(_22){
+_23=document.createElement("textarea");
+_20.appendChild(_23);
+dojo.style(_23,"width","90%");
+box=new dijit.form.SimpleTextarea({},_23);
+}else{
+_23=document.createElement("input");
+_20.appendChild(_23);
+dojo.style(_23,"width","95%");
+box=new dijit.form.TextBox({},_23);
+}
+box.attr("value","");
+return box;
+}
+var _26;
+if(_21.value!==undefined){
+_26=_21.value;
+}else{
+if(_21.attr){
+_26=_21.attr("value");
+}else{
+_26=_21;
+}
+}
+if(rte){
+if(_26.indexOf("<")!=-1){
+_26=_26.replace(/</g,"&lt;");
+}
+return {anchorNode:_20,entryValue:_26,editor:null,generateEditor:function(){
+var _27=document.createElement("div");
+_27.innerHTML=this.entryValue;
+this.anchorNode.appendChild(_27);
+var _28=new dijit.Editor({},_27);
+this.editor=_28;
+return _28;
+}};
+}
+if(_22){
+_23=document.createElement("textarea");
+_20.appendChild(_23);
+dojo.style(_23,"width","90%");
+box=new dijit.form.SimpleTextarea({},_23);
+}else{
+_23=document.createElement("input");
+_20.appendChild(_23);
+dojo.style(_23,"width","95%");
+box=new dijit.form.TextBox({},_23);
+}
+box.attr("value",_26);
+return box;
+},_switchEditor:function(_29){
+var _2a=null;
+var _2b=null;
+var _2c=null;
+if(dojo.isIE){
+_2b=_29.srcElement;
+}else{
+_2b=_29.target;
+}
+if(_2b===this.entryTitleSelect){
+_2c=this.entryTitleNode;
+_2a="title";
+}else{
+if(_2b===this.entrySummarySelect){
+_2c=this.entrySummaryNode;
+_2a="summary";
+}else{
+_2c=this.entryContentNode;
+_2a="content";
+}
+}
+var _2d=this._editors[_2a];
+var _2e;
+var _2f;
+if(_2b.value==="text"){
+if(_2d.declaredClass==="dijit.Editor"){
+_2f=_2d.attr("value",false);
+_2d.close(false,true);
+_2d.destroy();
+while(_2c.firstChild){
+dojo.destroy(_2c.firstChild);
+}
+_2e=this._createEditor(_2c,{value:_2f},true,false);
+this._editors[_2a]=_2e;
+}
+}else{
+if(_2d.declaredClass!="dijit.Editor"){
+_2f=_2d.attr("value");
+_2d.destroy();
+while(_2c.firstChild){
+dojo.destroy(_2c.firstChild);
+}
+_2e=this._createEditor(_2c,{value:_2f},true,true);
+_2e=dojo.hitch(_2e,_2e.generateEditor)();
+this._editors[_2a]=_2e;
+}
+}
+},_createPeopleEditor:function(_30,_31){
+var _32=document.createElement("div");
+_30.appendChild(_32);
+return new dojox.atom.widget.PeopleEditor(_31,_32);
+},saveEdits:function(){
+dojo.style(this.entrySaveCancelButtons,"display","none");
+dojo.style(this.entryEditButton,"display","");
+dojo.style(this.entryNewButton,"display","");
+var _33=false;
+var _34;
+var i;
+var _35;
+var _36;
+var _37;
+var _38;
+if(!this._new){
+_36=this.getEntry();
+if(this._editors.title&&(this._editors.title.attr("value")!=_36.title.value||this.entryTitleSelect.value!=_36.title.type)){
+_34=this._editors.title.attr("value");
+if(this.entryTitleSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.title=new dojox.atom.io.model.Content("title",_34,null,this.entryTitleSelect.value);
+_33=true;
+}
+if(this._editors.id.attr("value")!=_36.id){
+_36.id=this._editors.id.attr("value");
+_33=true;
+}
+if(this._editors.summary&&(this._editors.summary.attr("value")!=_36.summary.value||this.entrySummarySelect.value!=_36.summary.type)){
+_34=this._editors.summary.attr("value");
+if(this.entrySummarySelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.summary=new dojox.atom.io.model.Content("summary",_34,null,this.entrySummarySelect.value);
+_33=true;
+}
+if(this._editors.content&&(this._editors.content.attr("value")!=_36.content.value||this.entryContentSelect.value!=_36.content.type)){
+_34=this._editors.content.attr("value");
+if(this.entryContentSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.content=new dojox.atom.io.model.Content("content",_34,null,this.entryContentSelect.value);
+_33=true;
+}
+if(this._editors.authors){
+if(_33){
+_36.authors=[];
+_37=this._editors.authors.getValues();
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+}else{
+var _39=_36.authors;
+var _3a=function(_3b,_3c,uri){
+for(i in _39){
+if(_39[i].name===_3b&&_39[i].email===_3c&&_39[i].uri===uri){
+return true;
+}
+}
+return false;
+};
+_37=this._editors.authors.getValues();
+_35=false;
+for(i in _37){
+if(!_3a(_37[i].name,_37[i].email,_37[i].uri)){
+_35=true;
+break;
+}
+}
+if(_35){
+_36.authors=[];
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+_33=true;
+}
+}
+}
+if(this._editors.contributors){
+if(_33){
+_36.contributors=[];
+_38=this._editors.contributors.getValues();
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addAuthor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+}else{
+var _3d=_36.contributors;
+var _3e=function(_3f,_40,uri){
+for(i in _3d){
+if(_3d[i].name===_3f&&_3d[i].email===_40&&_3d[i].uri===uri){
+return true;
+}
+}
+return false;
+};
+_38=this._editors.contributors.getValues();
+_35=false;
+for(i in _38){
+if(_3e(_38[i].name,_38[i].email,_38[i].uri)){
+_35=true;
+break;
+}
+}
+if(_35){
+_36.contributors=[];
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addContributor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+_33=true;
+}
+}
+}
+if(_33){
+dojo.publish(this.entrySelectionTopic,[{action:"update",source:this,entry:_36,callback:this._handleSave}]);
+}
+}else{
+this._new=false;
+_36=new dojox.atom.io.model.Entry();
+_34=this._editors.title.attr("value");
+if(this.entryTitleSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.setTitle(_34,this.entryTitleSelect.value);
+_36.id=this._editors.id.attr("value");
+_37=this._editors.authors.getValues();
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+_38=this._editors.contributors.getValues();
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addContributor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+_34=this._editors.summary.attr("value");
+if(this.entrySummarySelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.summary=new dojox.atom.io.model.Content("summary",_34,null,this.entrySummarySelect.value);
+_34=this._editors.content.attr("value");
+if(this.entryContentSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.content=new dojox.atom.io.model.Content("content",_34,null,this.entryContentSelect.value);
+dojo.style(this.entryNewButton,"display","");
+dojo.publish(this.entrySelectionTopic,[{action:"post",source:this,entry:_36}]);
+}
+this._editMode=false;
+this.setEntry(_36,this._feed,true);
+},_handleSave:function(_41,_42){
+this._editMode=false;
+this.clear();
+this.setEntry(_41,this.getFeed(),true);
+},cancelEdits:function(){
+this._new=false;
+dojo.style(this.entrySaveCancelButtons,"display","none");
+if(this._editable){
+dojo.style(this.entryEditButton,"display","");
+}
+dojo.style(this.entryNewButton,"display","");
+this._editMode=false;
+this.clearEditors();
+this.setEntry(this.getEntry(),this.getFeed(),true);
+},clear:function(){
+this._editable=false;
+this.clearEditors();
+dojox.atom.widget.FeedEntryEditor.superclass.clear.apply(this);
+if(this._contentEditor){
+this._contentEditor=this._setObject=this._oldContent=this._contentEditorCreator=null;
+this._editors={};
+}
+},clearEditors:function(){
+for(var key in this._editors){
+if(this._editors[key].declaredClass==="dijit.Editor"){
+this._editors[key].close(false,true);
+}
+this._editors[key].destroy();
+}
+this._editors={};
+},_enforceXhtml:function(_43){
+var _44=null;
+if(_43){
+var _45=/<br>/g;
+_44=_43.replace(_45,"<br/>");
+_44=this._closeTag(_44,"hr");
+_44=this._closeTag(_44,"img");
+}
+return _44;
+},_closeTag:function(_46,tag){
+var _47="<"+tag;
+var _48=_46.indexOf(_47);
+if(_48!==-1){
+while(_48!==-1){
+var _49="";
+var _4a=false;
+for(var i=0;i<_46.length;i++){
+var c=_46.charAt(i);
+if(i<=_48||_4a){
+_49+=c;
+}else{
+if(c===">"){
+_49+="/";
+_4a=true;
+}
+_49+=c;
+}
+}
+_46=_49;
+_48=_46.indexOf(_47,_48+1);
+}
+}
+return _46;
+},_toggleNew:function(){
+dojo.style(this.entryNewButton,"display","none");
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","");
+this.entrySummarySelect.value="text";
+this.entryContentSelect.value="text";
+this.entryTitleSelect.value="text";
+this.clearNodes();
+this._new=true;
+var _4b=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _4c=new dojox.atom.widget.EntryHeader({title:_4b.title});
+this.entryTitleHeader.appendChild(_4c.domNode);
+this._editors.title=this._createEditor(this.entryTitleNode,null);
+this.setFieldValidity("title",true);
+var _4d=new dojox.atom.widget.EntryHeader({title:_4b.authors});
+this.entryAuthorHeader.appendChild(_4d.domNode);
+this._editors.authors=this._createPeopleEditor(this.entryAuthorNode,{name:"Author"});
+this.setFieldValidity("authors",true);
+var _4e=new dojox.atom.widget.EntryHeader({title:_4b.contributors});
+this.entryContributorHeader.appendChild(_4e.domNode);
+this._editors.contributors=this._createPeopleEditor(this.entryContributorNode,{name:"Contributor"});
+this.setFieldValidity("contributors",true);
+var _4f=new dojox.atom.widget.EntryHeader({title:_4b.id});
+this.entryIdHeader.appendChild(_4f.domNode);
+this._editors.id=this._createEditor(this.entryIdNode,null);
+this.setFieldValidity("id",true);
+var _50=new dojox.atom.widget.EntryHeader({title:_4b.updated});
+this.entryUpdatedHeader.appendChild(_50.domNode);
+this._editors.updated=this._createEditor(this.entryUpdatedNode,null);
+this.setFieldValidity("updated",true);
+var _51=new dojox.atom.widget.EntryHeader({title:_4b.summary});
+this.entrySummaryHeader.appendChild(_51.domNode);
+this._editors.summary=this._createEditor(this.entrySummaryNode,null,true);
+this.setFieldValidity("summaryedit",true);
+this.setFieldValidity("summary",true);
+var _52=new dojox.atom.widget.EntryHeader({title:_4b.content});
+this.entryContentHeader.appendChild(_52.domNode);
+this._editors.content=this._createEditor(this.entryContentNode,null,true);
+this.setFieldValidity("contentedit",true);
+this.setFieldValidity("content",true);
+this._displaySections();
+},_displaySections:function(){
+dojo.style(this.entrySummarySelect,"display","none");
+dojo.style(this.entryContentSelect,"display","none");
+dojo.style(this.entryTitleSelect,"display","none");
+if(this.isFieldValid("contentedit")){
+dojo.style(this.entryContentSelect,"display","");
+}
+if(this.isFieldValid("summaryedit")){
+dojo.style(this.entrySummarySelect,"display","");
+}
+if(this.isFieldValid("titleedit")){
+dojo.style(this.entryTitleSelect,"display","");
+}
+dojox.atom.widget.FeedEntryEditor.superclass._displaySections.apply(this);
+if(this._toLoad){
+for(var i in this._toLoad){
+var _53;
+if(this._toLoad[i].generateEditor){
+_53=dojo.hitch(this._toLoad[i],this._toLoad[i].generateEditor)();
+}else{
+_53=this._toLoad[i];
+}
+this._editors[this._toLoad[i].name]=_53;
+this._toLoad[i]=null;
+}
+this._toLoad=null;
+}
+}});
+dojo.declare("dojox.atom.widget.PeopleEditor",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.atom","widget/templates/PeopleEditor.html","<div class=\"peopleEditor\">\n\t<table style=\"width: 100%\">\n\t\t<tbody dojoAttachPoint=\"peopleEditorEditors\"></tbody>\n\t</table>\n\t<span class=\"peopleEditorButton\" dojoAttachPoint=\"peopleEditorButton\" dojoAttachEvent=\"onclick:_add\"></span>\n</div>\n"),_rows:[],_editors:[],_index:0,_numRows:0,postCreate:function(){
+var _54=dojo.i18n.getLocalization("dojox.atom.widget","PeopleEditor");
+if(this.name){
+if(this.name=="Author"){
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.addAuthor+"]"));
+}else{
+if(this.name=="Contributor"){
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.addContributor+"]"));
+}
+}
+}else{
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.add+"]"));
+}
+this._editors=[];
+if(!this.data||this.data.length===0){
+this._createEditors(null,null,null,0,this.name);
+this._index=1;
+}else{
+for(var i in this.data){
+this._createEditors(this.data[i].name,this.data[i].email,this.data[i].uri,i);
+this._index++;
+this._numRows++;
+}
+}
+},destroy:function(){
+for(var key in this._editors){
+for(var _55 in this._editors[key]){
+this._editors[key][_55].destroy();
+}
+}
+this._editors=[];
+},_createEditors:function(_56,_57,uri,_58,_59){
+var row=document.createElement("tr");
+this.peopleEditorEditors.appendChild(row);
+row.id="removeRow"+_58;
+var _5a=document.createElement("td");
+_5a.setAttribute("align","right");
+row.appendChild(_5a);
+_5a.colSpan=2;
+if(this._numRows>0){
+var hr=document.createElement("hr");
+_5a.appendChild(hr);
+hr.id="hr"+_58;
+}
+row=document.createElement("span");
+_5a.appendChild(row);
+row.className="peopleEditorButton";
+dojo.style(row,"font-size","x-small");
+dojo.connect(row,"onclick",this,"_removeEditor");
+row.id="remove"+_58;
+_5a=document.createTextNode("[X]");
+row.appendChild(_5a);
+row=document.createElement("tr");
+this.peopleEditorEditors.appendChild(row);
+row.id="editorsRow"+_58;
+var _5b=document.createElement("td");
+row.appendChild(_5b);
+dojo.style(_5b,"width","20%");
+_5a=document.createElement("td");
+row.appendChild(_5a);
+row=document.createElement("table");
+_5b.appendChild(row);
+dojo.style(row,"width","100%");
+_5b=document.createElement("tbody");
+row.appendChild(_5b);
+row=document.createElement("table");
+_5a.appendChild(row);
+dojo.style(row,"width","100%");
+_5a=document.createElement("tbody");
+row.appendChild(_5a);
+this._editors[_58]=[];
+this._editors[_58].push(this._createEditor(_56,_59+"name"+_58,"Name:",_5b,_5a));
+this._editors[_58].push(this._createEditor(_57,_59+"email"+_58,"Email:",_5b,_5a));
+this._editors[_58].push(this._createEditor(uri,_59+"uri"+_58,"URI:",_5b,_5a));
+},_createEditor:function(_5c,id,_5d,_5e,_5f){
+var row=document.createElement("tr");
+_5e.appendChild(row);
+var _60=document.createElement("label");
+_60.setAttribute("for",id);
+_60.appendChild(document.createTextNode(_5d));
+_5e=document.createElement("td");
+_5e.appendChild(_60);
+row.appendChild(_5e);
+row=document.createElement("tr");
+_5f.appendChild(row);
+_5f=document.createElement("td");
+row.appendChild(_5f);
+var _61=document.createElement("input");
+_61.setAttribute("id",id);
+_5f.appendChild(_61);
+dojo.style(_61,"width","95%");
+var box=new dijit.form.TextBox({},_61);
+box.attr("value",_5c);
+return box;
+},_removeEditor:function(_62){
+var _63=null;
+if(dojo.isIE){
+_63=_62.srcElement;
+}else{
+_63=_62.target;
+}
+var id=_63.id;
+id=id.substring(6);
+for(var key in this._editors[id]){
+this._editors[id][key].destroy();
+}
+var _64=dojo.byId("editorsRow"+id);
+var _65=_64.parentNode;
+_65.removeChild(_64);
+_64=dojo.byId("removeRow"+id);
+_65=_64.parentNode;
+_65.removeChild(_64);
+this._numRows--;
+if(this._numRows===1&&_65.firstChild.firstChild.firstChild.tagName.toLowerCase()==="hr"){
+_64=_65.firstChild.firstChild;
+_64.removeChild(_64.firstChild);
+}
+this._editors[id]=null;
+},_add:function(){
+this._createEditors(null,null,null,this._index);
+this._index++;
+this._numRows++;
+},getValues:function(){
+var _66=[];
+for(var i in this._editors){
+if(this._editors[i]){
+_66.push({name:this._editors[i][0].attr("value"),email:this._editors[i][1].attr("value"),uri:this._editors[i][2].attr("value")});
+}
+}
+return _66;
+}});
+}
diff --git a/js/dojo/dojox/atom/widget/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/FeedEntryViewer.js
@@ -0,0 +1,396 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]){
+dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]=true;
+dojo.provide("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget","FeedEntryViewer",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedEntryViewer");
+dojo.declare("dojox.atom.widget.FeedEntryViewer",[dijit._Widget,dijit._Templated,dijit._Container],{entrySelectionTopic:"",_validEntryFields:{},displayEntrySections:"",_displayEntrySections:null,enableMenu:false,enableMenuFade:false,_optionButtonDisplayed:true,templateString:dojo.cache("dojox.atom","widget/templates/FeedEntryViewer.html","<div class=\"feedEntryViewer\">\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\n <td align=\"right\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n </td>\n </tr>\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\n <td dojoAttachPoint=\"feedEntryCelltitle\">\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellauthors\">\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellid\">\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\n </td>\n <td rowspan=\"2\" align=\"right\">\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n </td>\n\t\t</tr>\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\n <td dojoAttachPoint=\"feedEntryCellupdated\">\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellsummary\">\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\n </td>\n <td dojoAttachPoint=\"feedEntryCellcontent\">\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\n </td>\n </tr>\n </table>\n \n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryTitleNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryAuthorNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entrySummaryNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\n <td>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\n\t\t\t\t\t\t</td>\n </tr>\n <tr>\n <td dojoAttachPoint=\"entryContentNode\">\n </td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n</div>\n"),_entry:null,_feed:null,_editMode:false,postCreate:function(){
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+var _1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+this.displayOptions.innerHTML=_1.displayOptions;
+this.feedEntryCheckBoxLabelTitle.innerHTML=_1.title;
+this.feedEntryCheckBoxLabelAuthors.innerHTML=_1.authors;
+this.feedEntryCheckBoxLabelContributors.innerHTML=_1.contributors;
+this.feedEntryCheckBoxLabelId.innerHTML=_1.id;
+this.close.innerHTML=_1.close;
+this.feedEntryCheckBoxLabelUpdated.innerHTML=_1.updated;
+this.feedEntryCheckBoxLabelSummary.innerHTML=_1.summary;
+this.feedEntryCheckBoxLabelContent.innerHTML=_1.content;
+},startup:function(){
+if(this.displayEntrySections===""){
+this._displayEntrySections=["title","authors","contributors","summary","content","id","updated"];
+}else{
+this._displayEntrySections=this.displayEntrySections.split(",");
+}
+this._setDisplaySectionsCheckboxes();
+if(this.enableMenu){
+dojo.style(this.feedEntryViewerMenu,"display","");
+if(this.entryCheckBoxRow&&this.entryCheckBoxRow2){
+if(this.enableMenuFade){
+dojo.fadeOut({node:this.entryCheckBoxRow,duration:250}).play();
+dojo.fadeOut({node:this.entryCheckBoxRow2,duration:250}).play();
+}
+}
+}
+},clear:function(){
+this.destroyDescendants();
+this._entry=null;
+this._feed=null;
+this.clearNodes();
+},clearNodes:function(){
+dojo.forEach(["entryTitleRow","entryAuthorRow","entryContributorRow","entrySummaryRow","entryContentRow","entryIdRow","entryUpdatedRow"],function(_2){
+dojo.style(this[_2],"display","none");
+},this);
+dojo.forEach(["entryTitleNode","entryTitleHeader","entryAuthorHeader","entryContributorHeader","entryContributorNode","entrySummaryHeader","entrySummaryNode","entryContentHeader","entryContentNode","entryIdNode","entryIdHeader","entryUpdatedHeader","entryUpdatedNode"],function(_3){
+while(this[_3].firstChild){
+dojo.destroy(this[_3].firstChild);
+}
+},this);
+},setEntry:function(_4,_5,_6){
+this.clear();
+this._validEntryFields={};
+this._entry=_4;
+this._feed=_5;
+if(_4!==null){
+if(this.entryTitleHeader){
+this.setTitleHeader(this.entryTitleHeader,_4);
+}
+if(this.entryTitleNode){
+this.setTitle(this.entryTitleNode,this._editMode,_4);
+}
+if(this.entryAuthorHeader){
+this.setAuthorsHeader(this.entryAuthorHeader,_4);
+}
+if(this.entryAuthorNode){
+this.setAuthors(this.entryAuthorNode,this._editMode,_4);
+}
+if(this.entryContributorHeader){
+this.setContributorsHeader(this.entryContributorHeader,_4);
+}
+if(this.entryContributorNode){
+this.setContributors(this.entryContributorNode,this._editMode,_4);
+}
+if(this.entryIdHeader){
+this.setIdHeader(this.entryIdHeader,_4);
+}
+if(this.entryIdNode){
+this.setId(this.entryIdNode,this._editMode,_4);
+}
+if(this.entryUpdatedHeader){
+this.setUpdatedHeader(this.entryUpdatedHeader,_4);
+}
+if(this.entryUpdatedNode){
+this.setUpdated(this.entryUpdatedNode,this._editMode,_4);
+}
+if(this.entrySummaryHeader){
+this.setSummaryHeader(this.entrySummaryHeader,_4);
+}
+if(this.entrySummaryNode){
+this.setSummary(this.entrySummaryNode,this._editMode,_4);
+}
+if(this.entryContentHeader){
+this.setContentHeader(this.entryContentHeader,_4);
+}
+if(this.entryContentNode){
+this.setContent(this.entryContentNode,this._editMode,_4);
+}
+}
+this._displaySections();
+},setTitleHeader:function(_7,_8){
+if(_8.title&&_8.title.value&&_8.title.value!==null){
+var _9=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _a=new dojox.atom.widget.EntryHeader({title:_9.title});
+_7.appendChild(_a.domNode);
+}
+},setTitle:function(_b,_c,_d){
+if(_d.title&&_d.title.value&&_d.title.value!==null){
+if(_d.title.type=="text"){
+var _e=document.createTextNode(_d.title.value);
+_b.appendChild(_e);
+}else{
+var _f=document.createElement("span");
+var _10=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_f);
+_10.attr("content",_d.title.value);
+_b.appendChild(_10.domNode);
+}
+this.setFieldValidity("title",true);
+}
+},setAuthorsHeader:function(_11,_12){
+if(_12.authors&&_12.authors.length>0){
+var _13=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _14=new dojox.atom.widget.EntryHeader({title:_13.authors});
+_11.appendChild(_14.domNode);
+}
+},setAuthors:function(_15,_16,_17){
+_15.innerHTML="";
+if(_17.authors&&_17.authors.length>0){
+for(var i in _17.authors){
+if(_17.authors[i].name){
+var _18=_15;
+if(_17.authors[i].uri){
+var _19=document.createElement("a");
+_18.appendChild(_19);
+_19.href=_17.authors[i].uri;
+_18=_19;
+}
+var _1a=_17.authors[i].name;
+if(_17.authors[i].email){
+_1a=_1a+" ("+_17.authors[i].email+")";
+}
+var _1b=document.createTextNode(_1a);
+_18.appendChild(_1b);
+var _1c=document.createElement("br");
+_15.appendChild(_1c);
+this.setFieldValidity("authors",true);
+}
+}
+}
+},setContributorsHeader:function(_1d,_1e){
+if(_1e.contributors&&_1e.contributors.length>0){
+var _1f=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _20=new dojox.atom.widget.EntryHeader({title:_1f.contributors});
+_1d.appendChild(_20.domNode);
+}
+},setContributors:function(_21,_22,_23){
+if(_23.contributors&&_23.contributors.length>0){
+for(var i in _23.contributors){
+var _24=document.createTextNode(_23.contributors[i].name);
+_21.appendChild(_24);
+var _25=document.createElement("br");
+_21.appendChild(_25);
+this.setFieldValidity("contributors",true);
+}
+}
+},setIdHeader:function(_26,_27){
+if(_27.id&&_27.id!==null){
+var _28=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _29=new dojox.atom.widget.EntryHeader({title:_28.id});
+_26.appendChild(_29.domNode);
+}
+},setId:function(_2a,_2b,_2c){
+if(_2c.id&&_2c.id!==null){
+var _2d=document.createTextNode(_2c.id);
+_2a.appendChild(_2d);
+this.setFieldValidity("id",true);
+}
+},setUpdatedHeader:function(_2e,_2f){
+if(_2f.updated&&_2f.updated!==null){
+var _30=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _31=new dojox.atom.widget.EntryHeader({title:_30.updated});
+_2e.appendChild(_31.domNode);
+}
+},setUpdated:function(_32,_33,_34){
+if(_34.updated&&_34.updated!==null){
+var _35=document.createTextNode(_34.updated);
+_32.appendChild(_35);
+this.setFieldValidity("updated",true);
+}
+},setSummaryHeader:function(_36,_37){
+if(_37.summary&&_37.summary.value&&_37.summary.value!==null){
+var _38=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _39=new dojox.atom.widget.EntryHeader({title:_38.summary});
+_36.appendChild(_39.domNode);
+}
+},setSummary:function(_3a,_3b,_3c){
+if(_3c.summary&&_3c.summary.value&&_3c.summary.value!==null){
+var _3d=document.createElement("span");
+var _3e=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_3d);
+_3e.attr("content",_3c.summary.value);
+_3a.appendChild(_3e.domNode);
+this.setFieldValidity("summary",true);
+}
+},setContentHeader:function(_3f,_40){
+if(_40.content&&_40.content.value&&_40.content.value!==null){
+var _41=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _42=new dojox.atom.widget.EntryHeader({title:_41.content});
+_3f.appendChild(_42.domNode);
+}
+},setContent:function(_43,_44,_45){
+if(_45.content&&_45.content.value&&_45.content.value!==null){
+var _46=document.createElement("span");
+var _47=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_46);
+_47.attr("content",_45.content.value);
+_43.appendChild(_47.domNode);
+this.setFieldValidity("content",true);
+}
+},_displaySections:function(){
+dojo.style(this.entryTitleRow,"display","none");
+dojo.style(this.entryAuthorRow,"display","none");
+dojo.style(this.entryContributorRow,"display","none");
+dojo.style(this.entrySummaryRow,"display","none");
+dojo.style(this.entryContentRow,"display","none");
+dojo.style(this.entryIdRow,"display","none");
+dojo.style(this.entryUpdatedRow,"display","none");
+for(var i in this._displayEntrySections){
+var _48=this._displayEntrySections[i].toLowerCase();
+if(_48==="title"&&this.isFieldValid("title")){
+dojo.style(this.entryTitleRow,"display","");
+}
+if(_48==="authors"&&this.isFieldValid("authors")){
+dojo.style(this.entryAuthorRow,"display","");
+}
+if(_48==="contributors"&&this.isFieldValid("contributors")){
+dojo.style(this.entryContributorRow,"display","");
+}
+if(_48==="summary"&&this.isFieldValid("summary")){
+dojo.style(this.entrySummaryRow,"display","");
+}
+if(_48==="content"&&this.isFieldValid("content")){
+dojo.style(this.entryContentRow,"display","");
+}
+if(_48==="id"&&this.isFieldValid("id")){
+dojo.style(this.entryIdRow,"display","");
+}
+if(_48==="updated"&&this.isFieldValid("updated")){
+dojo.style(this.entryUpdatedRow,"display","");
+}
+}
+},setDisplaySections:function(_49){
+if(_49!==null){
+this._displayEntrySections=_49;
+this._displaySections();
+}else{
+this._displayEntrySections=["title","authors","contributors","summary","content","id","updated"];
+}
+},_setDisplaySectionsCheckboxes:function(){
+var _4a=["title","authors","contributors","summary","content","id","updated"];
+for(var i in _4a){
+if(dojo.indexOf(this._displayEntrySections,_4a[i])==-1){
+dojo.style(this["feedEntryCell"+_4a[i]],"display","none");
+}else{
+this["feedEntryCheckBox"+_4a[i].substring(0,1).toUpperCase()+_4a[i].substring(1)].checked=true;
+}
+}
+},_readDisplaySections:function(){
+var _4b=[];
+if(this.feedEntryCheckBoxTitle.checked){
+_4b.push("title");
+}
+if(this.feedEntryCheckBoxAuthors.checked){
+_4b.push("authors");
+}
+if(this.feedEntryCheckBoxContributors.checked){
+_4b.push("contributors");
+}
+if(this.feedEntryCheckBoxSummary.checked){
+_4b.push("summary");
+}
+if(this.feedEntryCheckBoxContent.checked){
+_4b.push("content");
+}
+if(this.feedEntryCheckBoxId.checked){
+_4b.push("id");
+}
+if(this.feedEntryCheckBoxUpdated.checked){
+_4b.push("updated");
+}
+this._displayEntrySections=_4b;
+},_toggleCheckbox:function(_4c){
+if(_4c.checked){
+_4c.checked=false;
+}else{
+_4c.checked=true;
+}
+this._readDisplaySections();
+this._displaySections();
+},_toggleOptions:function(_4d){
+if(this.enableMenu){
+var _4e=null;
+var _4f;
+var _50;
+if(this._optionButtonDisplayed){
+if(this.enableMenuFade){
+_4f=dojo.fadeOut({node:this.entryCheckBoxDisplayOptions,duration:250});
+dojo.connect(_4f,"onEnd",this,function(){
+dojo.style(this.entryCheckBoxDisplayOptions,"display","none");
+dojo.style(this.entryCheckBoxRow,"display","");
+dojo.style(this.entryCheckBoxRow2,"display","");
+dojo.fadeIn({node:this.entryCheckBoxRow,duration:250}).play();
+dojo.fadeIn({node:this.entryCheckBoxRow2,duration:250}).play();
+});
+_4f.play();
+}else{
+dojo.style(this.entryCheckBoxDisplayOptions,"display","none");
+dojo.style(this.entryCheckBoxRow,"display","");
+dojo.style(this.entryCheckBoxRow2,"display","");
+}
+this._optionButtonDisplayed=false;
+}else{
+if(this.enableMenuFade){
+_4f=dojo.fadeOut({node:this.entryCheckBoxRow,duration:250});
+_50=dojo.fadeOut({node:this.entryCheckBoxRow2,duration:250});
+dojo.connect(_4f,"onEnd",this,function(){
+dojo.style(this.entryCheckBoxRow,"display","none");
+dojo.style(this.entryCheckBoxRow2,"display","none");
+dojo.style(this.entryCheckBoxDisplayOptions,"display","");
+dojo.fadeIn({node:this.entryCheckBoxDisplayOptions,duration:250}).play();
+});
+_4f.play();
+_50.play();
+}else{
+dojo.style(this.entryCheckBoxRow,"display","none");
+dojo.style(this.entryCheckBoxRow2,"display","none");
+dojo.style(this.entryCheckBoxDisplayOptions,"display","");
+}
+this._optionButtonDisplayed=true;
+}
+}
+},_handleEvent:function(_51){
+if(_51.source!=this){
+if(_51.action=="set"&&_51.entry){
+this.setEntry(_51.entry,_51.feed);
+}else{
+if(_51.action=="delete"&&_51.entry&&_51.entry==this._entry){
+this.clear();
+}
+}
+}
+},setFieldValidity:function(_52,_53){
+if(_52){
+var _54=_52.toLowerCase();
+this._validEntryFields[_52]=_53;
+}
+},isFieldValid:function(_55){
+return this._validEntryFields[_55.toLowerCase()];
+},getEntry:function(){
+return this._entry;
+},getFeed:function(){
+return this._feed;
+},destroy:function(){
+this.clear();
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+}});
+dojo.declare("dojox.atom.widget.EntryHeader",[dijit._Widget,dijit._Templated,dijit._Container],{title:"",templateString:dojo.cache("dojox.atom","widget/templates/EntryHeader.html","<span dojoAttachPoint=\"entryHeaderNode\" class=\"entryHeaderNode\"></span>\n"),postCreate:function(){
+this.setListHeader();
+},setListHeader:function(_56){
+this.clear();
+if(_56){
+this.title=_56;
+}
+var _57=document.createTextNode(this.title);
+this.entryHeaderNode.appendChild(_57);
+},clear:function(){
+this.destroyDescendants();
+if(this.entryHeaderNode){
+for(var i=0;i<this.entryHeaderNode.childNodes.length;i++){
+this.entryHeaderNode.removeChild(this.entryHeaderNode.childNodes[i]);
+}
+}
+},destroy:function(){
+this.clear();
+}});
+}
diff --git a/js/dojo/dojox/atom/widget/FeedViewer.js b/js/dojo/dojox/atom/widget/FeedViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/FeedViewer.js
@@ -0,0 +1,410 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedViewer"]){
+dojo._hasResource["dojox.atom.widget.FeedViewer"]=true;
+dojo.provide("dojox.atom.widget.FeedViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget","FeedViewerEntry",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedViewer");
+dojo.declare("dojox.atom.widget.FeedViewer",[dijit._Widget,dijit._Templated,dijit._Container],{feedViewerTableBody:null,feedViewerTable:null,entrySelectionTopic:"",url:"",xmethod:false,localSaveOnly:false,templateString:dojo.cache("dojox.atom","widget/templates/FeedViewer.html","<div class=\"feedViewerContainer\" dojoAttachPoint=\"feedViewerContainerNode\">\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"feedViewerTable\">\n\t\t<tbody dojoAttachPoint=\"feedViewerTableBody\" class=\"feedViewerTableBody\">\n\t\t</tbody>\n\t</table>\n</div>\n"),_feed:null,_currentSelection:null,_includeFilters:null,alertsEnabled:false,postCreate:function(){
+this._includeFilters=[];
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+this.atomIO=new dojox.atom.io.Connection();
+this.childWidgets=[];
+},startup:function(){
+this.containerNode=this.feedViewerTableBody;
+var _1=this.getDescendants();
+for(var i in _1){
+var _2=_1[i];
+if(_2&&_2.isFilter){
+this._includeFilters.push(new dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_2.scheme,_2.term,_2.label));
+_2.destroy();
+}
+}
+if(this.url!==""){
+this.setFeedFromUrl(this.url);
+}
+},clear:function(){
+this.destroyDescendants();
+},setFeedFromUrl:function(_3){
+if(_3!==""){
+if(this._isRelativeURL(_3)){
+var _4="";
+if(_3.charAt(0)!=="/"){
+_4=this._calculateBaseURL(window.location.href,true);
+}else{
+_4=this._calculateBaseURL(window.location.href,false);
+}
+this.url=_4+_3;
+}
+this.atomIO.getFeed(_3,dojo.hitch(this,this.setFeed));
+}
+},setFeed:function(_5){
+this._feed=_5;
+this.clear();
+var _6=function(a,b){
+var _7=this._displayDateForEntry(a);
+var _8=this._displayDateForEntry(b);
+if(_7>_8){
+return -1;
+}
+if(_7<_8){
+return 1;
+}
+return 0;
+};
+var _9=function(_a){
+var _b=_a.split(",");
+_b.pop();
+return _b.join(",");
+};
+var _c=_5.entries.sort(dojo.hitch(this,_6));
+if(_5){
+var _d=null;
+for(var i=0;i<_c.length;i++){
+var _e=_c[i];
+if(this._isFilterAccepted(_e)){
+var _f=this._displayDateForEntry(_e);
+var _10="";
+if(_f!==null){
+_10=_9(_f.toLocaleString());
+if(_10===""){
+_10=""+(_f.getMonth()+1)+"/"+_f.getDate()+"/"+_f.getFullYear();
+}
+}
+if((_d===null)||(_d!=_10)){
+this.appendGrouping(_10);
+_d=_10;
+}
+this.appendEntry(_e);
+}
+}
+}
+},_displayDateForEntry:function(_11){
+if(_11.updated){
+return _11.updated;
+}
+if(_11.modified){
+return _11.modified;
+}
+if(_11.issued){
+return _11.issued;
+}
+return new Date();
+},appendGrouping:function(_12){
+var _13=new dojox.atom.widget.FeedViewerGrouping({});
+_13.setText(_12);
+this.addChild(_13);
+this.childWidgets.push(_13);
+},appendEntry:function(_14){
+var _15=new dojox.atom.widget.FeedViewerEntry({"xmethod":this.xmethod});
+_15.setTitle(_14.title.value);
+_15.setTime(this._displayDateForEntry(_14).toLocaleTimeString());
+_15.entrySelectionTopic=this.entrySelectionTopic;
+_15.feed=this;
+this.addChild(_15);
+this.childWidgets.push(_15);
+this.connect(_15,"onClick","_rowSelected");
+_14.domNode=_15.entryNode;
+_14._entryWidget=_15;
+_15.entry=_14;
+},deleteEntry:function(_16){
+if(!this.localSaveOnly){
+this.atomIO.deleteEntry(_16.entry,dojo.hitch(this,this._removeEntry,_16),null,this.xmethod);
+}else{
+this._removeEntry(_16,true);
+}
+dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_16.entry}]);
+},_removeEntry:function(_17,_18){
+if(_18){
+var idx=dojo.indexOf(this.childWidgets,_17);
+var _19=this.childWidgets[idx-1];
+var _1a=this.childWidgets[idx+1];
+if(_19.declaredClass==="dojox.atom.widget.FeedViewerGrouping"&&(_1a===undefined||_1a.declaredClass==="dojox.atom.widget.FeedViewerGrouping")){
+_19.destroy();
+}
+_17.destroy();
+}else{
+}
+},_rowSelected:function(evt){
+var _1b=evt.target;
+while(_1b){
+if(_1b.attributes){
+var _1c=_1b.attributes.getNamedItem("widgetid");
+if(_1c&&_1c.value.indexOf("FeedViewerEntry")!=-1){
+break;
+}
+}
+_1b=_1b.parentNode;
+}
+for(var i=0;i<this._feed.entries.length;i++){
+var _1d=this._feed.entries[i];
+if((_1b===_1d.domNode)&&(this._currentSelection!==_1d)){
+dojo.addClass(_1d.domNode,"feedViewerEntrySelected");
+dojo.removeClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdated");
+dojo.addClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
+this.onEntrySelected(_1d);
+if(this.entrySelectionTopic!==""){
+dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_1d}]);
+}
+if(this._isEditable(_1d)){
+_1d._entryWidget.enableDelete();
+}
+this._deselectCurrentSelection();
+this._currentSelection=_1d;
+break;
+}else{
+if((_1b===_1d.domNode)&&(this._currentSelection===_1d)){
+dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_1d}]);
+this._deselectCurrentSelection();
+break;
+}
+}
+}
+},_deselectCurrentSelection:function(){
+if(this._currentSelection){
+dojo.addClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdated");
+dojo.removeClass(this._currentSelection.domNode,"feedViewerEntrySelected");
+dojo.removeClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
+this._currentSelection._entryWidget.disableDelete();
+this._currentSelection=null;
+}
+},_isEditable:function(_1e){
+var _1f=false;
+if(_1e&&_1e!==null&&_1e.links&&_1e.links!==null){
+for(var x in _1e.links){
+if(_1e.links[x].rel&&_1e.links[x].rel=="edit"){
+_1f=true;
+break;
+}
+}
+}
+return _1f;
+},onEntrySelected:function(_20){
+},_isRelativeURL:function(url){
+var _21=function(url){
+var _22=false;
+if(url.indexOf("file://")===0){
+_22=true;
+}
+return _22;
+};
+var _23=function(url){
+var _24=false;
+if(url.indexOf("http://")===0){
+_24=true;
+}
+return _24;
+};
+var _25=false;
+if(url!==null){
+if(!_21(url)&&!_23(url)){
+_25=true;
+}
+}
+return _25;
+},_calculateBaseURL:function(_26,_27){
+var _28=null;
+if(_26!==null){
+var _29=_26.indexOf("?");
+if(_29!=-1){
+_26=_26.substring(0,_29);
+}
+if(_27){
+_29=_26.lastIndexOf("/");
+if((_29>0)&&(_29<_26.length)&&(_29!==(_26.length-1))){
+_28=_26.substring(0,(_29+1));
+}else{
+_28=_26;
+}
+}else{
+_29=_26.indexOf("://");
+if(_29>0){
+_29=_29+3;
+var _2a=_26.substring(0,_29);
+var _2b=_26.substring(_29,_26.length);
+_29=_2b.indexOf("/");
+if((_29<_2b.length)&&(_29>0)){
+_28=_2a+_2b.substring(0,_29);
+}else{
+_28=_2a+_2b;
+}
+}
+}
+}
+return _28;
+},_isFilterAccepted:function(_2c){
+var _2d=false;
+if(this._includeFilters&&(this._includeFilters.length>0)){
+for(var i=0;i<this._includeFilters.length;i++){
+var _2e=this._includeFilters[i];
+if(_2e.match(_2c)){
+_2d=true;
+break;
+}
+}
+}else{
+_2d=true;
+}
+return _2d;
+},addCategoryIncludeFilter:function(_2f){
+if(_2f){
+var _30=_2f.scheme;
+var _31=_2f.term;
+var _32=_2f.label;
+var _33=true;
+if(!_30){
+_30=null;
+}
+if(!_31){
+_30=null;
+}
+if(!_32){
+_30=null;
+}
+if(this._includeFilters&&this._includeFilters.length>0){
+for(var i=0;i<this._includeFilters.length;i++){
+var _34=this._includeFilters[i];
+if((_34.term===_31)&&(_34.scheme===_30)&&(_34.label===_32)){
+_33=false;
+break;
+}
+}
+}
+if(_33){
+this._includeFilters.push(dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_30,_31,_32));
+}
+}
+},removeCategoryIncludeFilter:function(_35){
+if(_35){
+var _36=_35.scheme;
+var _37=_35.term;
+var _38=_35.label;
+if(!_36){
+_36=null;
+}
+if(!_37){
+_36=null;
+}
+if(!_38){
+_36=null;
+}
+var _39=[];
+if(this._includeFilters&&this._includeFilters.length>0){
+for(var i=0;i<this._includeFilters.length;i++){
+var _3a=this._includeFilters[i];
+if(!((_3a.term===_37)&&(_3a.scheme===_36)&&(_3a.label===_38))){
+_39.push(_3a);
+}
+}
+this._includeFilters=_39;
+}
+}
+},_handleEvent:function(_3b){
+if(_3b.source!=this){
+if(_3b.action=="update"&&_3b.entry){
+var evt=_3b;
+if(!this.localSaveOnly){
+this.atomIO.updateEntry(evt.entry,dojo.hitch(evt.source,evt.callback),null,true);
+}
+this._currentSelection._entryWidget.setTime(this._displayDateForEntry(evt.entry).toLocaleTimeString());
+this._currentSelection._entryWidget.setTitle(evt.entry.title.value);
+}else{
+if(_3b.action=="post"&&_3b.entry){
+if(!this.localSaveOnly){
+this.atomIO.addEntry(_3b.entry,this.url,dojo.hitch(this,this._addEntry));
+}else{
+this._addEntry(_3b.entry);
+}
+}
+}
+}
+},_addEntry:function(_3c){
+this._feed.addEntry(_3c);
+this.setFeed(this._feed);
+dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_3c}]);
+},destroy:function(){
+this.clear();
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+}});
+dojo.declare("dojox.atom.widget.FeedViewerEntry",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerEntry.html","<tr class=\"feedViewerEntry\" dojoAttachPoint=\"entryNode\" dojoAttachEvent=\"onclick:onClick\">\n <td class=\"feedViewerEntryUpdated\" dojoAttachPoint=\"timeNode\">\n </td>\n <td>\n <table border=\"0\" width=\"100%\" dojoAttachPoint=\"titleRow\">\n <tr padding=\"0\" border=\"0\">\n <td class=\"feedViewerEntryTitle\" dojoAttachPoint=\"titleNode\">\n </td>\n <td class=\"feedViewerEntryDelete\" align=\"right\">\n <span dojoAttachPoint=\"deleteButton\" dojoAttachEvent=\"onclick:deleteEntry\" class=\"feedViewerDeleteButton\" style=\"display:none;\">[delete]</span>\n </td>\n <tr>\n </table>\n </td>\n</tr>\n"),entryNode:null,timeNode:null,deleteButton:null,entry:null,feed:null,postCreate:function(){
+var _3d=dojo.i18n.getLocalization("dojox.atom.widget","FeedViewerEntry");
+this.deleteButton.innerHTML=_3d.deleteButton;
+},setTitle:function(_3e){
+if(this.titleNode.lastChild){
+this.titleNode.removeChild(this.titleNode.lastChild);
+}
+var _3f=document.createElement("div");
+_3f.innerHTML=_3e;
+this.titleNode.appendChild(_3f);
+},setTime:function(_40){
+if(this.timeNode.lastChild){
+this.timeNode.removeChild(this.timeNode.lastChild);
+}
+var _41=document.createTextNode(_40);
+this.timeNode.appendChild(_41);
+},enableDelete:function(){
+if(this.deleteButton!==null){
+this.deleteButton.style.display="inline";
+}
+},disableDelete:function(){
+if(this.deleteButton!==null){
+this.deleteButton.style.display="none";
+}
+},deleteEntry:function(_42){
+_42.preventDefault();
+_42.stopPropagation();
+this.feed.deleteEntry(this);
+},onClick:function(e){
+}});
+dojo.declare("dojox.atom.widget.FeedViewerGrouping",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerGrouping.html","<tr dojoAttachPoint=\"groupingNode\" class=\"feedViewerGrouping\">\n\t<td colspan=\"2\" dojoAttachPoint=\"titleNode\" class=\"feedViewerGroupingTitle\">\n\t</td>\n</tr>\n"),groupingNode:null,titleNode:null,setText:function(_43){
+if(this.titleNode.lastChild){
+this.titleNode.removeChild(this.titleNode.lastChild);
+}
+var _44=document.createTextNode(_43);
+this.titleNode.appendChild(_44);
+}});
+dojo.declare("dojox.atom.widget.AtomEntryCategoryFilter",[dijit._Widget,dijit._Templated],{scheme:"",term:"",label:"",isFilter:true});
+dojo.declare("dojox.atom.widget.FeedViewer.CategoryIncludeFilter",null,{constructor:function(_45,_46,_47){
+this.scheme=_45;
+this.term=_46;
+this.label=_47;
+},match:function(_48){
+var _49=false;
+if(_48!==null){
+var _4a=_48.categories;
+if(_4a!==null){
+for(var i=0;i<_4a.length;i++){
+var _4b=_4a[i];
+if(this.scheme!==""){
+if(this.scheme!==_4b.scheme){
+break;
+}
+}
+if(this.term!==""){
+if(this.term!==_4b.term){
+break;
+}
+}
+if(this.label!==""){
+if(this.label!==_4b.label){
+break;
+}
+}
+_49=true;
+}
+}
+}
+return _49;
+}});
+}
diff --git a/js/dojo/dojox/atom/widget/nls/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[edit]","save":"[save]","cancel":"[cancel]","doNew":"[new]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[close]","title":"Title","authors":"Authors","summary":"Summary","content":"Content","contributors":"Contributors","updated":"Updated","displayOptions":"[display options]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Delete]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Add","addAuthor":"Add Author","addContributor":"Add Contributor"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[تحرير]","save":"[حفظ]","cancel":"[الغاء]","doNew":"[جديد]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[اغلاق]","title":"العنوان","authors":"المؤلفين","summary":"الملخص","content":"محتويات","contributors":"المساهمين","updated":"تعديل في","displayOptions":"[اختيارات العرض]","id":"الكود"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[حذف]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"اضافة","addAuthor":"اضافة مؤلف","addContributor":"اضافة مشارك "})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[edita]","save":"[desa]","cancel":"[cancel·la]","doNew":"[nou]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[tanca]","title":"Títol","authors":"Autors","summary":"Resum","content":"Contingut","contributors":"Col·laboradors","updated":"Actualitzat","displayOptions":"[opcions de visualització]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Suprimeix]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Afegeix","addAuthor":"Afegeix un autor","addContributor":"Afegeix un col·laborador"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[upravit]","save":"[uložit]","cancel":"[storno]","doNew":"[nové]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[zavřít]","title":"Název","authors":"Autoři","summary":"Souhrn","content":"Obsah","contributors":"Přispěvatelé","updated":"Aktualizováno","displayOptions":"[volby zobrazení]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Odstranit]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Přidat","addAuthor":"Přidat autora","addContributor":"Přidat přispěvatele"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[redigér]","save":"[gem]","cancel":"[annullér]","doNew":"[ny]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[luk]","title":"Titel","authors":"Forfattere","summary":"Summary","content":"Indhold","contributors":"Bidragydere","updated":"Opdateret","displayOptions":"[fremvisningsvalg]","id":"Id"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Slet]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/da/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/da/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/da/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Tilføj","addAuthor":"Tilføj forfatter","addContributor":"Tilføj bidragyder"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[Bearbeiten]","save":"[Speichern]","cancel":"[Abbrechen]","doNew":"[Neu]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[Schließen]","title":"Titel","authors":"Autoren","summary":"Zusammenfassung","content":"Inhalt","contributors":"Mitwirkende","updated":"Aktualisiert","displayOptions":"[Anzeigeoptionen]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Löschen]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/de/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/de/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/de/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Hinzufügen","addAuthor":"Autor hinzufügen","addContributor":"Mitwirkenden hinzufügen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[τροποποίηση]","save":"[αποθήκευση]","cancel":"[ακύρωση]","doNew":"[δημιουργία]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[κλείσιμο]","title":"Τίτλος","authors":"Συντάκτες","summary":"Περίληψη","content":"Περιεχόμενο","contributors":"Συνεισφέροντες","updated":"Ενημερώθηκε","displayOptions":"[επιλογές παρουσίασης]","id":"Ταυτότητα"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Διαγραφή]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/el/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/el/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/el/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Προσθήκη","addAuthor":"Προσθήκη συντάκτη","addContributor":"Προσθήκη συνεισφέροντα"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[nuevo]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[cerrar]","title":"Título","authors":"Autores","summary":"Resumen","content":"Contenido","contributors":"Colaboradores","updated":"Actualizado","displayOptions":"[opciones de visualización]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Suprimir]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/es/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/es/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/es/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Añadir","addAuthor":"Añadir autor","addContributor":"Añadir colaborador"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[muokkaa]","save":"[tallenna]","cancel":"[peruuta]","doNew":"[uusi]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[sulje]","title":"Otsikko","authors":"Tekijät","summary":"Yhteenveto","content":"Sisältö","contributors":"Osallistujat","updated":"Päivitetty","displayOptions":"[näyttöasetukset]","id":"Tunnus"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Poista]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Lisää","addAuthor":"Lisää tekijä","addContributor":"Lisää osallistuja"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[éditer]","save":"[sauvegarder]","cancel":"[annuler]","doNew":"[nouveau]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[fermer]","title":"Titre","authors":"Auteurs","summary":"Récapitulatif","content":"Contenu","contributors":"Collaborateurs","updated":"Mis à jour","displayOptions":"[options d'affichage]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Supprimer]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Ajouter","addAuthor":"Ajouter un auteur","addContributor":"Ajouter un collaborateur"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[עריכה]","save":"[שמירה]","cancel":"[ביטול]","doNew":"[חדש]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[סגירה]","title":"כותרת","authors":"מחברים","summary":"סיכום","content":"תוכן","contributors":"תורמים","updated":"עודכן","displayOptions":"[הצגת אפשרויות]","id":"זיהוי"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[מחיקה]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/he/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/he/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/he/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"הוספה","addAuthor":"הוספת מחבר","addContributor":"הוספת תורם"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[szerkesztés]","save":"[mentés]","cancel":"[mégse]","doNew":"[új]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[bezárás]","title":"Cím","authors":"Szerzők","summary":"Összegzés","content":"Tartalom","contributors":"Közreműködők","updated":"Frissítve","displayOptions":"[megjelenítési beállítások]","id":"Azonosító"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Törlés]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Hozzáadás","addAuthor":"Szerző hozzáadása","addContributor":"Közreműködő hozzáadása"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[modifica]","save":"[salva]","cancel":"[annulla]","doNew":"[nuovo]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[chiudi]","title":"Titolo","authors":"Autori","summary":"Riepilogo","content":"Indice","contributors":"Collaboratori","updated":"Aggiornato","displayOptions":"[visualizza opzioni]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Cancella]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/it/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/it/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/it/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Aggiungi","addAuthor":"Aggiungi autore","addContributor":"Aggiungi collaboratori"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[編集]","save":"[保存]","cancel":"[キャンセル]","doNew":"[新規]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[閉じる]","title":"タイトル","authors":"作成者","summary":"要約","content":"内容","contributors":"貢献者","updated":"更新","displayOptions":"[表示オプション]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[削除]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"追加","addAuthor":"作成者の追加","addContributor":"貢献者の追加"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[편집]","save":"[저장]","cancel":"[취소]","doNew":"[새로 작성]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[닫기]","title":"제목","authors":"작성자","summary":"요약","content":"컨텐츠","contributors":"속성","updated":"갱신","displayOptions":"[옵션 표시]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[삭제]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"추가","addAuthor":"작성자 추가","addContributor":"제공자 추가"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[rediger]","save":"[lagre]","cancel":"[avbryt]","doNew":"[ny(tt)]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[lukk]","title":"Tittel","authors":"Forfattere","summary":"Sammendrag","content":"Innhold","contributors":"Bidragsytere","updated":"Oppdatert","displayOptions":"[visningsalternativer]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Slett]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Legg til","addAuthor":"Legg til forfatter","addContributor":"Legg til bidragsyter"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[bewerken]","save":"[opslaan]","cancel":"[annuleren]","doNew":"[nieuw]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[sluiten]","title":"Titel","authors":"Auteurs","summary":"Overzicht","content":"Content","contributors":"Deelnemers","updated":"Bijgewerkt","displayOptions":"[weergaveopties]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Wissen]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Toevoegen","addAuthor":"Auteur toevoegen","addContributor":"Deelnemer toevoegen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[Edytuj]","save":"[Zapisz]","cancel":"[Anuluj]","doNew":"[Nowy]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[Zamknij]","title":"Tytuł","authors":"Autorzy","summary":"Podsumowanie","content":"Treść","contributors":"Kontrybutorzy","updated":"Zaktualizowano","displayOptions":"[Opcje wyświetlania]","id":"Identyfikator"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Usuń]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Dodaj","addAuthor":"Dodaj autora","addContributor":"Dodaj kontrybutora"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[novo]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuintes","updated":"Actualizado","displayOptions":"[opções de visualização]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Eliminar]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Adicionar","addAuthor":"Adicionar autor","addContributor":"Adicionar contribuinte"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[editar]","save":"[salvar]","cancel":"[cancelar]","doNew":"[novo]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuidores","updated":"Atualizado","displayOptions":"[exibir opções]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Excluir]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Adicionar","addAuthor":"Adicionar Autor","addContributor":"Adicionar Contribuidor"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[изменить]","save":"[сохранить]","cancel":"[отмена]","doNew":"[создать]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[закрыть]","title":"Название","authors":"Авторы","summary":"Сводка","content":"Информационное наполнение","contributors":"Участники","updated":"Обновлено","displayOptions":"[показать опции]","id":"ИД"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Удалить]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Добавить","addAuthor":"Добавить автора","addContributor":"Добавить участника"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[upraviť]","save":"[uložiť]","cancel":"[zrušiť]","doNew":"[nový]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[zatvoriť]","title":"Nadpis","authors":"Autori","summary":"Súhrn","content":"Obsah","contributors":"Prispievatelia","updated":"Aktualizovaný","displayOptions":"[zobraziť voľby]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Vymazať]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Pridať","addAuthor":"Pridať autora","addContributor":"Pridať prispievateľa"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[urejanje]","save":"[shrani]","cancel":"[prekliči]","doNew":"[novo]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[zapri]","title":"Naslov","authors":"Avtorji","summary":"Povzetek","content":"Vsebina","contributors":"Kontributorji","updated":"Posodobljeno","displayOptions":"[možnosti prikaza]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Izbriši]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Dodaj","addAuthor":"Dodaj avtorja","addContributor":"Dodaj kontributorja,"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[Redigera]","save":"[Spara]","cancel":"[Avbryt]","doNew":"[Nytt]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[Stäng]","title":"Rubrik","authors":"Författare","summary":"Sammanfattning","content":"Innehåll","contributors":"Medverkande","updated":"Uppdaterat","displayOptions":"[Visningsalternativ]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Ta bort]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Lägg til ","addAuthor":"Lägg till författare","addContributor":"Lägg till medverkande"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[แก้ไข]","save":"[บันทึก]","cancel":"[ยกเลิก]","doNew":"[สร้าง]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[ปิด]","title":"ชื่อเรื่อง","authors":"ผู้เขียน","summary":"สรุป","content":"เนื้อหา","contributors":"ผู้อนุเคราะห์","updated":"อัพเดต","displayOptions":"[อ็อพชันการแสดงผล]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[ลบ]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/th/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/th/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/th/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"เพิ่ม","addAuthor":"เพิ่มผู้เขียน","addContributor":"เพิ่มผู้อนุเคราะห์"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[düzenle]","save":"[kaydet]","cancel":"[iptal]","doNew":"[yeni]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[kapat]","title":"Başlık","authors":"Yazarlar","summary":"Özet","content":"İçerik","contributors":"Katkıda Bulunanlar","updated":"Güncelleştirildi","displayOptions":"[görüntüleme seçenekleri]","id":"Kimlik"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[Sil]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"Ekle","addAuthor":"Yazar Ekle","addContributor":"Katkıda Bulunan Ekle"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[編輯]","save":"[儲存]","cancel":"[取消]","doNew":"[新建]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[關閉]","title":"標題","authors":"作者","summary":"摘要","content":"內容","contributors":"提出者","updated":"已更新","displayOptions":"[顯示選項]","id":"ID"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[刪除]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"新增","addAuthor":"新增作者","addContributor":"新增提出者"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js b/js/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js
@@ -0,0 +1,1 @@
+({"edit":"[编辑]","save":"[保存]","cancel":"[取消]","doNew":"[新建]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js b/js/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js
@@ -0,0 +1,1 @@
+({"close":"[关闭]","title":"标题","authors":"作者","summary":"摘要","content":"内容","contributors":"内容添加者","updated":"更新时间","displayOptions":"[显示选项]","id":"标识"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js b/js/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js
@@ -0,0 +1,1 @@
+({"deleteButton":"[删除]"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js b/js/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js
@@ -0,0 +1,1 @@
+({"add":"添加","addAuthor":"添加作者","addContributor":"添加内容添加者"})
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/templates/EntryHeader.html b/js/dojo/dojox/atom/widget/templates/EntryHeader.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/EntryHeader.html
@@ -0,0 +1,1 @@
+<span dojoAttachPoint="entryHeaderNode" class="entryHeaderNode"></span>
diff --git a/js/dojo/dojox/atom/widget/templates/FeedEntryEditor.html b/js/dojo/dojox/atom/widget/templates/FeedEntryEditor.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/FeedEntryEditor.html
@@ -0,0 +1,195 @@
+<div class="feedEntryViewer">
+ <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+ <tr width="100%" dojoAttachPoint="entryCheckBoxDisplayOptions">
+ <td align="left" dojoAttachPoint="entryNewButton">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="doNew" dojoAttachEvent="onclick:_toggleNew"></span>
+ </td>
+ <td align="left" dojoAttachPoint="entryEditButton" style="display: none;">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="edit" dojoAttachEvent="onclick:_toggleEdit"></span>
+ </td>
+ <td align="left" dojoAttachPoint="entrySaveCancelButtons" style="display: none;">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="save" dojoAttachEvent="onclick:saveEdits"></span>
+ <span class="feedEntryViewerMenu" dojoAttachPoint="cancel" dojoAttachEvent="onclick:cancelEdits"></span>
+ </td>
+ <td align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCelltitle">
+ <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellauthors">
+ <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontributors">
+ <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellid">
+ <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+ </td>
+ <td rowspan="2" align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCellupdated">
+ <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellsummary">
+ <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontent">
+ <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+ </td>
+ </tr>
+ </table>
+
+ <table class="feedEntryViewerContainer" border="0" width="100%">
+ <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entryTitleSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" dojoAttachPoint="entryTitleNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryAuthorNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryIdHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2" colspan="2">
+ <span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entrySummarySelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entrySummaryNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContentHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entryContentSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContentNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/js/dojo/dojox/atom/widget/templates/FeedEntryViewer.html b/js/dojo/dojox/atom/widget/templates/FeedEntryViewer.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/FeedEntryViewer.html
@@ -0,0 +1,158 @@
+<div class="feedEntryViewer">
+ <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+ <tr width="100%" dojoAttachPoint="entryCheckBoxDisplayOptions">
+ <td align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCelltitle">
+ <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellauthors">
+ <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontributors">
+ <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellid">
+ <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+ </td>
+ <td rowspan="2" align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCellupdated">
+ <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellsummary">
+ <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontent">
+ <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+ </td>
+ </tr>
+ </table>
+
+ <table class="feedEntryViewerContainer" border="0" width="100%">
+ <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryTitleNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryAuthorNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryIdHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entrySummaryNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContentHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContentNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/js/dojo/dojox/atom/widget/templates/FeedViewer.html b/js/dojo/dojox/atom/widget/templates/FeedViewer.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/FeedViewer.html
@@ -0,0 +1,6 @@
+<div class="feedViewerContainer" dojoAttachPoint="feedViewerContainerNode">
+ <table cellspacing="0" cellpadding="0" class="feedViewerTable">
+ <tbody dojoAttachPoint="feedViewerTableBody" class="feedViewerTableBody">
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo/dojox/atom/widget/templates/FeedViewerEntry.html b/js/dojo/dojox/atom/widget/templates/FeedViewerEntry.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/FeedViewerEntry.html
@@ -0,0 +1,15 @@
+<tr class="feedViewerEntry" dojoAttachPoint="entryNode" dojoAttachEvent="onclick:onClick">
+ <td class="feedViewerEntryUpdated" dojoAttachPoint="timeNode">
+ </td>
+ <td>
+ <table border="0" width="100%" dojoAttachPoint="titleRow">
+ <tr padding="0" border="0">
+ <td class="feedViewerEntryTitle" dojoAttachPoint="titleNode">
+ </td>
+ <td class="feedViewerEntryDelete" align="right">
+ <span dojoAttachPoint="deleteButton" dojoAttachEvent="onclick:deleteEntry" class="feedViewerDeleteButton" style="display:none;">[delete]</span>
+ </td>
+ <tr>
+ </table>
+ </td>
+</tr>
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html b/js/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html
@@ -0,0 +1,4 @@
+<tr dojoAttachPoint="groupingNode" class="feedViewerGrouping">
+ <td colspan="2" dojoAttachPoint="titleNode" class="feedViewerGroupingTitle">
+ </td>
+</tr>
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/templates/PeopleEditor.html b/js/dojo/dojox/atom/widget/templates/PeopleEditor.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/PeopleEditor.html
@@ -0,0 +1,6 @@
+<div class="peopleEditor">
+ <table style="width: 100%">
+ <tbody dojoAttachPoint="peopleEditorEditors"></tbody>
+ </table>
+ <span class="peopleEditorButton" dojoAttachPoint="peopleEditorButton" dojoAttachEvent="onclick:_add"></span>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/atom/widget/templates/css/EntryHeader.css b/js/dojo/dojox/atom/widget/templates/css/EntryHeader.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/EntryHeader.css
@@ -0,0 +1,27 @@
+
+.containerNode {
+ visibility : visible;
+}
+.graphic-tab-lgray {
+ margin-bottom: 10px;
+}
+.newgraphic-tab-lgray {
+ border-bottom: #d9d9d9 solid 7px;
+}
+td.lp {
+ padding: 0px 13px 0px 10px;
+ font-weight: bold;
+ background: #d9d9d9;
+ border-bottom: #d9d9d9 solid 7px;
+}
+td.lp2 {
+ background: #FFFFFF;
+ border-bottom: #d9d9d9 solid 7px;
+}
+span.lp {
+ padding: 0px 13px 0px 10px;
+ font-weight: bold;
+ background: #d9d9d9;
+ border-bottom: #d9d9d9 solid 7px;
+ width: auto;
+}
diff --git a/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css
@@ -0,0 +1,84 @@
+.feedEntryEditor {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorMenuTable {
+ background: #C0C0C0;
+ border:2px solid;
+ border-top-color: lightgrey;
+ border-left-color: lightgrey;
+ border-right-color: darkgray;
+ border-bottom-color: darkgray;
+}
+.feedEntryEditorMenu {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+.feedEntryEditorDisplayCheckbox {
+ font-size: small;
+ text-align: left;
+}
+.feedEntryEditorMenu:hover {
+ text-decoration: underline;
+}
+.feedEntryEditorTitle {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 125%;
+ font-weight: bold;
+}
+.feedEntryEditorAuthor {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorAuthorNames {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+.feedEntryEditorSummary {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorUpdated {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorUpdatedText {
+ color:#000000;
+ background: #FFFFFF;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+.feedEntryEditorId {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorIdText {
+ color:#000000;
+ background: #FFFFFF;
+ font-style: italic;
+ font-size: 110%;
+ font-weight: normal;
+}
+.feedEntryEditorContent {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryEditorContributorNames {
+ color:#000000;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 125%;
+ font-style: italic;
+ font-weight: normal;
+}
diff --git a/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css
@@ -0,0 +1,90 @@
+.feedEntryViewer {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerMenuTable {
+ background: #C0C0C0;
+ border:2px solid;
+ border-top-color: lightgrey;
+ border-left-color: lightgrey;
+ border-right-color: darkgray;
+ border-bottom-color: darkgray;
+ margin: 0;
+}
+.feedEntryViewerMenu, .peopleEditorButton {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+.feedEntryViewerDisplayCheckbox {
+ font-size: small;
+ text-align: left;
+}
+.feedEntryViewerMenu:hover, .peopleEditorButton:hover {
+ text-decoration: underline;
+}
+.feedEntryViewerContainer, .feedEntryViewerContainer table {
+ border-width: 0;
+ margin: 0;
+}
+.feedEntryViewerTitle {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+
+ font-size: 125%;
+ font-weight: bold;
+}
+.feedEntryViewerAuthor {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerAuthorNames {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+.feedEntryViewerSummary {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerUpdated {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerUpdatedText {
+ color:#000000;
+ background: #FFFFFF;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+.feedEntryViewerId {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerIdText {
+ color:#000000;
+ background: #FFFFFF;
+ font-style: italic;
+ font-size: 110%;
+ font-weight: normal;
+}
+.feedEntryViewerContent {
+ color:#000000;
+ background: #FFFFFF;
+}
+.feedEntryViewerContributorNames {
+ color:#000000;
+ text-align: left;
+
+ font-size: 125%;
+ font-weight: normal;
+}
+.feedEntryViewer table {
+}
diff --git a/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css
@@ -0,0 +1,14 @@
+.feedViewerTable {
+ font-size: small;
+ width:100%;
+ cursor:default;
+ padding:2px;
+}
+.feedViewerTable, .feedViewerTable table {
+ border-width: 0;
+ margin: 0;
+}
+.feedViewerTableBody {
+ overflow-x: auto;
+ overflow-y: auto;
+}
diff --git a/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css
@@ -0,0 +1,60 @@
+.feedViewerEntry {
+ background: #F0F0F0;
+ padding: 2px;
+ overflow-x: auto;
+ overflow-y: auto;
+ cursor: pointer;
+}
+.feedViewerEntry:hover {
+ background: #a6c2e7;
+ padding: 2px;
+}
+.feedViewerEntrySelected {
+ color: #000000;
+ background: #C0C0C0;
+ text-align: left;
+ vertical-align: top;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+.feedViewerEntrySelected:hover {
+ background: #a6c2e7;
+ padding: 2px;
+}
+.feedViewerEntryUpdated {
+ text-align: left;
+ vertical-align: top;
+ color: #909090;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+.feedViewerEntryUpdatedSelected {
+ text-align: left;
+ vertical-align: top;
+ color: #000000;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+.feedViewerEntryTitle {
+ color:#000000;
+ text-align: left;
+ text-decoration:none;
+ padding-left: 4px;
+ padding-bottom: 2px;
+}
+.feedViewerEntryTitle:hover {
+ color:#000000;
+ text-align: left;
+ text-decoration:underline;
+ padding-left: 4px;
+ padding-bottom: 2px;
+}
+.feedViewerDeleteButton {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+.feedViewerDeleteButton:hover {
+ text-decoration: underline;
+}
diff --git a/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css
@@ -0,0 +1,8 @@
+.feedViewerGrouping {
+}
+.feedViewerGroupingTitle {
+ font-weight: bold;
+ color:#606060;
+ border-bottom:1px solid #909090;
+ padding-top: 4px;
+}
diff --git a/js/dojo/dojox/av/FLAudio.js b/js/dojo/dojox/av/FLAudio.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/FLAudio.js
@@ -0,0 +1,111 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.FLAudio"]){
+dojo._hasResource["dojox.av.FLAudio"]=true;
+dojo.provide("dojox.av.FLAudio");
+dojo.experimental("dojox.av.FLAudio");
+dojo.require("dijit._Widget");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.av._Media");
+dojo.require("dojox.timing.doLater");
+dojo.declare("dojox.av.FLAudio",null,{id:"",initialVolume:0.7,initialPan:0,isDebug:false,statusInterval:200,_swfPath:dojo.moduleUrl("dojox.av","resources/audio.swf"),constructor:function(_1){
+dojo.global.swfIsInHTML=function(){
+return true;
+};
+dojo.mixin(this,_1||{});
+if(!this.id){
+this.id="flaudio_"+new Date().getTime();
+}
+this.domNode=dojo.doc.createElement("div");
+dojo.style(this.domNode,{postion:"relative",width:"1px",height:"1px",top:"1px",left:"1px"});
+dojo.body().appendChild(this.domNode);
+this.init();
+},init:function(){
+this._subs=[];
+this.initialVolume=this._normalizeVolume(this.initialVolume);
+var _2={path:this._swfPath.uri,width:"1px",height:"1px",minimumVersion:9,expressInstall:true,params:{wmode:"transparent"},vars:{id:this.id,autoPlay:this.autoPlay,initialVolume:this.initialVolume,initialPan:this.initialPan,statusInterval:this.statusInterval,isDebug:this.isDebug}};
+this._sub("mediaError","onError");
+this._sub("filesProgress","onLoadStatus");
+this._sub("filesAllLoaded","onAllLoaded");
+this._sub("mediaPosition","onPlayStatus");
+this._sub("mediaMeta","onID3");
+this._flashObject=new dojox.embed.Flash(_2,this.domNode);
+this._flashObject.onError=function(_3){
+console.warn("Flash Error:",_3);
+alert(_3);
+};
+this._flashObject.onLoad=dojo.hitch(this,function(_4){
+this.flashMedia=_4;
+this.isPlaying=this.autoPlay;
+this.isStopped=!this.autoPlay;
+this.onLoad(this.flashMedia);
+});
+},load:function(_5){
+if(dojox.timing.doLater(this.flashMedia,this)){
+return false;
+}
+if(!_5.url){
+throw new Error("An url is required for loading media");
+return false;
+}else{
+_5.url=this._normalizeUrl(_5.url);
+}
+this.flashMedia.load(_5);
+return _5.url;
+},doPlay:function(_6){
+this.flashMedia.doPlay(_6);
+},pause:function(_7){
+this.flashMedia.pause(_7);
+},stop:function(_8){
+this.flashMedia.doStop(_8);
+},setVolume:function(_9){
+this.flashMedia.setVolume(_9);
+},setPan:function(_a){
+this.flashMedia.setPan(_a);
+},getVolume:function(_b){
+return this.flashMedia.getVolume(_b);
+},getPan:function(_c){
+return this.flashMedia.getPan(_c);
+},onError:function(_d){
+console.warn("SWF ERROR:",_d);
+},onLoadStatus:function(_e){
+},onAllLoaded:function(){
+},onPlayStatus:function(_f){
+},onLoad:function(){
+},onID3:function(evt){
+},destroy:function(){
+if(!this.flashMedia){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,function(s){
+dojo.unsubscribe(s);
+});
+dojo.forEach(this._cons,function(c){
+dojo.disconnect(c);
+});
+this._flashObject.destroy();
+},_sub:function(_10,_11){
+dojo.subscribe(this.id+"/"+_10,this,_11);
+},_normalizeVolume:function(vol){
+if(vol>1){
+while(vol>1){
+vol*=0.1;
+}
+}
+return vol;
+},_normalizeUrl:function(_12){
+if(_12&&_12.toLowerCase().indexOf("http")<0){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+_12=loc+_12;
+}
+return _12;
+}});
+}
diff --git a/js/dojo/dojox/av/FLVideo.js b/js/dojo/dojox/av/FLVideo.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/FLVideo.js
@@ -0,0 +1,100 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.FLVideo"]){
+dojo._hasResource["dojox.av.FLVideo"]=true;
+dojo.provide("dojox.av.FLVideo");
+dojo.experimental("dojox.av.FLVideo");
+dojo.require("dijit._Widget");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.av._Media");
+dojo.declare("dojox.av.FLVideo",[dijit._Widget,dojox.av._Media],{_swfPath:dojo.moduleUrl("dojox.av","resources/video.swf"),constructor:function(_1){
+dojo.global.swfIsInHTML=function(){
+return true;
+};
+},postCreate:function(){
+this._subs=[];
+this._cons=[];
+this.mediaUrl=this._normalizeUrl(this.mediaUrl);
+this.initialVolume=this._normalizeVolume(this.initialVolume);
+var _2={path:this._swfPath.uri,width:"100%",height:"100%",minimumVersion:9,expressInstall:true,params:{allowFullScreen:true,wmode:"transparent"},vars:{videoUrl:this.mediaUrl,id:this.id,autoPlay:this.autoPlay,volume:this.initialVolume,isDebug:this.isDebug}};
+this._sub("stageClick","onClick");
+this._sub("stageSized","onSwfSized");
+this._sub("mediaStatus","onPlayerStatus");
+this._sub("mediaMeta","onMetaData");
+this._sub("mediaError","onError");
+this._sub("mediaStart","onStart");
+this._sub("mediaEnd","onEnd");
+this._flashObject=new dojox.embed.Flash(_2,this.domNode);
+this._flashObject.onError=function(_3){
+console.error("Flash Error:",_3);
+};
+this._flashObject.onLoad=dojo.hitch(this,function(_4){
+this.flashMedia=_4;
+this.isPlaying=this.autoPlay;
+this.isStopped=!this.autoPlay;
+this.onLoad(this.flashMedia);
+this._initStatus();
+this._update();
+});
+this.inherited(arguments);
+},play:function(_5){
+this.isPlaying=true;
+this.isStopped=false;
+this.flashMedia.doPlay(this._normalizeUrl(_5));
+},pause:function(){
+this.isPlaying=false;
+this.isStopped=false;
+this.flashMedia.pause();
+},seek:function(_6){
+this.flashMedia.seek(_6);
+},volume:function(_7){
+if(_7){
+if(!this.flashMedia){
+this.initialVolume=_7;
+}
+this.flashMedia.setVolume(this._normalizeVolume(_7));
+}
+if(!this.flashMedia||!this.flashMedia.doGetVolume){
+return this.initialVolume;
+}
+return this.flashMedia.getVolume();
+},_checkBuffer:function(_8,_9){
+if(this.percentDownloaded==100){
+if(this.isBuffering){
+this.onBuffer(false);
+this.flashMedia.doPlay();
+}
+return;
+}
+if(!this.isBuffering&&_9<0.1){
+this.onBuffer(true);
+this.flashMedia.pause();
+return;
+}
+var _a=this.percentDownloaded*0.01*this.duration;
+if(!this.isBuffering&&_8+this.minBufferTime*0.001>_a){
+this.onBuffer(true);
+this.flashMedia.pause();
+}else{
+if(this.isBuffering&&_8+this.bufferTime*0.001<=_a){
+this.onBuffer(false);
+this.flashMedia.doPlay();
+}
+}
+},_update:function(){
+var _b=Math.min(this.getTime()||0,this.duration);
+var _c=this.flashMedia.getLoaded();
+this.percentDownloaded=Math.ceil(_c.bytesLoaded/_c.bytesTotal*100);
+this.onDownloaded(this.percentDownloaded);
+this.onPosition(_b);
+if(this.duration){
+this._checkBuffer(_b,_c.buffer);
+}
+setTimeout(dojo.hitch(this,"_update"),this.updateTime);
+}});
+}
diff --git a/js/dojo/dojox/av/README b/js/dojo/dojox/av/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/README
@@ -0,0 +1,65 @@
+-------------------------------------------------------------------------------
+DojoX Audio/Video
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 01/15/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Tom Trenka (ttrenka AT gmail.com)
+ Mike Wilcox (AnM8tR AT Yahoo.com)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX A/V aims to bring audio and video capabilities to the Open Web, first
+by wrapping common media types (Flash and Quicktime) and then by providing
+easy to use objects to accomplish basic A/V tasks. As of version 0.1, only
+the base is included (Flash and Quicktime embedding mechanisms); in the near
+future, usable objects will appear, both in raw programmatic form and also with
+Dijit-compatible wrappers.
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX A/V depends on dojox.embed, and uses Flash movies created in the deft
+project using Flex OSS 3. You do not need any of the deft code; compiled
+movies are included with dojox.av. If you want to modify the actual movies,
+you can look in the deft project (under the package deft.av).
+-------------------------------------------------------------------------------
+Documentation
+
+TBD.
+-------------------------------------------------------------------------------
+Included media:
+
+Video:
+test/video/Grog.flv and test/video/OldMan.flv are both created by Mike Wilcox
+and may be freely used and distributed in any way. I only ask for credit if
+widely shown.
+
+Audio:
+test/audio/Ola.mp3, test/audio/Hio.mp3, test/audio/FuzzWah.mp3 are from a
+sounds effects CD and are not to be redistributed. They will most likely
+be swapped out when a better open source option is avaialable.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+
+http://svn.dojotoolkit.org/src/dojox/trunk/embed/*
+http://svn.dojotoolkit.org/src/dojox/trunk/av/*
+
+Install into the following directory structure:
+/dojox/av/
+
+...which should be at the same level as your Dojo checkout.
+
+-------------------------------------------------------------------------------
+Change history
+
+2008-01-15 Initial checkin, with basic movie embedding code.
+2008-06-04 Removed the base code, after moving it into dojox.embed and modifying it.
+2008-08-14 Implemented FLVideo for Flash Video
+2009-02-08 Implemented FLAudio for Flash Audio
diff --git a/js/dojo/dojox/av/_Media.js b/js/dojo/dojox/av/_Media.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/_Media.js
@@ -0,0 +1,123 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av._Media"]){
+dojo._hasResource["dojox.av._Media"]=true;
+dojo.provide("dojox.av._Media");
+dojo.declare("dojox.av._Media",null,{mediaUrl:"",initialVolume:1,autoPlay:false,bufferTime:2000,minBufferTime:300,updateTime:100,id:"",isDebug:false,percentDownloaded:0,_flashObject:null,flashMedia:null,_initStatus:function(){
+this.status="ready";
+dojo.connect(this,"onPosition",this,"_figureStatus");
+},getTime:function(){
+return this.flashMedia.getTime();
+},onLoad:function(_1){
+},onDownloaded:function(_2){
+},onClick:function(_3){
+},onSwfSized:function(_4){
+},onMetaData:function(_5,_6){
+this.duration=_5.duration;
+},onPosition:function(_7){
+},onStart:function(_8){
+},onPlay:function(_9){
+},onPause:function(_a){
+},onEnd:function(_b){
+},onStop:function(){
+},onBuffer:function(_c){
+this.isBuffering=_c;
+},onError:function(_d,_e){
+console.warn("ERROR-"+_d.type.toUpperCase()+":",_d.info.code," - URL:",_e);
+},onStatus:function(_f){
+},onPlayerStatus:function(_10){
+},onResize:function(){
+},_figureStatus:function(){
+var pos=this.getTime();
+if(this.status=="stopping"){
+this.status="stopped";
+this.onStop(this._eventFactory());
+}else{
+if(this.status=="ending"&&pos==this._prevPos){
+this.status="ended";
+this.onEnd(this._eventFactory());
+}else{
+if(this.duration&&pos>this.duration-0.5){
+this.status="ending";
+}else{
+if(pos===0){
+if(this.status=="ready"){
+}else{
+this.status="stopped";
+if(this._prevStatus!="stopped"){
+this.onStop(this._eventFactory());
+}
+}
+}else{
+if(this.status=="ready"){
+this.status="started";
+this.onStart(this._eventFactory());
+this.onPlay(this._eventFactory());
+}else{
+if(this.isBuffering){
+this.status="buffering";
+}else{
+if(this.status=="started"||(this.status=="playing"&&pos!=this._prevPos)){
+this.status="playing";
+}else{
+if(!this.isStopped&&this.status=="playing"&&pos==this._prevPos){
+this.status="paused";
+console.warn("pause",pos,this._prevPos);
+if(this.status!=this._prevStatus){
+this.onPause(this._eventFactory());
+}
+}else{
+if((this.status=="paused"||this.status=="stopped")&&pos!=this._prevPos){
+this.status="started";
+this.onPlay(this._eventFactory());
+}
+}
+}
+}
+}
+}
+}
+}
+}
+this._prevPos=pos;
+this._prevStatus=this.status;
+this.onStatus(this.status);
+},_eventFactory:function(){
+var evt={status:this.status};
+return evt;
+},_sub:function(_11,_12){
+dojo.subscribe(this.id+"/"+_11,this,_12);
+},_normalizeVolume:function(vol){
+if(vol>1){
+while(vol>1){
+vol*=0.1;
+}
+}
+return vol;
+},_normalizeUrl:function(_13){
+if(_13&&(_13.toLowerCase().indexOf("http")<0||_13.indexOf("/")==0)){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+_13=loc+_13;
+}
+return _13;
+},destroy:function(){
+if(!this.flashMedia){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,function(s){
+dojo.unsubscribe(s);
+});
+dojo.forEach(this._cons,function(c){
+dojo.disconnect(c);
+});
+this._flashObject.destroy();
+}});
+}
diff --git a/js/dojo/dojox/av/resources/audio.swf b/js/dojo/dojox/av/resources/audio.swf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2ef35ecf8a3c498093bf1f9009b6e1604852a5f8
GIT binary patch
literal 9793
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
bOLNSdM1P6H_|LGaQvV~9)!6sH)9lg(9QzWB
diff --git a/js/dojo/dojox/av/resources/version.mov b/js/dojo/dojox/av/resources/version.mov
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4f2cb73f57df73c31567ff3d24519e5f34ce89c7
GIT binary patch
literal 1667
zc$}?N&r4K69G~azhMH0bL5)2O<iSE7t0=CL=-OJlkh-aqP=d2Nv+iT(?OWfQeY#O0
z(WOg=&f%$xm#&?HAQ1W!in;_r*DgU2Y~SzO_w=ozCG_1l%=hQ#GxMF9C4|tTs#iA^
zr8E{HIFlBMt(cbOf+9_~#L@Hq&Bxz32x(gdGe<On-=S!&2uJN1a;mh!cU#%44ElXl
z_Bby9-}ffx0b1@@<-hPo{Xxip;L3qHE~KME6}iJ&?XAfT1`0L#343qKWQj`~6|*F5
z*WiLxtMZ};p^5$!7=qpbw?*d#Akqx0a4DcdyJs4eBINbBrpKU>nH_>Zkcj}511gh-
z<D+VT`mnEwnvw={Xqu@IC>h{Q&^Wh6F|@TV1o8E+j>=1zT}L@QlvAu$HfXqkNZK@`
z_(e$u)J%{O$t~PGb`W8qjRrDvv5k%F^SynJ@|qv8z@d{tTrsSs5b_5x&5u0@A)_C6
zTf_D_s$d<~#a<$3jVtD-PMN~fY0y&dunyvZXvwmu2kSZqV-j-;mZ@VGguYob3T0)O
zLa$0z7q)I%t|4^SaB58IdE3}1sfutAVeBlG1xs4EtkJU+DWih-HhDIp3Op_EzF+-I
zohxj|uqu#w`J~LllrKi}5ykzp>fy}mZEvW#asSL(V$(YZvB)WP(G%(@j2PZ0Kjz)o
zaeb5yPK;aub<RJ>sUvYc;bqXo_V{QbnMi;+&kA&LnXV4e;e<Y>4-e6a+2JIDEcq8H
zzUOS&1Rh|DTX{jVCfg88g7G@>o|b9(_+58zEnX)>+6&M-mW5nIXGcoP8^M;^i?$Fr
zZ^54e%ncLP7qSW3&){iwcV6lQvpbtfFZpeVw&RBOe(XMmsb9^ls%5LFwwNuBt!wjx
zxQ30(rc*21pYp#Ojp@k9`oJ2Y@5r~_^S?gtuI(dRc5Wg4dUpNEe`D-zWz5e+p2kR9
Q7ukOviT!-^Y9UPe2X)_BcK`qY
diff --git a/js/dojo/dojox/av/resources/video.swf b/js/dojo/dojox/av/resources/video.swf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5122311165f39b52089d54bb37b2bdbafc601b6f
GIT binary patch
literal 10523
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
diff --git a/js/dojo/dojox/av/widget/PlayButton.js b/js/dojo/dojox/av/widget/PlayButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/PlayButton.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.PlayButton"]){
+dojo._hasResource["dojox.av.widget.PlayButton"]=true;
+dojo.provide("dojox.av.widget.PlayButton");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.av.widget.PlayButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/PlayButton.html","<div class=\"PlayPauseToggle Pause\" dojoAttachEvent=\"click:onClick\">\n <div class=\"icon\"></div>\n</div>\n"),postCreate:function(){
+this.showPlay();
+},setMedia:function(_1){
+this.media=_1;
+dojo.connect(this.media,"onEnd",this,"showPlay");
+dojo.connect(this.media,"onStart",this,"showPause");
+},onClick:function(){
+if(this._mode=="play"){
+this.onPlay();
+}else{
+this.onPause();
+}
+},onPlay:function(){
+if(this.media){
+this.media.play();
+}
+this.showPause();
+},onPause:function(){
+if(this.media){
+this.media.pause();
+}
+this.showPlay();
+},showPlay:function(){
+this._mode="play";
+dojo.removeClass(this.domNode,"Pause");
+dojo.addClass(this.domNode,"Play");
+},showPause:function(){
+this._mode="pause";
+dojo.addClass(this.domNode,"Pause");
+dojo.removeClass(this.domNode,"Play");
+}});
+}
diff --git a/js/dojo/dojox/av/widget/Player.js b/js/dojo/dojox/av/widget/Player.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/Player.js
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.Player"]){
+dojo._hasResource["dojox.av.widget.Player"]=true;
+dojo.provide("dojox.av.widget.Player");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.Player",[dijit._Widget,dijit._Templated],{playerWidth:"480px",widgetsInTemplate:true,templateString:dojo.cache("dojox.av.widget","resources/Player.html","<div class=\"playerContainer\">\n\t<div class=\"PlayerScreen\" dojoAttachPoint=\"playerScreen\"></div>\n\t<table class=\"Controls\">\n\t\t<tr>\n\t\t\t<td colspan=\"2\" dojoAttachPoint=\"progressContainer\"></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td class=\"PlayContainer\" dojoAttachPoint=\"playContainer\"></td>\n\t\t\t<td class=\"ControlsRight\">\n\t\t\t<table class=\"StatusContainer\">\n\t\t\t\t<tr dojoAttachPoint=\"statusContainer\">\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan=\"3\" class=\"ControlsBottom\" dojoAttachPoint=\"controlsBottom\"></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t\t</tr>\n\t</table>\n</div>\n"),_fillContent:function(){
+if(!this.items&&this.srcNodeRef){
+this.items=[];
+var _1=dojo.query("*",this.srcNodeRef);
+dojo.forEach(_1,function(n){
+this.items.push(n);
+},this);
+}
+},postCreate:function(){
+dojo.style(this.domNode,"width",this.playerWidth+(dojo.isString(this.playerWidth)?"":"px"));
+if(dojo.isString(this.playerWidth)&&this.playerWidth.indexOf("%")){
+dojo.connect(window,"resize",this,"onResize");
+}
+this.children=[];
+var _2;
+dojo.forEach(this.items,function(n,i){
+n.id=dijit.getUniqueId("player_control");
+switch(dojo.attr(n,"controlType")){
+case "play":
+this.playContainer.appendChild(n);
+break;
+case "volume":
+this.controlsBottom.appendChild(n);
+break;
+case "status":
+this.statusContainer.appendChild(n);
+break;
+case "progress":
+case "slider":
+this.progressContainer.appendChild(n);
+break;
+case "video":
+this.mediaNode=n;
+this.playerScreen.appendChild(n);
+break;
+default:
+}
+this.items[i]=n.id;
+},this);
+},startup:function(){
+this.media=dijit.byId(this.mediaNode.id);
+if(!dojo.isAIR){
+dojo.style(this.media.domNode,"width","100%");
+dojo.style(this.media.domNode,"height","100%");
+}
+dojo.forEach(this.items,function(id){
+if(id!==this.mediaNode.id){
+var _3=dijit.byId(id);
+this.children.push(_3);
+if(_3){
+_3.setMedia(this.media,this);
+}
+}
+},this);
+},onResize:function(_4){
+var _5=dojo.marginBox(this.domNode);
+if(this.media&&this.media.onResize!==null){
+this.media.onResize(_5);
+}
+dojo.forEach(this.children,function(_6){
+if(_6.onResize){
+_6.onResize(_5);
+}
+});
+}});
+}
diff --git a/js/dojo/dojox/av/widget/ProgressSlider.js b/js/dojo/dojox/av/widget/ProgressSlider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/ProgressSlider.js
@@ -0,0 +1,88 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.ProgressSlider"]){
+dojo._hasResource["dojox.av.widget.ProgressSlider"]=true;
+dojo.provide("dojox.av.widget.ProgressSlider");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.ProgressSlider",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/ProgressSlider.html","<div class=\"Progress\" dojoAttachEvent=\"mousedown:startDrag\">\n \n <div class=\"ProgressLoaded\" dojoAttachPoint=\"progressLoaded\"></div>\n <div class=\"ProgressPosition\" dojoAttachPoint=\"progressPosition\"></div>\n\t<div class=\"ProgressHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mouseover:handleOver, mouseout:handleOut\"></div>\n</div>\n"),postCreate:function(){
+this.seeking=false;
+this.handleWidth=dojo.marginBox(this.handle).w;
+var _1=dojo.coords(this.domNode);
+this.finalWidth=_1.w;
+this.width=_1.w-this.handleWidth;
+this.x=_1.x;
+dojo.setSelectable(this.domNode,false);
+dojo.setSelectable(this.handle,false);
+},setMedia:function(_2,_3){
+this.playerWidget=_3;
+this.media=_2;
+dojo.connect(this.media,"onMetaData",this,function(_4){
+if(_4&&_4.duration){
+this.duration=_4.duration;
+}
+});
+dojo.connect(this.media,"onEnd",this,function(){
+dojo.disconnect(this.posCon);
+this.setHandle(this.duration);
+});
+dojo.connect(this.media,"onStart",this,function(){
+this.posCon=dojo.connect(this.media,"onPosition",this,"setHandle");
+});
+dojo.connect(this.media,"onDownloaded",this,function(_5){
+this.setLoadedPosition(_5*0.01);
+this.width=this.finalWidth*0.01*_5;
+});
+},onDrag:function(_6){
+var x=_6.clientX-this.x;
+if(x<0){
+x=0;
+}
+if(x>this.width-this.handleWidth){
+x=this.width-this.handleWidth;
+}
+var p=x/this.finalWidth;
+this.media.seek(this.duration*p);
+dojo.style(this.handle,"marginLeft",x+"px");
+dojo.style(this.progressPosition,"width",x+"px");
+},startDrag:function(){
+dojo.setSelectable(this.playerWidget.domNode,false);
+this.seeking=true;
+this.cmove=dojo.connect(dojo.doc,"mousemove",this,"onDrag");
+this.cup=dojo.connect(dojo.doc,"mouseup",this,"endDrag");
+},endDrag:function(){
+dojo.setSelectable(this.playerWidget.domNode,true);
+this.seeking=false;
+if(this.cmove){
+dojo.disconnect(this.cmove);
+}
+if(this.cup){
+dojo.disconnect(this.cup);
+}
+this.handleOut();
+},setHandle:function(_7){
+if(!this.seeking){
+var w=this.width-this.handleWidth;
+var p=_7/this.duration;
+var x=p*w;
+dojo.style(this.handle,"marginLeft",x+"px");
+dojo.style(this.progressPosition,"width",x+"px");
+}
+},setLoadedPosition:function(_8){
+dojo.style(this.progressLoaded,"width",(this.finalWidth*_8)+"px");
+},handleOver:function(){
+dojo.addClass(this.handle,"over");
+},handleOut:function(){
+if(!this.seeking){
+dojo.removeClass(this.handle,"over");
+}
+},onResize:function(_9){
+var _a=dojo.coords(this.domNode);
+this.finalWidth=_a.w;
+}});
+}
diff --git a/js/dojo/dojox/av/widget/Status.js b/js/dojo/dojox/av/widget/Status.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/Status.js
@@ -0,0 +1,91 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.Status"]){
+dojo._hasResource["dojox.av.widget.Status"]=true;
+dojo.provide("dojox.av.widget.Status");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.Status",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/Status.html","<table class=\"Status\">\n <tr>\n <td class=\"Time\"><span dojoAttachPoint=\"timeNode\">0.00</span></td>\n <td class=\"Status\"><div dojoAttachPoint=\"titleNode\">Loading...</div></td>\n <td class=\"Duration\"><span dojoAttachPoint=\"durNode\">0.00</span></td>\n </tr>\n</table>\n"),postCreate:function(){
+this.titleNode=dojo.query(".Status",this.domNode);
+this.durNode=dojo.query(".Duration",this.domNode);
+this.timeNode=dojo.query(".Time",this.domNode);
+},setMedia:function(_1){
+this.media=_1;
+dojo.connect(this.media,"onMetaData",this,function(_2){
+this.duration=_2.duration;
+this.durNode.innerHTML=this.toSeconds(this.duration);
+});
+dojo.connect(this.media,"onPosition",this,function(_3){
+});
+var _4=["onMetaData","onPosition","onStart","onBuffer","onPlay","onPause","onStop","onEnd","onError","onLoad"];
+dojo.forEach(_4,function(c){
+dojo.connect(this.media,c,this,c);
+},this);
+},onMetaData:function(_5){
+this.duration=_5.duration;
+this.durNode.innerHTML=this.toSeconds(this.duration);
+if(this.media.title){
+this.title=this.media.title;
+}else{
+var a=this.media.mediaUrl.split("/");
+var b=a[a.length-1].split(".")[0];
+this.title=b;
+}
+},onBuffer:function(_6){
+this.isBuffering=_6;
+console.warn("status onBuffer",this.isBuffering);
+if(this.isBuffering){
+this.setStatus("buffering...");
+}else{
+this.setStatus("Playing");
+}
+},onPosition:function(_7){
+},onStart:function(){
+this.setStatus("Starting");
+},onPlay:function(){
+this.setStatus("Playing");
+},onPause:function(){
+this.setStatus("Paused");
+},onStop:function(){
+this.setStatus("Stopped");
+},onEnd:function(){
+this.setStatus("Stopped");
+},onError:function(_8){
+var _9=_8.info.code;
+if(_9=="NetStream.Play.StreamNotFound"){
+_9="Stream Not Found";
+}
+this.setStatus("ERROR: "+_9,true);
+},onLoad:function(){
+this.setStatus("Loading...");
+},setStatus:function(_a,_b){
+if(_b){
+dojo.addClass(this.titleNode,"statusError");
+}else{
+dojo.removeClass(this.titleNode,"statusError");
+if(this.isBuffering){
+_a="buffering...";
+}
+}
+this.titleNode.innerHTML="<span class=\"statusTitle\">"+this.title+"</span> <span class=\"statusInfo\">"+_a+"</span>";
+},toSeconds:function(_c){
+var ts=_c.toString();
+if(ts.indexOf(".")<0){
+ts+=".00";
+}else{
+if(ts.length-ts.indexOf(".")==2){
+ts+="0";
+}else{
+if(ts.length-ts.indexOf(".")>2){
+ts=ts.substring(0,ts.indexOf(".")+3);
+}
+}
+}
+return ts;
+}});
+}
diff --git a/js/dojo/dojox/av/widget/VolumeButton.js b/js/dojo/dojox/av/widget/VolumeButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/VolumeButton.js
@@ -0,0 +1,118 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.VolumeButton"]){
+dojo._hasResource["dojox.av.widget.VolumeButton"]=true;
+dojo.provide("dojox.av.widget.VolumeButton");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.av.widget.VolumeButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/VolumeButton.html","<div class=\"Volume\" dojoAttachEvent=\"mousedown:onShowVolume\">\n\t<div class=\"VolumeSlider\" dojoAttachPoint=\"volumeSlider\">\n \t<div class=\"VolumeSliderBack\" dojoAttachPoint=\"volumeSliderBack\"></div>\n \t<div class=\"VolumeSliderHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mousedown:startDrag, mouseup:endDrag, mouseover:handleOver, mouseout:handleOut\"></div>\t\n </div>\n <div class=\"icon\"></div>\n</div>\n"),postCreate:function(){
+this.handleWidth=dojo.marginBox(this.handle).w;
+this.width=dojo.marginBox(this.volumeSlider).w;
+this.slotWidth=100;
+dojo.setSelectable(this.handle,false);
+this.volumeSlider=this.domNode.removeChild(this.volumeSlider);
+},setMedia:function(_1){
+this.media=_1;
+this.updateIcon();
+},updateIcon:function(_2){
+_2=(_2===undefined)?this.media.volume():_2;
+if(_2===0){
+dojo.attr(this.domNode,"class","Volume mute");
+}else{
+if(_2<0.334){
+dojo.attr(this.domNode,"class","Volume low");
+}else{
+if(_2<0.667){
+dojo.attr(this.domNode,"class","Volume med");
+}else{
+dojo.attr(this.domNode,"class","Volume high");
+}
+}
+}
+},onShowVolume:function(_3){
+if(this.showing==undefined){
+dojo.body().appendChild(this.volumeSlider);
+this.showing=false;
+}
+if(!this.showing){
+var _4=2;
+var _5=7;
+var _6=this.media.volume();
+var _7=this._getVolumeDim();
+var _8=this._getHandleDim();
+this.x=_7.x-this.width;
+dojo.style(this.volumeSlider,"display","");
+dojo.style(this.volumeSlider,"top",_7.y+"px");
+dojo.style(this.volumeSlider,"left",(this.x)+"px");
+var x=(this.slotWidth*_6);
+dojo.style(this.handle,"top",(_4+(_8.w/2))+"px");
+dojo.style(this.handle,"left",(x+_5+(_8.h/2))+"px");
+this.showing=true;
+this.clickOff=dojo.connect(dojo.doc,"onmousedown",this,"onDocClick");
+}else{
+this.onHideVolume();
+}
+},onDocClick:function(_9){
+if(!dojo.isDescendant(_9.target,this.domNode)&&!dojo.isDescendant(_9.target,this.volumeSlider)){
+this.onHideVolume();
+}
+},onHideVolume:function(){
+this.endDrag();
+dojo.style(this.volumeSlider,"display","none");
+this.showing=false;
+},onDrag:function(_a){
+var _b=this.handleWidth/2;
+var _c=_b+this.slotWidth;
+var x=_a.clientX-this.x;
+if(x<_b){
+x=_b;
+}
+if(x>_c){
+x=_c;
+}
+dojo.style(this.handle,"left",(x)+"px");
+var p=(x-_b)/(_c-_b);
+this.media.volume(p);
+this.updateIcon(p);
+},startDrag:function(){
+this.isDragging=true;
+this.cmove=dojo.connect(dojo.doc,"mousemove",this,"onDrag");
+this.cup=dojo.connect(dojo.doc,"mouseup",this,"endDrag");
+},endDrag:function(){
+this.isDragging=false;
+if(this.cmove){
+dojo.disconnect(this.cmove);
+}
+if(this.cup){
+dojo.disconnect(this.cup);
+}
+this.handleOut();
+},handleOver:function(){
+dojo.addClass(this.handle,"over");
+},handleOut:function(){
+if(!this.isDragging){
+dojo.removeClass(this.handle,"over");
+}
+},_getVolumeDim:function(){
+if(this._domCoords){
+return this._domCoords;
+}
+this._domCoords=dojo.coords(this.domNode);
+return this._domCoords;
+},_getHandleDim:function(){
+if(this._handleCoords){
+return this._handleCoords;
+}
+this._handleCoords=dojo.marginBox(this.handle);
+return this._handleCoords;
+},onResize:function(_d){
+this.onHideVolume();
+this._domCoords=null;
+}});
+}
diff --git a/js/dojo/dojox/av/widget/resources/PlayButton.html b/js/dojo/dojox/av/widget/resources/PlayButton.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/PlayButton.html
@@ -0,0 +1,3 @@
+<div class="PlayPauseToggle Pause" dojoAttachEvent="click:onClick">
+ <div class="icon"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/av/widget/resources/Player.css b/js/dojo/dojox/av/widget/resources/Player.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/Player.css
@@ -0,0 +1,191 @@
+.playerContainer{
+ width:480px;
+ background:#76C8C4;
+ text-align:center;
+}
+.PlayerScreen{
+ background:#00FFFF;
+ width:320px;
+ height:240px;
+ margin-left:auto;
+ margin-right:auto;
+}
+.Controls{
+ height:85px;
+ background:#333333;
+ text-align:left;
+ width:100%;
+}
+.ControlsRight{
+ vertical-align:top;
+}
+.ControlsBottom{
+ vertical-align:bottom;
+}
+.StatusContainer{
+ width:100%;
+ height:100%;
+}
+.PlayContainer{
+ width:60px;
+ height:60px;
+}
+.Progress{
+ height:10px;
+}
+.Time, .Duration, .Status{
+ height:16px;
+ margin-top:0px;
+ color:#F5FFC8;
+ width:100%;
+}
+.Time{
+ padding-left:2px;
+}
+.Duration{
+ padding-right:2px;
+ text-align:right;
+}
+.StatusContainer{
+ padding:0;
+ border-collapse:collapse;
+}
+.Status{
+ height:20px;
+ background:#ff0000;
+ table-layout:fixed;
+}
+.Status.statusError .statusTitle, .Status.statusError .statusInfo{
+ color:#FF0000;
+}
+.Status .statusTitle{
+ font-weight:bold;
+ color:#A5B3E9;
+}
+.Status .statusInfo{
+ font-weight:normal;
+ color:#3770D6;
+}
+.Time, .Duration, .Status{
+ font-family:Verdana, Arial, Helvetica, sans-serif;
+ font-size:9px;
+ background:#000000;
+}
+.Time, .Duration{
+ width:60px;
+}
+.Volume{
+ width:30px;
+ height:30px;
+ float:right;
+ margin-right:2px;
+ margin-top:auto;
+ background-image:url(images/player_sprite.png);
+ background-repeat:no-repeat;
+ background-position:-1px -62px;
+ cursor:pointer;
+}
+.Volume:hover{
+ background-position:-33px -62px;
+}
+.PlayPauseToggle{
+ width:60px;
+ height:60px;
+ background-image:url(images/player_sprite.png);
+ background-repeat:no-repeat;
+ background-position:-1px -1px;
+ cursor:pointer;
+ vertical-align:middle;
+ line-height:60px;
+}
+.PlayPauseToggle:hover{
+ background-position:-63px -1px;
+ cursor:pointer;
+}
+.icon{
+ background-image:url(images/dojoPlayerIcons.png);
+ background-repeat:no-repeat;
+ width:22px;
+ height:22px;
+}
+.PlayPauseToggle .icon{
+ position:relative;
+ top:19px;
+ left:19px;
+ background-position:-1px -1px;
+}
+.PlayPauseToggle.Play .icon{
+ background-position:-1px -1px;
+}
+.PlayPauseToggle.Pause .icon{
+ background-position:-24px -1px;
+}
+.Progress{
+
+}
+.Progress, .ProgressLoaded, .ProgressPosition, .ProgressHandle{
+ height:10px;
+}
+.ProgressLoaded, .ProgressPosition, .ProgressHandle{
+ position:absolute;
+}
+.ProgressLoaded{
+background:url(images/progressLoadedBk.png) repeat-x;
+}
+.ProgressHandle{
+ background-image:url(images/sliderHandleSprite.png);
+ background-position:0px 0px;
+ width:15px;
+ margin-left:0px;
+ cursor:pointer;
+}
+.ProgressHandle.over{
+ background-position:-15px 0px;
+}
+.ProgressPosition{
+ background:url(images/progressPositionBk.png) repeat-x;
+ width:0px;
+}
+.VolumeSlider{
+ position:absolute;
+}
+.VolumeSliderBack{
+ width:128px;
+ height:30px;
+ background-image:url(images/player_sprite.png);
+ background-repeat:no-repeat;
+ background-position:-1px -95px;
+}
+.VolumeSliderHandle{
+ position:absolute;
+ width:12px;
+ height:14px;
+ background-image:url(images/player_sprite.png);
+ background-repeat:no-repeat;
+ background-position:-1px -140px;
+ cursor:pointer;
+}
+.VolumeSliderHandle.over{
+ background-position:-15px -138px;
+ cursor:pointer;
+}
+.Volume .icon{
+ background-position:-60px -43px;
+ width:18px;
+ height:16px;
+ position:relative;
+ top:7px;
+ left:7px;
+}
+.Volume.mute .icon{
+ background-position:-1px -43px;
+}
+.Volume.low .icon{
+ background-position:-20px -43px;
+}
+.Volume.med .icon{
+ background-position:-40px -43px;
+}
+.Volume.high .icon{
+ background-position:-60px -43px;
+}
diff --git a/js/dojo/dojox/av/widget/resources/Player.html b/js/dojo/dojox/av/widget/resources/Player.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/Player.html
@@ -0,0 +1,20 @@
+<div class="playerContainer">
+ <div class="PlayerScreen" dojoAttachPoint="playerScreen"></div>
+ <table class="Controls">
+ <tr>
+ <td colspan="2" dojoAttachPoint="progressContainer"></td>
+ </tr>
+ <tr>
+ <td class="PlayContainer" dojoAttachPoint="playContainer"></td>
+ <td class="ControlsRight">
+ <table class="StatusContainer">
+ <tr dojoAttachPoint="statusContainer">
+ </tr>
+ <tr>
+ <td colspan="3" class="ControlsBottom" dojoAttachPoint="controlsBottom"></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/js/dojo/dojox/av/widget/resources/ProgressSlider.html b/js/dojo/dojox/av/widget/resources/ProgressSlider.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/ProgressSlider.html
@@ -0,0 +1,6 @@
+<div class="Progress" dojoAttachEvent="mousedown:startDrag">
+
+ <div class="ProgressLoaded" dojoAttachPoint="progressLoaded"></div>
+ <div class="ProgressPosition" dojoAttachPoint="progressPosition"></div>
+ <div class="ProgressHandle" dojoAttachPoint="handle" dojoAttachEvent="mouseover:handleOver, mouseout:handleOut"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/av/widget/resources/Status.html b/js/dojo/dojox/av/widget/resources/Status.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/Status.html
@@ -0,0 +1,7 @@
+<table class="Status">
+ <tr>
+ <td class="Time"><span dojoAttachPoint="timeNode">0.00</span></td>
+ <td class="Status"><div dojoAttachPoint="titleNode">Loading...</div></td>
+ <td class="Duration"><span dojoAttachPoint="durNode">0.00</span></td>
+ </tr>
+</table>
diff --git a/js/dojo/dojox/av/widget/resources/VolumeButton.html b/js/dojo/dojox/av/widget/resources/VolumeButton.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/av/widget/resources/VolumeButton.html
@@ -0,0 +1,7 @@
+<div class="Volume" dojoAttachEvent="mousedown:onShowVolume">
+ <div class="VolumeSlider" dojoAttachPoint="volumeSlider">
+ <div class="VolumeSliderBack" dojoAttachPoint="volumeSliderBack"></div>
+ <div class="VolumeSliderHandle" dojoAttachPoint="handle" dojoAttachEvent="mousedown:startDrag, mouseup:endDrag, mouseover:handleOver, mouseout:handleOut"></div>
+ </div>
+ <div class="icon"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png b/js/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ea3aaf954b16aff4cd5a94a2f551c2bf2be5e5b8
GIT binary patch
literal 5737
zc$@)g7MAIWP)<h;3K|Lk000e1NJLTq003G5002A)1^@s6<^`=q00009a7bBm000XU
z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag
z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V
z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H
zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T
zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j
zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p
z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i
z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i
z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf
z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G
zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u
zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm
z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v
zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW
zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo
z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X
zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t
z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl
zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4
z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_
zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l
znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U
zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0
zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O
zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p
z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya?
z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y
zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB
zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt
z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc=
zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C
z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB
zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe
zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0
z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ
zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$
z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4
z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu
zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu
z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E
ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw
zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX
z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i&
z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01
z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R
z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw
zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD
zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3|
zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy
zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z
zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h
z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F}
z000Y=Nkl<Zc-rh-QF9yB75>i30X%rH?2v#RIu_)iw9^@@4CSHFu|p@oOlOEni0PY^
zUtr}ISosAJzX0=y1I2E6fHGit+VB7j$bA4hgB!U}J2;6~u4PMmclVw?XjgkBucY0T
z<g|m&%pH$(ug<;qyWc(c>^XN$%#35{zi0qJL?9xVz@#ZL=YH;0v4AO4f)5oNE57X|
z=Kb1R67xaYbz3Z8s@;5|$bkC6wh*_0Tv>2BM#v1Fpw(Wirey(ki1tDPe*269w(C}6
zviCY0fUW}W$de``uM1w_6UdAb?RL|NqBj`Ot=dz-c3p}|eFoYBARAXR4Fjod!I{(d
z(VLMOeONErVI*Wgpk;r6)?)o;wB<YSI3yOnJK!`8AoJLLv=*AtR!BzQW1#z?^Dv`Z
zcQOqVh4nJ$@F22hLzt6RdRsX>LIwjs^ud+_fJR5b=+2ViJ*2-bbLMA5!OTfOy`cf@
z7trYUVQ2#2V4cKaW1&#u^uPczzZhz7PFm>=&FCWnnzSQebjV#ZZJH>2rgN4Uxu-|{
z%}H3j_Zn#KH>0gKEbAay0O=b#XPzCQWj`D3r<ean-8<^LjRru`S2F=%Y2^;*Wen-x
zj?hL_z4zMd;C{Pzmeu{hiI6|9fE-1yCH;3mGt*kN`~Pt7qBA;A_aptgCXl1(6#;=3
zeFFMu9$3P!ehC`VuRMC#Hh1IR`C1M>npg*{BVcrxku#8^2auf^ZU68RR&T4r^N{I4
zpG-%;55o`$7oZ{Y+E{O*dp`yl2x}%tL+;WzT|I`bPe3!UG(gB)96Nm29ZL^@W}v7s
zGBamdA9lwQz>^7Z*d;F=gWNYp=Vc6;KRgmX_IxY>fR-9cnvKlNIKAG>P8_{?pB+>1
zZ4VR)huce_*!2565wbns=G@p%Pdr9uj-1*3u}YLH8Uq0EU4`delkt<maK7<og(t=b
zYo5ps^DqE}P38ve|6lujfixuD&ksI;oZHv;f+yKVs?MMomYUOU-TuDo)mh(XcFKIv
z->owbub27Sw`E>&zq?uCsr7xnd9%V(Va5=of2Tj)ZL9VR0N<8*rLL#U`nt2|syO3g
zzy3PuZ^kTa(cGAUTY|{fWu7(mP!x=e$&E1$A(5zB$bYrR?|xO`iJ-BKPW>BYEC@zi
zNWidB5;3IRx^K!nXELT;9i~LuFQ@tVAgvk_Ii<hsKgv7_0B4DIO^I|}2V?r1GSBtY
zy$cHTR~4Qplz2thSTMaw*TqzHnGz{sps=>vd9a=O|N9<KnGz`lgxt>^bG6PqT(yvO
z>kJ$DCm(9<j^00ntYM?%wy#*oxphxIM9YSayjxebkoDUceFge6o#*$fD5}hHCf&?v
zwJt6sa-Zt_<rjL5IZ=SFT3Dz9DN&pp_Cf%6OUSv4E+in?W4fQ5CEB$Z8I`%8>pWZc
zY`B5d@w+8&A^HmRCpu5vxXU+%^jM=7mC+Us*E{S^RwN34yUW);-#N^XcKzSD%k!p0
z!mYR90r`o}Q|fjX64|FlI)@0J9-%iIm@AQU$Mw_*ZK!iKCDNbh;m(}aK(kYniVt^q
zc;ybiVc5tEMxx%PshBGB02ti52u9{V5`~ZN@P!8Z>()07?jxNi3`WMSuQHZ?J>q#K
zRSP*qfAN5Vvroi4y@C<nwLO3QfRHm7#d^P1_pJ71^!wX9CoL33BU^lnp|H@h+P8H|
zLP#vVzs)Nj>9xbM6{AfP3qsb-LP=^Kn?JbC^MaAAGo6t>KN{Sve13%1Ojel7$o%DY
zjk)JXY1dLrh+rf?xE<UhYYDXB045~xr(1kMNaPHOxchy(qJmRJAfVkcy>DRQ!yO*>
z1KRmsJrD9KkX73|91V%m3#Y=z#)ZU^+ILm)qhB~htA_LrO|`BkjDGo1TDAyDAw3(`
zsf1)SMD5hiy!<GgJ3mUhe!9+&(r%M0miprl-hnFY20I#mdo#Q%W+*y@jgl!n6Y=&Y
z&zatCg0Q=L)YqICLcIXME056HtK)ReCZr{!B%9hupWnELVW+l|u^<PLcvXp~_~`-w
zegIh;D7tl)g$1|n(ivK|fh9$6_MOdOemekM|2JQdK&t+GLiXZ#?I3+;lP4r2>(<%8
zQnwMzwqerO#^_B9A_4X$82u3x1rVlZ&d}wVfVOmIly)^n#*54#xu`IA0LXw*a_Zt1
zf*o3mJ3K7agOgEE18EkJ10n9zl?I@Up&vlIlbtz3mqD0jM2KqDfXK|8p<m8K$T2!h
z$}9S^i;gRHahx_t^8h0twYb&U6(a)~s$KYTQK$pCxW!WhCFY?a=Q6#oK-U2uqt(~O
z>G4ouNyY*Ok?1z;8dH2{5aOtK;9eS|t11Dw!|r=$lP8#!IWQJf0;s=dpm=GlH~G=f
z_a-lm(bZUu4f$T0iFR^voHiO3n2=VPOXMvC0g3Bdtz9u2%0e(o81&eDeT(N+rmK37
z9B6mqGvjoQ7%7HhBb@+$H)f*K0=HuB%owez=Lokr7~k6BSpd`Zb{aA+5jruwCxQR#
zw=e|&F-EZ$_9(2l?7Ua~A4TB*IKy&8Kx@aa1qOGDxpf3GGSH^Y^TOt9y%?k=`CW^>
zP-K@Ap0FgZbTjEDeZv)-=PTU)Vdua`ywc6nq2D&xxA?-o#ay;pr*neJfyvhnEar;c
zT~MYzHj}?Ru$U`+*k9%dL3&;A8@gcD&CdR}E?D1T9*&&KYEZ^JA!IGkZg%-Dhi>r&
zgOM?6G2gC57ko`Hl7{rZ3S2Ug(#_xtdduJoZiLeBrtYmO&uv$|T`d?(mKiO$bO>l+
zV95<l8eM>+GfxO5Gol8JbPgVqXaXgpBme-^GVgBooljuNu!H%&JIurC`1}^m(vYv(
zNW1z?iG0=c+`}+ZyKZpcn21_RC>a&p?*&h?6C~fOAVF~A1<sQMP`jS6cYp$bk&gN*
zJj+gMN?1rXI7g1fJE$VXj1++1j}q;EcfiH(1yA~275HbFCn;7N)6PD!M2Ne3+?P1N
zE%Ph^$+JUr<+1x{ZGE3hy9byCuq<p8n4-l!2AnN1-8=!u@ed`Yjkx3%EAHqTAEb@-
zeJ<Us@YLfS?vNM~3H1R(9h(b`0P^a?i@_+xOe6pt0@`5YVEOBFLx(m{kP=w{SDbKc
z9)u)-<tK({?dv^GMm8O-;>Ko3psQA}xV4Zd8g}QM(@vMW)t?xo4Iu&d+JGrhsJ7UZ
zhTUeaPMe<&(VAfIF<dZ;&Vtv+6rItsl}8ei(Fpc3q+tV^);SW`Zc^&otwI7r57qP;
zHj<j=A6POOEno5AMk3@t)p_cf5n6S|&@-T2|1b$ePuW-&igxYgPB4%n_%q97Bx81G
zpbd#Up+2?@6r1k?^M%fnLZakem=TP`KnvZ5-TGxsb>R$&<Z~x$X3YUM-xHvJHR6Q=
zZ|v}w4&b5RcydzxR{`LL&I>G2XgCl7{Iv$m(z7Q!-)noOmhoP7^c5hn)C|mljily8
z_CDX?VM8MRObgv+EpnH4>~rJ7Ie$OWdBRk#P&nt;0swrh^Q5r+Z@>lux^ZcdGHn#l
z1W;Icc7!%QzQbvP1CGO_-;B^2fXfl|Ew9|>9Gp|%1?IVjz5lSVSMyMEt#q7I+P=Td
zB~seDuhv->(#+n13W?;viQ3`_8wrxpuJmet0GaSo?cK=p57V+x60F_Ixl?pSNEC#0
z-o|aNKS{5jI~gp=@X~2|T}?n&o$p^fMOR-sO_u@Sy=|Tq5(W2lYhhtpaGN-MC`JP~
z|1d4Tx6NtvKwdmeSN{A1mzbgr@X$GM0x2nw)=qSPSzJh@xt64eYd&^TFbYs&)IuUf
zi1xsOAN&8kTioQi#ZBf;xyHpUo?6_jJ=jHwb>R3P3<i_8ws_WEj3_|UG0;aN$ASMN
blK&0>t$&JS;s!Di00000NkvXXu0mjfv!mvL
diff --git a/js/dojo/dojox/av/widget/resources/images/playerIcons b/js/dojo/dojox/av/widget/resources/images/playerIcons
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0a0ff8ca81c3ab28e445e28fbf371971bf534bed
GIT binary patch
literal 887
zc$@)u1Bm>IP)<h;3K|Lk000e1NJLTq005`}000;W0{{R3Szku;0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyU{Fj{MaI?Hw#m=?{QNXbQ*xW8ScH&g
zlb?pEvaYqZqP@f&DJ@ZYg@lcdm9x9s=IG?=>_=*IL1Ajw-QR(wuX>=X@$~gfbA38j
zUrAkKY<z&~@9>bEpDI2>R$yXXjG6!c|G!Qcp#T5?AaqhrQ~&?}|NsC0|NsC0|NsC0
z|NsC0|NsC0|NsC0|NsC009;%f?EnA*fk{L`RCwC#mus_|AP|N@xd?^`cso&I{{O!`
zt2I$BwmrvAXEN=6a2QsXhuxP|(c?`Fy%Q*E-vks3oc*D2+3WHh_pd;es=19HM;J_y
z>N#S8>uH{24uggROboFe*H~>?s-$fef%1kmwYr9PD#bY`#;zmQZ!R%UJZ<m53f4s8
zn&d<^fL=L{95(Sli~TY$pk!jC<|5b^Oixpp+jZ2r!1c7fL#bu}+9q*ETPvn2vv?|E
z&Pi9n<e)??vKVw)P*HXkl-Gn;SP>GXtwo}qDuioOM4Z%JqJ1ekF_8jYP?ZfqyDx$g
zM!0AgBf^*10Gy1$X_)#V;*^(!Qbz5OqW!WURZ*SGD5!`L#$eZKPg-H1UtFaRddL})
zdY}-#sd0M_bd3b{*))Fz&ecKl;`cZMQWPu;$)Ic1PJsfE*2Ak8Z1Y}5fs?t*VejOW
zO)3payWF|rj7GOWa(oq@mgSVn=vDD<{7IJ=r0i`1l$O1dx09u(l+K(^?tq4ynMr4l
zmr*-U9lyXc!E%XW(9$@0x2FzMO`zg{s-5&2R0gClt4msX8pXO~%@JvalzDA;1Eo5b
zUXX8rvfkZTsim{QqNC}$eC)f<KlNBsR<}o-dMnElly<$8W8Cn+sL{sATSm0YtGI(3
z<198N_xtD}sn5BB`r=%TmByHUPR);z3|vpkcaEjk5O+_lT=ddD?1u~9OfzYs`T^$x
zS~C#mhYfEvaxwcFZ7z`D-geK-p)a@emmHcmUG?F+9(3A;NrH34J<bJ`7#VK!)DOeq
zUxOW%kCSj3=kgwIEhD|hxdhdLIRCm838}RAB1*wn{r|c92SGmt7yxOWr#Q}H#Mb}-
N002ovPDHLkV1kILwmkp<
diff --git a/js/dojo/dojox/av/widget/resources/images/player_sprite.png b/js/dojo/dojox/av/widget/resources/images/player_sprite.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..01f721ca91652200ad68f7c894fd6b53be5a4746
GIT binary patch
literal 6076
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
diff --git a/js/dojo/dojox/av/widget/resources/images/progressLoadedBk.png b/js/dojo/dojox/av/widget/resources/images/progressLoadedBk.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b3bca1112d9490de1ebfabacd3e18d95cdf58217
GIT binary patch
literal 153
zc%17D@N?(olHy`uVBq!ia0vp^tU%1o!2~2N*e@IcQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JimW|d978H@C8asA_T0I1N24ZFQ!~Y`d%^|-uJ{lamR5Z=
zwYEdz?vEFr?(XVZG)rHl<&gM;=kCv#StJ-PZ)GZVx|~)7G={;`)z4*}Q$iB}k;5>s
diff --git a/js/dojo/dojox/av/widget/resources/images/progressPositionBk.png b/js/dojo/dojox/av/widget/resources/images/progressPositionBk.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9cbae278ad0fc1f8c144c9a6ea54219d50b135ac
GIT binary patch
literal 157
zc%17D@N?(olHy`uVBq!ia0vp^tU%1o!2~2N*e@IcQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JitIgI978H@C7I~HNOfT9301$h_`~@<zZwty|MAn@X#Ue@
zf8T5Txy>K=v;4x37q8^^JDR?quE4GJ|9x(XokIg7LxZ1Gqq+04i$J3oJYD@<);T3K
F0RRfIIrjhn
diff --git a/js/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png b/js/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fda2e9f256ad57ec4f25f9cecb8a46f1b0046d55
GIT binary patch
literal 336
zc$@)H0k8gvP)<h;3K|Lk000e1NJLTq000jF000UI0ssI2<av{>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy@<~KNRCwBAOq;aANJW;1gN*?P`1bSn
z(QEf^J$?QA-Al%GcfT&I$-HvvsF;`-R@I+Aefs>H!8)gfhev?%;iunGKCWWIg2KYW
zxQySrb*rhPo2y?Kix?XdI}^{1YY$~*|Kd{p;q5QhpT9*I|FXPz^NaBx|L1ovp8fxV
zOEvR<;jiDAUcCOr^6K4hhX4HEKC^%O{1caIHfGT;K-F)4v%G%$n~{N^okffRFZlM2
z`Q_VREI<r&2|KeWe$`*T{(1iD7t8B^3~Vfld~96!RljGr`RYFd%fTy`9~(*jF_y=#
i`q%MufB(M#2rvL#j%qw{j{2hj0000<MNUMnLSTXd@uSWF
diff --git a/js/dojo/dojox/av/widget/resources/images/sliderHandleOver.png b/js/dojo/dojox/av/widget/resources/images/sliderHandleOver.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b3bec9fc7a01dbb4de22c8eb7acd2de7f7189ae8
GIT binary patch
literal 248
zc%17D@N?(olHy`uVBq!ia0vp^{6Ngb!2~3qR8C$8q$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~-c70vQ=aSW-rmE<#f%OMZfY3<FujO;(Yeg1wi`+J^k?cd*b
zz1vF5_y1GpTXOF9`6QiF-@d-LXH#mByKXLKXtr$o{{I4tqgp=dpYAr_Z}(9!^;`G#
z{Sk3{fB&7?Y;iTeZu6eH-@m(0)F*}Pule20+EM=}O~vi&=Ww8!|H(gow`;`j`*r?6
w(T7t{j~}=EXRzsE_^*FIcnT#`8yJ`w6rytX$vs`k40I)fr>mdKI;Vst0Pj+7wEzGB
diff --git a/js/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png b/js/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fe639ff7e8f44e65acedf3276786bb7edf536791
GIT binary patch
literal 426
zc$@*M0agBqP)<h;3K|Lk000e1NJLTq0015U000UI0ssI2EERcp0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzOi4sRRCwBq(mhMVKpY0}OLAUH39XPO
zB3Q(iIY<f)Iyk!sE`Ef9;74$Db#ZbNHz#rFu0x49xL8UR6jZ8d^P=SCu(_o1?{3<A
z;I<zR4|gXtPcF>Wx>6#jAaumq-Iu4n!~B71uJL2x@;N>~-0$4AbzT2g2SE@rw0Ur(
zD6`vJ>$}Tk#F6INHEw9+xc_DthN`MXuGMPAw^tiGdw}C?%u{WYDb|T7i%PHiTCZnC
z?%PXdMyw`efIXJ-R0GDgn+W4-=-VH8ROF;wjj3om3E-f@wHh!U`V8e&8p<>r6*(el
z5mdVja9HB2b{Td&CZMW}^~sb{Y2YP*qgu{W4H(0L3y~#lGL7Q&bC>}Bfh8OPjGZwe
zc&S3Be5o(=ILr~?EaiGe!1$)~@NUkhjm60{vF@|n{=-%&708qw*6G~B%C7(e06;UZ
UleP=^H~;_u07*qoM6N<$f>x8fQ~&?~
diff --git a/js/dojo/dojox/charting/DataChart.js b/js/dojo/dojox/charting/DataChart.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/DataChart.js
@@ -0,0 +1,224 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.DataChart"]){
+dojo._hasResource["dojox.charting.DataChart"]=true;
+dojo.provide("dojox.charting.DataChart");
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+dojo.experimental("dojox.charting.DataChart");
+(function(){
+var _1={vertical:true,min:0,max:10,majorTickStep:5,minorTickStep:1,natural:false,stroke:"black",majorTick:{stroke:"black",length:8},minorTick:{stroke:"gray",length:2},majorLabels:true};
+var _2={natural:true,majorLabels:true,includeZero:false,majorTickStep:1,majorTick:{stroke:"black",length:8},fixUpper:"major",stroke:"black",htmlLabels:true,from:1};
+var _3={markers:true,tension:2,gap:2};
+dojo.declare("dojox.charting.DataChart",[dojox.charting.Chart2D],{scroll:true,comparative:false,query:"*",queryOptions:"",fieldName:"value",chartTheme:dojox.charting.themes.PlotKit.blue,displayRange:0,stretchToFit:true,minWidth:200,minHeight:100,showing:true,label:"name",constructor:function(_4,_5){
+this.domNode=dojo.byId(_4);
+dojo.mixin(this,_5);
+this.xaxis=dojo.mixin(dojo.mixin({},_2),_5.xaxis);
+if(this.xaxis.labelFunc=="seriesLabels"){
+this.xaxis.labelFunc=dojo.hitch(this,"seriesLabels");
+}
+this.yaxis=dojo.mixin(dojo.mixin({},_1),_5.yaxis);
+if(this.yaxis.labelFunc=="seriesLabels"){
+this.yaxis.labelFunc=dojo.hitch(this,"seriesLabels");
+}
+this.convertLabels(this.yaxis);
+this.convertLabels(this.xaxis);
+this.onSetItems={};
+this.onSetInterval=0;
+this.dataLength=0;
+this.seriesData={};
+this.seriesDataBk={};
+this.firstRun=true;
+this.dataOffset=0;
+this.chartTheme.plotarea.stroke={color:"gray",width:3};
+this.setTheme(this.chartTheme);
+if(this.displayRange){
+this.stretchToFit=false;
+}
+if(!this.stretchToFit){
+this.xaxis.to=this.displayRange;
+}
+this.addAxis("x",this.xaxis);
+this.addAxis("y",this.yaxis);
+_3.type=_5.type||"Markers";
+this.addPlot("default",dojo.mixin(_3,_5.chartPlot));
+this.addPlot("grid",dojo.mixin(_5.grid||{},{type:"Grid",hMinorLines:true}));
+if(this.showing){
+this.render();
+}
+if(_5.store){
+this.setStore(_5.store,_5.query,_5.fieldName,_5.queryOptions);
+}
+},setStore:function(_6,_7,_8,_9){
+this.firstRun=true;
+this.store=_6||this.store;
+this.query=_7||this.query;
+this.fieldName=_8||this.fieldName;
+this.label=this.store.getLabelAttributes();
+this.queryOptions=_9||_9;
+dojo.connect(this.store,"onSet",this,"onSet");
+dojo.connect(this.store,"onError",this,"onError");
+this.fetch();
+},show:function(){
+if(!this.showing){
+dojo.style(this.domNode,"display","");
+this.showing=true;
+this.render();
+}
+},hide:function(){
+if(this.showing){
+dojo.style(this.domNode,"display","none");
+this.showing=false;
+}
+},onSet:function(_a){
+var nm=this.getProperty(_a,this.label);
+if(nm in this.runs||this.comparative){
+clearTimeout(this.onSetInterval);
+if(!this.onSetItems[nm]){
+this.onSetItems[nm]=_a;
+}
+this.onSetInterval=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this.onSetInterval);
+var _b=[];
+for(var nm in this.onSetItems){
+_b.push(this.onSetItems[nm]);
+}
+this.onData(_b);
+this.onSetItems={};
+}),200);
+}
+},onError:function(_c){
+console.error("DataChart Error:",_c);
+},onDataReceived:function(_d){
+},getProperty:function(_e,_f){
+if(_f==this.label){
+return this.store.getLabel(_e);
+}
+if(_f=="id"){
+return this.store.getIdentity(_e);
+}
+var _10=this.store.getValues(_e,_f);
+if(_10.length<2){
+_10=this.store.getValue(_e,_f);
+}
+return _10;
+},onData:function(_11){
+if(!_11||!_11.length){
+return;
+}
+if(this.items&&this.items.length!=_11.length){
+dojo.forEach(_11,function(m){
+var id=this.getProperty(m,"id");
+dojo.forEach(this.items,function(m2,i){
+if(this.getProperty(m2,"id")==id){
+this.items[i]=m2;
+}
+},this);
+},this);
+_11=this.items;
+}
+if(this.stretchToFit){
+this.displayRange=_11.length;
+}
+this.onDataReceived(_11);
+this.items=_11;
+if(this.comparative){
+var nm="default";
+this.seriesData[nm]=[];
+this.seriesDataBk[nm]=[];
+dojo.forEach(_11,function(m,i){
+var _12=this.getProperty(m,this.fieldName);
+this.seriesData[nm].push(_12);
+},this);
+}else{
+dojo.forEach(_11,function(m,i){
+var nm=this.store.getLabel(m);
+if(!this.seriesData[nm]){
+this.seriesData[nm]=[];
+this.seriesDataBk[nm]=[];
+}
+var _13=this.getProperty(m,this.fieldName);
+if(dojo.isArray(_13)){
+this.seriesData[nm]=_13;
+}else{
+if(!this.scroll){
+var ar=dojo.map(new Array(i+1),function(){
+return 0;
+});
+ar.push(Number(_13));
+this.seriesData[nm]=ar;
+}else{
+if(this.seriesDataBk[nm].length>this.seriesData[nm].length){
+this.seriesData[nm]=this.seriesDataBk[nm];
+}
+this.seriesData[nm].push(Number(_13));
+}
+this.seriesDataBk[nm].push(Number(_13));
+}
+},this);
+}
+var _14;
+if(this.firstRun){
+this.firstRun=false;
+for(nm in this.seriesData){
+this.addSeries(nm,this.seriesData[nm]);
+_14=this.seriesData[nm];
+}
+}else{
+for(nm in this.seriesData){
+_14=this.seriesData[nm];
+if(this.scroll&&_14.length>this.displayRange){
+this.dataOffset=_14.length-this.displayRange-1;
+_14=_14.slice(_14.length-this.displayRange,_14.length);
+}
+this.updateSeries(nm,_14);
+}
+}
+this.dataLength=_14.length;
+if(this.showing){
+this.render();
+}
+},fetch:function(){
+if(!this.store){
+return;
+}
+this.store.fetch({query:this.query,queryOptions:this.queryOptions,start:this.start,count:this.count,sort:this.sort,onComplete:dojo.hitch(this,function(_15){
+setTimeout(dojo.hitch(this,function(){
+this.onData(_15);
+}),0);
+}),onError:dojo.hitch(this,"onError")});
+},convertLabels:function(_16){
+if(!_16.labels||dojo.isObject(_16.labels[0])){
+return null;
+}
+_16.labels=dojo.map(_16.labels,function(ele,i){
+return {value:i,text:ele};
+});
+return null;
+},seriesLabels:function(val){
+val--;
+if(this.series.length<1||(!this.comparative&&val>this.series.length)){
+return "-";
+}
+if(this.comparative){
+return this.store.getLabel(this.items[val]);
+}else{
+for(var i=0;i<this.series.length;i++){
+if(this.series[i].data[val]>0){
+return this.series[i].name;
+}
+}
+}
+return "-";
+},resizeChart:function(dim){
+var w=Math.max(dim.w,this.minWidth);
+var h=Math.max(dim.h,this.minHeight);
+this.resize(w,h);
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/Base.js b/js/dojo/dojox/charting/action2d/Base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/Base.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Base"]){
+dojo._hasResource["dojox.charting.action2d.Base"]=true;
+dojo.provide("dojox.charting.action2d.Base");
+dojo.require("dojo.fx.easing");
+dojo.require("dojox.lang.functional.object");
+dojo.require("dojox.gfx.fx");
+(function(){
+var _1=400,_2=dojo.fx.easing.backOut,df=dojox.lang.functional;
+dojo.declare("dojox.charting.action2d.Base",null,{overOutEvents:{onmouseover:1,onmouseout:1},constructor:function(_3,_4,_5){
+this.chart=_3;
+this.plot=_4?_4:"default";
+this.anim={};
+if(!_5){
+_5={};
+}
+this.duration=_5.duration?_5.duration:_1;
+this.easing=_5.easing?_5.easing:_2;
+},connect:function(){
+this.handle=this.chart.connectToPlot(this.plot,this,"process");
+},disconnect:function(){
+if(this.handle){
+dojo.disconnect(this.handle);
+this.handle=null;
+}
+},reset:function(){
+},destroy:function(){
+if(this.handle){
+this.disconnect();
+}
+df.forIn(this.anim,function(o){
+df.forIn(o,function(_6){
+_6.action.stop(true);
+});
+});
+this.anim={};
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/Highlight.js b/js/dojo/dojox/charting/action2d/Highlight.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/Highlight.js
@@ -0,0 +1,76 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Highlight"]){
+dojo._hasResource["dojox.charting.action2d.Highlight"]=true;
+dojo.provide("dojox.charting.action2d.Highlight");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.color");
+(function(){
+var _1=100,_2=75,_3=50,c=dojox.color,cc=function(_4){
+return function(){
+return _4;
+};
+},hl=function(_5){
+var a=new c.Color(_5),x=a.toHsl();
+if(x.s==0){
+x.l=x.l<50?100:0;
+}else{
+x.s=_1;
+if(x.l<_3){
+x.l=_2;
+}else{
+if(x.l>_2){
+x.l=_3;
+}else{
+x.l=x.l-_3>_2-x.l?_3:_2;
+}
+}
+}
+return c.fromHsl(x);
+};
+dojo.declare("dojox.charting.action2d.Highlight",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut},optionalParams:{highlight:"red"},constructor:function(_6,_7,_8){
+var a=_8&&_8.highlight;
+this.colorFun=a?(dojo.isFunction(a)?a:cc(a)):hl;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)){
+return;
+}
+var _9=o.run.name,_a=o.index,_b,_c,_d;
+if(_9 in this.anim){
+_b=this.anim[_9][_a];
+}else{
+this.anim[_9]={};
+}
+if(_b){
+_b.action.stop(true);
+}else{
+var _e=o.shape.getFill();
+if(!_e||!(_e instanceof dojo.Color)){
+return;
+}
+this.anim[_9][_a]=_b={start:_e,end:this.colorFun(_e)};
+}
+var _f=_b.start,end=_b.end;
+if(o.type=="onmouseout"){
+var t=_f;
+_f=end;
+end=t;
+}
+_b.action=dojox.gfx.fx.animateFill({shape:o.shape,duration:this.duration,easing:this.easing,color:{start:_f,end:end}});
+if(o.type=="onmouseout"){
+dojo.connect(_b.action,"onEnd",this,function(){
+if(this.anim[_9]){
+delete this.anim[_9][_a];
+}
+});
+}
+_b.action.play();
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/Magnify.js b/js/dojo/dojox/charting/action2d/Magnify.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/Magnify.js
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Magnify"]){
+dojo._hasResource["dojox.charting.action2d.Magnify"]=true;
+dojo.provide("dojox.charting.action2d.Magnify");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojo.fx");
+(function(){
+var _1=2,m=dojox.gfx.matrix,gf=dojox.gfx.fx;
+dojo.declare("dojox.charting.action2d.Magnify",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_1},optionalParams:{},constructor:function(_2,_3,_4){
+this.scale=_4&&typeof _4.scale=="number"?_4.scale:_1;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)||!("cx" in o)||!("cy" in o)){
+return;
+}
+var _5=o.run.name,_6=o.index,_7=[],_8,_9,_a;
+if(_5 in this.anim){
+_8=this.anim[_5][_6];
+}else{
+this.anim[_5]={};
+}
+if(_8){
+_8.action.stop(true);
+}else{
+this.anim[_5][_6]=_8={};
+}
+if(o.type=="onmouseover"){
+_9=m.identity;
+_a=this.scale;
+}else{
+_9=m.scaleAt(this.scale,o.cx,o.cy);
+_a=1/this.scale;
+}
+var _b={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"scaleAt",start:[1,o.cx,o.cy],end:[_a,o.cx,o.cy]},_9]};
+if(o.shape){
+_7.push(gf.animateTransform(_b));
+}
+if(o.oultine){
+_b.shape=o.outline;
+_7.push(gf.animateTransform(_b));
+}
+if(o.shadow){
+_b.shape=o.shadow;
+_7.push(gf.animateTransform(_b));
+}
+if(!_7.length){
+delete this.anim[_5][_6];
+return;
+}
+_8.action=dojo.fx.combine(_7);
+if(o.type=="onmouseout"){
+dojo.connect(_8.action,"onEnd",this,function(){
+if(this.anim[_5]){
+delete this.anim[_5][_6];
+}
+});
+}
+_8.action.play();
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/MoveSlice.js b/js/dojo/dojox/charting/action2d/MoveSlice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/MoveSlice.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.MoveSlice"]){
+dojo._hasResource["dojox.charting.action2d.MoveSlice"]=true;
+dojo.provide("dojox.charting.action2d.MoveSlice");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.fold");
+(function(){
+var _1=1.05,_2=7,m=dojox.gfx.matrix,gf=dojox.gfx.fx,df=dojox.lang.functional;
+dojo.declare("dojox.charting.action2d.MoveSlice",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_1,shift:_2},optionalParams:{},constructor:function(_3,_4,_5){
+if(!_5){
+_5={};
+}
+this.scale=typeof _5.scale=="number"?_5.scale:_1;
+this.shift=typeof _5.shift=="number"?_5.shift:_2;
+this.connect();
+},process:function(o){
+if(!o.shape||o.element!="slice"||!(o.type in this.overOutEvents)){
+return;
+}
+if(!this.angles){
+if(typeof o.run.data[0]=="number"){
+this.angles=df.map(df.scanl(o.run.data,"+",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));
+}else{
+this.angles=df.map(df.scanl(o.run.data,"a + b.y",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));
+}
+}
+var _6=o.index,_7,_8,_9,_a,_b,_c=(this.angles[_6]+this.angles[_6+1])/2,_d=m.rotateAt(-_c,o.cx,o.cy),_e=m.rotateAt(_c,o.cx,o.cy);
+_7=this.anim[_6];
+if(_7){
+_7.action.stop(true);
+}else{
+this.anim[_6]=_7={};
+}
+if(o.type=="onmouseover"){
+_a=0;
+_b=this.shift;
+_8=1;
+_9=this.scale;
+}else{
+_a=this.shift;
+_b=0;
+_8=this.scale;
+_9=1;
+}
+_7.action=dojox.gfx.fx.animateTransform({shape:o.shape,duration:this.duration,easing:this.easing,transform:[_e,{name:"translate",start:[_a,0],end:[_b,0]},{name:"scaleAt",start:[_8,o.cx,o.cy],end:[_9,o.cx,o.cy]},_d]});
+if(o.type=="onmouseout"){
+dojo.connect(_7.action,"onEnd",this,function(){
+delete this.anim[_6];
+});
+}
+_7.action.play();
+},reset:function(){
+delete this.angles;
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/Shake.js b/js/dojo/dojox/charting/action2d/Shake.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/Shake.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Shake"]){
+dojo._hasResource["dojox.charting.action2d.Shake"]=true;
+dojo.provide("dojox.charting.action2d.Shake");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojo.fx");
+(function(){
+var _1=3,m=dojox.gfx.matrix,gf=dojox.gfx.fx;
+dojo.declare("dojox.charting.action2d.Shake",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,shiftX:_1,shiftY:_1},optionalParams:{},constructor:function(_2,_3,_4){
+if(!_4){
+_4={};
+}
+this.shiftX=typeof _4.shiftX=="number"?_4.shiftX:_1;
+this.shiftY=typeof _4.shiftY=="number"?_4.shiftY:_1;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)){
+return;
+}
+var _5=o.run.name,_6=o.index,_7=[],_8,_9=o.type=="onmouseover"?this.shiftX:-this.shiftX,_a=o.type=="onmouseover"?this.shiftY:-this.shiftY;
+if(_5 in this.anim){
+_8=this.anim[_5][_6];
+}else{
+this.anim[_5]={};
+}
+if(_8){
+_8.action.stop(true);
+}else{
+this.anim[_5][_6]=_8={};
+}
+var _b={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"translate",start:[this.shiftX,this.shiftY],end:[0,0]},m.identity]};
+if(o.shape){
+_7.push(gf.animateTransform(_b));
+}
+if(o.oultine){
+_b.shape=o.outline;
+_7.push(gf.animateTransform(_b));
+}
+if(o.shadow){
+_b.shape=o.shadow;
+_7.push(gf.animateTransform(_b));
+}
+if(!_7.length){
+delete this.anim[_5][_6];
+return;
+}
+_8.action=dojo.fx.combine(_7);
+if(o.type=="onmouseout"){
+dojo.connect(_8.action,"onEnd",this,function(){
+if(this.anim[_5]){
+delete this.anim[_5][_6];
+}
+});
+}
+_8.action.play();
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/action2d/Tooltip.js b/js/dojo/dojox/charting/action2d/Tooltip.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/action2d/Tooltip.js
@@ -0,0 +1,102 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Tooltip"]){
+dojo._hasResource["dojox.charting.action2d.Tooltip"]=true;
+dojo.provide("dojox.charting.action2d.Tooltip");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dijit.Tooltip");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.fold");
+(function(){
+var _1=function(o){
+var t=o.run&&o.run.data&&o.run.data[o.index];
+if(t&&typeof t!="number"&&(t.tooltip||t.text)){
+return t.tooltip||t.text;
+}
+if(o.element=="candlestick"){
+return "<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\" style=\"font-size:0.9em;\">"+"<tr><td>Open:</td><td align=\"right\"><strong>"+o.data.open+"</strong></td></tr>"+"<tr><td>High:</td><td align=\"right\"><strong>"+o.data.high+"</strong></td></tr>"+"<tr><td>Low:</td><td align=\"right\"><strong>"+o.data.low+"</strong></td></tr>"+"<tr><td>Close:</td><td align=\"right\"><strong>"+o.data.close+"</strong></td></tr>"+(o.data.mid!==undefined?"<tr><td>Mid:</td><td align=\"right\"><strong>"+o.data.mid+"</strong></td></tr>":"")+"</table>";
+}
+return o.element=="bar"?o.x:o.y;
+};
+var df=dojox.lang.functional,_2=Math.PI/4,_3=Math.PI/2;
+dojo.declare("dojox.charting.action2d.Tooltip",dojox.charting.action2d.Base,{defaultParams:{text:_1},optionalParams:{},constructor:function(_4,_5,_6){
+this.text=_6&&_6.text?_6.text:_1;
+this.connect();
+},process:function(o){
+if(o.type==="onplotreset"||o.type==="onmouseout"){
+dijit.hideTooltip(this.aroundRect);
+this.aroundRect=null;
+return;
+}
+if(!o.shape||o.type!=="onmouseover"){
+return;
+}
+var _7={type:"rect"},_8=["after","before"];
+switch(o.element){
+case "marker":
+_7.x=o.cx;
+_7.y=o.cy;
+_7.width=_7.height=1;
+break;
+case "circle":
+_7.x=o.cx-o.cr;
+_7.y=o.cy-o.cr;
+_7.width=_7.height=2*o.cr;
+break;
+case "column":
+_8=["above","below"];
+case "bar":
+_7=dojo.clone(o.shape.getShape());
+break;
+case "candlestick":
+_7.x=o.x;
+_7.y=o.y;
+_7.width=o.width;
+_7.height=o.height;
+break;
+default:
+if(!this.angles){
+if(typeof o.run.data[0]=="number"){
+this.angles=df.map(df.scanl(o.run.data,"+",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));
+}else{
+this.angles=df.map(df.scanl(o.run.data,"a + b.y",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));
+}
+}
+var _9=(this.angles[o.index]+this.angles[o.index+1])/2;
+_7.x=o.cx+o.cr*Math.cos(_9);
+_7.y=o.cy+o.cr*Math.sin(_9);
+_7.width=_7.height=1;
+if(_9<_2){
+}else{
+if(_9<_3+_2){
+_8=["below","above"];
+}else{
+if(_9<Math.PI+_2){
+_8=["before","after"];
+}else{
+if(_9<2*Math.PI-_2){
+_8=["above","below"];
+}
+}
+}
+}
+break;
+}
+var lt=dojo.coords(this.chart.node,true);
+_7.x+=lt.x;
+_7.y+=lt.y;
+_7.x=Math.round(_7.x);
+_7.y=Math.round(_7.y);
+_7.width=Math.ceil(_7.width);
+_7.height=Math.ceil(_7.height);
+this.aroundRect=_7;
+dijit.showTooltip(this.text(o),this.aroundRect,_8);
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/plot2d/Bubble.js b/js/dojo/dojox/charting/plot2d/Bubble.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/plot2d/Bubble.js
@@ -0,0 +1,98 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bubble"]){
+dojo._hasResource["dojox.charting.plot2d.Bubble"]=true;
+dojo.provide("dojox.charting.plot2d.Bubble");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.functional");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Bubble",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y"},optionalParams:{},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+},calculateAxes:function(_4){
+this._calc(_4,dc.collectSimpleStats(this.series));
+return this;
+},render:function(_5,_6){
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_7){
+_7.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_8,_9,_a,_b,_c,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_d=this.events();
+this.resetEvents();
+for(var i=this.series.length-1;i>=0;--i){
+var _e=this.series[i];
+if(!this.dirty&&!_e.dirty){
+continue;
+}
+_e.cleanGroup();
+if(!_e.data.length){
+_e.dirty=false;
+continue;
+}
+if(typeof _e.data[0]=="number"){
+console.warn("dojox.charting.plot2d.Bubble: the data in the following series cannot be rendered as a bubble chart; ",_e);
+continue;
+}
+var s=_e.group,_f=dojo.map(_e.data,function(v,i){
+return {x:ht(v.x)+_6.l,y:_5.height-_6.b-vt(v.y),radius:this._vScaler.bounds.scale*(v.size/2)};
+},this);
+if(_e.fill){
+_a=_e.fill;
+}else{
+if(_e.stroke){
+_a=_e.stroke;
+}else{
+_a=_e.dyn.color=new dojo.Color(t.next("color"));
+}
+}
+_e.dyn.fill=_a;
+_8=_e.dyn.stroke=_e.stroke?dc.makeStroke(_e.stroke):dc.augmentStroke(t.series.stroke,_a);
+var _10=null,_11=null,_12=null;
+if(this.opt.shadows&&_8){
+var sh=this.opt.shadows,_c=new dojo.Color([0,0,0,0.2]),_b=dojo.clone(_9?_9:_8);
+_b.color=_c;
+_b.width+=sh.dw?sh.dw:0;
+_e.dyn.shadow=_b;
+var _13=dojo.map(_f,function(_14){
+var sh=this.opt.shadows;
+return s.createCircle({cx:_14.x+sh.dx,cy:_14.y+sh.dy,r:_14.radius}).setStroke(_b).setFill(_c);
+},this);
+}
+if(_e.outline||t.series.outline){
+_9=dc.makeStroke(_e.outline?_e.outline:t.series.outline);
+_9.width=2*_9.width+_8.width;
+_e.dyn.outline=_9;
+_11=dojo.map(_f,function(_15){
+s.createCircle({cx:_15.x,cy:_15.y,r:_15.radius}).setStroke(_9);
+},this);
+}
+_10=dojo.map(_f,function(_16){
+return s.createCircle({cx:_16.x,cy:_16.y,r:_16.radius}).setStroke(_8).setFill(_a);
+},this);
+if(_d){
+dojo.forEach(_10,function(s,i){
+var o={element:"circle",index:i,run:_e,plot:this,hAxis:this.hAxis||null,vAxis:this.vAxis||null,shape:s,outline:_11&&_11[i]||null,shadow:_12&&_12[i]||null,x:_e.data[i].x,y:_e.data[i].y,r:_e.data[i].size/2,cx:_f[i].x,cy:_f[i].y,cr:_f[i].radius};
+this._connectEvents(s,o);
+},this);
+}
+_e.dirty=false;
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/plot2d/Candlesticks.js b/js/dojo/dojox/charting/plot2d/Candlesticks.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/plot2d/Candlesticks.js
@@ -0,0 +1,119 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Candlesticks"]){
+dojo._hasResource["dojox.charting.plot2d.Candlesticks"]=true;
+dojo.provide("dojox.charting.plot2d.Candlesticks");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Candlesticks",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,shadows:null},optionalParams:{minBarSize:1,maxBarSize:1},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+},collectStats:function(_4){
+var _5=dojo.clone(dc.defaultStats);
+for(var i=0;i<_4.length;i++){
+var _6=_4[i];
+if(!_6.data.length){
+continue;
+}
+var _7=_5.vmin,_8=_5.vmax;
+if(!("ymin" in _6)||!("ymax" in _6)){
+dojo.forEach(_6.data,function(_9,_a){
+var x=_9.x||_a+1;
+_5.hmin=Math.min(_5.hmin,x);
+_5.hmax=Math.max(_5.hmax,x);
+_5.vmin=Math.min(_5.vmin,_9.open,_9.close,_9.high,_9.low);
+_5.vmax=Math.max(_5.vmax,_9.open,_9.close,_9.high,_9.low);
+});
+}
+if("ymin" in _6){
+_5.vmin=Math.min(_7,_6.ymin);
+}
+if("ymax" in _6){
+_5.vmax=Math.max(_8,_6.ymax);
+}
+}
+return _5;
+},calculateAxes:function(_b){
+var _c=this.collectStats(this.series),t;
+_c.hmin-=0.5;
+_c.hmax+=0.5;
+this._calc(_b,_c);
+return this;
+},render:function(_d,_e){
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_f){
+_f.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_10,_11,_12,f,gap,_13,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_14=Math.max(0,this._vScaler.bounds.lower),_15=vt(_14),_16=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+gap=f.gap;
+_13=f.size;
+this.resetEvents();
+for(var i=this.series.length-1;i>=0;--i){
+var run=this.series[i];
+if(!this.dirty&&!run.dirty){
+continue;
+}
+run.cleanGroup();
+var s=run.group;
+if(!run.fill||!run.stroke){
+_10=run.dyn.color=new dojo.Color(t.next("color"));
+}
+_11=run.stroke?run.stroke:dc.augmentStroke(t.series.stroke,_10);
+_12=run.fill?run.fill:dc.augmentFill(t.series.fill,_10);
+for(var j=0;j<run.data.length;++j){
+var v=run.data[j];
+var x=ht(v.x||(j+0.5))+_e.l+gap,y=_d.height-_e.b,_17=vt(v.open),_18=vt(v.close),_19=vt(v.high),low=vt(v.low);
+if("mid" in v){
+var mid=vt(v.mid);
+}
+if(low>_19){
+var tmp=_19;
+_19=low;
+low=tmp;
+}
+if(_13>=1){
+var _1a=_17>_18;
+var _1b={x1:_13/2,x2:_13/2,y1:y-_19,y2:y-low},_1c={x:0,y:y-Math.max(_17,_18),width:_13,height:Math.max(_1a?_17-_18:_18-_17,1)};
+shape=s.createGroup();
+shape.setTransform({dx:x,dy:0});
+var _1d=shape.createGroup();
+_1d.createLine(_1b).setStroke(_11);
+_1d.createRect(_1c).setStroke(_11).setFill(_1a?_12:"white");
+if("mid" in v){
+_1d.createLine({x1:(_11.width||1),x2:_13-(_11.width||1),y1:y-mid,y2:y-mid}).setStroke(_1a?{color:"white"}:_11);
+}
+run.dyn.fill=_12;
+run.dyn.stroke=_11;
+if(_16){
+var o={element:"candlestick",index:j,run:run,plot:this,hAxis:this.hAxis||null,vAxis:this.vAxis||null,shape:_1d,x:x,y:y-Math.max(_17,_18),cx:_13/2,cy:(y-Math.max(_17,_18))+(Math.max(_1a?_17-_18:_18-_17,1)/2),width:_13,height:Math.max(_1a?_17-_18:_18-_17,1),data:v};
+this._connectEvents(shape,o);
+}
+}
+}
+run.dirty=false;
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/plot2d/OHLC.js b/js/dojo/dojox/charting/plot2d/OHLC.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/plot2d/OHLC.js
@@ -0,0 +1,113 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.OHLC"]){
+dojo._hasResource["dojox.charting.plot2d.OHLC"]=true;
+dojo.provide("dojox.charting.plot2d.OHLC");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.OHLC",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,shadows:null},optionalParams:{minBarSize:1,maxBarSize:1},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+},collectStats:function(_4){
+var _5=dojo.clone(dc.defaultStats);
+for(var i=0;i<_4.length;i++){
+var _6=_4[i];
+if(!_6.data.length){
+continue;
+}
+var _7=_5.vmin,_8=_5.vmax;
+if(!("ymin" in _6)||!("ymax" in _6)){
+dojo.forEach(_6.data,function(_9,_a){
+var x=_9.x||_a+1;
+_5.hmin=Math.min(_5.hmin,x);
+_5.hmax=Math.max(_5.hmax,x);
+_5.vmin=Math.min(_5.vmin,_9.open,_9.close,_9.high,_9.low);
+_5.vmax=Math.max(_5.vmax,_9.open,_9.close,_9.high,_9.low);
+});
+}
+if("ymin" in _6){
+_5.vmin=Math.min(_7,_6.ymin);
+}
+if("ymax" in _6){
+_5.vmax=Math.max(_8,_6.ymax);
+}
+}
+return _5;
+},calculateAxes:function(_b){
+var _c=this.collectStats(this.series),t;
+_c.hmin-=0.5;
+_c.hmax+=0.5;
+this._calc(_b,_c);
+return this;
+},render:function(_d,_e){
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_f){
+_f.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_10,_11,_12,f,gap,_13,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_14=Math.max(0,this._vScaler.bounds.lower),_15=vt(_14),_16=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+gap=f.gap;
+_13=f.size;
+this.resetEvents();
+for(var i=this.series.length-1;i>=0;--i){
+var run=this.series[i];
+if(!this.dirty&&!run.dirty){
+continue;
+}
+run.cleanGroup();
+var s=run.group;
+if(!run.fill||!run.stroke){
+_10=run.dyn.color=new dojo.Color(t.next("color"));
+}
+_11=run.stroke?run.stroke:dc.augmentStroke(t.series.stroke,_10);
+_12=run.fill?run.fill:dc.augmentFill(t.series.fill,_10);
+for(var j=0;j<run.data.length;++j){
+var v=run.data[j];
+var x=ht(v.x||(j+0.5))+_e.l+gap,y=_d.height-_e.b,_17=vt(v.open),_18=vt(v.close),_19=vt(v.high),low=vt(v.low);
+if(low>_19){
+var tmp=_19;
+_19=low;
+low=tmp;
+}
+if(_13>=1){
+var hl={x1:_13/2,x2:_13/2,y1:y-_19,y2:y-low},op={x1:0,x2:((_13/2)+((_11.width||1)/2)),y1:y-_17,y2:y-_17},cl={x1:((_13/2)-((_11.width||1)/2)),x2:_13,y1:y-_18,y2:y-_18};
+shape=s.createGroup();
+shape.setTransform({dx:x,dy:0});
+var _1a=shape.createGroup();
+_1a.createLine(hl).setStroke(_11);
+_1a.createLine(op).setStroke(_11);
+_1a.createLine(cl).setStroke(_11);
+run.dyn.fill=_12;
+run.dyn.stroke=_11;
+if(_16){
+var o={element:"candlestick",index:j,run:run,plot:this,hAxis:this.hAxis||null,vAxis:this.vAxis||null,shape:_1a,x:x,y:y-Math.max(_17,_18),cx:_13/2,cy:(y-Math.max(_17,_18))+(Math.max(_17>_18?_17-_18:_18-_17,1)/2),width:_13,height:Math.max(_17>_18?_17-_18:_18-_17,1),data:v};
+this._connectEvents(shape,o);
+}
+}
+}
+run.dirty=false;
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/scaler/common.js b/js/dojo/dojox/charting/scaler/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/scaler/common.js
@@ -0,0 +1,56 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.common"]){
+dojo._hasResource["dojox.charting.scaler.common"]=true;
+dojo.provide("dojox.charting.scaler.common");
+(function(){
+var eq=function(a,b){
+return Math.abs(a-b)<=0.000001*(Math.abs(a)+Math.abs(b));
+};
+dojo.mixin(dojox.charting.scaler.common,{findString:function(_1,_2){
+_1=_1.toLowerCase();
+for(var i=0;i<_2.length;++i){
+if(_1==_2[i]){
+return true;
+}
+}
+return false;
+},getNumericLabel:function(_3,_4,_5){
+var _6=_5.fixed?_3.toFixed(_4<0?-_4:0):_3.toString();
+if(_5.labelFunc){
+var r=_5.labelFunc(_6,_3,_4);
+if(r){
+return r;
+}
+}
+if(_5.labels){
+var l=_5.labels,lo=0,hi=l.length;
+while(lo<hi){
+var _7=Math.floor((lo+hi)/2),_8=l[_7].value;
+if(_8<_3){
+lo=_7+1;
+}else{
+hi=_7;
+}
+}
+if(lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+--lo;
+if(lo>=0&&lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+lo+=2;
+if(lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+}
+return _6;
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/scaler/linear.js b/js/dojo/dojox/charting/scaler/linear.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/scaler/linear.js
@@ -0,0 +1,217 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.linear"]){
+dojo._hasResource["dojox.charting.scaler.linear"]=true;
+dojo.provide("dojox.charting.scaler.linear");
+dojo.require("dojox.charting.scaler.common");
+(function(){
+var _1=3,dc=dojox.charting,_2=dc.scaler,_3=_2.common,_4=_3.findString,_5=_3.getNumericLabel;
+var _6=function(_7,_8,_9,_a,_b,_c,_d){
+_9=dojo.delegate(_9);
+if(!_a){
+if(_9.fixUpper=="major"){
+_9.fixUpper="minor";
+}
+if(_9.fixLower=="major"){
+_9.fixLower="minor";
+}
+}
+if(!_b){
+if(_9.fixUpper=="minor"){
+_9.fixUpper="micro";
+}
+if(_9.fixLower=="minor"){
+_9.fixLower="micro";
+}
+}
+if(!_c){
+if(_9.fixUpper=="micro"){
+_9.fixUpper="none";
+}
+if(_9.fixLower=="micro"){
+_9.fixLower="none";
+}
+}
+var _e=_4(_9.fixLower,["major"])?Math.floor(_9.min/_a)*_a:_4(_9.fixLower,["minor"])?Math.floor(_9.min/_b)*_b:_4(_9.fixLower,["micro"])?Math.floor(_9.min/_c)*_c:_9.min,_f=_4(_9.fixUpper,["major"])?Math.ceil(_9.max/_a)*_a:_4(_9.fixUpper,["minor"])?Math.ceil(_9.max/_b)*_b:_4(_9.fixUpper,["micro"])?Math.ceil(_9.max/_c)*_c:_9.max;
+if(_9.useMin){
+_7=_e;
+}
+if(_9.useMax){
+_8=_f;
+}
+var _10=(!_a||_9.useMin&&_4(_9.fixLower,["major"]))?_7:Math.ceil(_7/_a)*_a,_11=(!_b||_9.useMin&&_4(_9.fixLower,["major","minor"]))?_7:Math.ceil(_7/_b)*_b,_12=(!_c||_9.useMin&&_4(_9.fixLower,["major","minor","micro"]))?_7:Math.ceil(_7/_c)*_c,_13=!_a?0:(_9.useMax&&_4(_9.fixUpper,["major"])?Math.round((_8-_10)/_a):Math.floor((_8-_10)/_a))+1,_14=!_b?0:(_9.useMax&&_4(_9.fixUpper,["major","minor"])?Math.round((_8-_11)/_b):Math.floor((_8-_11)/_b))+1,_15=!_c?0:(_9.useMax&&_4(_9.fixUpper,["major","minor","micro"])?Math.round((_8-_12)/_c):Math.floor((_8-_12)/_c))+1,_16=_b?Math.round(_a/_b):0,_17=_c?Math.round(_b/_c):0,_18=_a?Math.floor(Math.log(_a)/Math.LN10):0,_19=_b?Math.floor(Math.log(_b)/Math.LN10):0,_1a=_d/(_8-_7);
+if(!isFinite(_1a)){
+_1a=1;
+}
+return {bounds:{lower:_e,upper:_f,from:_7,to:_8,scale:_1a,span:_d},major:{tick:_a,start:_10,count:_13,prec:_18},minor:{tick:_b,start:_11,count:_14,prec:_19},micro:{tick:_c,start:_12,count:_15,prec:0},minorPerMajor:_16,microPerMinor:_17,scaler:_2.linear};
+};
+dojo.mixin(dojox.charting.scaler.linear,{buildScaler:function(min,max,_1b,_1c){
+var h={fixUpper:"none",fixLower:"none",natural:false};
+if(_1c){
+if("fixUpper" in _1c){
+h.fixUpper=String(_1c.fixUpper);
+}
+if("fixLower" in _1c){
+h.fixLower=String(_1c.fixLower);
+}
+if("natural" in _1c){
+h.natural=Boolean(_1c.natural);
+}
+}
+if("min" in _1c){
+min=_1c.min;
+}
+if("max" in _1c){
+max=_1c.max;
+}
+if(_1c.includeZero){
+if(min>0){
+min=0;
+}
+if(max<0){
+max=0;
+}
+}
+h.min=min;
+h.useMin=true;
+h.max=max;
+h.useMax=true;
+if("from" in _1c){
+min=_1c.from;
+h.useMin=false;
+}
+if("to" in _1c){
+max=_1c.to;
+h.useMax=false;
+}
+if(max<=min){
+return _6(min,max,h,0,0,0,_1b);
+}
+var mag=Math.floor(Math.log(max-min)/Math.LN10),_1d=_1c&&("majorTickStep" in _1c)?_1c.majorTickStep:Math.pow(10,mag),_1e=0,_1f=0,_20;
+if(_1c&&("minorTickStep" in _1c)){
+_1e=_1c.minorTickStep;
+}else{
+do{
+_1e=_1d/10;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+_1e=_1d/5;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+_1e=_1d/2;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+return _6(min,max,h,_1d,0,0,_1b);
+}while(false);
+}
+if(_1c&&("microTickStep" in _1c)){
+_1f=_1c.microTickStep;
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+}else{
+do{
+_1f=_1e/10;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=_1e/5;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=_1e/2;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=0;
+}while(false);
+}
+return _1f?_20:_6(min,max,h,_1d,_1e,0,_1b);
+},buildTicks:function(_21,_22){
+var _23,_24,_25,_26=_21.major.start,_27=_21.minor.start,_28=_21.micro.start;
+if(_22.microTicks&&_21.micro.tick){
+_23=_21.micro.tick,_24=_28;
+}else{
+if(_22.minorTicks&&_21.minor.tick){
+_23=_21.minor.tick,_24=_27;
+}else{
+if(_21.major.tick){
+_23=_21.major.tick,_24=_26;
+}else{
+return null;
+}
+}
+}
+var _29=1/_21.bounds.scale;
+if(_21.bounds.to<=_21.bounds.from||isNaN(_29)||!isFinite(_29)||_23<=0||isNaN(_23)||!isFinite(_23)){
+return null;
+}
+var _2a=[],_2b=[],_2c=[];
+while(_24<=_21.bounds.to+_29){
+if(Math.abs(_26-_24)<_23/2){
+_25={value:_26};
+if(_22.majorLabels){
+_25.label=_5(_26,_21.major.prec,_22);
+}
+_2a.push(_25);
+_26+=_21.major.tick;
+_27+=_21.minor.tick;
+_28+=_21.micro.tick;
+}else{
+if(Math.abs(_27-_24)<_23/2){
+if(_22.minorTicks){
+_25={value:_27};
+if(_22.minorLabels&&(_21.minMinorStep<=_21.minor.tick*_21.bounds.scale)){
+_25.label=_5(_27,_21.minor.prec,_22);
+}
+_2b.push(_25);
+}
+_27+=_21.minor.tick;
+_28+=_21.micro.tick;
+}else{
+if(_22.microTicks){
+_2c.push({value:_28});
+}
+_28+=_21.micro.tick;
+}
+}
+_24+=_23;
+}
+return {major:_2a,minor:_2b,micro:_2c};
+},getTransformerFromModel:function(_2d){
+var _2e=_2d.bounds.from,_2f=_2d.bounds.scale;
+return function(x){
+return (x-_2e)*_2f;
+};
+},getTransformerFromPlot:function(_30){
+var _31=_30.bounds.from,_32=_30.bounds.scale;
+return function(x){
+return x/_32+_31;
+};
+}});
+})();
+}
diff --git a/js/dojo/dojox/charting/scaler/primitive.js b/js/dojo/dojox/charting/scaler/primitive.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/scaler/primitive.js
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.primitive"]){
+dojo._hasResource["dojox.charting.scaler.primitive"]=true;
+dojo.provide("dojox.charting.scaler.primitive");
+dojox.charting.scaler.primitive={buildScaler:function(_1,_2,_3,_4){
+return {bounds:{lower:_1,upper:_2,from:_1,to:_2,scale:_3/(_2-_1),span:_3},scaler:dojox.charting.scaler.primitive};
+},buildTicks:function(_5,_6){
+return {major:[],minor:[],micro:[]};
+},getTransformerFromModel:function(_7){
+var _8=_7.bounds.from,_9=_7.bounds.scale;
+return function(x){
+return (x-_8)*_9;
+};
+},getTransformerFromPlot:function(_a){
+var _b=_a.bounds.from,_c=_a.bounds.scale;
+return function(x){
+return x/_c+_b;
+};
+}};
+}
diff --git a/js/dojo/dojox/charting/themes/Adobebricks.js b/js/dojo/dojox/charting/themes/Adobebricks.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Adobebricks.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Adobebricks"]){
+dojo._hasResource["dojox.charting.themes.Adobebricks"]=true;
+dojo.provide("dojox.charting.themes.Adobebricks");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Adobebricks=new _1.Theme({colors:["#7f2518","#3e170c","#cc3927","#651f0e","#8c271c"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Algae.js b/js/dojo/dojox/charting/themes/Algae.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Algae.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Algae"]){
+dojo._hasResource["dojox.charting.themes.Algae"]=true;
+dojo.provide("dojox.charting.themes.Algae");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Algae=new _1.Theme({colors:["#57808f","#506885","#4f7878","#558f7f","#508567"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Bahamation.js b/js/dojo/dojox/charting/themes/Bahamation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Bahamation.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Bahamation"]){
+dojo._hasResource["dojox.charting.themes.Bahamation"]=true;
+dojo.provide("dojox.charting.themes.Bahamation");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Bahamation=new _1.Theme({colors:["#3f9998","#3fc0c3","#70c058","#ef446f","#c663a6"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/BlueDusk.js b/js/dojo/dojox/charting/themes/BlueDusk.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/BlueDusk.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.BlueDusk"]){
+dojo._hasResource["dojox.charting.themes.BlueDusk"]=true;
+dojo.provide("dojox.charting.themes.BlueDusk");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.BlueDusk=new _1.Theme({colors:["#292e76","#3e56a6","#10143f","#33449c","#798dcd"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/CubanShirts.js b/js/dojo/dojox/charting/themes/CubanShirts.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/CubanShirts.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.CubanShirts"]){
+dojo._hasResource["dojox.charting.themes.CubanShirts"]=true;
+dojo.provide("dojox.charting.themes.CubanShirts");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.CubanShirts=new _1.Theme({colors:["#d42d2a","#004f80","#989736","#2085c7","#7f7f33"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Desert.js b/js/dojo/dojox/charting/themes/Desert.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Desert.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Desert"]){
+dojo._hasResource["dojox.charting.themes.Desert"]=true;
+dojo.provide("dojox.charting.themes.Desert");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Desert=new _1.Theme({colors:["#ffebd5","#806544","#fdc888","#80766b","#cda26e"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Distinctive.js b/js/dojo/dojox/charting/themes/Distinctive.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Distinctive.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Distinctive"]){
+dojo._hasResource["dojox.charting.themes.Distinctive"]=true;
+dojo.provide("dojox.charting.themes.Distinctive");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Distinctive=new _1.Theme({colors:["#497c91","#ada9d6","#768b4e","#eeea99","#b39c53","#c28b69","#815454","#bebebe","#59a0bd","#c9c6e4","#677e13","#f0eebb","#e9c756","#cfb09b","#a05a5a","#d8d8d8","#9dc7d9","#7b78a4","#a8c179","#b7b35c","#ebcf81","#956649","#c99999","#868686","#c7e0e9","#8d88c7","#c0d0a0","#e8e667","#efdeb0","#b17044","#ddc0c0","#a5a5a5"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Dollar.js b/js/dojo/dojox/charting/themes/Dollar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Dollar.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Dollar"]){
+dojo._hasResource["dojox.charting.themes.Dollar"]=true;
+dojo.provide("dojox.charting.themes.Dollar");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Dollar=new _1.Theme({colors:["#A4CE67","#739363","#6B824A","#343434","#636563"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/ET/greys.js b/js/dojo/dojox/charting/themes/ET/greys.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/ET/greys.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){
+dojo._hasResource["dojox.charting.themes.ET.greys"]=true;
+dojo.provide("dojox.charting.themes.ET.greys");
+dojo.require("dojox.charting.Theme");
+dojo.deprecated("dojox.charting.themes.ET.greys","1.3");
+(function(){
+var _1=dojox.charting;
+_1.themes.ET.greys=new _1.Theme({antiAlias:false,chart:{stroke:null,fill:"inherit"},plotarea:{stroke:null,fill:"transparent"},axis:{stroke:{width:0},line:{width:0},majorTick:{color:"#666666",width:1,length:5},minorTick:{color:"black",width:0.5,length:2},font:"normal normal normal 8pt Tahoma",fontColor:"#999999"},series:{outline:{width:0,color:"black"},stroke:{width:1,color:"black"},fill:dojo.colorFromHex("#3b444b"),font:"normal normal normal 7pt Tahoma",fontColor:"#717171"},marker:{stroke:{width:1},fill:"#333",font:"normal normal normal 7pt Tahoma",fontColor:"#000"},colors:[dojo.colorFromHex("#8a8c8f"),dojo.colorFromHex("#4b4b4b"),dojo.colorFromHex("#3b444b"),dojo.colorFromHex("#2e2d30"),dojo.colorFromHex("#000000")]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Grasshopper.js b/js/dojo/dojox/charting/themes/Grasshopper.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Grasshopper.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Grasshopper"]){
+dojo._hasResource["dojox.charting.themes.Grasshopper"]=true;
+dojo.provide("dojox.charting.themes.Grasshopper");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Grasshopper=new _1.Theme({colors:["#208040","#40b657","#78c25e","#14401f","#64bd5f"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Grasslands.js b/js/dojo/dojox/charting/themes/Grasslands.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Grasslands.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Grasslands"]){
+dojo._hasResource["dojox.charting.themes.Grasslands"]=true;
+dojo.provide("dojox.charting.themes.Grasslands");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Grasslands=new _1.Theme({colors:["#70803a","#dde574","#788062","#b1cc5d","#eff2c2"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Harmony.js b/js/dojo/dojox/charting/themes/Harmony.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Harmony.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Harmony"]){
+dojo._hasResource["dojox.charting.themes.Harmony"]=true;
+dojo.provide("dojox.charting.themes.Harmony");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Harmony=new _1.Theme({colors:["#497c91","#59a0bd","#9dc7d9","#c7e0e9","#7b78a4","#8d88c7","#ada9d6","#c9c6e4","#768b4e","#677e13","#a8c179","#c0d0a0","#b7b35c","#e8e667","#eeea99","#f0eebb","#b39c53","#e9c756","#ebcf81","#efdeb0","#956649","#b17044","#c28b69","#cfb09b","#815454","#a05a5a","#c99999","#ddc0c0","#868686","#a5a5a5","#bebebe","#d8d8d8"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/IndigoNation.js b/js/dojo/dojox/charting/themes/IndigoNation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/IndigoNation.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.IndigoNation"]){
+dojo._hasResource["dojox.charting.themes.IndigoNation"]=true;
+dojo.provide("dojox.charting.themes.IndigoNation");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.IndigoNation=new _1.Theme({colors:["#93a4d0","#3b4152","#687291","#9faed9","#8290b8"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Ireland.js b/js/dojo/dojox/charting/themes/Ireland.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Ireland.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Ireland"]){
+dojo._hasResource["dojox.charting.themes.Ireland"]=true;
+dojo.provide("dojox.charting.themes.Ireland");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Ireland=new _1.Theme({colors:["#abdbcb","#435a51","#70998b","#78q596","#5f8074"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/MiamiNice.js b/js/dojo/dojox/charting/themes/MiamiNice.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/MiamiNice.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.MiamiNice"]){
+dojo._hasResource["dojox.charting.themes.MiamiNice"]=true;
+dojo.provide("dojox.charting.themes.MiamiNice");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.MiamiNice=new _1.Theme({colors:["#7f9599","#45b8cc","#8ecfb0","#f8acac","#cc4482"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Midwest.js b/js/dojo/dojox/charting/themes/Midwest.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Midwest.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Midwest"]){
+dojo._hasResource["dojox.charting.themes.Midwest"]=true;
+dojo.provide("dojox.charting.themes.Midwest");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Midwest=new _1.Theme({colors:["#927b51","#a89166","#80c31c","#bcdd5a","#aebc21"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Minty.js b/js/dojo/dojox/charting/themes/Minty.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Minty.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Minty"]){
+dojo._hasResource["dojox.charting.themes.Minty"]=true;
+dojo.provide("dojox.charting.themes.Minty");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Minty=new _1.Theme({colors:["#80ccbb","#539e8b","#335f54","#8dd1c2","#68c5ad"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/PurpleRain.js b/js/dojo/dojox/charting/themes/PurpleRain.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/PurpleRain.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PurpleRain"]){
+dojo._hasResource["dojox.charting.themes.PurpleRain"]=true;
+dojo.provide("dojox.charting.themes.PurpleRain");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.PurpleRain=new _1.Theme({colors:["#4879bc","#ef446f","#3f58a7","#8254a2","#4956a6"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/README b/js/dojo/dojox/charting/themes/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/README
@@ -0,0 +1,5 @@
+Theme authors:
+
+GreySkies, Shrooms, PlotKit (all): Tom Trenka (ttrenka AT gmail.com)
+ET (all): Alex Russell (alex AT dojotoolkit.org)
+Ireland, SageToLime, Minty: Damon Dimmick (SitePen, Inc.)
diff --git a/js/dojo/dojox/charting/themes/RoyalPurples.js b/js/dojo/dojox/charting/themes/RoyalPurples.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/RoyalPurples.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.RoyalPurples"]){
+dojo._hasResource["dojox.charting.themes.RoyalPurples"]=true;
+dojo.provide("dojox.charting.themes.RoyalPurples");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.RoyalPurples=new _1.Theme({colors:["#473980","#685aa7","#7970b3","#231c3f","#7267ae"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/SageToLime.js b/js/dojo/dojox/charting/themes/SageToLime.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/SageToLime.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.SageToLime"]){
+dojo._hasResource["dojox.charting.themes.SageToLime"]=true;
+dojo.provide("dojox.charting.themes.SageToLime");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.SageToLime=new _1.Theme({colors:["#abdbcb","#435a51","#70998b","#5f8074","#80ccbb","#539e8b","#78a596","#335f54","#8dd1c2","#68c5ad"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Shrooms.js b/js/dojo/dojox/charting/themes/Shrooms.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Shrooms.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Shrooms"]){
+dojo._hasResource["dojox.charting.themes.Shrooms"]=true;
+dojo.provide("dojox.charting.themes.Shrooms");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Shrooms=new _1.Theme({colors:["#bf1313","#69bf13","#13bfbf","#6913bf","#bf6913","#13bf13","#1369bf","#bf13bf","#bfbf13","#13bf69","#1313bf","#bf1369"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Tufte.js b/js/dojo/dojox/charting/themes/Tufte.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Tufte.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Tufte"]){
+dojo._hasResource["dojox.charting.themes.Tufte"]=true;
+dojo.provide("dojox.charting.themes.Tufte");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Tufte=new _1.Theme({antiAlias:false,chart:{stroke:null,fill:"inherit"},plotarea:{stroke:null,fill:"transparent"},axis:{stroke:{width:0},line:{width:0},majorTick:{color:"#666666",width:1,length:5},minorTick:{color:"black",width:1,length:2},font:"normal normal normal 8pt Tahoma",fontColor:"#999999"},series:{outline:{width:0,color:"black"},stroke:{width:1,color:"black"},fill:new dojo.Color([59,68,75,0.85]),font:"normal normal normal 7pt Tahoma",fontColor:"#717171"},marker:{stroke:{width:1},fill:"#333",font:"normal normal normal 7pt Tahoma",fontColor:"#000"},colors:[dojo.colorFromHex("#8a8c8f"),dojo.colorFromHex("#4b4b4b"),dojo.colorFromHex("#3b444b"),dojo.colorFromHex("#2e2d30"),dojo.colorFromHex("#000000")]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/WatersEdge.js b/js/dojo/dojox/charting/themes/WatersEdge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/WatersEdge.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.WatersEdge"]){
+dojo._hasResource["dojox.charting.themes.WatersEdge"]=true;
+dojo.provide("dojox.charting.themes.WatersEdge");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.WatersEdge=new _1.Theme({colors:["#437cc0","#6256a5","#4552a3","#43c4f2","#4b66b0"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/themes/Wetland.js b/js/dojo/dojox/charting/themes/Wetland.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/themes/Wetland.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Wetland"]){
+dojo._hasResource["dojox.charting.themes.Wetland"]=true;
+dojo.provide("dojox.charting.themes.Wetland");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Wetland=new _1.Theme({colors:["#bfbc64","#737130","#73373b","#7dafca","#8d3c42"]});
+})();
+}
diff --git a/js/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js b/js/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js
@@ -0,0 +1,13949 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.manager"] = true;
+dojo.provide("dijit._base.manager");
+
+dojo.declare("dijit.WidgetSet", null, {
+ // summary:
+ // A set of widgets indexed by id. A default instance of this class is
+ // available as `dijit.registry`
+ //
+ // example:
+ // Create a small list of widgets:
+ // | var ws = new dijit.WidgetSet();
+ // | ws.add(dijit.byId("one"));
+ // | ws.add(dijit.byId("two"));
+ // | // destroy both:
+ // | ws.forEach(function(w){ w.destroy(); });
+ //
+ // example:
+ // Using dijit.registry:
+ // | dijit.registry.forEach(function(w){ /* do something */ });
+
+ constructor: function(){
+ this._hash = {};
+ this.length = 0;
+ },
+
+ add: function(/*dijit._Widget*/ widget){
+ // summary:
+ // Add a widget to this list. If a duplicate ID is detected, a error is thrown.
+ //
+ // widget: dijit._Widget
+ // Any dijit._Widget subclass.
+ if(this._hash[widget.id]){
+ throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
+ }
+ this._hash[widget.id] = widget;
+ this.length++;
+ },
+
+ remove: function(/*String*/ id){
+ // summary:
+ // Remove a widget from this WidgetSet. Does not destroy the widget; simply
+ // removes the reference.
+ if(this._hash[id]){
+ delete this._hash[id];
+ this.length--;
+ }
+ },
+
+ forEach: function(/*Function*/ func, /* Object? */thisObj){
+ // summary:
+ // Call specified function for each widget in this set.
+ //
+ // func:
+ // A callback function to run for each item. Is passed the widget, the index
+ // in the iteration, and the full hash, similar to `dojo.forEach`.
+ //
+ // thisObj:
+ // An optional scope parameter
+ //
+ // example:
+ // Using the default `dijit.registry` instance:
+ // | dijit.registry.forEach(function(widget){
+ // | console.log(widget.declaredClass);
+ // | });
+ //
+ // returns:
+ // Returns self, in order to allow for further chaining.
+
+ thisObj = thisObj || dojo.global;
+ var i = 0, id;
+ for(id in this._hash){
+ func.call(thisObj, this._hash[id], i++, this._hash);
+ }
+ return this; // dijit.WidgetSet
+ },
+
+ filter: function(/*Function*/ filter, /* Object? */thisObj){
+ // summary:
+ // Filter down this WidgetSet to a smaller new WidgetSet
+ // Works the same as `dojo.filter` and `dojo.NodeList.filter`
+ //
+ // filter:
+ // Callback function to test truthiness. Is passed the widget
+ // reference and the pseudo-index in the object.
+ //
+ // thisObj: Object?
+ // Option scope to use for the filter function.
+ //
+ // example:
+ // Arbitrary: select the odd widgets in this list
+ // | dijit.registry.filter(function(w, i){
+ // | return i % 2 == 0;
+ // | }).forEach(function(w){ /* odd ones */ });
+
+ thisObj = thisObj || dojo.global;
+ var res = new dijit.WidgetSet(), i = 0, id;
+ for(id in this._hash){
+ var w = this._hash[id];
+ if(filter.call(thisObj, w, i++, this._hash)){
+ res.add(w);
+ }
+ }
+ return res; // dijit.WidgetSet
+ },
+
+ byId: function(/*String*/ id){
+ // summary:
+ // Find a widget in this list by it's id.
+ // example:
+ // Test if an id is in a particular WidgetSet
+ // | var ws = new dijit.WidgetSet();
+ // | ws.add(dijit.byId("bar"));
+ // | var t = ws.byId("bar") // returns a widget
+ // | var x = ws.byId("foo"); // returns undefined
+
+ return this._hash[id]; // dijit._Widget
+ },
+
+ byClass: function(/*String*/ cls){
+ // summary:
+ // Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
+ //
+ // cls: String
+ // The Class to scan for. Full dot-notated string.
+ //
+ // example:
+ // Find all `dijit.TitlePane`s in a page:
+ // | dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
+
+ var res = new dijit.WidgetSet(), id, widget;
+ for(id in this._hash){
+ widget = this._hash[id];
+ if(widget.declaredClass == cls){
+ res.add(widget);
+ }
+ }
+ return res; // dijit.WidgetSet
+},
+
+ toArray: function(){
+ // summary:
+ // Convert this WidgetSet into a true Array
+ //
+ // example:
+ // Work with the widget .domNodes in a real Array
+ // | dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
+
+ var ar = [];
+ for(var id in this._hash){
+ ar.push(this._hash[id]);
+ }
+ return ar; // dijit._Widget[]
+},
+
+ map: function(/* Function */func, /* Object? */thisObj){
+ // summary:
+ // Create a new Array from this WidgetSet, following the same rules as `dojo.map`
+ // example:
+ // | var nodes = dijit.registry.map(function(w){ return w.domNode; });
+ //
+ // returns:
+ // A new array of the returned values.
+ return dojo.map(this.toArray(), func, thisObj); // Array
+ },
+
+ every: function(func, thisObj){
+ // summary:
+ // A synthetic clone of `dojo.every` acting explictly on this WidgetSet
+ //
+ // func: Function
+ // A callback function run for every widget in this list. Exits loop
+ // when the first false return is encountered.
+ //
+ // thisObj: Object?
+ // Optional scope parameter to use for the callback
+
+ thisObj = thisObj || dojo.global;
+ var x = 0, i;
+ for(i in this._hash){
+ if(!func.call(thisObj, this._hash[i], x++, this._hash)){
+ return false; // Boolean
+ }
+ }
+ return true; // Boolean
+ },
+
+ some: function(func, thisObj){
+ // summary:
+ // A synthetic clone of `dojo.some` acting explictly on this WidgetSet
+ //
+ // func: Function
+ // A callback function run for every widget in this list. Exits loop
+ // when the first true return is encountered.
+ //
+ // thisObj: Object?
+ // Optional scope parameter to use for the callback
+
+ thisObj = thisObj || dojo.global;
+ var x = 0, i;
+ for(i in this._hash){
+ if(func.call(thisObj, this._hash[i], x++, this._hash)){
+ return true; // Boolean
+ }
+ }
+ return false; // Boolean
+ }
+
+});
+
+/*=====
+dijit.registry = {
+ // summary:
+ // A list of widgets on a page.
+ // description:
+ // Is an instance of `dijit.WidgetSet`
+};
+=====*/
+dijit.registry= new dijit.WidgetSet();
+
+dijit._widgetTypeCtr = {};
+
+dijit.getUniqueId = function(/*String*/widgetType){
+ // summary:
+ // Generates a unique id for a given widgetType
+
+ var id;
+ do{
+ id = widgetType + "_" +
+ (widgetType in dijit._widgetTypeCtr ?
+ ++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
+ }while(dijit.byId(id));
+ return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
+};
+
+dijit.findWidgets = function(/*DomNode*/ root){
+ // summary:
+ // Search subtree under root returning widgets found.
+ // Doesn't search for nested widgets (ie, widgets inside other widgets).
+
+ var outAry = [];
+
+ function getChildrenHelper(root){
+ for(var node = root.firstChild; node; node = node.nextSibling){
+ if(node.nodeType == 1){
+ var widgetId = node.getAttribute("widgetId");
+ if(widgetId){
+ var widget = dijit.byId(widgetId);
+ outAry.push(widget);
+ }else{
+ getChildrenHelper(node);
+ }
+ }
+ }
+ }
+
+ getChildrenHelper(root);
+ return outAry;
+};
+
+dijit._destroyAll = function(){
+ // summary:
+ // Code to destroy all widgets and do other cleanup on page unload
+
+ // Clean up focus manager lingering references to widgets and nodes
+ dijit._curFocus = null;
+ dijit._prevFocus = null;
+ dijit._activeStack = [];
+
+ // Destroy all the widgets, top down
+ dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
+ // Avoid double destroy of widgets like Menu that are attached to <body>
+ // even though they are logically children of other widgets.
+ if(!widget._destroyed){
+ if(widget.destroyRecursive){
+ widget.destroyRecursive();
+ }else if(widget.destroy){
+ widget.destroy();
+ }
+ }
+ });
+};
+
+if(dojo.isIE){
+ // Only run _destroyAll() for IE because we think it's only necessary in that case,
+ // and because it causes problems on FF. See bug #3531 for details.
+ dojo.addOnWindowUnload(function(){
+ dijit._destroyAll();
+ });
+}
+
+dijit.byId = function(/*String|Widget*/id){
+ // summary:
+ // Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+ return typeof id == "string" ? dijit.registry._hash[id] : id; // dijit._Widget
+};
+
+dijit.byNode = function(/* DOMNode */ node){
+ // summary:
+ // Returns the widget corresponding to the given DOMNode
+ return dijit.registry.byId(node.getAttribute("widgetId")); // dijit._Widget
+};
+
+dijit.getEnclosingWidget = function(/* DOMNode */ node){
+ // summary:
+ // Returns the widget whose DOM tree contains the specified DOMNode, or null if
+ // the node is not contained within the DOM tree of any widget
+ while(node){
+ var id = node.getAttribute && node.getAttribute("widgetId");
+ if(id){
+ return dijit.byId(id);
+ }
+ node = node.parentNode;
+ }
+ return null;
+};
+
+dijit._isElementShown = function(/*Element*/elem){
+ var style = dojo.style(elem);
+ return (style.visibility != "hidden")
+ && (style.visibility != "collapsed")
+ && (style.display != "none")
+ && (dojo.attr(elem, "type") != "hidden");
+}
+
+dijit.isTabNavigable = function(/*Element*/elem){
+ // summary:
+ // Tests if an element is tab-navigable
+
+ // TODO: convert (and rename method) to return effectivite tabIndex; will save time in _getTabNavigable()
+ if(dojo.attr(elem, "disabled")){
+ return false;
+ }else if(dojo.hasAttr(elem, "tabIndex")){
+ // Explicit tab index setting
+ return dojo.attr(elem, "tabIndex") >= 0; // boolean
+ }else{
+ // No explicit tabIndex setting, need to investigate node type
+ switch(elem.nodeName.toLowerCase()){
+ case "a":
+ // An <a> w/out a tabindex is only navigable if it has an href
+ return dojo.hasAttr(elem, "href");
+ case "area":
+ case "button":
+ case "input":
+ case "object":
+ case "select":
+ case "textarea":
+ // These are navigable by default
+ return true;
+ case "iframe":
+ // If it's an editor <iframe> then it's tab navigable.
+ if(dojo.isMoz){
+ return elem.contentDocument.designMode == "on";
+ }else if(dojo.isWebKit){
+ var doc = elem.contentDocument,
+ body = doc && doc.body;
+ return body && body.contentEditable == 'true';
+ }else{
+ // contentWindow.document isn't accessible within IE7/8
+ // if the iframe.src points to a foreign url and this
+ // page contains an element, that could get focus
+ try{
+ doc = elem.contentWindow.document;
+ body = doc && doc.body;
+ return body && body.firstChild && body.firstChild.contentEditable == 'true';
+ }catch(e){
+ return false;
+ }
+ }
+ default:
+ return elem.contentEditable == 'true';
+ }
+ }
+};
+
+dijit._getTabNavigable = function(/*DOMNode*/root){
+ // summary:
+ // Finds descendants of the specified root node.
+ //
+ // description:
+ // Finds the following descendants of the specified root node:
+ // * the first tab-navigable element in document order
+ // without a tabIndex or with tabIndex="0"
+ // * the last tab-navigable element in document order
+ // without a tabIndex or with tabIndex="0"
+ // * the first element in document order with the lowest
+ // positive tabIndex value
+ // * the last element in document order with the highest
+ // positive tabIndex value
+ var first, last, lowest, lowestTabindex, highest, highestTabindex;
+ var walkTree = function(/*DOMNode*/parent){
+ dojo.query("> *", parent).forEach(function(child){
+ var isShown = dijit._isElementShown(child);
+ if(isShown && dijit.isTabNavigable(child)){
+ var tabindex = dojo.attr(child, "tabIndex");
+ if(!dojo.hasAttr(child, "tabIndex") || tabindex == 0){
+ if(!first){ first = child; }
+ last = child;
+ }else if(tabindex > 0){
+ if(!lowest || tabindex < lowestTabindex){
+ lowestTabindex = tabindex;
+ lowest = child;
+ }
+ if(!highest || tabindex >= highestTabindex){
+ highestTabindex = tabindex;
+ highest = child;
+ }
+ }
+ }
+ if(isShown && child.nodeName.toUpperCase() != 'SELECT'){ walkTree(child) }
+ });
+ };
+ if(dijit._isElementShown(root)){ walkTree(root) }
+ return { first: first, last: last, lowest: lowest, highest: highest };
+}
+dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/root){
+ // summary:
+ // Finds the descendant of the specified root node
+ // that is first in the tabbing order
+ var elems = dijit._getTabNavigable(dojo.byId(root));
+ return elems.lowest ? elems.lowest : elems.first; // DomNode
+};
+
+dijit.getLastInTabbingOrder = function(/*String|DOMNode*/root){
+ // summary:
+ // Finds the descendant of the specified root node
+ // that is last in the tabbing order
+ var elems = dijit._getTabNavigable(dojo.byId(root));
+ return elems.last ? elems.last : elems.highest; // DomNode
+};
+
+/*=====
+dojo.mixin(dijit, {
+ // defaultDuration: Integer
+ // The default animation speed (in ms) to use for all Dijit
+ // transitional animations, unless otherwise specified
+ // on a per-instance basis. Defaults to 200, overrided by
+ // `djConfig.defaultDuration`
+ defaultDuration: 300
+});
+=====*/
+
+dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
+}
+
+if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.focus"] = true;
+dojo.provide("dijit._base.focus");
+
+ // for dijit.isTabNavigable()
+
+// summary:
+// These functions are used to query or set the focus and selection.
+//
+// Also, they trace when widgets become activated/deactivated,
+// so that the widget can fire _onFocus/_onBlur events.
+// "Active" here means something similar to "focused", but
+// "focus" isn't quite the right word because we keep track of
+// a whole stack of "active" widgets. Example: ComboButton --> Menu -->
+// MenuItem. The onBlur event for ComboButton doesn't fire due to focusing
+// on the Menu or a MenuItem, since they are considered part of the
+// ComboButton widget. It only happens when focus is shifted
+// somewhere completely different.
+
+dojo.mixin(dijit, {
+ // _curFocus: DomNode
+ // Currently focused item on screen
+ _curFocus: null,
+
+ // _prevFocus: DomNode
+ // Previously focused item on screen
+ _prevFocus: null,
+
+ isCollapsed: function(){
+ // summary:
+ // Returns true if there is no text selected
+ return dijit.getBookmark().isCollapsed;
+ },
+
+ getBookmark: function(){
+ // summary:
+ // Retrieves a bookmark that can be used with moveToBookmark to return to the same range
+ var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
+
+ if(dojo.global.getSelection){
+ //W3C Range API for selections.
+ sel = dojo.global.getSelection();
+ if(sel){
+ if(sel.isCollapsed){
+ tg = cf? cf.tagName : "";
+ if(tg){
+ //Create a fake rangelike item to restore selections.
+ tg = tg.toLowerCase();
+ if(tg == "textarea" ||
+ (tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
+ sel = {
+ start: cf.selectionStart,
+ end: cf.selectionEnd,
+ node: cf,
+ pRange: true
+ };
+ return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
+ }
+ }
+ bm = {isCollapsed:true};
+ }else{
+ rg = sel.getRangeAt(0);
+ bm = {isCollapsed: false, mark: rg.cloneRange()};
+ }
+ }
+ }else if(sel){
+ // If the current focus was a input of some sort and no selection, don't bother saving
+ // a native bookmark. This is because it causes issues with dialog/page selection restore.
+ // So, we need to create psuedo bookmarks to work with.
+ tg = cf ? cf.tagName : "";
+ tg = tg.toLowerCase();
+ if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
+ if(sel.type && sel.type.toLowerCase() == "none"){
+ return {
+ isCollapsed: true,
+ mark: null
+ }
+ }else{
+ rg = sel.createRange();
+ return {
+ isCollapsed: rg.text && rg.text.length?false:true,
+ mark: {
+ range: rg,
+ pRange: true
+ }
+ };
+ }
+ }
+ bm = {};
+
+ //'IE' way for selections.
+ try{
+ // createRange() throws exception when dojo in iframe
+ //and nothing selected, see #9632
+ rg = sel.createRange();
+ bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
+ }catch(e){
+ bm.isCollapsed = true;
+ return bm;
+ }
+ if(sel.type.toUpperCase() == 'CONTROL'){
+ if(rg.length){
+ bm.mark=[];
+ var i=0,len=rg.length;
+ while(i<len){
+ bm.mark.push(rg.item(i++));
+ }
+ }else{
+ bm.isCollapsed = true;
+ bm.mark = null;
+ }
+ }else{
+ bm.mark = rg.getBookmark();
+ }
+ }else{
+ console.warn("No idea how to store the current selection for this browser!");
+ }
+ return bm; // Object
+ },
+
+ moveToBookmark: function(/*Object*/bookmark){
+ // summary:
+ // Moves current selection to a bookmark
+ // bookmark:
+ // This should be a returned object from dijit.getBookmark()
+
+ var _doc = dojo.doc,
+ mark = bookmark.mark;
+ if(mark){
+ if(dojo.global.getSelection){
+ //W3C Rangi API (FF, WebKit, Opera, etc)
+ var sel = dojo.global.getSelection();
+ if(sel && sel.removeAllRanges){
+ if(mark.pRange){
+ var r = mark;
+ var n = r.node;
+ n.selectionStart = r.start;
+ n.selectionEnd = r.end;
+ }else{
+ sel.removeAllRanges();
+ sel.addRange(mark);
+ }
+ }else{
+ console.warn("No idea how to restore selection for this browser!");
+ }
+ }else if(_doc.selection && mark){
+ //'IE' way.
+ var rg;
+ if(mark.pRange){
+ rg = mark.range;
+ }else if(dojo.isArray(mark)){
+ rg = _doc.body.createControlRange();
+ //rg.addElement does not have call/apply method, so can not call it directly
+ //rg is not available in "range.addElement(item)", so can't use that either
+ dojo.forEach(mark, function(n){
+ rg.addElement(n);
+ });
+ }else{
+ rg = _doc.body.createTextRange();
+ rg.moveToBookmark(mark);
+ }
+ rg.select();
+ }
+ }
+ },
+
+ getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
+ // summary:
+ // Called as getFocus(), this returns an Object showing the current focus
+ // and selected text.
+ //
+ // Called as getFocus(widget), where widget is a (widget representing) a button
+ // that was just pressed, it returns where focus was before that button
+ // was pressed. (Pressing the button may have either shifted focus to the button,
+ // or removed focus altogether.) In this case the selected text is not returned,
+ // since it can't be accurately determined.
+ //
+ // menu: dijit._Widget or {domNode: DomNode} structure
+ // The button that was just pressed. If focus has disappeared or moved
+ // to this button, returns the previous focus. In this case the bookmark
+ // information is already lost, and null is returned.
+ //
+ // openedForWindow:
+ // iframe in which menu was opened
+ //
+ // returns:
+ // A handle to restore focus/selection, to be passed to `dijit.focus`
+ var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
+ return {
+ node: node,
+ bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
+ openedForWindow: openedForWindow
+ }; // Object
+ },
+
+ focus: function(/*Object || DomNode */ handle){
+ // summary:
+ // Sets the focused node and the selection according to argument.
+ // To set focus to an iframe's content, pass in the iframe itself.
+ // handle:
+ // object returned by get(), or a DomNode
+
+ if(!handle){ return; }
+
+ var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object
+ bookmark = handle.bookmark,
+ openedForWindow = handle.openedForWindow,
+ collapsed = bookmark ? bookmark.isCollapsed : false;
+
+ // Set the focus
+ // Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
+ // but we need to set focus to iframe.contentWindow
+ if(node){
+ var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
+ if(focusNode && focusNode.focus){
+ try{
+ // Gecko throws sometimes if setting focus is impossible,
+ // node not displayed or something like that
+ focusNode.focus();
+ }catch(e){/*quiet*/}
+ }
+ dijit._onFocusNode(node);
+ }
+
+ // set the selection
+ // do not need to restore if current selection is not empty
+ // (use keyboard to select a menu item) or if previous selection was collapsed
+ // as it may cause focus shift (Esp in IE).
+ if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
+ if(openedForWindow){
+ openedForWindow.focus();
+ }
+ try{
+ dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
+ }catch(e2){
+ /*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
+ }
+ }
+ },
+
+ // _activeStack: dijit._Widget[]
+ // List of currently active widgets (focused widget and it's ancestors)
+ _activeStack: [],
+
+ registerIframe: function(/*DomNode*/ iframe){
+ // summary:
+ // Registers listeners on the specified iframe so that any click
+ // or focus event on that iframe (or anything in it) is reported
+ // as a focus/click event on the <iframe> itself.
+ // description:
+ // Currently only used by editor.
+ // returns:
+ // Handle to pass to unregisterIframe()
+ return dijit.registerWin(iframe.contentWindow, iframe);
+ },
+
+ unregisterIframe: function(/*Object*/ handle){
+ // summary:
+ // Unregisters listeners on the specified iframe created by registerIframe.
+ // After calling be sure to delete or null out the handle itself.
+ // handle:
+ // Handle returned by registerIframe()
+
+ dijit.unregisterWin(handle);
+ },
+
+ registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
+ // summary:
+ // Registers listeners on the specified window (either the main
+ // window or an iframe's window) to detect when the user has clicked somewhere
+ // or focused somewhere.
+ // description:
+ // Users should call registerIframe() instead of this method.
+ // targetWindow:
+ // If specified this is the window associated with the iframe,
+ // i.e. iframe.contentWindow.
+ // effectiveNode:
+ // If specified, report any focus events inside targetWindow as
+ // an event on effectiveNode, rather than on evt.target.
+ // returns:
+ // Handle to pass to unregisterWin()
+
+ // TODO: make this function private in 2.0; Editor/users should call registerIframe(),
+
+ var mousedownListener = function(evt){
+ dijit._justMouseDowned = true;
+ setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
+ dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
+ };
+ //dojo.connect(targetWindow, "onscroll", ???);
+
+ // Listen for blur and focus events on targetWindow's document.
+ // IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
+ // through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
+ // fire.
+ // Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
+ // (at least for FF) the focus event doesn't fire on <html> or <body>.
+ var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
+ if(doc){
+ if(dojo.isIE){
+ doc.attachEvent('onmousedown', mousedownListener);
+ var activateListener = function(evt){
+ // IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
+ // Should consider those more like a mouse-click than a focus....
+ if(evt.srcElement.tagName.toLowerCase() != "#document" &&
+ dijit.isTabNavigable(evt.srcElement)){
+ dijit._onFocusNode(effectiveNode || evt.srcElement);
+ }else{
+ dijit._onTouchNode(effectiveNode || evt.srcElement);
+ }
+ };
+ doc.attachEvent('onactivate', activateListener);
+ var deactivateListener = function(evt){
+ dijit._onBlurNode(effectiveNode || evt.srcElement);
+ };
+ doc.attachEvent('ondeactivate', deactivateListener);
+
+ return function(){
+ doc.detachEvent('onmousedown', mousedownListener);
+ doc.detachEvent('onactivate', activateListener);
+ doc.detachEvent('ondeactivate', deactivateListener);
+ doc = null; // prevent memory leak (apparent circular reference via closure)
+ };
+ }else{
+ doc.addEventListener('mousedown', mousedownListener, true);
+ var focusListener = function(evt){
+ dijit._onFocusNode(effectiveNode || evt.target);
+ };
+ doc.addEventListener('focus', focusListener, true);
+ var blurListener = function(evt){
+ dijit._onBlurNode(effectiveNode || evt.target);
+ };
+ doc.addEventListener('blur', blurListener, true);
+
+ return function(){
+ doc.removeEventListener('mousedown', mousedownListener, true);
+ doc.removeEventListener('focus', focusListener, true);
+ doc.removeEventListener('blur', blurListener, true);
+ doc = null; // prevent memory leak (apparent circular reference via closure)
+ };
+ }
+ }
+ },
+
+ unregisterWin: function(/*Handle*/ handle){
+ // summary:
+ // Unregisters listeners on the specified window (either the main
+ // window or an iframe's window) according to handle returned from registerWin().
+ // After calling be sure to delete or null out the handle itself.
+
+ // Currently our handle is actually a function
+ handle && handle();
+ },
+
+ _onBlurNode: function(/*DomNode*/ node){
+ // summary:
+ // Called when focus leaves a node.
+ // Usually ignored, _unless_ it *isn't* follwed by touching another node,
+ // which indicates that we tabbed off the last field on the page,
+ // in which case every widget is marked inactive
+ dijit._prevFocus = dijit._curFocus;
+ dijit._curFocus = null;
+
+ if(dijit._justMouseDowned){
+ // the mouse down caused a new widget to be marked as active; this blur event
+ // is coming late, so ignore it.
+ return;
+ }
+
+ // if the blur event isn't followed by a focus event then mark all widgets as inactive.
+ if(dijit._clearActiveWidgetsTimer){
+ clearTimeout(dijit._clearActiveWidgetsTimer);
+ }
+ dijit._clearActiveWidgetsTimer = setTimeout(function(){
+ delete dijit._clearActiveWidgetsTimer;
+ dijit._setStack([]);
+ dijit._prevFocus = null;
+ }, 100);
+ },
+
+ _onTouchNode: function(/*DomNode*/ node, /*String*/ by){
+ // summary:
+ // Callback when node is focused or mouse-downed
+ // node:
+ // The node that was touched.
+ // by:
+ // "mouse" if the focus/touch was caused by a mouse down event
+
+ // ignore the recent blurNode event
+ if(dijit._clearActiveWidgetsTimer){
+ clearTimeout(dijit._clearActiveWidgetsTimer);
+ delete dijit._clearActiveWidgetsTimer;
+ }
+
+ // compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
+ var newStack=[];
+ try{
+ while(node){
+ var popupParent = dojo.attr(node, "dijitPopupParent");
+ if(popupParent){
+ node=dijit.byId(popupParent).domNode;
+ }else if(node.tagName && node.tagName.toLowerCase() == "body"){
+ // is this the root of the document or just the root of an iframe?
+ if(node === dojo.body()){
+ // node is the root of the main document
+ break;
+ }
+ // otherwise, find the iframe this node refers to (can't access it via parentNode,
+ // need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
+ node=dijit.getDocumentWindow(node.ownerDocument).frameElement;
+ }else{
+ var id = node.getAttribute && node.getAttribute("widgetId");
+ if(id){
+ newStack.unshift(id);
+ }
+ node=node.parentNode;
+ }
+ }
+ }catch(e){ /* squelch */ }
+
+ dijit._setStack(newStack, by);
+ },
+
+ _onFocusNode: function(/*DomNode*/ node){
+ // summary:
+ // Callback when node is focused
+
+ if(!node){
+ return;
+ }
+
+ if(node.nodeType == 9){
+ // Ignore focus events on the document itself. This is here so that
+ // (for example) clicking the up/down arrows of a spinner
+ // (which don't get focus) won't cause that widget to blur. (FF issue)
+ return;
+ }
+
+ dijit._onTouchNode(node);
+
+ if(node == dijit._curFocus){ return; }
+ if(dijit._curFocus){
+ dijit._prevFocus = dijit._curFocus;
+ }
+ dijit._curFocus = node;
+ dojo.publish("focusNode", [node]);
+ },
+
+ _setStack: function(/*String[]*/ newStack, /*String*/ by){
+ // summary:
+ // The stack of active widgets has changed. Send out appropriate events and records new stack.
+ // newStack:
+ // array of widget id's, starting from the top (outermost) widget
+ // by:
+ // "mouse" if the focus/touch was caused by a mouse down event
+
+ var oldStack = dijit._activeStack;
+ dijit._activeStack = newStack;
+
+ // compare old stack to new stack to see how many elements they have in common
+ for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
+ if(oldStack[nCommon] != newStack[nCommon]){
+ break;
+ }
+ }
+
+ var widget;
+ // for all elements that have gone out of focus, send blur event
+ for(var i=oldStack.length-1; i>=nCommon; i--){
+ widget = dijit.byId(oldStack[i]);
+ if(widget){
+ widget._focused = false;
+ widget._hasBeenBlurred = true;
+ if(widget._onBlur){
+ widget._onBlur(by);
+ }
+ if(widget._setStateClass){
+ widget._setStateClass();
+ }
+ dojo.publish("widgetBlur", [widget, by]);
+ }
+ }
+
+ // for all element that have come into focus, send focus event
+ for(i=nCommon; i<newStack.length; i++){
+ widget = dijit.byId(newStack[i]);
+ if(widget){
+ widget._focused = true;
+ if(widget._onFocus){
+ widget._onFocus(by);
+ }
+ if(widget._setStateClass){
+ widget._setStateClass();
+ }
+ dojo.publish("widgetFocus", [widget, by]);
+ }
+ }
+ }
+});
+
+// register top window and all the iframes it contains
+dojo.addOnLoad(function(){
+ var handle = dijit.registerWin(window);
+ if(dojo.isIE){
+ dojo.addOnWindowUnload(function(){
+ dijit.unregisterWin(handle);
+ handle = null;
+ })
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.AdapterRegistry"] = true;
+dojo.provide("dojo.AdapterRegistry");
+
+dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
+ // summary:
+ // A registry to make contextual calling/searching easier.
+ // description:
+ // Objects of this class keep list of arrays in the form [name, check,
+ // wrap, directReturn] that are used to determine what the contextual
+ // result of a set of checked arguments is. All check/wrap functions
+ // in this registry should be of the same arity.
+ // example:
+ // | // create a new registry
+ // | var reg = new dojo.AdapterRegistry();
+ // | reg.register("handleString",
+ // | dojo.isString,
+ // | function(str){
+ // | // do something with the string here
+ // | }
+ // | );
+ // | reg.register("handleArr",
+ // | dojo.isArray,
+ // | function(arr){
+ // | // do something with the array here
+ // | }
+ // | );
+ // |
+ // | // now we can pass reg.match() *either* an array or a string and
+ // | // the value we pass will get handled by the right function
+ // | reg.match("someValue"); // will call the first function
+ // | reg.match(["someValue"]); // will call the second
+
+ this.pairs = [];
+ this.returnWrappers = returnWrappers || false; // Boolean
+}
+
+dojo.extend(dojo.AdapterRegistry, {
+ register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
+ // summary:
+ // register a check function to determine if the wrap function or
+ // object gets selected
+ // name:
+ // a way to identify this matcher.
+ // check:
+ // a function that arguments are passed to from the adapter's
+ // match() function. The check function should return true if the
+ // given arguments are appropriate for the wrap function.
+ // directReturn:
+ // If directReturn is true, the value passed in for wrap will be
+ // returned instead of being called. Alternately, the
+ // AdapterRegistry can be set globally to "return not call" using
+ // the returnWrappers property. Either way, this behavior allows
+ // the registry to act as a "search" function instead of a
+ // function interception library.
+ // override:
+ // If override is given and true, the check function will be given
+ // highest priority. Otherwise, it will be the lowest priority
+ // adapter.
+ this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
+ },
+
+ match: function(/* ... */){
+ // summary:
+ // Find an adapter for the given arguments. If no suitable adapter
+ // is found, throws an exception. match() accepts any number of
+ // arguments, all of which are passed to all matching functions
+ // from the registered pairs.
+ for(var i = 0; i < this.pairs.length; i++){
+ var pair = this.pairs[i];
+ if(pair[1].apply(this, arguments)){
+ if((pair[3])||(this.returnWrappers)){
+ return pair[2];
+ }else{
+ return pair[2].apply(this, arguments);
+ }
+ }
+ }
+ throw new Error("No match found");
+ },
+
+ unregister: function(name){
+ // summary: Remove a named adapter from the registry
+
+ // FIXME: this is kind of a dumb way to handle this. On a large
+ // registry this will be slow-ish and we can use the name as a lookup
+ // should we choose to trade memory for speed.
+ for(var i = 0; i < this.pairs.length; i++){
+ var pair = this.pairs[i];
+ if(pair[0] == name){
+ this.pairs.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.place"] = true;
+dojo.provide("dijit._base.place");
+
+
+
+// ported from dojo.html.util
+
+dijit.getViewport = function(){
+ // summary:
+ // Returns the dimensions and scroll position of the viewable area of a browser window
+
+ var scrollRoot = (dojo.doc.compatMode == 'BackCompat')? dojo.body() : dojo.doc.documentElement;
+
+ // get scroll position
+ var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
+ return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
+};
+
+/*=====
+dijit.__Position = function(){
+ // x: Integer
+ // horizontal coordinate in pixels, relative to document body
+ // y: Integer
+ // vertical coordinate in pixels, relative to document body
+
+ thix.x = x;
+ this.y = y;
+}
+=====*/
+
+
+dijit.placeOnScreen = function(
+ /* DomNode */ node,
+ /* dijit.__Position */ pos,
+ /* String[] */ corners,
+ /* dijit.__Position? */ padding){
+ // summary:
+ // Positions one of the node's corners at specified position
+ // such that node is fully visible in viewport.
+ // description:
+ // NOTE: node is assumed to be absolutely or relatively positioned.
+ // pos:
+ // Object like {x: 10, y: 20}
+ // corners:
+ // Array of Strings representing order to try corners in, like ["TR", "BL"].
+ // Possible values are:
+ // * "BL" - bottom left
+ // * "BR" - bottom right
+ // * "TL" - top left
+ // * "TR" - top right
+ // padding:
+ // set padding to put some buffer around the element you want to position.
+ // example:
+ // Try to place node's top right corner at (10,20).
+ // If that makes node go (partially) off screen, then try placing
+ // bottom left corner at (10,20).
+ // | placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
+
+ var choices = dojo.map(corners, function(corner){
+ var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
+ if(padding){
+ c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
+ c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
+ }
+ return c;
+ });
+
+ return dijit._place(node, choices);
+}
+
+dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+ // summary:
+ // Given a list of spots to put node, put it at the first spot where it fits,
+ // of if it doesn't fit anywhere then the place with the least overflow
+ // choices: Array
+ // Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
+ // Above example says to put the top-left corner of the node at (10,20)
+ // layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+ // for things like tooltip, they are displayed differently (and have different dimensions)
+ // based on their orientation relative to the parent. This adjusts the popup based on orientation.
+
+ // get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+ // viewport over document
+ var view = dijit.getViewport();
+
+ // This won't work if the node is inside a <div style="position: relative">,
+ // so reattach it to dojo.doc.body. (Otherwise, the positioning will be wrong
+ // and also it might get cutoff)
+ if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
+ dojo.body().appendChild(node);
+ }
+
+ var best = null;
+ dojo.some(choices, function(choice){
+ var corner = choice.corner;
+ var pos = choice.pos;
+
+ // configure node to be displayed in given position relative to button
+ // (need to do this in order to get an accurate size for the node, because
+ // a tooltips size changes based on position, due to triangle)
+ if(layoutNode){
+ layoutNode(node, choice.aroundCorner, corner);
+ }
+
+ // get node's size
+ var style = node.style;
+ var oldDisplay = style.display;
+ var oldVis = style.visibility;
+ style.visibility = "hidden";
+ style.display = "";
+ var mb = dojo.marginBox(node);
+ style.display = oldDisplay;
+ style.visibility = oldVis;
+
+ // coordinates and size of node with specified corner placed at pos,
+ // and clipped by viewport
+ var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
+ startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
+ endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
+ endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
+ width = endX - startX,
+ height = endY - startY,
+ overflow = (mb.w - width) + (mb.h - height);
+
+ if(best == null || overflow < best.overflow){
+ best = {
+ corner: corner,
+ aroundCorner: choice.aroundCorner,
+ x: startX,
+ y: startY,
+ w: width,
+ h: height,
+ overflow: overflow
+ };
+ }
+ return !overflow;
+ });
+
+ node.style.left = best.x + "px";
+ node.style.top = best.y + "px";
+ if(best.overflow && layoutNode){
+ layoutNode(node, best.aroundCorner, best.corner);
+ }
+ return best;
+}
+
+dijit.placeOnScreenAroundNode = function(
+ /* DomNode */ node,
+ /* DomNode */ aroundNode,
+ /* Object */ aroundCorners,
+ /* Function? */ layoutNode){
+
+ // summary:
+ // Position node adjacent or kitty-corner to aroundNode
+ // such that it's fully visible in viewport.
+ //
+ // description:
+ // Place node such that corner of node touches a corner of
+ // aroundNode, and that node is fully visible.
+ //
+ // aroundCorners:
+ // Ordered list of pairs of corners to try matching up.
+ // Each pair of corners is represented as a key/value in the hash,
+ // where the key corresponds to the aroundNode's corner, and
+ // the value corresponds to the node's corner:
+ //
+ // | { aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
+ //
+ // The following strings are used to represent the four corners:
+ // * "BL" - bottom left
+ // * "BR" - bottom right
+ // * "TL" - top left
+ // * "TR" - top right
+ //
+ // layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+ // For things like tooltip, they are displayed differently (and have different dimensions)
+ // based on their orientation relative to the parent. This adjusts the popup based on orientation.
+ //
+ // example:
+ // | dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
+ // This will try to position node such that node's top-left corner is at the same position
+ // as the bottom left corner of the aroundNode (ie, put node below
+ // aroundNode, with left edges aligned). If that fails it will try to put
+ // the bottom-right corner of node where the top right corner of aroundNode is
+ // (ie, put node above aroundNode, with right edges aligned)
+ //
+
+ // get coordinates of aroundNode
+ aroundNode = dojo.byId(aroundNode);
+ var oldDisplay = aroundNode.style.display;
+ aroundNode.style.display="";
+ // #3172: use the slightly tighter border box instead of marginBox
+ var aroundNodePos = dojo.position(aroundNode, true);
+ aroundNode.style.display=oldDisplay;
+
+ // place the node around the calculated rectangle
+ return dijit._placeOnScreenAroundRect(node,
+ aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h, // rectangle
+ aroundCorners, layoutNode);
+};
+
+/*=====
+dijit.__Rectangle = function(){
+ // x: Integer
+ // horizontal offset in pixels, relative to document body
+ // y: Integer
+ // vertical offset in pixels, relative to document body
+ // width: Integer
+ // width in pixels
+ // height: Integer
+ // height in pixels
+
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+}
+=====*/
+
+
+dijit.placeOnScreenAroundRectangle = function(
+ /* DomNode */ node,
+ /* dijit.__Rectangle */ aroundRect,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except that the "around"
+ // parameter is an arbitrary rectangle on the screen (x, y, width, height)
+ // instead of a dom node.
+
+ return dijit._placeOnScreenAroundRect(node,
+ aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height, // rectangle
+ aroundCorners, layoutNode);
+};
+
+dijit._placeOnScreenAroundRect = function(
+ /* DomNode */ node,
+ /* Number */ x,
+ /* Number */ y,
+ /* Number */ width,
+ /* Number */ height,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
+ // of a rectangle to place node adjacent to.
+
+ // TODO: combine with placeOnScreenAroundRectangle()
+
+ // Generate list of possible positions for node
+ var choices = [];
+ for(var nodeCorner in aroundCorners){
+ choices.push( {
+ aroundCorner: nodeCorner,
+ corner: aroundCorners[nodeCorner],
+ pos: {
+ x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+ y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
+ }
+ });
+ }
+
+ return dijit._place(node, choices, layoutNode);
+};
+
+dijit.placementRegistry= new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",
+ function(n, x){
+ return typeof x == "object" &&
+ typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
+ },
+ dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",
+ function(n, x){
+ return typeof x == "object" &&
+ "x" in x && "y" in x && "width" in x && "height" in x;
+ },
+ dijit.placeOnScreenAroundRectangle);
+
+dijit.placeOnScreenAroundElement = function(
+ /* DomNode */ node,
+ /* Object */ aroundElement,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
+ // for the "around" argument and finds a proper processor to place a node.
+
+ return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
+};
+
+dijit.getPopupAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+ // summary:
+ // Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+ //
+ // position: String[]
+ // This variable controls the position of the drop down.
+ // It's an array of strings with the following values:
+ //
+ // * before: places drop down to the left of the target node/widget, or to the right in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * after: places drop down to the right of the target node/widget, or to the left in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * above: drop down goes above target node
+ // * below: drop down goes below target node
+ //
+ // The list is positions is tried, in order, until a position is found where the drop down fits
+ // within the viewport.
+ //
+ // leftToRight: Boolean
+ // Whether the popup will be displaying in leftToRight mode.
+ //
+ var align = {};
+ dojo.forEach(position, function(pos){
+ switch(pos){
+ case "after":
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+ break;
+ case "before":
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+ break;
+ case "below":
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+ break;
+ case "above":
+ default:
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+ align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+ break;
+ }
+ });
+ return align;
+};
+dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+ // summary:
+ // Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+ //
+ // position: String[]
+ // This variable controls the position of the drop down.
+ // It's an array of strings with the following values:
+ //
+ // * before: places drop down to the left of the target node/widget, or to the right in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * after: places drop down to the right of the target node/widget, or to the left in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * above: drop down goes above target node
+ // * below: drop down goes below target node
+ //
+ // The list is positions is tried, in order, until a position is found where the drop down fits
+ // within the viewport.
+ //
+ // leftToRight: Boolean
+ // Whether the popup will be displaying in leftToRight mode.
+ //
+ var align = {};
+ dojo.forEach(position, function(pos){
+ switch(pos){
+ case "after":
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+ break;
+ case "before":
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+ break;
+ case "below":
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+ break;
+ case "above":
+ default:
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+ align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+ break;
+ }
+ });
+ return align;
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.window"] = true;
+dojo.provide("dijit._base.window");
+
+// TODO: remove this in 2.0, it's not used anymore, or at least not internally
+
+dijit.getDocumentWindow = function(doc){
+ // summary:
+ // Get window object associated with document doc
+
+ // In some IE versions (at least 6.0), document.parentWindow does not return a
+ // reference to the real window object (maybe a copy), so we must fix it as well
+ // We use IE specific execScript to attach the real window reference to
+ // document._parentWindow for later use
+ if(dojo.isIE && window !== document.parentWindow && !doc._parentWindow){
+ /*
+ In IE 6, only the variable "window" can be used to connect events (others
+ may be only copies).
+ */
+ doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
+ //to prevent memory leak, unset it after use
+ //another possibility is to add an onUnload handler which seems overkill to me (liucougar)
+ var win = doc._parentWindow;
+ doc._parentWindow = null;
+ return win; // Window
+ }
+
+ return doc._parentWindow || doc.parentWindow || doc.defaultView; // Window
+}
+
+}
+
+if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.popup"] = true;
+dojo.provide("dijit._base.popup");
+
+
+
+
+
+dijit.popup = new function(){
+ // summary:
+ // This class is used to show/hide widgets as popups.
+
+ var stack = [],
+ beginZIndex=1000,
+ idGen = 1;
+
+ this.moveOffScreen = function(/*DomNode*/ node){
+ // summary:
+ // Moves node offscreen without hiding it (so that all layout widgets included
+ // in this node can still layout properly)
+ //
+ // description:
+ // Attaches node to dojo.doc.body, and
+ // positions it off screen, but not display:none, so that
+ // the widget doesn't appear in the page flow and/or cause a blank
+ // area at the bottom of the viewport (making scrollbar longer), but
+ // initialization of contained widgets works correctly
+
+ var s = node.style;
+ s.visibility = "hidden"; // so TAB key doesn't navigate to hidden popup
+ s.position = "absolute";
+ s.top = "-9999px";
+ if(s.display == "none"){
+ s.display="";
+ }
+ dojo.body().appendChild(node);
+ };
+
+/*=====
+dijit.popup.__OpenArgs = function(){
+ // popup: Widget
+ // widget to display
+ // parent: Widget
+ // the button etc. that is displaying this popup
+ // around: DomNode
+ // DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.)
+ // x: Integer
+ // Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.)
+ // y: Integer
+ // Absolute vertical position (in pixels) to place node at. (Specity this *or* "around" parameter.)
+ // orient: Object || String
+ // When the around parameter is specified, orient should be an
+ // ordered list of tuples of the form (around-node-corner, popup-node-corner).
+ // dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
+ // until the popup appears fully within the viewport.
+ //
+ // The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
+ // 1. (BL, TL)
+ // 2. (TL, BL)
+ // where BL means "bottom left" and "TL" means "top left".
+ // So by default, it first tries putting the popup below the around node, left-aligning them,
+ // and then tries to put it above the around node, still left-aligning them. Note that the
+ // default is horizontally reversed when in RTL mode.
+ //
+ // When an (x,y) position is specified rather than an around node, orient is either
+ // "R" or "L". R (for right) means that it tries to put the popup to the right of the mouse,
+ // specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
+ // fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
+ // and the top-right corner.
+ // onCancel: Function
+ // callback when user has canceled the popup by
+ // 1. hitting ESC or
+ // 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
+ // i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
+ // onClose: Function
+ // callback whenever this popup is closed
+ // onExecute: Function
+ // callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
+ // padding: dijit.__Position
+ // adding a buffer around the opening position. This is only useful when around is not set.
+ this.popup = popup;
+ this.parent = parent;
+ this.around = around;
+ this.x = x;
+ this.y = y;
+ this.orient = orient;
+ this.onCancel = onCancel;
+ this.onClose = onClose;
+ this.onExecute = onExecute;
+ this.padding = padding;
+}
+=====*/
+
+ // Compute the closest ancestor popup that's *not* a child of another popup.
+ // Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
+ var getTopPopup = function(){
+ for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
+ /* do nothing, just trying to get right value for pi */
+ }
+ return stack[pi];
+ };
+
+ var wrappers=[];
+ this.open = function(/*dijit.popup.__OpenArgs*/ args){
+ // summary:
+ // Popup the widget at the specified position
+ //
+ // example:
+ // opening at the mouse position
+ // | dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
+ //
+ // example:
+ // opening the widget as a dropdown
+ // | dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
+ //
+ // Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
+ // (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
+
+ var widget = args.popup,
+ orient = args.orient || (
+ dojo._isBodyLtr() ?
+ {'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
+ {'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
+ ),
+ around = args.around,
+ id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++);
+
+ // make wrapper div to hold widget and possibly hold iframe behind it.
+ // we can't attach the iframe as a child of the widget.domNode because
+ // widget.domNode might be a <table>, <ul>, etc.
+
+ var wrapperobj = wrappers.pop(), wrapper, iframe;
+ if(!wrapperobj){
+ wrapper = dojo.create("div",{
+ "class":"dijitPopup"
+ }, dojo.body());
+ dijit.setWaiRole(wrapper, "presentation");
+ }else{
+ // recycled a old wrapper, so that we don't need to reattach the iframe
+ // which is slow even if the iframe is empty, see #10167
+ wrapper = wrapperobj[0];
+ iframe = wrapperobj[1];
+ }
+
+ dojo.attr(wrapper,{
+ id: id,
+ style:{
+ zIndex: beginZIndex + stack.length,
+ visibility:"hidden",
+ // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+ top: "-9999px"
+ },
+ dijitPopupParent: args.parent ? args.parent.id : ""
+ });
+
+ var s = widget.domNode.style;
+ s.display = "";
+ s.visibility = "";
+ s.position = "";
+ s.top = "0px";
+ wrapper.appendChild(widget.domNode);
+
+ if(!iframe){
+ iframe = new dijit.BackgroundIframe(wrapper);
+ }else{
+ iframe.resize(wrapper)
+ }
+
+ // position the wrapper node
+ var best = around ?
+ dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
+ dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
+
+ wrapper.style.visibility = "visible";
+ // TODO: use effects to fade in wrapper
+
+ var handlers = [];
+
+ // provide default escape and tab key handling
+ // (this will work for any widget, not just menu)
+ handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
+ if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
+ dojo.stopEvent(evt);
+ args.onCancel();
+ }else if(evt.charOrCode === dojo.keys.TAB){
+ dojo.stopEvent(evt);
+ var topPopup = getTopPopup();
+ if(topPopup && topPopup.onCancel){
+ topPopup.onCancel();
+ }
+ }
+ }));
+
+ // watch for cancel/execute events on the popup and notify the caller
+ // (for a menu, "execute" means clicking an item)
+ if(widget.onCancel){
+ handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
+ }
+
+ handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", function(){
+ var topPopup = getTopPopup();
+ if(topPopup && topPopup.onExecute){
+ topPopup.onExecute();
+ }
+ }));
+
+ stack.push({
+ wrapper: wrapper,
+ iframe: iframe,
+ widget: widget,
+ parent: args.parent,
+ onExecute: args.onExecute,
+ onCancel: args.onCancel,
+ onClose: args.onClose,
+ handlers: handlers
+ });
+
+ if(widget.onOpen){
+ // TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
+ widget.onOpen(best);
+ }
+
+ return best;
+ };
+
+ this.close = function(/*dijit._Widget*/ popup){
+ // summary:
+ // Close specified popup and any popups that it parented
+
+ // Basically work backwards from the top of the stack closing popups
+ // until we hit the specified popup, but IIRC there was some issue where closing
+ // a popup would cause others to close too. Thus if we are trying to close B in [A,B,C]
+ // closing C might close B indirectly and then the while() condition will run where stack==[A]...
+ // so the while condition is constructed defensively.
+ while(dojo.some(stack, function(elem){return elem.widget == popup;})){
+ var top = stack.pop(),
+ wrapper = top.wrapper,
+ iframe = top.iframe,
+ widget = top.widget,
+ onClose = top.onClose;
+
+ if(widget.onClose){
+ // TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
+ widget.onClose();
+ }
+ dojo.forEach(top.handlers, dojo.disconnect);
+
+ // Move the widget offscreen, unless it has already been destroyed in above onClose() etc.
+ if(widget && widget.domNode){
+ this.moveOffScreen(widget.domNode);
+ }
+
+ // recycle the wrapper plus iframe, so we prevent reattaching iframe everytime an popup opens
+ // don't use moveOffScreen which would also reattach the wrapper to body, which causes reloading of iframe
+ wrapper.style.top = "-9999px";
+ wrapper.style.visibility = "hidden";
+ wrappers.push([wrapper,iframe]);
+
+ if(onClose){
+ onClose();
+ }
+ }
+ };
+}();
+
+dijit._frames = new function(){
+ // summary:
+ // cache of iframes
+ var queue = [];
+
+ this.pop = function(){
+ var iframe;
+ if(queue.length){
+ iframe = queue.pop();
+ iframe.style.display="";
+ }else{
+ if(dojo.isIE){
+ var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
+ var html="<iframe src='" + burl + "'"
+ + " style='position: absolute; left: 0px; top: 0px;"
+ + "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+ iframe = dojo.doc.createElement(html);
+ }else{
+ iframe = dojo.create("iframe");
+ iframe.src = 'javascript:""';
+ iframe.className = "dijitBackgroundIframe";
+ dojo.style(iframe, "opacity", 0.1);
+ }
+ iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
+ }
+ return iframe;
+ };
+
+ this.push = function(iframe){
+ iframe.style.display="none";
+ queue.push(iframe);
+ }
+}();
+
+
+dijit.BackgroundIframe = function(/* DomNode */node){
+ // summary:
+ // For IE/FF z-index schenanigans. id attribute is required.
+ //
+ // description:
+ // new dijit.BackgroundIframe(node)
+ // Makes a background iframe as a child of node, that fills
+ // area (and position) of node
+
+ if(!node.id){ throw new Error("no id"); }
+ if(dojo.isIE || dojo.isMoz){
+ var iframe = dijit._frames.pop();
+ node.appendChild(iframe);
+ if(dojo.isIE<7){
+ this.resize(node);
+ this._conn = dojo.connect(node, 'onresize', this, function(){
+ this.resize(node);
+ });
+ }else{
+ dojo.style(iframe, {
+ width: '100%',
+ height: '100%'
+ });
+ }
+ this.iframe = iframe;
+ }
+};
+
+dojo.extend(dijit.BackgroundIframe, {
+ resize: function(node){
+ // summary:
+ // resize the iframe so its the same size as node
+ // description:
+ // this function is a no-op in all browsers except
+ // IE6, which does not support 100% width/height
+ // of absolute positioned iframes
+ if(this.iframe && dojo.isIE<7){
+ dojo.style(this.iframe, {
+ width: node.offsetWidth + 'px',
+ height: node.offsetHeight + 'px'
+ });
+ }
+ },
+ destroy: function(){
+ // summary:
+ // destroy the iframe
+ if(this._conn){
+ dojo.disconnect(this._conn);
+ this._conn = null;
+ }
+ if(this.iframe){
+ dijit._frames.push(this.iframe);
+ delete this.iframe;
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.scroll"] = true;
+dojo.provide("dijit._base.scroll");
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+ // summary:
+ // Scroll the passed node into view, if it is not already.
+
+ // don't rely on that node.scrollIntoView works just because the function is there
+
+ try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
+ node = dojo.byId(node);
+ var doc = node.ownerDocument || dojo.doc,
+ body = doc.body || dojo.body(),
+ html = doc.documentElement || body.parentNode,
+ isIE = dojo.isIE, isWK = dojo.isWebKit;
+ // if an untested browser, then use the native method
+ if((!(dojo.isMoz || isIE || isWK) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
+ node.scrollIntoView(false); // short-circuit to native if possible
+ return;
+ }
+ var backCompat = doc.compatMode == 'BackCompat',
+ clientAreaRoot = backCompat? body : html,
+ scrollRoot = isWK ? body : clientAreaRoot,
+ rootWidth = clientAreaRoot.clientWidth,
+ rootHeight = clientAreaRoot.clientHeight,
+ rtl = !dojo._isBodyLtr(),
+ nodePos = pos || dojo.position(node),
+ el = node.parentNode,
+ isFixed = function(el){
+ return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
+ };
+ if(isFixed(node)){ return; } // nothing to do
+ while(el){
+ if(el == body){ el = scrollRoot; }
+ var elPos = dojo.position(el),
+ fixedPos = isFixed(el);
+ with(elPos){
+ if(el == scrollRoot){
+ w = rootWidth, h = rootHeight;
+ if(scrollRoot == html && isIE && rtl){ x += scrollRoot.offsetWidth-w; } // IE workaround where scrollbar causes negative x
+ if(x < 0 || !isIE){ x = 0; } // IE can have values > 0
+ if(y < 0 || !isIE){ y = 0; }
+ }else{
+ var pb = dojo._getPadBorderExtents(el);
+ w -= pb.w; h -= pb.h; x += pb.l; y += pb.t;
+ }
+ with(el){
+ if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
+ var clientSize = clientWidth,
+ scrollBarSize = w - clientSize;
+ if(clientSize > 0 && scrollBarSize > 0){
+ w = clientSize;
+ if(isIE && rtl){ x += scrollBarSize; }
+ }
+ clientSize = clientHeight;
+ scrollBarSize = h - clientSize;
+ if(clientSize > 0 && scrollBarSize > 0){
+ h = clientSize;
+ }
+ }
+ if(fixedPos){ // bounded by viewport, not parents
+ if(y < 0){
+ h += y, y = 0;
+ }
+ if(x < 0){
+ w += x, x = 0;
+ }
+ if(y + h > rootHeight){
+ h = rootHeight - y;
+ }
+ if(x + w > rootWidth){
+ w = rootWidth - x;
+ }
+ }
+ // calculate overflow in all 4 directions
+ var l = nodePos.x - x, // beyond left: < 0
+ t = nodePos.y - Math.max(y, 0), // beyond top: < 0
+ r = l + nodePos.w - w, // beyond right: > 0
+ bot = t + nodePos.h - h; // beyond bottom: > 0
+ if(r * l > 0){
+ var s = Math[l < 0? "max" : "min"](l, r);
+ nodePos.x += scrollLeft;
+ scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+ nodePos.x -= scrollLeft;
+ }
+ if(bot * t > 0){
+ nodePos.y += scrollTop;
+ scrollTop += Math[t < 0? "max" : "min"](t, bot);
+ nodePos.y -= scrollTop;
+ }
+ }
+ }
+ el = (el != scrollRoot) && !fixedPos && el.parentNode;
+ }
+ }catch(error){
+ console.error('scrollIntoView: ' + error);
+ node.scrollIntoView(false);
+ }
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.sniff"] = true;
+// summary:
+// Applies pre-set CSS classes to the top-level HTML node, based on:
+// - browser (ex: dj_ie)
+// - browser version (ex: dj_ie6)
+// - box model (ex: dj_contentBox)
+// - text direction (ex: dijitRtl)
+//
+// In addition, browser, browser version, and box model are
+// combined with an RTL flag when browser text is RTL. ex: dj_ie-rtl.
+//
+// Simply doing a require on this module will
+// establish this CSS. Modified version of Morris' CSS hack.
+
+dojo.provide("dijit._base.sniff");
+
+(function(){
+
+ var d = dojo,
+ html = d.doc.documentElement,
+ ie = d.isIE,
+ opera = d.isOpera,
+ maj = Math.floor,
+ ff = d.isFF,
+ boxModel = d.boxModel.replace(/-/,''),
+
+ classes = {
+ dj_ie: ie,
+ dj_ie6: maj(ie) == 6,
+ dj_ie7: maj(ie) == 7,
+ dj_ie8: maj(ie) == 8,
+ dj_iequirks: ie && d.isQuirks,
+
+ // NOTE: Opera not supported by dijit
+ dj_opera: opera,
+
+ dj_khtml: d.isKhtml,
+
+ dj_webkit: d.isWebKit,
+ dj_safari: d.isSafari,
+ dj_chrome: d.isChrome,
+
+ dj_gecko: d.isMozilla,
+ dj_ff3: maj(ff) == 3
+ }; // no dojo unsupported browsers
+
+ classes["dj_" + boxModel] = true;
+
+ // apply browser, browser version, and box model class names
+ for(var p in classes){
+ if(classes[p]){
+ if(html.className){
+ html.className += " " + p;
+ }else{
+ html.className = p;
+ }
+ }
+ }
+
+ // If RTL mode then add dijitRtl flag plus repeat existing classes
+ // with -rtl extension
+ // (unshift is to make this code run after <body> node is loaded but before parser runs)
+ dojo._loaders.unshift(function(){
+ if(!dojo._isBodyLtr()){
+ html.className += " dijitRtl";
+ for(var p in classes){
+ if(classes[p]){
+ html.className += " " + p + "-rtl";
+ }
+ }
+ }
+ });
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.typematic"] = true;
+dojo.provide("dijit._base.typematic");
+
+dijit.typematic = {
+ // summary:
+ // These functions are used to repetitively call a user specified callback
+ // method when a specific key or mouse click over a specific DOM node is
+ // held down for a specific amount of time.
+ // Only 1 such event is allowed to occur on the browser page at 1 time.
+
+ _fireEventAndReload: function(){
+ this._timer = null;
+ this._callback(++this._count, this._node, this._evt);
+
+ // Schedule next event, reducing the timer a little bit each iteration, bottoming-out at 10 to avoid
+ // browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
+ this._currentTimeout = Math.max(
+ this._currentTimeout < 0 ? this._initialDelay :
+ (this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
+ 10);
+ this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
+ },
+
+ trigger: function(/*Event*/ evt, /* Object */ _this, /*DOMNode*/ node, /* Function */ callback, /* Object */ obj, /* Number */ subsequentDelay, /* Number */ initialDelay){
+ // summary:
+ // Start a timed, repeating callback sequence.
+ // If already started, the function call is ignored.
+ // This method is not normally called by the user but can be
+ // when the normal listener code is insufficient.
+ // evt:
+ // key or mouse event object to pass to the user callback
+ // _this:
+ // pointer to the user's widget space.
+ // node:
+ // the DOM node object to pass the the callback function
+ // callback:
+ // function to call until the sequence is stopped called with 3 parameters:
+ // count:
+ // integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
+ // node:
+ // the DOM node object passed in
+ // evt:
+ // key or mouse event object
+ // obj:
+ // user space object used to uniquely identify each typematic sequence
+ // subsequentDelay:
+ // if > 1, the number of milliseconds until the 3->n events occur
+ // or else the fractional time multiplier for the next event's delay, default=0.9
+ // initialDelay:
+ // the number of milliseconds until the 2nd event occurs, default=500ms
+ if(obj != this._obj){
+ this.stop();
+ this._initialDelay = initialDelay || 500;
+ this._subsequentDelay = subsequentDelay || 0.90;
+ this._obj = obj;
+ this._evt = evt;
+ this._node = node;
+ this._currentTimeout = -1;
+ this._count = -1;
+ this._callback = dojo.hitch(_this, callback);
+ this._fireEventAndReload();
+ }
+ },
+
+ stop: function(){
+ // summary:
+ // Stop an ongoing timed, repeating callback sequence.
+ if(this._timer){
+ clearTimeout(this._timer);
+ this._timer = null;
+ }
+ if(this._obj){
+ this._callback(-1, this._node, this._evt);
+ this._obj = null;
+ }
+ },
+
+ addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a specific typematic key.
+ // See also the trigger method for other parameters.
+ // keyObject:
+ // an object defining the key to listen for.
+ // charOrCode:
+ // the printable character (string) or keyCode (number) to listen for.
+ // keyCode:
+ // (deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
+ // charCode:
+ // (deprecated - use charOrCode) the charCode (number) to listen for.
+ // ctrlKey:
+ // desired ctrl key state to initiate the calback sequence:
+ // - pressed (true)
+ // - released (false)
+ // - either (unspecified)
+ // altKey:
+ // same as ctrlKey but for the alt key
+ // shiftKey:
+ // same as ctrlKey but for the shift key
+ // returns:
+ // an array of dojo.connect handles
+ if(keyObject.keyCode){
+ keyObject.charOrCode = keyObject.keyCode;
+ dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+ }else if(keyObject.charCode){
+ keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
+ dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+ }
+ return [
+ dojo.connect(node, "onkeypress", this, function(evt){
+ if(evt.charOrCode == keyObject.charOrCode &&
+ (keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
+ (keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
+ (keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
+ (keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
+ dojo.stopEvent(evt);
+ dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
+ }else if(dijit.typematic._obj == keyObject){
+ dijit.typematic.stop();
+ }
+ }),
+ dojo.connect(node, "onkeyup", this, function(evt){
+ if(dijit.typematic._obj == keyObject){
+ dijit.typematic.stop();
+ }
+ })
+ ];
+ },
+
+ addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a typematic mouse click.
+ // See the trigger method for other parameters.
+ // returns:
+ // an array of dojo.connect handles
+ var dc = dojo.connect;
+ return [
+ dc(node, "mousedown", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
+ }),
+ dc(node, "mouseup", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.stop();
+ }),
+ dc(node, "mouseout", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.stop();
+ }),
+ dc(node, "mousemove", this, function(evt){
+ dojo.stopEvent(evt);
+ }),
+ dc(node, "dblclick", this, function(evt){
+ dojo.stopEvent(evt);
+ if(dojo.isIE){
+ dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
+ setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+ }
+ })
+ ];
+ },
+
+ addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a specific typematic key and mouseclick.
+ // This is a thin wrapper to addKeyListener and addMouseListener.
+ // See the addMouseListener and addKeyListener methods for other parameters.
+ // mouseNode:
+ // the DOM node object to listen on for mouse events.
+ // keyNode:
+ // the DOM node object to listen on for key events.
+ // returns:
+ // an array of dojo.connect handles
+ return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(
+ this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
+ }
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+ onload: function(){
+ // summary:
+ // Detects if we are in high-contrast mode or not
+
+ // This must be a named function and not an anonymous
+ // function, so that the widget parsing code can make sure it
+ // registers its onload function after this function.
+ // DO NOT USE "this" within this function.
+
+ // create div for testing if high contrast mode is on or images are turned off
+ var div = dojo.create("div",{
+ id: "a11yTestNode",
+ style:{
+ cssText:'border: 1px solid;'
+ + 'border-color:red green;'
+ + 'position: absolute;'
+ + 'height: 5px;'
+ + 'top: -999px;'
+ + 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
+ }
+ }, dojo.body());
+
+ // test it
+ var cs = dojo.getComputedStyle(div);
+ if(cs){
+ var bkImg = cs.backgroundImage;
+ var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+ dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+ if(dojo.isIE){
+ div.outerHTML = ""; // prevent mixed-content warning, see http://support.microsoft.com/kb/925014
+ }else{
+ dojo.body().removeChild(div);
+ }
+ }
+ }
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){ // NOTE: checking in Safari messes things up
+ dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit, {
+ _XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
+
+ hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Determines if an element has a particular non-XHTML role.
+ // returns:
+ // True if elem has the specific non-XHTML role attribute and false if not.
+ // For backwards compatibility if role parameter not provided,
+ // returns true if has non XHTML role
+ var waiRole = this.getWaiRole(elem);
+ return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+ },
+
+ getWaiRole: function(/*Element*/ elem){
+ // summary:
+ // Gets the non-XHTML role for an element (which should be a wai role).
+ // returns:
+ // The non-XHTML role of elem or an empty string if elem
+ // does not have a role.
+ return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
+ },
+
+ setWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Sets the role on an element.
+ // description:
+ // Replace existing role attribute with new role.
+ // If elem already has an XHTML role, append this role to XHTML role
+ // and remove other ARIA roles.
+
+ var curRole = dojo.attr(elem, "role") || "";
+ if(!this._XhtmlRoles.test(curRole)){
+ dojo.attr(elem, "role", role);
+ }else{
+ if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
+ var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
+ var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
+ dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
+ }
+ }
+ },
+
+ removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Removes the specified non-XHTML role from an element.
+ // Removes role attribute if no specific role provided (for backwards compat.)
+
+ var roleValue = dojo.attr(elem, "role");
+ if(!roleValue){ return; }
+ if(role){
+ var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
+ dojo.attr(elem, "role", t);
+ }else{
+ elem.removeAttribute("role");
+ }
+ },
+
+ hasWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Determines if an element has a given state.
+ // description:
+ // Checks for an attribute called "aria-"+state.
+ // returns:
+ // true if elem has a value for the given state and
+ // false if it does not.
+
+ return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+ },
+
+ getWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Gets the value of a state on an element.
+ // description:
+ // Checks for an attribute called "aria-"+state.
+ // returns:
+ // The value of the requested state on elem
+ // or an empty string if elem has no value for state.
+
+ return elem.getAttribute("aria-"+state) || "";
+ },
+
+ setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+ // summary:
+ // Sets a state on an element.
+ // description:
+ // Sets an attribute called "aria-"+state.
+
+ elem.setAttribute("aria-"+state, value);
+ },
+
+ removeWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Removes a state from an element.
+ // description:
+ // Sets an attribute called "aria-"+state.
+
+ elem.removeAttribute("aria-"+state);
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base"] = true;
+dojo.provide("dijit._base");
+
+
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Widget"] = true;
+dojo.provide("dijit._Widget");
+
+dojo.require( "dijit._base" );
+
+
+// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
+// DOM nodes) until someone actually needs to monitor that event.
+dojo.connect(dojo, "_connect",
+ function(/*dijit._Widget*/ widget, /*String*/ event){
+ if(widget && dojo.isFunction(widget._onConnect)){
+ widget._onConnect(event);
+ }
+ });
+
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
+
+// Keep track of where the last keydown event was, to help avoid generating
+// spurious ondijitclick events when:
+// 1. focus is on a <button> or <a>
+// 2. user presses then releases the ENTER key
+// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
+// 4. onkeyup event fires, causing the ondijitclick handler to fire
+dijit._lastKeyDownNode = null;
+if(dojo.isIE){
+ (function(){
+ var keydownCallback = function(evt){
+ dijit._lastKeyDownNode = evt.srcElement;
+ };
+ dojo.doc.attachEvent('onkeydown', keydownCallback);
+ dojo.addOnWindowUnload(function(){
+ dojo.doc.detachEvent('onkeydown', keydownCallback);
+ });
+ })();
+}else{
+ dojo.doc.addEventListener('keydown', function(evt){
+ dijit._lastKeyDownNode = evt.target;
+ }, true);
+}
+
+(function(){
+
+var _attrReg = {}, // cached results from getSetterAttributes
+ getSetterAttributes = function(widget){
+ // summary:
+ // Returns list of attributes with custom setters for specified widget
+ var dc = widget.declaredClass;
+ if(!_attrReg[dc]){
+ var r = [],
+ attrs,
+ proto = widget.constructor.prototype;
+ for(var fxName in proto){
+ if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
+ r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
+ }
+ }
+ _attrReg[dc] = r;
+ }
+ return _attrReg[dc] || []; // String[]
+ };
+
+dojo.declare("dijit._Widget", null, {
+ // summary:
+ // Base class for all Dijit widgets.
+
+ // id: [const] String
+ // A unique, opaque ID string that can be assigned by users or by the
+ // system. If the developer passes an ID which is known not to be
+ // unique, the specified ID is ignored and the system-generated ID is
+ // used instead.
+ id: "",
+
+ // lang: [const] String
+ // Rarely used. Overrides the default Dojo locale used to render this widget,
+ // as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
+ // Value must be among the list of locales specified during by the Dojo bootstrap,
+ // formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
+ lang: "",
+
+ // dir: [const] String
+ // Unsupported by Dijit, but here for completeness. Dijit only supports setting text direction on the
+ // entire document.
+ // Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
+ // attribute. Either left-to-right "ltr" or right-to-left "rtl".
+ dir: "",
+
+ // class: String
+ // HTML class attribute
+ "class": "",
+
+ // style: String||Object
+ // HTML style attributes as cssText string or name/value hash
+ style: "",
+
+ // title: String
+ // HTML title attribute.
+ //
+ // For form widgets this specifies a tooltip to display when hovering over
+ // the widget (just like the native HTML title attribute).
+ //
+ // For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
+ // etc., it's used to specify the tab label, accordion pane title, etc.
+ title: "",
+
+ // tooltip: String
+ // When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
+ // this specifies the tooltip to appear when the mouse is hovered over that text.
+ tooltip: "",
+
+ // srcNodeRef: [readonly] DomNode
+ // pointer to original DOM node
+ srcNodeRef: null,
+
+ // domNode: [readonly] DomNode
+ // This is our visible representation of the widget! Other DOM
+ // Nodes may by assigned to other properties, usually through the
+ // template system's dojoAttachPoint syntax, but the domNode
+ // property is the canonical "top level" node in widget UI.
+ domNode: null,
+
+ // containerNode: [readonly] DomNode
+ // Designates where children of the source DOM node will be placed.
+ // "Children" in this case refers to both DOM nodes and widgets.
+ // For example, for myWidget:
+ //
+ // | <div dojoType=myWidget>
+ // | <b> here's a plain DOM node
+ // | <span dojoType=subWidget>and a widget</span>
+ // | <i> and another plain DOM node </i>
+ // | </div>
+ //
+ // containerNode would point to:
+ //
+ // | <b> here's a plain DOM node
+ // | <span dojoType=subWidget>and a widget</span>
+ // | <i> and another plain DOM node </i>
+ //
+ // In templated widgets, "containerNode" is set via a
+ // dojoAttachPoint assignment.
+ //
+ // containerNode must be defined for any widget that accepts innerHTML
+ // (like ContentPane or BorderContainer or even Button), and conversely
+ // is null for widgets that don't, like TextBox.
+ containerNode: null,
+
+/*=====
+ // _started: Boolean
+ // startup() has completed.
+ _started: false,
+=====*/
+
+ // attributeMap: [protected] Object
+ // attributeMap sets up a "binding" between attributes (aka properties)
+ // of the widget and the widget's DOM.
+ // Changes to widget attributes listed in attributeMap will be
+ // reflected into the DOM.
+ //
+ // For example, calling attr('title', 'hello')
+ // on a TitlePane will automatically cause the TitlePane's DOM to update
+ // with the new title.
+ //
+ // attributeMap is a hash where the key is an attribute of the widget,
+ // and the value reflects a binding to a:
+ //
+ // - DOM node attribute
+ // | focus: {node: "focusNode", type: "attribute"}
+ // Maps this.focus to this.focusNode.focus
+ //
+ // - DOM node innerHTML
+ // | title: { node: "titleNode", type: "innerHTML" }
+ // Maps this.title to this.titleNode.innerHTML
+ //
+ // - DOM node innerText
+ // | title: { node: "titleNode", type: "innerText" }
+ // Maps this.title to this.titleNode.innerText
+ //
+ // - DOM node CSS class
+ // | myClass: { node: "domNode", type: "class" }
+ // Maps this.myClass to this.domNode.className
+ //
+ // If the value is an array, then each element in the array matches one of the
+ // formats of the above list.
+ //
+ // There are also some shorthands for backwards compatibility:
+ // - string --> { node: string, type: "attribute" }, for example:
+ // | "focusNode" ---> { node: "focusNode", type: "attribute" }
+ // - "" --> { node: "domNode", type: "attribute" }
+ attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
+
+ // _deferredConnects: [protected] Object
+ // attributeMap addendum for event handlers that should be connected only on first use
+ _deferredConnects: {
+ onClick: "",
+ onDblClick: "",
+ onKeyDown: "",
+ onKeyPress: "",
+ onKeyUp: "",
+ onMouseMove: "",
+ onMouseDown: "",
+ onMouseOut: "",
+ onMouseOver: "",
+ onMouseLeave: "",
+ onMouseEnter: "",
+ onMouseUp: ""
+ },
+
+ onClick: dijit._connectOnUseEventHandler,
+ /*=====
+ onClick: function(event){
+ // summary:
+ // Connect to this function to receive notifications of mouse click events.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onDblClick: dijit._connectOnUseEventHandler,
+ /*=====
+ onDblClick: function(event){
+ // summary:
+ // Connect to this function to receive notifications of mouse double click events.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyDown: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyDown: function(event){
+ // summary:
+ // Connect to this function to receive notifications of keys being pressed down.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyPress: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyPress: function(event){
+ // summary:
+ // Connect to this function to receive notifications of printable keys being typed.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyUp: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyUp: function(event){
+ // summary:
+ // Connect to this function to receive notifications of keys being released.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseDown: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseDown: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse button is pressed down.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseMove: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseMove: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseOut: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseOut: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseOver: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseOver: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseLeave: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseLeave: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves off of this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseEnter: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseEnter: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves onto this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseUp: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseUp: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse button is released.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+
+ // Constants used in templates
+
+ // _blankGif: [protected] String
+ // Path to a blank 1x1 image.
+ // Used by <img> nodes in templates that really get their image via CSS background-image.
+ _blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
+
+ //////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+ postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
+ // summary:
+ // Kicks off widget instantiation. See create() for details.
+ // tags:
+ // private
+ this.create(params, srcNodeRef);
+ },
+
+ create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+ // summary:
+ // Kick off the life-cycle of a widget
+ // params:
+ // Hash of initialization parameters for widget, including
+ // scalar values (like title, duration etc.) and functions,
+ // typically callbacks like onClick.
+ // srcNodeRef:
+ // If a srcNodeRef (DOM node) is specified:
+ // - use srcNodeRef.innerHTML as my contents
+ // - if this is a behavioral widget then apply behavior
+ // to that srcNodeRef
+ // - otherwise, replace srcNodeRef with my generated DOM
+ // tree
+ // description:
+ // Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
+ // etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
+ // for a discussion of the widget creation lifecycle.
+ //
+ // Of course, adventurous developers could override create entirely, but this should
+ // only be done as a last resort.
+ // tags:
+ // private
+
+ // store pointer to original DOM tree
+ this.srcNodeRef = dojo.byId(srcNodeRef);
+
+ // For garbage collection. An array of handles returned by Widget.connect()
+ // Each handle returned from Widget.connect() is an array of handles from dojo.connect()
+ this._connects = [];
+
+ // For garbage collection. An array of handles returned by Widget.subscribe()
+ // The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
+ this._subscribes = [];
+
+ // To avoid double-connects, remove entries from _deferredConnects
+ // that have been setup manually by a subclass (ex, by dojoAttachEvent).
+ // If a subclass has redefined a callback (ex: onClick) then assume it's being
+ // connected to manually.
+ this._deferredConnects = dojo.clone(this._deferredConnects);
+ for(var attr in this.attributeMap){
+ delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
+ }
+ for(attr in this._deferredConnects){
+ if(this[attr] !== dijit._connectOnUseEventHandler){
+ delete this._deferredConnects[attr]; // redefined, probably dojoAttachEvent exists
+ }
+ }
+
+ //mixin our passed parameters
+ if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
+ if(params){
+ this.params = params;
+ dojo.mixin(this,params);
+ }
+ this.postMixInProperties();
+
+ // generate an id for the widget if one wasn't specified
+ // (be sure to do this before buildRendering() because that function might
+ // expect the id to be there.)
+ if(!this.id){
+ this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+ }
+ dijit.registry.add(this);
+
+ this.buildRendering();
+
+ if(this.domNode){
+ // Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+ this._applyAttributes();
+
+ var source = this.srcNodeRef;
+ if(source && source.parentNode){
+ source.parentNode.replaceChild(this.domNode, source);
+ }
+
+ // If the developer has specified a handler as a widget parameter
+ // (ex: new Button({onClick: ...})
+ // then naturally need to connect from DOM node to that handler immediately,
+ for(attr in this.params){
+ this._onConnect(attr);
+ }
+ }
+
+ if(this.domNode){
+ this.domNode.setAttribute("widgetId", this.id);
+ }
+ this.postCreate();
+
+ // If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
+ if(this.srcNodeRef && !this.srcNodeRef.parentNode){
+ delete this.srcNodeRef;
+ }
+
+ this._created = true;
+ },
+
+ _applyAttributes: function(){
+ // summary:
+ // Step during widget creation to copy all widget attributes to the
+ // DOM as per attributeMap and _setXXXAttr functions.
+ // description:
+ // Skips over blank/false attribute values, unless they were explicitly specified
+ // as parameters to the widget, since those are the default anyway,
+ // and setting tabIndex="" is different than not setting tabIndex at all.
+ //
+ // It processes the attributes in the attribute map first, and then
+ // it goes through and processes the attributes for the _setXXXAttr
+ // functions that have been specified
+ // tags:
+ // private
+ var condAttrApply = function(attr, scope){
+ if((scope.params && attr in scope.params) || scope[attr]){
+ scope.attr(attr, scope[attr]);
+ }
+ };
+
+ // Do the attributes in attributeMap
+ for(var attr in this.attributeMap){
+ condAttrApply(attr, this);
+ }
+
+ // And also any attributes with custom setters
+ dojo.forEach(getSetterAttributes(this), function(a){
+ if(!(a in this.attributeMap)){
+ condAttrApply(a, this);
+ }
+ }, this);
+ },
+
+ postMixInProperties: function(){
+ // summary:
+ // Called after the parameters to the widget have been read-in,
+ // but before the widget template is instantiated. Especially
+ // useful to set properties that are referenced in the widget
+ // template.
+ // tags:
+ // protected
+ },
+
+ buildRendering: function(){
+ // summary:
+ // Construct the UI for this widget, setting this.domNode
+ // description:
+ // Most widgets will mixin `dijit._Templated`, which implements this
+ // method.
+ // tags:
+ // protected
+ this.domNode = this.srcNodeRef || dojo.create('div');
+ },
+
+ postCreate: function(){
+ // summary:
+ // Processing after the DOM fragment is created
+ // description:
+ // Called after the DOM fragment has been created, but not necessarily
+ // added to the document. Do not include any operations which rely on
+ // node dimensions or placement.
+ // tags:
+ // protected
+ },
+
+ startup: function(){
+ // summary:
+ // Processing after the DOM fragment is added to the document
+ // description:
+ // Called after a widget and its children have been created and added to the page,
+ // and all related widgets have finished their create() cycle, up through postCreate().
+ // This is useful for composite widgets that need to control or layout sub-widgets.
+ // Many layout widgets can use this as a wiring phase.
+ this._started = true;
+ },
+
+ //////////// DESTROY FUNCTIONS ////////////////////////////////
+
+ destroyRecursive: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Destroy this widget and its descendants
+ // description:
+ // This is the generic "destructor" function that all widget users
+ // should call to cleanly discard with a widget. Once a widget is
+ // destroyed, it is removed from the manager object.
+ // preserveDom:
+ // If true, this method will leave the original DOM structure
+ // alone of descendant Widgets. Note: This will NOT work with
+ // dijit._Templated widgets.
+
+ this._beingDestroyed = true;
+ this.destroyDescendants(preserveDom);
+ this.destroy(preserveDom);
+ },
+
+ destroy: function(/*Boolean*/ preserveDom){
+ // summary:
+ // Destroy this widget, but not its descendants.
+ // This method will, however, destroy internal widgets such as those used within a template.
+ // preserveDom: Boolean
+ // If true, this method will leave the original DOM structure alone.
+ // Note: This will not yet work with _Templated widgets
+
+ this._beingDestroyed = true;
+ this.uninitialize();
+ var d = dojo,
+ dfe = d.forEach,
+ dun = d.unsubscribe;
+ dfe(this._connects, function(array){
+ dfe(array, d.disconnect);
+ });
+ dfe(this._subscribes, function(handle){
+ dun(handle);
+ });
+
+ // destroy widgets created as part of template, etc.
+ dfe(this._supportingWidgets || [], function(w){
+ if(w.destroyRecursive){
+ w.destroyRecursive();
+ }else if(w.destroy){
+ w.destroy();
+ }
+ });
+
+ this.destroyRendering(preserveDom);
+ dijit.registry.remove(this.id);
+ this._destroyed = true;
+ },
+
+ destroyRendering: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Destroys the DOM nodes associated with this widget
+ // preserveDom:
+ // If true, this method will leave the original DOM structure alone
+ // during tear-down. Note: this will not work with _Templated
+ // widgets yet.
+ // tags:
+ // protected
+
+ if(this.bgIframe){
+ this.bgIframe.destroy(preserveDom);
+ delete this.bgIframe;
+ }
+
+ if(this.domNode){
+ if(preserveDom){
+ dojo.removeAttr(this.domNode, "widgetId");
+ }else{
+ dojo.destroy(this.domNode);
+ }
+ delete this.domNode;
+ }
+
+ if(this.srcNodeRef){
+ if(!preserveDom){
+ dojo.destroy(this.srcNodeRef);
+ }
+ delete this.srcNodeRef;
+ }
+ },
+
+ destroyDescendants: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Recursively destroy the children of this widget and their
+ // descendants.
+ // preserveDom:
+ // If true, the preserveDom attribute is passed to all descendant
+ // widget's .destroy() method. Not for use with _Templated
+ // widgets.
+
+ // get all direct descendants and destroy them recursively
+ dojo.forEach(this.getChildren(), function(widget){
+ if(widget.destroyRecursive){
+ widget.destroyRecursive(preserveDom);
+ }
+ });
+ },
+
+
+ uninitialize: function(){
+ // summary:
+ // Stub function. Override to implement custom widget tear-down
+ // behavior.
+ // tags:
+ // protected
+ return false;
+ },
+
+ ////////////////// MISCELLANEOUS METHODS ///////////////////
+
+ onFocus: function(){
+ // summary:
+ // Called when the widget becomes "active" because
+ // it or a widget inside of it either has focus, or has recently
+ // been clicked.
+ // tags:
+ // callback
+ },
+
+ onBlur: function(){
+ // summary:
+ // Called when the widget stops being "active" because
+ // focus moved to something outside of it, or the user
+ // clicked somewhere outside of it, or the widget was
+ // hidden.
+ // tags:
+ // callback
+ },
+
+ _onFocus: function(e){
+ // summary:
+ // This is where widgets do processing for when they are active,
+ // such as changing CSS classes. See onFocus() for more details.
+ // tags:
+ // protected
+ this.onFocus();
+ },
+
+ _onBlur: function(){
+ // summary:
+ // This is where widgets do processing for when they stop being active,
+ // such as changing CSS classes. See onBlur() for more details.
+ // tags:
+ // protected
+ this.onBlur();
+ },
+
+ _onConnect: function(/*String*/ event){
+ // summary:
+ // Called when someone connects to one of my handlers.
+ // "Turn on" that handler if it isn't active yet.
+ //
+ // This is also called for every single initialization parameter
+ // so need to do nothing for parameters like "id".
+ // tags:
+ // private
+ if(event in this._deferredConnects){
+ var mapNode = this[this._deferredConnects[event] || 'domNode'];
+ this.connect(mapNode, event.toLowerCase(), event);
+ delete this._deferredConnects[event];
+ }
+ },
+
+ _setClassAttr: function(/*String*/ value){
+ // summary:
+ // Custom setter for the CSS "class" attribute
+ // tags:
+ // protected
+ var mapNode = this[this.attributeMap["class"] || 'domNode'];
+ dojo.removeClass(mapNode, this["class"])
+ this["class"] = value;
+ dojo.addClass(mapNode, value);
+ },
+
+ _setStyleAttr: function(/*String||Object*/ value){
+ // summary:
+ // Sets the style attribut of the widget according to value,
+ // which is either a hash like {height: "5px", width: "3px"}
+ // or a plain string
+ // description:
+ // Determines which node to set the style on based on style setting
+ // in attributeMap.
+ // tags:
+ // protected
+
+ var mapNode = this[this.attributeMap.style || 'domNode'];
+
+ // Note: technically we should revert any style setting made in a previous call
+ // to his method, but that's difficult to keep track of.
+
+ if(dojo.isObject(value)){
+ dojo.style(mapNode, value);
+ }else{
+ if(mapNode.style.cssText){
+ mapNode.style.cssText += "; " + value;
+ }else{
+ mapNode.style.cssText = value;
+ }
+ }
+
+ this.style = value;
+ },
+
+ setAttribute: function(/*String*/ attr, /*anything*/ value){
+ // summary:
+ // Deprecated. Use attr() instead.
+ // tags:
+ // deprecated
+ dojo.deprecated(this.declaredClass+"::setAttribute() is deprecated. Use attr() instead.", "", "2.0");
+ this.attr(attr, value);
+ },
+
+ _attrToDom: function(/*String*/ attr, /*String*/ value){
+ // summary:
+ // Reflect a widget attribute (title, tabIndex, duration etc.) to
+ // the widget DOM, as specified in attributeMap.
+ //
+ // description:
+ // Also sets this["attr"] to the new value.
+ // Note some attributes like "type"
+ // cannot be processed this way as they are not mutable.
+ //
+ // tags:
+ // private
+
+ var commands = this.attributeMap[attr];
+ dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
+
+ // Get target node and what we are doing to that node
+ var mapNode = this[command.node || command || "domNode"]; // DOM node
+ var type = command.type || "attribute"; // class, innerHTML, innerText, or attribute
+
+ switch(type){
+ case "attribute":
+ if(dojo.isFunction(value)){ // functions execute in the context of the widget
+ value = dojo.hitch(this, value);
+ }
+
+ // Get the name of the DOM node attribute; usually it's the same
+ // as the name of the attribute in the widget (attr), but can be overridden.
+ // Also maps handler names to lowercase, like onSubmit --> onsubmit
+ var attrName = command.attribute ? command.attribute :
+ (/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
+
+ dojo.attr(mapNode, attrName, value);
+ break;
+ case "innerText":
+ mapNode.innerHTML = "";
+ mapNode.appendChild(dojo.doc.createTextNode(value));
+ break;
+ case "innerHTML":
+ mapNode.innerHTML = value;
+ break;
+ case "class":
+ dojo.removeClass(mapNode, this[attr]);
+ dojo.addClass(mapNode, value);
+ break;
+ }
+ }, this);
+ this[attr] = value;
+ },
+
+ attr: function(/*String|Object*/name, /*Object?*/value){
+ // summary:
+ // Set or get properties on a widget instance.
+ // name:
+ // The property to get or set. If an object is passed here and not
+ // a string, its keys are used as names of attributes to be set
+ // and the value of the object as values to set in the widget.
+ // value:
+ // Optional. If provided, attr() operates as a setter. If omitted,
+ // the current value of the named property is returned.
+ // description:
+ // Get or set named properties on a widget. If no value is
+ // provided, the current value of the attribute is returned,
+ // potentially via a getter method. If a value is provided, then
+ // the method acts as a setter, assigning the value to the name,
+ // potentially calling any explicitly provided setters to handle
+ // the operation. For instance, if the widget has properties "foo"
+ // and "bar" and a method named "_setFooAttr", calling:
+ // | myWidget.attr("foo", "Howdy!");
+ // would be equivalent to calling:
+ // | widget._setFooAttr("Howdy!");
+ // while calling:
+ // | myWidget.attr("bar", "Howdy!");
+ // would be the same as writing:
+ // | widget.bar = "Howdy!";
+ // It also tries to copy the changes to the widget's DOM according
+ // to settings in attributeMap (see description of `dijit._Widget.attributeMap`
+ // for details)
+ // For example, calling:
+ // | myTitlePane.attr("title", "Howdy!");
+ // will do
+ // | myTitlePane.title = "Howdy!";
+ // | myTitlePane.title.innerHTML = "Howdy!";
+ // It works for DOM node attributes too. Calling
+ // | widget.attr("disabled", true)
+ // will set the disabled attribute on the widget's focusNode,
+ // among other housekeeping for a change in disabled state.
+
+ // open questions:
+ // - how to handle build shortcut for attributes which want to map
+ // into DOM attributes?
+ // - what relationship should setAttribute()/attr() have to
+ // layout() calls?
+ var args = arguments.length;
+ if(args == 1 && !dojo.isString(name)){
+ for(var x in name){ this.attr(x, name[x]); }
+ return this;
+ }
+ var names = this._getAttrNames(name);
+ if(args >= 2){ // setter
+ if(this[names.s]){
+ // use the explicit setter
+ args = dojo._toArray(arguments, 1);
+ return this[names.s].apply(this, args) || this;
+ }else{
+ // if param is specified as DOM node attribute, copy it
+ if(name in this.attributeMap){
+ this._attrToDom(name, value);
+ }
+
+ // FIXME: what about function assignments? Any way to connect() here?
+ this[name] = value;
+ }
+ return this;
+ }else{ // getter
+ return this[names.g] ? this[names.g]() : this[name];
+ }
+ },
+
+ _attrPairNames: {}, // shared between all widgets
+ _getAttrNames: function(name){
+ // summary:
+ // Helper function for Widget.attr().
+ // Caches attribute name values so we don't do the string ops every time.
+ // tags:
+ // private
+
+ var apn = this._attrPairNames;
+ if(apn[name]){ return apn[name]; }
+ var uc = name.charAt(0).toUpperCase() + name.substr(1);
+ return (apn[name] = {
+ n: name+"Node",
+ s: "_set"+uc+"Attr",
+ g: "_get"+uc+"Attr"
+ });
+ },
+
+ toString: function(){
+ // summary:
+ // Returns a string that represents the widget
+ // description:
+ // When a widget is cast to a string, this method will be used to generate the
+ // output. Currently, it does not implement any sort of reversible
+ // serialization.
+ return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
+ },
+
+ getDescendants: function(){
+ // summary:
+ // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+ // This method should generally be avoided as it returns widgets declared in templates, which are
+ // supposed to be internal/hidden, but it's left here for back-compat reasons.
+
+ return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
+ },
+
+ getChildren: function(){
+ // summary:
+ // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+ // Does not return nested widgets, nor widgets that are part of this widget's template.
+ return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
+ },
+
+ // nodesWithKeyClick: [private] String[]
+ // List of nodes that correctly handle click events via native browser support,
+ // and don't need dijit's help
+ nodesWithKeyClick: ["input", "button"],
+
+ connect: function(
+ /*Object|null*/ obj,
+ /*String|Function*/ event,
+ /*String|Function*/ method){
+ // summary:
+ // Connects specified obj/event to specified method of this object
+ // and registers for disconnect() on widget destroy.
+ // description:
+ // Provide widget-specific analog to dojo.connect, except with the
+ // implicit use of this widget as the target object.
+ // This version of connect also provides a special "ondijitclick"
+ // event which triggers on a click or space or enter keyup
+ // returns:
+ // A handle that can be passed to `disconnect` in order to disconnect before
+ // the widget is destroyed.
+ // example:
+ // | var btn = new dijit.form.Button();
+ // | // when foo.bar() is called, call the listener we're going to
+ // | // provide in the scope of btn
+ // | btn.connect(foo, "bar", function(){
+ // | console.debug(this.toString());
+ // | });
+ // tags:
+ // protected
+
+ var d = dojo,
+ dc = d._connect,
+ handles = [];
+ if(event == "ondijitclick"){
+ // add key based click activation for unsupported nodes.
+ // do all processing onkey up to prevent spurious clicks
+ // for details see comments at top of this file where _lastKeyDownNode is defined
+ if(!this.nodesWithKeyClick[obj.tagName.toLowerCase()]){
+ var m = d.hitch(this, method);
+ handles.push(
+ dc(obj, "onkeydown", this, function(e){
+ //console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+ if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+ !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+ // needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
+ dijit._lastKeyDownNode = e.target;
+ d.stopEvent(e); // stop event to prevent scrolling on space key in IE
+ }
+ }),
+ dc(obj, "onkeyup", this, function(e){
+ //console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+ if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+ e.target === dijit._lastKeyDownNode &&
+ !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+ //need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
+ dijit._lastKeyDownNode = null;
+ return m(e);
+ }
+ })
+ );
+ }
+ event = "onclick";
+ }
+ handles.push(dc(obj, event, this, method));
+
+ this._connects.push(handles);
+ return handles; // _Widget.Handle
+ },
+
+ disconnect: function(/* _Widget.Handle */ handles){
+ // summary:
+ // Disconnects handle created by `connect`.
+ // Also removes handle from this widget's list of connects.
+ // tags:
+ // protected
+ for(var i=0; i<this._connects.length; i++){
+ if(this._connects[i] == handles){
+ dojo.forEach(handles, dojo.disconnect);
+ this._connects.splice(i, 1);
+ return;
+ }
+ }
+ },
+
+ subscribe: function(
+ /*String*/ topic,
+ /*String|Function*/ method){
+ // summary:
+ // Subscribes to the specified topic and calls the specified method
+ // of this object and registers for unsubscribe() on widget destroy.
+ // description:
+ // Provide widget-specific analog to dojo.subscribe, except with the
+ // implicit use of this widget as the target object.
+ // example:
+ // | var btn = new dijit.form.Button();
+ // | // when /my/topic is published, this button changes its label to
+ // | // be the parameter of the topic.
+ // | btn.subscribe("/my/topic", function(v){
+ // | this.attr("label", v);
+ // | });
+ var d = dojo,
+ handle = d.subscribe(topic, this, method);
+
+ // return handles for Any widget that may need them
+ this._subscribes.push(handle);
+ return handle;
+ },
+
+ unsubscribe: function(/*Object*/ handle){
+ // summary:
+ // Unsubscribes handle created by this.subscribe.
+ // Also removes handle from this widget's list of subscriptions
+ for(var i=0; i<this._subscribes.length; i++){
+ if(this._subscribes[i] == handle){
+ dojo.unsubscribe(handle);
+ this._subscribes.splice(i, 1);
+ return;
+ }
+ }
+ },
+
+ isLeftToRight: function(){
+ // summary:
+ // Checks the page for text direction
+ // tags:
+ // protected
+ return dojo._isBodyLtr(); //Boolean
+ },
+
+ isFocusable: function(){
+ // summary:
+ // Return true if this widget can currently be focused
+ // and false if not
+ return this.focus && (dojo.style(this.domNode, "display") != "none");
+ },
+
+ placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
+ // summary:
+ // Place this widget's domNode reference somewhere in the DOM based
+ // on standard dojo.place conventions, or passing a Widget reference that
+ // contains and addChild member.
+ //
+ // description:
+ // A convenience function provided in all _Widgets, providing a simple
+ // shorthand mechanism to put an existing (or newly created) Widget
+ // somewhere in the dom, and allow chaining.
+ //
+ // reference:
+ // The String id of a domNode, a domNode reference, or a reference to a Widget posessing
+ // an addChild method.
+ //
+ // position:
+ // If passed a string or domNode reference, the position argument
+ // accepts a string just as dojo.place does, one of: "first", "last",
+ // "before", or "after".
+ //
+ // If passed a _Widget reference, and that widget reference has an ".addChild" method,
+ // it will be called passing this widget instance into that method, supplying the optional
+ // position index passed.
+ //
+ // returns:
+ // dijit._Widget
+ // Provides a useful return of the newly created dijit._Widget instance so you
+ // can "chain" this function by instantiating, placing, then saving the return value
+ // to a variable.
+ //
+ // example:
+ // | // create a Button with no srcNodeRef, and place it in the body:
+ // | var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
+ // | // now, 'button' is still the widget reference to the newly created button
+ // | dojo.connect(button, "onClick", function(e){ console.log('click'); });
+ //
+ // example:
+ // | // create a button out of a node with id="src" and append it to id="wrapper":
+ // | var button = new dijit.form.Button({},"src").placeAt("wrapper");
+ //
+ // example:
+ // | // place a new button as the first element of some div
+ // | var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
+ //
+ // example:
+ // | // create a contentpane and add it to a TabContainer
+ // | var tc = dijit.byId("myTabs");
+ // | new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
+
+ if(reference.declaredClass && reference.addChild){
+ reference.addChild(this, position);
+ }else{
+ dojo.place(this.domNode, reference, position);
+ }
+ return this;
+ },
+
+ _onShow: function(){
+ // summary:
+ // Internal method called when this widget is made visible.
+ // See `onShow` for details.
+ this.onShow();
+ },
+
+ onShow: function(){
+ // summary:
+ // Called when this widget becomes the selected pane in a
+ // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+ // `dijit.layout.AccordionContainer`, etc.
+ //
+ // Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+ // tags:
+ // callback
+ },
+
+ onHide: function(){
+ // summary:
+ // Called when another widget becomes the selected pane in a
+ // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+ // `dijit.layout.AccordionContainer`, etc.
+ //
+ // Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+ // tags:
+ // callback
+ }
+});
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.matrix"] = true;
+dojo.provide("dojox.gfx.matrix");
+
+(function(){
+ var m = dojox.gfx.matrix;
+
+ // candidates for dojox.math:
+ var _degToRadCache = {};
+ m._degToRad = function(degree){
+ return _degToRadCache[degree] || (_degToRadCache[degree] = (Math.PI * degree / 180));
+ };
+ m._radToDeg = function(radian){ return radian / Math.PI * 180; };
+
+ m.Matrix2D = function(arg){
+ // summary: a 2D matrix object
+ // description: Normalizes a 2D matrix-like object. If arrays is passed,
+ // all objects of the array are normalized and multiplied sequentially.
+ // arg: Object
+ // a 2D matrix-like object, a number, or an array of such objects
+ if(arg){
+ if(typeof arg == "number"){
+ this.xx = this.yy = arg;
+ }else if(arg instanceof Array){
+ if(arg.length > 0){
+ var matrix = m.normalize(arg[0]);
+ // combine matrices
+ for(var i = 1; i < arg.length; ++i){
+ var l = matrix, r = dojox.gfx.matrix.normalize(arg[i]);
+ matrix = new m.Matrix2D();
+ matrix.xx = l.xx * r.xx + l.xy * r.yx;
+ matrix.xy = l.xx * r.xy + l.xy * r.yy;
+ matrix.yx = l.yx * r.xx + l.yy * r.yx;
+ matrix.yy = l.yx * r.xy + l.yy * r.yy;
+ matrix.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+ matrix.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+ }
+ dojo.mixin(this, matrix);
+ }
+ }else{
+ dojo.mixin(this, arg);
+ }
+ }
+ };
+
+ // the default (identity) matrix, which is used to fill in missing values
+ dojo.extend(m.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
+
+ dojo.mixin(m, {
+ // summary: class constants, and methods of dojox.gfx.matrix
+
+ // matrix constants
+
+ // identity: dojox.gfx.matrix.Matrix2D
+ // an identity matrix constant: identity * (x, y) == (x, y)
+ identity: new m.Matrix2D(),
+
+ // flipX: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
+ flipX: new m.Matrix2D({xx: -1}),
+
+ // flipY: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
+ flipY: new m.Matrix2D({yy: -1}),
+
+ // flipXY: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
+ flipXY: new m.Matrix2D({xx: -1, yy: -1}),
+
+ // matrix creators
+
+ translate: function(a, b){
+ // summary: forms a translation matrix
+ // description: The resulting matrix is used to translate (move) points by specified offsets.
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+ if(arguments.length > 1){
+ return new m.Matrix2D({dx: a, dy: b}); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: dojox.gfx.Point: a point-like object, which specifies offsets for both dimensions
+ // b: null
+ return new m.Matrix2D({dx: a.x, dy: a.y}); // dojox.gfx.matrix.Matrix2D
+ },
+ scale: function(a, b){
+ // summary: forms a scaling matrix
+ // description: The resulting matrix is used to scale (magnify) points by specified offsets.
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ if(arguments.length > 1){
+ return new m.Matrix2D({xx: a, yy: b}); // dojox.gfx.matrix.Matrix2D
+ }
+ if(typeof a == "number"){
+ // branch
+ // a: Number: a uniform scaling factor used for the both coordinates
+ // b: null
+ return new m.Matrix2D({xx: a, yy: a}); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: dojox.gfx.Point: a point-like object, which specifies scale factors for both dimensions
+ // b: null
+ return new m.Matrix2D({xx: a.x, yy: a.y}); // dojox.gfx.matrix.Matrix2D
+ },
+ rotate: function(angle){
+ // summary: forms a rotating matrix
+ // description: The resulting matrix is used to rotate points
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an angle of rotation in radians (>0 for CW)
+ var c = Math.cos(angle);
+ var s = Math.sin(angle);
+ return new m.Matrix2D({xx: c, xy: -s, yx: s, yy: c}); // dojox.gfx.matrix.Matrix2D
+ },
+ rotateg: function(degree){
+ // summary: forms a rotating matrix
+ // description: The resulting matrix is used to rotate points
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.rotate() for comparison.
+ // degree: Number: an angle of rotation in degrees (>0 for CW)
+ return m.rotate(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ skewX: function(angle) {
+ // summary: forms an x skewing matrix
+ // description: The resulting matrix is used to skew points in the x dimension
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an skewing angle in radians
+ return new m.Matrix2D({xy: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXg: function(degree){
+ // summary: forms an x skewing matrix
+ // description: The resulting matrix is used to skew points in the x dimension
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.skewX() for comparison.
+ // degree: Number: an skewing angle in degrees
+ return m.skewX(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ skewY: function(angle){
+ // summary: forms a y skewing matrix
+ // description: The resulting matrix is used to skew points in the y dimension
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an skewing angle in radians
+ return new m.Matrix2D({yx: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYg: function(degree){
+ // summary: forms a y skewing matrix
+ // description: The resulting matrix is used to skew points in the y dimension
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.skewY() for comparison.
+ // degree: Number: an skewing angle in degrees
+ return m.skewY(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ reflect: function(a, b){
+ // summary: forms a reflection matrix
+ // description: The resulting matrix is used to reflect points around a vector,
+ // which goes through the origin.
+ // a: dojox.gfx.Point: a point-like object, which specifies a vector of reflection
+ // b: null
+ if(arguments.length == 1){
+ b = a.y;
+ a = a.x;
+ }
+ // branch
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+
+ // make a unit vector
+ var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = 2 * a * b / n2;
+ return new m.Matrix2D({xx: 2 * a2 / n2 - 1, xy: xy, yx: xy, yy: 2 * b2 / n2 - 1}); // dojox.gfx.matrix.Matrix2D
+ },
+ project: function(a, b){
+ // summary: forms an orthogonal projection matrix
+ // description: The resulting matrix is used to project points orthogonally on a vector,
+ // which goes through the origin.
+ // a: dojox.gfx.Point: a point-like object, which specifies a vector of projection
+ // b: null
+ if(arguments.length == 1){
+ b = a.y;
+ a = a.x;
+ }
+ // branch
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+
+ // make a unit vector
+ var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = a * b / n2;
+ return new m.Matrix2D({xx: a2 / n2, xy: xy, yx: xy, yy: b2 / n2}); // dojox.gfx.matrix.Matrix2D
+ },
+
+ // ensure matrix 2D conformance
+ normalize: function(matrix){
+ // summary: converts an object to a matrix, if necessary
+ // description: Converts any 2D matrix-like object or an array of
+ // such objects to a valid dojox.gfx.matrix.Matrix2D object.
+ // matrix: Object: an object, which is converted to a matrix, if necessary
+ return (matrix instanceof m.Matrix2D) ? matrix : new m.Matrix2D(matrix); // dojox.gfx.matrix.Matrix2D
+ },
+
+ // common operations
+
+ clone: function(matrix){
+ // summary: creates a copy of a 2D matrix
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
+ var obj = new m.Matrix2D();
+ for(var i in matrix){
+ if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
+ }
+ return obj; // dojox.gfx.matrix.Matrix2D
+ },
+ invert: function(matrix){
+ // summary: inverts a 2D matrix
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
+ var M = m.normalize(matrix),
+ D = M.xx * M.yy - M.xy * M.yx,
+ M = new m.Matrix2D({
+ xx: M.yy/D, xy: -M.xy/D,
+ yx: -M.yx/D, yy: M.xx/D,
+ dx: (M.xy * M.dy - M.yy * M.dx) / D,
+ dy: (M.yx * M.dx - M.xx * M.dy) / D
+ });
+ return M; // dojox.gfx.matrix.Matrix2D
+ },
+ _multiplyPoint: function(matrix, x, y){
+ // summary: applies a matrix to a point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // x: Number: an x coordinate of a point
+ // y: Number: a y coordinate of a point
+ return {x: matrix.xx * x + matrix.xy * y + matrix.dx, y: matrix.yx * x + matrix.yy * y + matrix.dy}; // dojox.gfx.Point
+ },
+ multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
+ // summary: applies a matrix to a point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // a: Number: an x coordinate of a point
+ // b: Number: a y coordinate of a point
+ var M = m.normalize(matrix);
+ if(typeof a == "number" && typeof b == "number"){
+ return m._multiplyPoint(M, a, b); // dojox.gfx.Point
+ }
+ // branch
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // a: dojox.gfx.Point: a point
+ // b: null
+ return m._multiplyPoint(M, a.x, a.y); // dojox.gfx.Point
+ },
+ multiply: function(matrix){
+ // summary: combines matrices by multiplying them sequentially in the given order
+ // matrix: dojox.gfx.matrix.Matrix2D...: a 2D matrix-like object,
+ // all subsequent arguments are matrix-like objects too
+ var M = m.normalize(matrix);
+ // combine matrices
+ for(var i = 1; i < arguments.length; ++i){
+ var l = M, r = m.normalize(arguments[i]);
+ M = new m.Matrix2D();
+ M.xx = l.xx * r.xx + l.xy * r.yx;
+ M.xy = l.xx * r.xy + l.xy * r.yy;
+ M.yx = l.yx * r.xx + l.yy * r.yx;
+ M.yy = l.yx * r.xy + l.yy * r.yy;
+ M.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+ M.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+ }
+ return M; // dojox.gfx.matrix.Matrix2D
+ },
+
+ // high level operations
+
+ _sandwich: function(matrix, x, y){
+ // summary: applies a matrix at a centrtal point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
+ // x: Number: an x component of the central point
+ // y: Number: a y component of the central point
+ return m.multiply(m.translate(x, y), matrix, m.translate(-x, -y)); // dojox.gfx.matrix.Matrix2D
+ },
+ scaleAt: function(a, b, c, d){
+ // summary: scales a picture using a specified point as a center of scaling
+ // description: Compare with dojox.gfx.matrix.scale().
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ // c: Number: an x component of a central point
+ // d: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) uniform scale factor, Point
+ // 2) uniform scale factor, x, y
+ // 3) x scale, y scale, Point
+ // 4) x scale, y scale, x, y
+
+ switch(arguments.length){
+ case 4:
+ // a and b are scale factor components, c and d are components of a point
+ return m._sandwich(m.scale(a, b), c, d); // dojox.gfx.matrix.Matrix2D
+ case 3:
+ if(typeof c == "number"){
+ // branch
+ // a: Number: a uniform scaling factor used for both coordinates
+ // b: Number: an x component of a central point
+ // c: Number: a y component of a central point
+ // d: null
+ return m._sandwich(m.scale(a), b, c); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ // c: dojox.gfx.Point: a central point
+ // d: null
+ return m._sandwich(m.scale(a, b), c.x, c.y); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: Number: a uniform scaling factor used for both coordinates
+ // b: dojox.gfx.Point: a central point
+ // c: null
+ // d: null
+ return m._sandwich(m.scale(a), b.x, b.y); // dojox.gfx.matrix.Matrix2D
+ },
+ rotateAt: function(angle, a, b){
+ // summary: rotates a picture using a specified point as a center of rotation
+ // description: Compare with dojox.gfx.matrix.rotate().
+ // angle: Number: an angle of rotation in radians (>0 for CW)
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) rotation angle in radians, Point
+ // 2) rotation angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.rotate(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an angle of rotation in radians (>0 for CCW)
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.rotate(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ rotategAt: function(degree, a, b){
+ // summary: rotates a picture using a specified point as a center of rotation
+ // description: Compare with dojox.gfx.matrix.rotateg().
+ // degree: Number: an angle of rotation in degrees (>0 for CW)
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) rotation angle in degrees, Point
+ // 2) rotation angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.rotateg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an angle of rotation in degrees (>0 for CCW)
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.rotateg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXAt: function(angle, a, b){
+ // summary: skews a picture along the x axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewX().
+ // angle: Number: an skewing angle in radians
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in radians, Point
+ // 2) skew angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewX(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an skewing angle in radians
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewX(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXgAt: function(degree, a, b){
+ // summary: skews a picture along the x axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewXg().
+ // degree: Number: an skewing angle in degrees
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in degrees, Point
+ // 2) skew angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewXg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an skewing angle in degrees
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewXg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYAt: function(angle, a, b){
+ // summary: skews a picture along the y axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewY().
+ // angle: Number: an skewing angle in radians
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in radians, Point
+ // 2) skew angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewY(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an skewing angle in radians
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewY(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
+ // summary: skews a picture along the y axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewYg().
+ // degree: Number: an skewing angle in degrees
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in degrees, Point
+ // 2) skew angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewYg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an skewing angle in degrees
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewYg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ }
+
+ //TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
+
+ });
+})();
+
+// propagate Matrix2D up
+dojox.gfx.Matrix2D = dojox.gfx.matrix.Matrix2D;
+
+}
+
+if(!dojo._hasResource["dojox.gfx._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx._base"] = true;
+dojo.provide("dojox.gfx._base");
+
+(function(){
+ var g = dojox.gfx, b = g._base;
+
+ // candidates for dojox.style (work on VML and SVG nodes)
+ g._hasClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary:
+ // Returns whether or not the specified classes are a portion of the
+ // class list currently applied to the node.
+ // return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className) // Boolean
+ var cls = node.getAttribute("className");
+ return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0; // Boolean
+ }
+ g._addClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary:
+ // Adds the specified classes to the end of the class list on the
+ // passed node.
+ var cls = node.getAttribute("className") || "";
+ if(!cls || (" " + cls + " ").indexOf(" " + classStr + " ") < 0){
+ node.setAttribute("className", cls + (cls ? " " : "") + classStr);
+ }
+ }
+ g._removeClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary: Removes classes from node.
+ var cls = node.getAttribute("className");
+ if(cls){
+ node.setAttribute(
+ "className",
+ cls.replace(new RegExp('(^|\\s+)' + classStr + '(\\s+|$)'), "$1$2")
+ );
+ }
+ }
+
+ // candidate for dojox.html.metrics (dynamic font resize handler is not implemented here)
+
+ // derived from Morris John's emResized measurer
+ b._getFontMeasurements = function(){
+ // summary:
+ // Returns an object that has pixel equivilents of standard font
+ // size values.
+ var heights = {
+ '1em': 0, '1ex': 0, '100%': 0, '12pt': 0, '16px': 0, 'xx-small': 0,
+ 'x-small': 0, 'small': 0, 'medium': 0, 'large': 0, 'x-large': 0,
+ 'xx-large': 0
+ };
+
+ if(dojo.isIE){
+ // we do a font-size fix if and only if one isn't applied already.
+ // NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+ dojo.doc.documentElement.style.fontSize="100%";
+ }
+
+ // set up the measuring node.
+ var div = dojo.doc.createElement("div");
+ var s = div.style;
+ s.position = "absolute";
+ s.left = "-100px";
+ s.top = "0px";
+ s.width = "30px";
+ s.height = "1000em";
+ s.border = "0px";
+ s.margin = "0px";
+ s.padding = "0px";
+ s.outline = "none";
+ s.lineHeight = "1";
+ s.overflow = "hidden";
+ dojo.body().appendChild(div);
+
+ // do the measurements.
+ for(var p in heights){
+ div.style.fontSize = p;
+ heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+ }
+
+ dojo.body().removeChild(div);
+ div = null;
+ return heights; // object
+ };
+
+ var fontMeasurements = null;
+
+ b._getCachedFontMeasurements = function(recalculate){
+ if(recalculate || !fontMeasurements){
+ fontMeasurements = b._getFontMeasurements();
+ }
+ return fontMeasurements;
+ };
+
+ // candidate for dojox.html.metrics
+
+ var measuringNode = null, empty = {};
+ b._getTextBox = function( /*String*/ text,
+ /*Object*/ style,
+ /*String?*/ className){
+ var m, s, al = arguments.length;
+ if(!measuringNode){
+ m = measuringNode = dojo.doc.createElement("div");
+ s = m.style;
+ s.position = "absolute";
+ s.left = "-10000px";
+ s.top = "0";
+ dojo.body().appendChild(m);
+ }else{
+ m = measuringNode;
+ s = m.style;
+ }
+ // reset styles
+ m.className = "";
+ s.border = "0";
+ s.margin = "0";
+ s.padding = "0";
+ s.outline = "0";
+ // set new style
+ if(al > 1 && style){
+ for(var i in style){
+ if(i in empty){ continue; }
+ s[i] = style[i];
+ }
+ }
+ // set classes
+ if(al > 2 && className){
+ m.className = className;
+ }
+ // take a measure
+ m.innerHTML = text;
+
+ if(m["getBoundingClientRect"]){
+ var bcr = m.getBoundingClientRect();
+ return {l: bcr.left, t: bcr.top, w: bcr.width || (bcr.right - bcr.left), h: bcr.height || (bcr.bottom - bcr.top)};
+ }else{
+ return dojo.marginBox(m);
+ }
+ };
+
+ // candidate for dojo.dom
+
+ var uniqueId = 0;
+ b._getUniqueId = function(){
+ // summary: returns a unique string for use with any DOM element
+ var id;
+ do{
+ id = dojo._scopeName + "Unique" + (++uniqueId);
+ }while(dojo.byId(id));
+ return id;
+ };
+})();
+
+dojo.mixin(dojox.gfx, {
+ // summary:
+ // defines constants, prototypes, and utility functions
+
+ // default shapes, which are used to fill in missing parameters
+ defaultPath: {
+ type: "path", path: ""
+ },
+ defaultPolyline: {
+ type: "polyline", points: []
+ },
+ defaultRect: {
+ type: "rect", x: 0, y: 0, width: 100, height: 100, r: 0
+ },
+ defaultEllipse: {
+ type: "ellipse", cx: 0, cy: 0, rx: 200, ry: 100
+ },
+ defaultCircle: {
+ type: "circle", cx: 0, cy: 0, r: 100
+ },
+ defaultLine: {
+ type: "line", x1: 0, y1: 0, x2: 100, y2: 100
+ },
+ defaultImage: {
+ type: "image", x: 0, y: 0, width: 0, height: 0, src: ""
+ },
+ defaultText: {
+ type: "text", x: 0, y: 0, text: "", align: "start",
+ decoration: "none", rotated: false, kerning: true
+ },
+ defaultTextPath: {
+ type: "textpath", text: "", align: "start",
+ decoration: "none", rotated: false, kerning: true
+ },
+
+ // default geometric attributes
+ defaultStroke: {
+ type: "stroke", color: "black", style: "solid", width: 1,
+ cap: "butt", join: 4
+ },
+ defaultLinearGradient: {
+ type: "linear", x1: 0, y1: 0, x2: 100, y2: 100,
+ colors: [
+ { offset: 0, color: "black" }, { offset: 1, color: "white" }
+ ]
+ },
+ defaultRadialGradient: {
+ type: "radial", cx: 0, cy: 0, r: 100,
+ colors: [
+ { offset: 0, color: "black" }, { offset: 1, color: "white" }
+ ]
+ },
+ defaultPattern: {
+ type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""
+ },
+ defaultFont: {
+ type: "font", style: "normal", variant: "normal",
+ weight: "normal", size: "10pt", family: "serif"
+ },
+
+ getDefault: (function(){
+ var typeCtorCache = {};
+ // a memoized delegate()
+ return function(/*String*/ type){
+ var t = typeCtorCache[type];
+ if(t){
+ return new t();
+ }
+ t = typeCtorCache[type] = new Function;
+ t.prototype = dojox.gfx[ "default" + type ];
+ return new t();
+ }
+ })(),
+
+ normalizeColor: function(/*Color*/ color){
+ // summary:
+ // converts any legal color representation to normalized
+ // dojo.Color object
+ return (color instanceof dojo.Color) ? color : new dojo.Color(color); // dojo.Color
+ },
+ normalizeParameters: function(existed, update){
+ // summary:
+ // updates an existing object with properties from an "update"
+ // object
+ // existed: Object
+ // the "target" object to be updated
+ // update: Object
+ // the "update" object, whose properties will be used to update
+ // the existed object
+ if(update){
+ var empty = {};
+ for(var x in existed){
+ if(x in update && !(x in empty)){
+ existed[x] = update[x];
+ }
+ }
+ }
+ return existed; // Object
+ },
+ makeParameters: function(defaults, update){
+ // summary:
+ // copies the original object, and all copied properties from the
+ // "update" object
+ // defaults: Object
+ // the object to be cloned before updating
+ // update: Object
+ // the object, which properties are to be cloned during updating
+ if(!update){
+ // return dojo.clone(defaults);
+ return dojo.delegate(defaults);
+ }
+ var result = {};
+ for(var i in defaults){
+ if(!(i in result)){
+ result[i] = dojo.clone((i in update) ? update[i] : defaults[i]);
+ }
+ }
+ return result; // Object
+ },
+ formatNumber: function(x, addSpace){
+ // summary: converts a number to a string using a fixed notation
+ // x: Number: number to be converted
+ // addSpace: Boolean?: if it is true, add a space before a positive number
+ var val = x.toString();
+ if(val.indexOf("e") >= 0){
+ val = x.toFixed(4);
+ }else{
+ var point = val.indexOf(".");
+ if(point >= 0 && val.length - point > 5){
+ val = x.toFixed(4);
+ }
+ }
+ if(x < 0){
+ return val; // String
+ }
+ return addSpace ? " " + val : val; // String
+ },
+ // font operations
+ makeFontString: function(font){
+ // summary: converts a font object to a CSS font string
+ // font: Object: font object (see dojox.gfx.defaultFont)
+ return font.style + " " + font.variant + " " + font.weight + " " + font.size + " " + font.family; // Object
+ },
+ splitFontString: function(str){
+ // summary:
+ // converts a CSS font string to a font object
+ // description:
+ // Converts a CSS font string to a gfx font object. The CSS font
+ // string components should follow the W3C specified order
+ // (see http://www.w3.org/TR/CSS2/fonts.html#font-shorthand):
+ // style, variant, weight, size, optional line height (will be
+ // ignored), and family.
+ // str: String
+ // a CSS font string
+ var font = dojox.gfx.getDefault("Font");
+ var t = str.split(/\s+/);
+ do{
+ if(t.length < 5){ break; }
+ font.style = t[0];
+ font.variant = t[1];
+ font.weight = t[2];
+ var i = t[3].indexOf("/");
+ font.size = i < 0 ? t[3] : t[3].substring(0, i);
+ var j = 4;
+ if(i < 0){
+ if(t[4] == "/"){
+ j = 6;
+ }else if(t[4].charAt(0) == "/"){
+ j = 5;
+ }
+ }
+ if(j < t.length){
+ font.family = t.slice(j).join(" ");
+ }
+ }while(false);
+ return font; // Object
+ },
+ // length operations
+ cm_in_pt: 72 / 2.54, // Number: points per centimeter
+ mm_in_pt: 7.2 / 2.54, // Number: points per millimeter
+ px_in_pt: function(){
+ // summary: returns a number of pixels per point
+ return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12; // Number
+ },
+ pt2px: function(len){
+ // summary: converts points to pixels
+ // len: Number: a value in points
+ return len * dojox.gfx.px_in_pt(); // Number
+ },
+ px2pt: function(len){
+ // summary: converts pixels to points
+ // len: Number: a value in pixels
+ return len / dojox.gfx.px_in_pt(); // Number
+ },
+ normalizedLength: function(len) {
+ // summary: converts any length value to pixels
+ // len: String: a length, e.g., "12pc"
+ if(len.length == 0) return 0;
+ if(len.length > 2){
+ var px_in_pt = dojox.gfx.px_in_pt();
+ var val = parseFloat(len);
+ switch(len.slice(-2)){
+ case "px": return val;
+ case "pt": return val * px_in_pt;
+ case "in": return val * 72 * px_in_pt;
+ case "pc": return val * 12 * px_in_pt;
+ case "mm": return val * dojox.gfx.mm_in_pt * px_in_pt;
+ case "cm": return val * dojox.gfx.cm_in_pt * px_in_pt;
+ }
+ }
+ return parseFloat(len); // Number
+ },
+
+ // a constant used to split a SVG/VML path into primitive components
+ pathVmlRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+ pathSvgRegExp: /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+
+ equalSources: function(a, b){
+ // summary: compares event sources, returns true if they are equal
+ return a && b && a == b;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx"] = true;
+dojo.provide("dojox.gfx");
+
+
+
+
+dojo.loadInit(function(){
+ //Since loaderInit can be fired before any dojo.provide/require calls,
+ //make sure the dojox.gfx object exists and only run this logic if dojox.gfx.renderer
+ //has not been defined yet.
+ var gfx = dojo.getObject("dojox.gfx", true), sl, flag, match;
+ if(!gfx.renderer){
+ //Have a way to force a GFX renderer, if so desired.
+ //Useful for being able to serialize GFX data in a particular format.
+ if(dojo.config.forceGfxRenderer){
+ dojox.gfx.renderer = dojo.config.forceGfxRenderer;
+ return;
+ }
+ var renderers = (typeof dojo.config.gfxRenderer == "string" ?
+ dojo.config.gfxRenderer : "svg,vml,silverlight,canvas").split(",");
+
+ // mobile platform detection
+ // TODO: move to the base?
+
+ var ua = navigator.userAgent, iPhoneOsBuild = 0, androidVersion = 0;
+ if(dojo.isSafari >= 3){
+ // detect mobile version of WebKit starting with "version 3"
+
+ // comprehensive iPhone test. Have to figure out whether it's SVG or Canvas based on the build.
+ // iPhone OS build numbers from en.wikipedia.org.
+ if(ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
+ // grab the build out of this. Expression is a little nasty because we want
+ // to be sure we have the whole version string.
+ match = ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);
+ if(match){
+ // grab the build out of the match. Only use the first three because of specific builds.
+ iPhoneOsBuild = parseInt(match[4].substr(0,3), 16);
+ }
+ }
+ }
+ if(dojo.isWebKit){
+ // Android detection
+ if(!iPhoneOsBuild){
+ match = ua.match(/Android\s+(\d+\.\d+)/);
+ if(match){
+ androidVersion = parseFloat(match[1]);
+ // Android 1.0-1.1 doesn't support SVG but supports Canvas
+ }
+ }
+ }
+
+ for(var i = 0; i < renderers.length; ++i){
+ switch(renderers[i]){
+ case "svg":
+ // iPhone OS builds greater than 5F1 should have SVG.
+ if(!dojo.isIE && (!iPhoneOsBuild || iPhoneOsBuild >= 0x5f1) && !androidVersion && !dojo.isAIR){
+ dojox.gfx.renderer = "svg";
+ }
+ break;
+ case "vml":
+ if(dojo.isIE){
+ dojox.gfx.renderer = "vml";
+ }
+ break;
+ case "silverlight":
+ try{
+ if(dojo.isIE){
+ sl = new ActiveXObject("AgControl.AgControl");
+ if(sl && sl.IsVersionSupported("1.0")){
+ flag = true;
+ }
+ }else{
+ if(navigator.plugins["Silverlight Plug-In"]){
+ flag = true;
+ }
+ }
+ }catch(e){
+ flag = false;
+ }finally{
+ sl = null;
+ }
+ if(flag){ dojox.gfx.renderer = "silverlight"; }
+ break;
+ case "canvas":
+ //TODO: need more comprehensive test for Canvas
+ if(!dojo.isIE){
+ dojox.gfx.renderer = "canvas";
+ }
+ break;
+ }
+ if(dojox.gfx.renderer){ break; }
+ }
+ if(dojo.config.isDebug){
+ console.log("gfx renderer = " + dojox.gfx.renderer);
+ }
+ }
+});
+
+// include a renderer conditionally
+dojo.requireIf(dojox.gfx.renderer == "svg", "dojox.gfx.svg");
+dojo.requireIf(dojox.gfx.renderer == "vml", "dojox.gfx.vml");
+dojo.requireIf(dojox.gfx.renderer == "silverlight", "dojox.gfx.silverlight");
+dojo.requireIf(dojox.gfx.renderer == "canvas", "dojox.gfx.canvas");
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.lambda"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.lambda"] = true;
+dojo.provide("dojox.lang.functional.lambda");
+
+// This module adds high-level functions and related constructs:
+// - anonymous functions built from the string
+
+// Acknoledgements:
+// - lambda() is based on work by Oliver Steele
+// (http://osteele.com/sources/javascript/functional/functional.js)
+// which was published under MIT License
+
+// Notes:
+// - lambda() produces functions, which after the compilation step are
+// as fast as regular JS functions (at least theoretically).
+
+// Lambda input values:
+// - returns functions unchanged
+// - converts strings to functions
+// - converts arrays to a functional composition
+
+(function(){
+ var df = dojox.lang.functional, lcache = {};
+
+ // split() is augmented on IE6 to ensure the uniform behavior
+ var split = "ab".split(/a*/).length > 1 ? String.prototype.split :
+ function(sep){
+ var r = this.split.call(this, sep),
+ m = sep.exec(this);
+ if(m && m.index == 0){ r.unshift(""); }
+ return r;
+ };
+
+ var lambda = function(/*String*/ s){
+ var args = [], sects = split.call(s, /\s*->\s*/m);
+ if(sects.length > 1){
+ while(sects.length){
+ s = sects.pop();
+ args = sects.pop().split(/\s*,\s*|\s+/m);
+ if(sects.length){ sects.push("(function(" + args + "){return (" + s + ")})"); }
+ }
+ }else if(s.match(/\b_\b/)){
+ args = ["_"];
+ }else{
+ var l = s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),
+ r = s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);
+ if(l || r){
+ if(l){
+ args.push("$1");
+ s = "$1" + s;
+ }
+ if(r){
+ args.push("$2");
+ s = s + "$2";
+ }
+ }else{
+ // the point of the long regex below is to exclude all well-known
+ // lower-case words from the list of potential arguments
+ var vars = s.
+ replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g, "").
+ match(/([a-z_$][a-z_$\d]*)/gi) || [], t = {};
+ dojo.forEach(vars, function(v){
+ if(!(v in t)){
+ args.push(v);
+ t[v] = 1;
+ }
+ });
+ }
+ }
+ return {args: args, body: s}; // Object
+ };
+
+ var compose = function(/*Array*/ a){
+ return a.length ?
+ function(){
+ var i = a.length - 1, x = df.lambda(a[i]).apply(this, arguments);
+ for(--i; i >= 0; --i){ x = df.lambda(a[i]).call(this, x); }
+ return x;
+ }
+ :
+ // identity
+ function(x){ return x; };
+ };
+
+ dojo.mixin(df, {
+ // lambda
+ rawLambda: function(/*String*/ s){
+ // summary:
+ // builds a function from a snippet, or array (composing),
+ // returns an object describing the function; functions are
+ // passed through unmodified.
+ // description:
+ // This method is to normalize a functional representation (a
+ // text snippet) to an object that contains an array of
+ // arguments, and a body , which is used to calculate the
+ // returning value.
+ return lambda(s); // Object
+ },
+ buildLambda: function(/*String*/ s){
+ // summary:
+ // builds a function from a snippet, returns a string, which
+ // represents the function.
+ // description:
+ // This method returns a textual representation of a function
+ // built from the snippet. It is meant to be evaled in the
+ // proper context, so local variables can be pulled from the
+ // environment.
+ s = lambda(s);
+ return "function(" + s.args.join(",") + "){return (" + s.body + ");}"; // String
+ },
+ lambda: function(/*Function|String|Array*/ s){
+ // summary:
+ // builds a function from a snippet, or array (composing),
+ // returns a function object; functions are passed through
+ // unmodified.
+ // description:
+ // This method is used to normalize a functional
+ // representation (a text snippet, an array, or a function) to
+ // a function object.
+ if(typeof s == "function"){ return s; }
+ if(s instanceof Array){ return compose(s); }
+ if(s in lcache){ return lcache[s]; }
+ s = lambda(s);
+ return lcache[s] = new Function(s.args, "return (" + s.body + ");"); // Function
+ },
+ clearLambdaCache: function(){
+ // summary:
+ // clears internal cache of lambdas
+ lcache = {};
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.array"] = true;
+dojo.provide("dojox.lang.functional.array");
+
+
+
+// This module adds high-level functions and related constructs:
+// - array-processing functions similar to standard JS functions
+
+// Notes:
+// - this module provides JS standard methods similar to high-level functions in dojo/_base/array.js:
+// forEach, map, filter, every, some
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+// - operate on dense arrays
+// - take a string as the array argument
+// - take an iterator objects as the array argument
+
+(function(){
+ var d = dojo, df = dojox.lang.functional, empty = {};
+
+ d.mixin(df, {
+ // JS 1.6 standard array functions, which can take a lambda as a parameter.
+ // Consider using dojo._base.array functions, if you don't need the lambda support.
+ filter: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates a new array with all elements that pass the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var t = [], v, i, n;
+ if(d.isArray(a)){
+ // array
+ for(i = 0, n = a.length; i < n; ++i){
+ v = a[i];
+ if(f.call(o, v, i, a)){ t.push(v); }
+ }
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ for(i = 0; a.hasNext();){
+ v = a.next();
+ if(f.call(o, v, i++, a)){ t.push(v); }
+ }
+ }else{
+ // object/dictionary
+ for(i in a){
+ if(!(i in empty)){
+ v = a[i];
+ if(f.call(o, v, i, a)){ t.push(v); }
+ }
+ }
+ }
+ return t; // Array
+ },
+ forEach: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: executes a provided function once per array element.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var i, n;
+ if(d.isArray(a)){
+ // array
+ for(i = 0, n = a.length; i < n; f.call(o, a[i], i, a), ++i);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ for(i = 0; a.hasNext(); f.call(o, a.next(), i++, a));
+ }else{
+ // object/dictionary
+ for(i in a){
+ if(!(i in empty)){
+ f.call(o, a[i], i, a);
+ }
+ }
+ }
+ return o; // Object
+ },
+ map: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates a new array with the results of calling
+ // a provided function on every element in this array.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var t, n, i;
+ if(d.isArray(a)){
+ // array
+ t = new Array(n = a.length);
+ for(i = 0; i < n; t[i] = f.call(o, a[i], i, a), ++i);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ t = [];
+ for(i = 0; a.hasNext(); t.push(f.call(o, a.next(), i++, a)));
+ }else{
+ // object/dictionary
+ t = [];
+ for(i in a){
+ if(!(i in empty)){
+ t.push(f.call(o, a[i], i, a));
+ }
+ }
+ }
+ return t; // Array
+ },
+ every: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: tests whether all elements in the array pass the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var i, n;
+ if(d.isArray(a)){
+ // array
+ for(i = 0, n = a.length; i < n; ++i){
+ if(!f.call(o, a[i], i, a)){
+ return false; // Boolean
+ }
+ }
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ for(i = 0; a.hasNext();){
+ if(!f.call(o, a.next(), i++, a)){
+ return false; // Boolean
+ }
+ }
+ }else{
+ // object/dictionary
+ for(i in a){
+ if(!(i in empty)){
+ if(!f.call(o, a[i], i, a)){
+ return false; // Boolean
+ }
+ }
+ }
+ }
+ return true; // Boolean
+ },
+ some: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: tests whether some element in the array passes the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var i, n;
+ if(d.isArray(a)){
+ // array
+ for(i = 0, n = a.length; i < n; ++i){
+ if(f.call(o, a[i], i, a)){
+ return true; // Boolean
+ }
+ }
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ for(i = 0; a.hasNext();){
+ if(f.call(o, a.next(), i++, a)){
+ return true; // Boolean
+ }
+ }
+ }else{
+ // object/dictionary
+ for(i in a){
+ if(!(i in empty)){
+ if(f.call(o, a[i], i, a)){
+ return true; // Boolean
+ }
+ }
+ }
+ }
+ return false; // Boolean
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.object"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.object"] = true;
+dojo.provide("dojox.lang.functional.object");
+
+
+
+// This module adds high-level functions and related constructs:
+// - object/dictionary helpers
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+// - skip all attributes that are present in the empty object
+// (IE and/or 3rd-party libraries).
+
+(function(){
+ var d = dojo, df = dojox.lang.functional, empty = {};
+
+ d.mixin(df, {
+ // object helpers
+ keys: function(/*Object*/ obj){
+ // summary: returns an array of all keys in the object
+ var t = [];
+ for(var i in obj){
+ if(!(i in empty)){
+ t.push(i);
+ }
+ }
+ return t; // Array
+ },
+ values: function(/*Object*/ obj){
+ // summary: returns an array of all values in the object
+ var t = [];
+ for(var i in obj){
+ if(!(i in empty)){
+ t.push(obj[i]);
+ }
+ }
+ return t; // Array
+ },
+ filterIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates new object with all attributes that pass the test
+ // implemented by the provided function.
+ o = o || d.global; f = df.lambda(f);
+ var t = {}, v, i;
+ for(i in obj){
+ if(!(i in empty)){
+ v = obj[i];
+ if(f.call(o, v, i, obj)){ t[i] = v; }
+ }
+ }
+ return t; // Object
+ },
+ forIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: iterates over all object attributes.
+ o = o || d.global; f = df.lambda(f);
+ for(var i in obj){
+ if(!(i in empty)){
+ f.call(o, obj[i], i, obj);
+ }
+ }
+ return o; // Object
+ },
+ mapIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates new object with the results of calling
+ // a provided function on every attribute in this object.
+ o = o || d.global; f = df.lambda(f);
+ var t = {}, i;
+ for(i in obj){
+ if(!(i in empty)){
+ t[i] = f.call(o, obj[i], i, obj);
+ }
+ }
+ return t; // Object
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional"] = true;
+dojo.provide("dojox.lang.functional");
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.fold"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.fold"] = true;
+dojo.provide("dojox.lang.functional.fold");
+
+
+
+// This module adds high-level functions and related constructs:
+// - "fold" family of functions
+
+// Notes:
+// - missing high-level functions are provided with the compatible API:
+// foldl, foldl1, foldr, foldr1
+// - missing JS standard functions are provided with the compatible API:
+// reduce, reduceRight
+// - the fold's counterpart: unfold
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+// - operate on dense arrays
+// - take a string as the array argument
+// - take an iterator objects as the array argument (only foldl, foldl1, and reduce)
+
+(function(){
+ var d = dojo, df = dojox.lang.functional, empty = {};
+
+ d.mixin(df, {
+ // classic reduce-class functions
+ foldl: function(/*Array|String|Object*/ a, /*Function*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right using a seed value as a starting point; returns the final
+ // value.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var i, n;
+ if(d.isArray(a)){
+ // array
+ for(i = 0, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ for(i = 0; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
+ }else{
+ // object/dictionary
+ for(i in a){
+ if(!(i in empty)){
+ z = f.call(o, z, a[i], i, a);
+ }
+ }
+ }
+ return z; // Object
+ },
+ foldl1: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right; returns the final value.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var z, i, n;
+ if(d.isArray(a)){
+ // array
+ z = a[0];
+ for(i = 1, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ if(a.hasNext()){
+ z = a.next();
+ for(i = 1; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
+ }
+ }else{
+ // object/dictionary
+ var first = true;
+ for(i in a){
+ if(!(i in empty)){
+ if(first){
+ z = a[i];
+ first = false;
+ }else{
+ z = f.call(o, z, a[i], i, a);
+ }
+ }
+ }
+ }
+ return z; // Object
+ },
+ foldr: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from right
+ // to left using a seed value as a starting point; returns the final
+ // value.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ for(var i = a.length; i > 0; --i, z = f.call(o, z, a[i], i, a));
+ return z; // Object
+ },
+ foldr1: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from right
+ // to left; returns the final value.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var n = a.length, z = a[n - 1], i = n - 1;
+ for(; i > 0; --i, z = f.call(o, z, a[i], i, a));
+ return z; // Object
+ },
+ // JS 1.8 standard array functions, which can take a lambda as a parameter.
+ reduce: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
+ // summary: apply a function simultaneously against two values of the array
+ // (from left-to-right) as to reduce it to a single value.
+ return arguments.length < 3 ? df.foldl1(a, f) : df.foldl(a, f, z); // Object
+ },
+ reduceRight: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
+ // summary: apply a function simultaneously against two values of the array
+ // (from right-to-left) as to reduce it to a single value.
+ return arguments.length < 3 ? df.foldr1(a, f) : df.foldr(a, f, z); // Object
+ },
+ // the fold's counterpart: unfold
+ unfold: function(/*Function|String|Array*/ pr, /*Function|String|Array*/ f,
+ /*Function|String|Array*/ g, /*Object*/ z, /*Object?*/ o){
+ // summary: builds an array by unfolding a value
+ o = o || d.global; f = df.lambda(f); g = df.lambda(g); pr = df.lambda(pr);
+ var t = [];
+ for(; !pr.call(o, z); t.push(f.call(o, z)), z = g.call(o, z));
+ return t; // Array
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.reversed"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.reversed"] = true;
+dojo.provide("dojox.lang.functional.reversed");
+
+
+
+// This module adds high-level functions and related constructs:
+// - reversed versions of array-processing functions similar to standard JS functions
+
+// Notes:
+// - this module provides reversed versions of standard array-processing functions:
+// forEachRev, mapRev, filterRev
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+// - operate on dense arrays
+// - take a string as the array argument
+
+(function(){
+ var d = dojo, df = dojox.lang.functional;
+
+ d.mixin(df, {
+ // JS 1.6 standard array functions, which can take a lambda as a parameter.
+ // Consider using dojo._base.array functions, if you don't need the lambda support.
+ filterRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates a new array with all elements that pass the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var t = [], v, i = a.length - 1;
+ for(; i >= 0; --i){
+ v = a[i];
+ if(f.call(o, v, i, a)){ t.push(v); }
+ }
+ return t; // Array
+ },
+ forEachRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: executes a provided function once per array element.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ for(var i = a.length - 1; i >= 0; f.call(o, a[i], i, a), --i);
+ },
+ mapRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: creates a new array with the results of calling
+ // a provided function on every element in this array.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var n = a.length, t = new Array(n), i = n - 1, j = 0;
+ for(; i >= 0; t[j++] = f.call(o, a[i], i, a), --i);
+ return t; // Array
+ },
+ everyRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: tests whether all elements in the array pass the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ for(var i = a.length - 1; i >= 0; --i){
+ if(!f.call(o, a[i], i, a)){
+ return false; // Boolean
+ }
+ }
+ return true; // Boolean
+ },
+ someRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: tests whether some element in the array passes the test
+ // implemented by the provided function.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ for(var i = a.length - 1; i >= 0; --i){
+ if(f.call(o, a[i], i, a)){
+ return true; // Boolean
+ }
+ }
+ return false; // Boolean
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.colors"] = true;
+dojo.provide("dojo.colors");
+
+//TODO: this module appears to break naming conventions
+
+/*=====
+dojo.colors = {
+ // summary: Color utilities
+}
+=====*/
+
+(function(){
+ // this is a standard conversion prescribed by the CSS3 Color Module
+ var hue2rgb = function(m1, m2, h){
+ if(h < 0){ ++h; }
+ if(h > 1){ --h; }
+ var h6 = 6 * h;
+ if(h6 < 1){ return m1 + (m2 - m1) * h6; }
+ if(2 * h < 1){ return m2; }
+ if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
+ return m1;
+ };
+
+ dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+ // summary:
+ // get rgb(a) array from css-style color declarations
+ // description:
+ // this function can handle all 4 CSS3 Color Module formats: rgb,
+ // rgba, hsl, hsla, including rgb(a) with percentage values.
+ var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
+ if(m){
+ var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a;
+ if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
+ var r = c[0];
+ if(r.charAt(r.length - 1) == "%"){
+ // 3 rgb percentage values
+ a = dojo.map(c, function(x){
+ return parseFloat(x) * 2.56;
+ });
+ if(l == 4){ a[3] = c[3]; }
+ return dojo.colorFromArray(a, obj); // dojo.Color
+ }
+ return dojo.colorFromArray(c, obj); // dojo.Color
+ }
+ if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
+ // normalize hsl values
+ var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
+ S = parseFloat(c[1]) / 100,
+ L = parseFloat(c[2]) / 100,
+ // calculate rgb according to the algorithm
+ // recommended by the CSS3 Color Module
+ m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S,
+ m1 = 2 * L - m2;
+ a = [
+ hue2rgb(m1, m2, H + 1 / 3) * 256,
+ hue2rgb(m1, m2, H) * 256,
+ hue2rgb(m1, m2, H - 1 / 3) * 256,
+ 1
+ ];
+ if(l == 4){ a[3] = c[3]; }
+ return dojo.colorFromArray(a, obj); // dojo.Color
+ }
+ }
+ return null; // dojo.Color
+ };
+
+ var confine = function(c, low, high){
+ // summary:
+ // sanitize a color component by making sure it is a number,
+ // and clamping it to valid values
+ c = Number(c);
+ return isNaN(c) ? high : c < low ? low : c > high ? high : c; // Number
+ };
+
+ dojo.Color.prototype.sanitize = function(){
+ // summary: makes sure that the object has correct attributes
+ var t = this;
+ t.r = Math.round(confine(t.r, 0, 255));
+ t.g = Math.round(confine(t.g, 0, 255));
+ t.b = Math.round(confine(t.b, 0, 255));
+ t.a = confine(t.a, 0, 1);
+ return this; // dojo.Color
+ };
+})();
+
+
+dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
+ // summary: creates a greyscale color with an optional alpha
+ return dojo.colorFromArray([g, g, g, a]);
+};
+
+// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
+dojo.mixin(dojo.Color.named, {
+ aliceblue: [240,248,255],
+ antiquewhite: [250,235,215],
+ aquamarine: [127,255,212],
+ azure: [240,255,255],
+ beige: [245,245,220],
+ bisque: [255,228,196],
+ blanchedalmond: [255,235,205],
+ blueviolet: [138,43,226],
+ brown: [165,42,42],
+ burlywood: [222,184,135],
+ cadetblue: [95,158,160],
+ chartreuse: [127,255,0],
+ chocolate: [210,105,30],
+ coral: [255,127,80],
+ cornflowerblue: [100,149,237],
+ cornsilk: [255,248,220],
+ crimson: [220,20,60],
+ cyan: [0,255,255],
+ darkblue: [0,0,139],
+ darkcyan: [0,139,139],
+ darkgoldenrod: [184,134,11],
+ darkgray: [169,169,169],
+ darkgreen: [0,100,0],
+ darkgrey: [169,169,169],
+ darkkhaki: [189,183,107],
+ darkmagenta: [139,0,139],
+ darkolivegreen: [85,107,47],
+ darkorange: [255,140,0],
+ darkorchid: [153,50,204],
+ darkred: [139,0,0],
+ darksalmon: [233,150,122],
+ darkseagreen: [143,188,143],
+ darkslateblue: [72,61,139],
+ darkslategray: [47,79,79],
+ darkslategrey: [47,79,79],
+ darkturquoise: [0,206,209],
+ darkviolet: [148,0,211],
+ deeppink: [255,20,147],
+ deepskyblue: [0,191,255],
+ dimgray: [105,105,105],
+ dimgrey: [105,105,105],
+ dodgerblue: [30,144,255],
+ firebrick: [178,34,34],
+ floralwhite: [255,250,240],
+ forestgreen: [34,139,34],
+ gainsboro: [220,220,220],
+ ghostwhite: [248,248,255],
+ gold: [255,215,0],
+ goldenrod: [218,165,32],
+ greenyellow: [173,255,47],
+ grey: [128,128,128],
+ honeydew: [240,255,240],
+ hotpink: [255,105,180],
+ indianred: [205,92,92],
+ indigo: [75,0,130],
+ ivory: [255,255,240],
+ khaki: [240,230,140],
+ lavender: [230,230,250],
+ lavenderblush: [255,240,245],
+ lawngreen: [124,252,0],
+ lemonchiffon: [255,250,205],
+ lightblue: [173,216,230],
+ lightcoral: [240,128,128],
+ lightcyan: [224,255,255],
+ lightgoldenrodyellow: [250,250,210],
+ lightgray: [211,211,211],
+ lightgreen: [144,238,144],
+ lightgrey: [211,211,211],
+ lightpink: [255,182,193],
+ lightsalmon: [255,160,122],
+ lightseagreen: [32,178,170],
+ lightskyblue: [135,206,250],
+ lightslategray: [119,136,153],
+ lightslategrey: [119,136,153],
+ lightsteelblue: [176,196,222],
+ lightyellow: [255,255,224],
+ limegreen: [50,205,50],
+ linen: [250,240,230],
+ magenta: [255,0,255],
+ mediumaquamarine: [102,205,170],
+ mediumblue: [0,0,205],
+ mediumorchid: [186,85,211],
+ mediumpurple: [147,112,219],
+ mediumseagreen: [60,179,113],
+ mediumslateblue: [123,104,238],
+ mediumspringgreen: [0,250,154],
+ mediumturquoise: [72,209,204],
+ mediumvioletred: [199,21,133],
+ midnightblue: [25,25,112],
+ mintcream: [245,255,250],
+ mistyrose: [255,228,225],
+ moccasin: [255,228,181],
+ navajowhite: [255,222,173],
+ oldlace: [253,245,230],
+ olivedrab: [107,142,35],
+ orange: [255,165,0],
+ orangered: [255,69,0],
+ orchid: [218,112,214],
+ palegoldenrod: [238,232,170],
+ palegreen: [152,251,152],
+ paleturquoise: [175,238,238],
+ palevioletred: [219,112,147],
+ papayawhip: [255,239,213],
+ peachpuff: [255,218,185],
+ peru: [205,133,63],
+ pink: [255,192,203],
+ plum: [221,160,221],
+ powderblue: [176,224,230],
+ rosybrown: [188,143,143],
+ royalblue: [65,105,225],
+ saddlebrown: [139,69,19],
+ salmon: [250,128,114],
+ sandybrown: [244,164,96],
+ seagreen: [46,139,87],
+ seashell: [255,245,238],
+ sienna: [160,82,45],
+ skyblue: [135,206,235],
+ slateblue: [106,90,205],
+ slategray: [112,128,144],
+ slategrey: [112,128,144],
+ snow: [255,250,250],
+ springgreen: [0,255,127],
+ steelblue: [70,130,180],
+ tan: [210,180,140],
+ thistle: [216,191,216],
+ tomato: [255,99,71],
+ transparent: [0, 0, 0, 0],
+ turquoise: [64,224,208],
+ violet: [238,130,238],
+ wheat: [245,222,179],
+ whitesmoke: [245,245,245],
+ yellowgreen: [154,205,50]
+});
+
+}
+
+if(!dojo._hasResource["dojox.color._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color._base"] = true;
+dojo.provide("dojox.color._base");
+
+
+// alias all the dojo.Color mechanisms
+dojox.color.Color=dojo.Color;
+dojox.color.blend=dojo.blendColors;
+dojox.color.fromRgb=dojo.colorFromRgb;
+dojox.color.fromHex=dojo.colorFromHex;
+dojox.color.fromArray=dojo.colorFromArray;
+dojox.color.fromString=dojo.colorFromString;
+
+// alias the dojo.colors mechanisms
+dojox.color.greyscale=dojo.colors.makeGrey;
+
+// static methods
+dojo.mixin(dojox.color, {
+ fromCmy: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow){
+ // summary
+ // Create a dojox.color.Color from a CMY defined color.
+ // All colors should be expressed as 0-100 (percentage)
+
+ if(dojo.isArray(cyan)){
+ magenta=cyan[1], yellow=cyan[2], cyan=cyan[0];
+ } else if(dojo.isObject(cyan)){
+ magenta=cyan.m, yellow=cyan.y, cyan=cyan.c;
+ }
+ cyan/=100, magenta/=100, yellow/=100;
+
+ var r=1-cyan, g=1-magenta, b=1-yellow;
+ return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) }); // dojox.color.Color
+ },
+
+ fromCmyk: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow, /*int*/black){
+ // summary
+ // Create a dojox.color.Color from a CMYK defined color.
+ // All colors should be expressed as 0-100 (percentage)
+
+ if(dojo.isArray(cyan)){
+ magenta=cyan[1], yellow=cyan[2], black=cyan[3], cyan=cyan[0];
+ } else if(dojo.isObject(cyan)){
+ magenta=cyan.m, yellow=cyan.y, black=cyan.b, cyan=cyan.c;
+ }
+ cyan/=100, magenta/=100, yellow/=100, black/=100;
+ var r,g,b;
+ r = 1-Math.min(1, cyan*(1-black)+black);
+ g = 1-Math.min(1, magenta*(1-black)+black);
+ b = 1-Math.min(1, yellow*(1-black)+black);
+ return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) }); // dojox.color.Color
+ },
+
+ fromHsl: function(/* Object|Array|int */hue, /* int */saturation, /* int */luminosity){
+ // summary
+ // Create a dojox.color.Color from an HSL defined color.
+ // hue from 0-359 (degrees), saturation and luminosity 0-100.
+
+ if(dojo.isArray(hue)){
+ saturation=hue[1], luminosity=hue[2], hue=hue[0];
+ } else if(dojo.isObject(hue)){
+ saturation=hue.s, luminosity=hue.l, hue=hue.h;
+ }
+ saturation/=100;
+ luminosity/=100;
+
+ while(hue<0){ hue+=360; }
+ while(hue>=360){ hue-=360; }
+
+ var r, g, b;
+ if(hue<120){
+ r=(120-hue)/60, g=hue/60, b=0;
+ } else if (hue<240){
+ r=0, g=(240-hue)/60, b=(hue-120)/60;
+ } else {
+ r=(hue-240)/60, g=0, b=(360-hue)/60;
+ }
+
+ r=2*saturation*Math.min(r, 1)+(1-saturation);
+ g=2*saturation*Math.min(g, 1)+(1-saturation);
+ b=2*saturation*Math.min(b, 1)+(1-saturation);
+ if(luminosity<0.5){
+ r*=luminosity, g*=luminosity, b*=luminosity;
+ }else{
+ r=(1-luminosity)*r+2*luminosity-1;
+ g=(1-luminosity)*g+2*luminosity-1;
+ b=(1-luminosity)*b+2*luminosity-1;
+ }
+ return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) }); // dojox.color.Color
+ },
+
+ fromHsv: function(/* Object|Array|int */hue, /* int */saturation, /* int */value){
+ // summary
+ // Create a dojox.color.Color from an HSV defined color.
+ // hue from 0-359 (degrees), saturation and value 0-100.
+
+ if(dojo.isArray(hue)){
+ saturation=hue[1], value=hue[2], hue=hue[0];
+ } else if (dojo.isObject(hue)){
+ saturation=hue.s, value=hue.v, hue=hue.h;
+ }
+
+ if(hue==360){ hue=0; }
+ saturation/=100;
+ value/=100;
+
+ var r, g, b;
+ if(saturation==0){
+ r=value, b=value, g=value;
+ }else{
+ var hTemp=hue/60, i=Math.floor(hTemp), f=hTemp-i;
+ var p=value*(1-saturation);
+ var q=value*(1-(saturation*f));
+ var t=value*(1-(saturation*(1-f)));
+ switch(i){
+ case 0:{ r=value, g=t, b=p; break; }
+ case 1:{ r=q, g=value, b=p; break; }
+ case 2:{ r=p, g=value, b=t; break; }
+ case 3:{ r=p, g=q, b=value; break; }
+ case 4:{ r=t, g=p, b=value; break; }
+ case 5:{ r=value, g=p, b=q; break; }
+ }
+ }
+ return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) }); // dojox.color.Color
+ }
+});
+
+// Conversions directly on dojox.color.Color
+dojo.extend(dojox.color.Color, {
+ toCmy: function(){
+ // summary
+ // Convert this Color to a CMY definition.
+ var cyan=1-(this.r/255), magenta=1-(this.g/255), yellow=1-(this.b/255);
+ return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100) }; // Object
+ },
+
+ toCmyk: function(){
+ // summary
+ // Convert this Color to a CMYK definition.
+ var cyan, magenta, yellow, black;
+ var r=this.r/255, g=this.g/255, b=this.b/255;
+ black = Math.min(1-r, 1-g, 1-b);
+ cyan = (1-r-black)/(1-black);
+ magenta = (1-g-black)/(1-black);
+ yellow = (1-b-black)/(1-black);
+ return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100), b:Math.round(black*100) }; // Object
+ },
+
+ toHsl: function(){
+ // summary
+ // Convert this Color to an HSL definition.
+ var r=this.r/255, g=this.g/255, b=this.b/255;
+ var min = Math.min(r, b, g), max = Math.max(r, g, b);
+ var delta = max-min;
+ var h=0, s=0, l=(min+max)/2;
+ if(l>0 && l<1){
+ s = delta/((l<0.5)?(2*l):(2-2*l));
+ }
+ if(delta>0){
+ if(max==r && max!=g){
+ h+=(g-b)/delta;
+ }
+ if(max==g && max!=b){
+ h+=(2+(b-r)/delta);
+ }
+ if(max==b && max!=r){
+ h+=(4+(r-g)/delta);
+ }
+ h*=60;
+ }
+ return { h:h, s:Math.round(s*100), l:Math.round(l*100) }; // Object
+ },
+
+ toHsv: function(){
+ // summary
+ // Convert this Color to an HSV definition.
+ var r=this.r/255, g=this.g/255, b=this.b/255;
+ var min = Math.min(r, b, g), max = Math.max(r, g, b);
+ var delta = max-min;
+ var h = null, s = (max==0)?0:(delta/max);
+ if(s==0){
+ h = 0;
+ }else{
+ if(r==max){
+ h = 60*(g-b)/delta;
+ }else if(g==max){
+ h = 120 + 60*(b-r)/delta;
+ }else{
+ h = 240 + 60*(r-g)/delta;
+ }
+
+ if(h<0){ h+=360; }
+ }
+ return { h:h, s:Math.round(s*100), v:Math.round(max*100) }; // Object
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color"] = true;
+dojo.provide("dojox.color");
+
+
+}
+
+if(!dojo._hasResource["dojox.color.Palette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color.Palette"] = true;
+dojo.provide("dojox.color.Palette");
+
+
+(function(){
+ var dxc = dojox.color;
+ /***************************************************************
+ * dojox.color.Palette
+ *
+ * The Palette object is loosely based on the color palettes
+ * at Kuler (http://kuler.adobe.com). They are 5 color palettes
+ * with the base color considered to be the third color in the
+ * palette (for generation purposes).
+ *
+ * Palettes can be generated from well-known algorithms or they
+ * can be manually created by passing an array to the constructor.
+ *
+ * Palettes can be transformed, using a set of specific params
+ * similar to the way shapes can be transformed with dojox.gfx.
+ * However, unlike with transformations in dojox.gfx, transforming
+ * a palette will return you a new Palette object, in effect
+ * a clone of the original.
+ ***************************************************************/
+
+ // ctor ----------------------------------------------------------------------------
+ dxc.Palette = function(/* String|Array|dojox.color.Color|dojox.color.Palette */base){
+ // summary
+ // An object that represents a palette of colors.
+ // description
+ // A Palette is a representation of a set of colors. While the standard
+ // number of colors contained in a palette is 5, it can really handle any
+ // number of colors.
+ //
+ // A palette is useful for the ability to transform all the colors in it
+ // using a simple object-based approach. In addition, you can generate
+ // palettes using dojox.color.Palette.generate; these generated palettes
+ // are based on the palette generators at http://kuler.adobe.com.
+ //
+ // colors: dojox.color.Color[]
+ // The actual color references in this palette.
+ this.colors = [];
+ if(base instanceof dojox.color.Palette){
+ this.colors = base.colors.slice(0);
+ }
+ else if(base instanceof dojox.color.Color){
+ this.colors = [ null, null, base, null, null ];
+ }
+ else if(dojo.isArray(base)){
+ this.colors = dojo.map(base.slice(0), function(item){
+ if(dojo.isString(item)){ return new dojox.color.Color(item); }
+ return item;
+ });
+ }
+ else if (dojo.isString(base)){
+ this.colors = [ null, null, new dojox.color.Color(base), null, null ];
+ }
+ }
+
+ // private functions ---------------------------------------------------------------
+
+ // transformations
+ function tRGBA(p, param, val){
+ var ret = new dojox.color.Palette();
+ ret.colors = [];
+ dojo.forEach(p.colors, function(item){
+ var r=(param=="dr")?item.r+val:item.r,
+ g=(param=="dg")?item.g+val:item.g,
+ b=(param=="db")?item.b+val:item.b,
+ a=(param=="da")?item.a+val:item.a
+ ret.colors.push(new dojox.color.Color({
+ r: Math.min(255, Math.max(0, r)),
+ g: Math.min(255, Math.max(0, g)),
+ b: Math.min(255, Math.max(0, b)),
+ a: Math.min(1, Math.max(0, a))
+ }));
+ });
+ console.log("The return colors are ", ret.colors, " from the original colors ", p.colors);
+ return ret;
+ }
+
+ function tCMY(p, param, val){
+ var ret = new dojox.color.Palette();
+ ret.colors = [];
+ dojo.forEach(p.colors, function(item){
+ var o=item.toCmy(),
+ c=(param=="dc")?o.c+val:o.c,
+ m=(param=="dm")?o.m+val:o.m,
+ y=(param=="dy")?o.y+val:o.y;
+ ret.colors.push(dojox.color.fromCmy(
+ Math.min(100, Math.max(0, c)),
+ Math.min(100, Math.max(0, m)),
+ Math.min(100, Math.max(0, y))
+ ));
+ });
+ return ret;
+ }
+
+ function tCMYK(p, param, val){
+ var ret = new dojox.color.Palette();
+ ret.colors = [];
+ dojo.forEach(p.colors, function(item){
+ var o=item.toCmyk(),
+ c=(param=="dc")?o.c+val:o.c,
+ m=(param=="dm")?o.m+val:o.m,
+ y=(param=="dy")?o.y+val:o.y,
+ k=(param=="dk")?o.b+val:o.b;
+ ret.colors.push(dojox.color.fromCmyk(
+ Math.min(100, Math.max(0, c)),
+ Math.min(100, Math.max(0, m)),
+ Math.min(100, Math.max(0, y)),
+ Math.min(100, Math.max(0, k))
+ ));
+ });
+ return ret;
+ }
+
+ function tHSL(p, param, val){
+ var ret = new dojox.color.Palette();
+ ret.colors = [];
+ dojo.forEach(p.colors, function(item){
+ var o=item.toHsl(),
+ h=(param=="dh")?o.h+val:o.h,
+ s=(param=="ds")?o.s+val:o.s,
+ l=(param=="dl")?o.l+val:o.l;
+ ret.colors.push(dojox.color.fromHsl(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, l))));
+ });
+ return ret;
+ }
+
+ function tHSV(p, param, val){
+ var ret = new dojox.color.Palette();
+ ret.colors = [];
+ dojo.forEach(p.colors, function(item){
+ var o=item.toHsv(),
+ h=(param=="dh")?o.h+val:o.h,
+ s=(param=="ds")?o.s+val:o.s,
+ v=(param=="dv")?o.v+val:o.v;
+ ret.colors.push(dojox.color.fromHsv(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, v))));
+ });
+ return ret;
+ }
+
+ // helper functions
+ function rangeDiff(val, low, high){
+ // given the value in a range from 0 to high, find the equiv
+ // using the range low to high.
+ return high-((high-val)*((high-low)/high));
+ }
+
+ // object methods ---------------------------------------------------------------
+ dojo.extend(dxc.Palette, {
+ transform: function(/* Object */kwArgs){
+ // summary
+ // Transform the palette using a specific transformation function
+ // and a set of transformation parameters.
+ // description
+ // {palette}.transform is a simple way to uniformly transform
+ // all of the colors in a palette using any of 5 formulae:
+ // RGBA, HSL, HSV, CMYK or CMY.
+ //
+ // Once the forumula to be used is determined, you can pass any
+ // number of parameters based on the formula "d"[param]; for instance,
+ // { use: "rgba", dr: 20, dg: -50 } will take all of the colors in
+ // palette, add 20 to the R value and subtract 50 from the G value.
+ //
+ // Unlike other types of transformations, transform does *not* alter
+ // the original palette but will instead return a new one.
+ var fn=tRGBA; // the default transform function.
+ if(kwArgs.use){
+ // we are being specific about the algo we want to use.
+ var use=kwArgs.use.toLowerCase();
+ if(use.indexOf("hs")==0){
+ if(use.charAt(2)=="l"){ fn=tHSL; }
+ else { fn=tHSV; }
+ }
+ else if(use.indexOf("cmy")==0){
+ if(use.charAt(3)=="k"){ fn=tCMYK; }
+ else { fn=tCMY; }
+ }
+ }
+ // try to guess the best choice.
+ else if("dc" in kwArgs || "dm" in kwArgs || "dy" in kwArgs){
+ if("dk" in kwArgs){ fn = tCMYK; }
+ else { fn = tCMY; }
+ }
+ else if("dh" in kwArgs || "ds" in kwArgs){
+ if("dv" in kwArgs){ fn = tHSV; }
+ else { fn = tHSL; }
+ }
+
+ var palette = this;
+ for(var p in kwArgs){
+ // ignore use
+ if(p=="use"){ continue; }
+ palette = fn(palette, p, kwArgs[p]);
+ }
+ return palette; // dojox.color.Palette
+ },
+ clone: function(){
+ // summary
+ // Clones the current palette.
+ return new dxc.Palette(this); // dojox.color.Palette
+ }
+ });
+
+ // static methods ---------------------------------------------------------------
+ dojo.mixin(dxc.Palette, {
+ generators: {
+ analogous:function(/* Object */args){
+ var high=args.high||60, // delta between base hue and highest hue (subtracted from base)
+ low=args.low||18, // delta between base hue and lowest hue (added to base)
+ base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv=base.toHsv();
+
+ // generate our hue angle differences
+ var h=[
+ (hsv.h+low+360)%360,
+ (hsv.h+Math.round(low/2)+360)%360,
+ hsv.h,
+ (hsv.h-Math.round(high/2)+360)%360,
+ (hsv.h-high+360)%360
+ ];
+
+ var s1=Math.max(10, (hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),
+ s2=(hsv.s>1)?hsv.s-1:21-hsv.s,
+ v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9, 20),
+ v2=(hsv.v<=90)?Math.max(hsv.v+5, 20):(95+Math.ceil((hsv.v-90)/2)),
+ s=[ s1, s2, hsv.s, s1, s1 ],
+ v=[ v1, v2, hsv.v, v1, v2 ]
+
+ return new dxc.Palette(dojo.map(h, function(hue, i){
+ return dojox.color.fromHsv(hue, s[i], v[i]);
+ })); // dojox.color.Palette
+ },
+
+ monochromatic: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv = base.toHsv();
+
+ // figure out the saturation and value
+ var s1 = (hsv.s-30>9)?hsv.s-30:hsv.s+30,
+ s2 = hsv.s,
+ v1 = rangeDiff(hsv.v, 20, 100),
+ v2 = (hsv.v-20>20)?hsv.v-20:hsv.v+60,
+ v3 = (hsv.v-50>20)?hsv.v-50:hsv.v+30;
+
+ return new dxc.Palette([
+ dojox.color.fromHsv(hsv.h, s1, v1),
+ dojox.color.fromHsv(hsv.h, s2, v3),
+ base,
+ dojox.color.fromHsv(hsv.h, s1, v3),
+ dojox.color.fromHsv(hsv.h, s2, v2)
+ ]); // dojox.color.Palette
+ },
+
+ triadic: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv = base.toHsv();
+
+ var h1 = (hsv.h+57+360)%360,
+ h2 = (hsv.h-157+360)%360,
+ s1 = (hsv.s>20)?hsv.s-10:hsv.s+10,
+ s2 = (hsv.s>90)?hsv.s-10:hsv.s+10,
+ s3 = (hsv.s>95)?hsv.s-5:hsv.s+5,
+ v1 = (hsv.v-20>20)?hsv.v-20:hsv.v+20,
+ v2 = (hsv.v-30>20)?hsv.v-30:hsv.v+30,
+ v3 = (hsv.v-30>70)?hsv.v-30:hsv.v+30;
+
+ return new dxc.Palette([
+ dojox.color.fromHsv(h1, s1, hsv.v),
+ dojox.color.fromHsv(hsv.h, s2, v2),
+ base,
+ dojox.color.fromHsv(h2, s2, v1),
+ dojox.color.fromHsv(h2, s3, v3)
+ ]); // dojox.color.Palette
+ },
+
+ complementary: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv = base.toHsv();
+
+ var h1 = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
+ s1 = Math.max(hsv.s-10, 0),
+ s2 = rangeDiff(hsv.s, 10, 100),
+ s3 = Math.min(100, hsv.s+20),
+ v1 = Math.min(100, hsv.v+30),
+ v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
+
+ return new dxc.Palette([
+ dojox.color.fromHsv(hsv.h, s1, v1),
+ dojox.color.fromHsv(hsv.h, s2, v2),
+ base,
+ dojox.color.fromHsv(h1, s3, v2),
+ dojox.color.fromHsv(h1, hsv.s, hsv.v)
+ ]); // dojox.color.Palette
+ },
+
+ splitComplementary: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ dangle = args.da || 30,
+ hsv = base.toHsv();
+
+ var baseh = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
+ h1 = (baseh-dangle+360)%360,
+ h2 = (baseh+dangle)%360,
+ s1 = Math.max(hsv.s-10, 0),
+ s2 = rangeDiff(hsv.s, 10, 100),
+ s3 = Math.min(100, hsv.s+20),
+ v1 = Math.min(100, hsv.v+30),
+ v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
+
+ return new dxc.Palette([
+ dojox.color.fromHsv(h1, s1, v1),
+ dojox.color.fromHsv(h1, s2, v2),
+ base,
+ dojox.color.fromHsv(h2, s3, v2),
+ dojox.color.fromHsv(h2, hsv.s, hsv.v)
+ ]); // dojox.color.Palette
+ },
+
+ compound: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv = base.toHsv();
+
+ var h1 = ((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,
+ h2 = ((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,
+ h3 = ((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,
+ s1 = (hsv.s-40>10)?hsv.s-40:hsv.s+40,
+ s2 = (hsv.s-10>80)?hsv.s-10:hsv.s+10,
+ s3 = (hsv.s-25>10)?hsv.s-25:hsv.s+25,
+ v1 = (hsv.v-40>10)?hsv.v-40:hsv.v+40,
+ v2 = (hsv.v-20>80)?hsv.v-20:hsv.v+20,
+ v3 = Math.max(hsv.v, 20);
+
+ return new dxc.Palette([
+ dojox.color.fromHsv(h1, s1, v1),
+ dojox.color.fromHsv(h1, s2, v2),
+ base,
+ dojox.color.fromHsv(h2, s3, v3),
+ dojox.color.fromHsv(h3, s2, v2)
+ ]); // dojox.color.Palette
+ },
+
+ shades: function(/* Object */args){
+ var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+ hsv = base.toHsv();
+
+ var s = (hsv.s==100 && hsv.v==0)?0:hsv.s,
+ v1 = (hsv.v-50>20)?hsv.v-50:hsv.v+30,
+ v2 = (hsv.v-25>=20)?hsv.v-25:hsv.v+55,
+ v3 = (hsv.v-75>=20)?hsv.v-75:hsv.v+5,
+ v4 = Math.max(hsv.v-10, 20);
+
+ return new dxc.Palette([
+ new dojox.color.fromHsv(hsv.h, s, v1),
+ new dojox.color.fromHsv(hsv.h, s, v2),
+ base,
+ new dojox.color.fromHsv(hsv.h, s, v3),
+ new dojox.color.fromHsv(hsv.h, s, v4)
+ ]); // dojox.color.Palette
+ }
+ },
+ generate: function(/* String|dojox.color.Color */base, /* Function|String */type){
+ // summary
+ // Generate a new Palette using any of the named functions in
+ // dojox.color.Palette.generators or an optional function definition.
+ if(dojo.isFunction(type)){
+ return type({ base: base }); // dojox.color.Palette
+ }
+ else if(dxc.Palette.generators[type]){
+ return dxc.Palette.generators[type]({ base: base }); // dojox.color.Palette
+ }
+ throw new Error("dojox.color.Palette.generate: the specified generator ('" + type + "') does not exist.");
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.Theme"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Theme"] = true;
+dojo.provide("dojox.charting.Theme");
+
+
+
+(function(){
+ var dxc=dojox.charting;
+ // TODO: Legend information
+
+ dxc.Theme = function(/*Object?*/ kwArgs){
+ kwArgs=kwArgs||{};
+ var def = dxc.Theme._def;
+ dojo.forEach(["chart", "plotarea", "axis", "series", "marker"], function(n){
+ this[n] = dojo.delegate(def[n], kwArgs[n]||{});
+ }, this);
+ this.markers = dojo.delegate(dxc.Theme.Markers, kwArgs.markers||{});
+ this.colors = [];
+ this.antiAlias = ("antiAlias" in kwArgs)?kwArgs.antiAlias:true;
+ this.assignColors = ("assignColors" in kwArgs)?kwArgs.assignColors:true;
+ this.assignMarkers = ("assignMarkers" in kwArgs)?kwArgs.assignMarkers:true;
+
+ // push the colors, use _def colors if none passed.
+ kwArgs.colors = kwArgs.colors||def.colors;
+ dojo.forEach(kwArgs.colors, function(item){
+ this.colors.push(item);
+ }, this);
+
+ // private variables for color and marker indexing
+ this._current = { color:0, marker: 0 };
+ this._markers = [];
+ this._buildMarkerArray();
+ };
+
+ // "static" fields
+ // default markers.
+ // A marker is defined by an SVG path segment; it should be defined as
+ // relative motion, and with the assumption that the path segment
+ // will be moved to the value point (i.e prepend Mx,y)
+ dxc.Theme.Markers={
+ CIRCLE: "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0",
+ SQUARE: "m-3,-3 l0,6 6,0 0,-6 z",
+ DIAMOND: "m0,-3 l3,3 -3,3 -3,-3 z",
+ CROSS: "m0,-3 l0,6 m-3,-3 l6,0",
+ X: "m-3,-3 l6,6 m0,-6 l-6,6",
+ TRIANGLE: "m-3,3 l3,-6 3,6 z",
+ TRIANGLE_INVERTED:"m-3,-3 l3,6 3,-6 z"
+ };
+ dxc.Theme._def={
+ // all objects are structs used directly in dojox.gfx
+ chart:{
+ stroke:null,
+ fill: "white"
+ },
+ plotarea:{
+ stroke:null,
+ fill: "white"
+ },
+ // TODO: label rotation on axis
+ axis:{
+ stroke: { // the axis itself
+ color:"#333",
+ width:1
+ },
+ /*
+ line: { // in the future can be used for gridlines
+ color:"#ccc",
+ width:1,
+ style:"Dot",
+ cap:"round"
+ },
+ */
+ majorTick: { // major ticks on axis, and used for major gridlines
+ color:"#666",
+ width:1,
+ length:6,
+ position:"center"
+ },
+ minorTick: { // minor ticks on axis, and used for minor gridlines
+ color:"#666",
+ width:0.8,
+ length:3,
+ position:"center"
+ },
+ microTick: { // minor ticks on axis, and used for minor gridlines
+ color:"#666",
+ width:0.5,
+ length:1,
+ position:"center"
+ },
+ font: "normal normal normal 7pt Tahoma", // labels on axis
+ fontColor:"#333" // color of labels
+ },
+ series:{
+ outline: {width: 0.1, color: "#ccc"}, // line or outline
+ stroke: {width: 1.5, color: "#333"}, // line or outline
+ fill: "#ccc", // fill, if appropriate
+ font: "normal normal normal 7pt Tahoma", // if there's a label
+ fontColor: "#000" // color of labels
+ },
+ marker:{ // any markers on a series.
+ stroke: {width:1}, // stroke or outline
+ fill: "#333", // fill if needed
+ font: "normal normal normal 7pt Tahoma", // label
+ fontColor: "#000"
+ },
+ colors:[ "#54544c","#858e94","#6e767a","#948585","#474747" ]
+ };
+
+ // prototype methods
+ dojo.extend(dxc.Theme, {
+ defineColors: function(obj){
+ // summary:
+ // Generate a set of colors for the theme based on keyword
+ // arguments
+ var kwArgs=obj||{};
+
+ // note that we've changed the default number from 32 to 4 colors
+ // are cycled anyways.
+ var c=[], n=kwArgs.num||5; // the number of colors to generate
+ if(kwArgs.colors){
+ // we have an array of colors predefined, so fix for the number of series.
+ var l=kwArgs.colors.length;
+ for(var i=0; i<n; i++){
+ c.push(kwArgs.colors[i%l]);
+ }
+ this.colors=c;
+ }else if(kwArgs.hue){
+ // single hue, generate a set based on brightness
+ var s=kwArgs.saturation||100; // saturation
+ var st=kwArgs.low||30;
+ var end=kwArgs.high||90;
+ // we'd like it to be a little on the darker side.
+ var l=(end+st)/2;
+
+ // alternately, use "shades"
+ this.colors = dojox.color.Palette.generate(
+ dojox.color.fromHsv(kwArgs.hue, s, l), "monochromatic"
+ ).colors;
+ }else if(kwArgs.generator){
+ // pass a base color and the name of a generator
+ this.colors=dojox.color.Palette.generate(kwArgs.base, kwArgs.generator).colors;
+ }
+ },
+
+ _buildMarkerArray: function(){
+ this._markers = [];
+ for(var p in this.markers){ this._markers.push(this.markers[p]); }
+ // reset the position
+ this._current.marker=0;
+ },
+
+ _clone: function(){
+ // summary:
+ // Return a clone of this theme, with the position vars reset to 0.
+ return new dxc.Theme({
+ chart: this.chart,
+ plotarea: this.plotarea,
+ axis: this.axis,
+ series: this.series,
+ marker: this.marker,
+ antiAlias: this.antiAlias,
+ assignColors: this.assignColors,
+ assignMarkers: this.assigneMarkers,
+ colors: dojo.delegate(this.colors)
+ });
+ },
+
+ addMarker:function(/*String*/ name, /*String*/ segment){
+ // summary:
+ // Add a custom marker to this theme.
+ // example:
+ // | myTheme.addMarker("Ellipse", foo);
+ this.markers[name]=segment;
+ this._buildMarkerArray();
+ },
+ setMarkers:function(/*Object*/ obj){
+ // summary:
+ // Set all the markers of this theme at once. obj should be a
+ // dictionary of keys and path segments.
+ //
+ // example:
+ // | myTheme.setMarkers({ "CIRCLE": foo });
+ this.markers=obj;
+ this._buildMarkerArray();
+ },
+
+ next: function(/*String?*/ type){
+ // summary:
+ // get either the next color or the next marker, depending on
+ // what was passed. If type is not passed, it assumes color.
+ // type:
+ // Optional. One of either "color" or "marker". Defaults to
+ // "color".
+ // example:
+ // | var color = myTheme.next();
+ // | var color = myTheme.next("color");
+ // | var marker = myTheme.next("marker");
+ if(type == "marker"){
+ return this._markers[ this._current.marker++ % this._markers.length ];
+ }else{
+ return this.colors[ this._current.color++ % this.colors.length ];
+ }
+ },
+ clear: function(){
+ // summary:
+ // resets both marker and color counters back to the start.
+ // Subsequent calls to `next` will retrievie the first value
+ // of each depending on the passed type.
+ this._current = {color: 0, marker: 0};
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.Element"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Element"] = true;
+dojo.provide("dojox.charting.Element");
+
+dojo.declare("dojox.charting.Element", null, {
+ constructor: function(chart){
+ this.chart = chart;
+ this.group = null;
+ this.htmlElements = [];
+ this.dirty = true;
+ },
+ createGroup: function(creator){
+ if(!creator){ creator = this.chart.surface; }
+ if(!this.group){
+ this.group = creator.createGroup();
+ }
+ return this;
+ },
+ purgeGroup: function(){
+ this.destroyHtmlElements();
+ if(this.group){
+ this.group.clear();
+ this.group.removeShape();
+ this.group = null;
+ }
+ this.dirty = true;
+ return this;
+ },
+ cleanGroup: function(creator){
+ this.destroyHtmlElements();
+ if(!creator){ creator = this.chart.surface; }
+ if(this.group){
+ this.group.clear();
+ }else{
+ this.group = creator.createGroup();
+ }
+ this.dirty = true;
+ return this;
+ },
+ destroyHtmlElements: function(){
+ if(this.htmlElements.length){
+ dojo.forEach(this.htmlElements, dojo.destroy);
+ this.htmlElements = [];
+ }
+ },
+ destroy: function(){
+ this.purgeGroup();
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.Series"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Series"] = true;
+dojo.provide("dojox.charting.Series");
+
+
+
+dojo.declare("dojox.charting.Series", dojox.charting.Element, {
+ constructor: function(chart, data, kwArgs){
+ dojo.mixin(this, kwArgs);
+ if(typeof this.plot != "string"){ this.plot = "default"; }
+ this.data = data;
+ this.dirty = true;
+ this.clear();
+ },
+ clear: function(){
+ this.dyn = {};
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.common"] = true;
+dojo.provide("dojox.charting.scaler.common");
+
+(function(){
+ var eq = function(/*Number*/ a, /*Number*/ b){
+ // summary: compare two FP numbers for equality
+ return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b)); // Boolean
+ };
+
+ dojo.mixin(dojox.charting.scaler.common, {
+ findString: function(/*String*/ val, /*Array*/ text){
+ val = val.toLowerCase();
+ for(var i = 0; i < text.length; ++i){
+ if(val == text[i]){ return true; }
+ }
+ return false;
+ },
+ getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
+ var def = kwArgs.fixed ?
+ number.toFixed(precision < 0 ? -precision : 0) :
+ number.toString();
+ if(kwArgs.labelFunc){
+ var r = kwArgs.labelFunc(def, number, precision);
+ if(r){ return r; }
+ // else fall through to the regular labels search
+ }
+ if(kwArgs.labels){
+ // classic binary search
+ var l = kwArgs.labels, lo = 0, hi = l.length;
+ while(lo < hi){
+ var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
+ if(val < number){
+ lo = mid + 1;
+ }else{
+ hi = mid;
+ }
+ }
+ // lets take into account FP errors
+ if(lo < l.length && eq(l[lo].value, number)){
+ return l[lo].text;
+ }
+ --lo;
+ if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
+ return l[lo].text;
+ }
+ lo += 2;
+ if(lo < l.length && eq(l[lo].value, number)){
+ return l[lo].text;
+ }
+ // otherwise we will produce a number
+ }
+ return def;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.linear"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.linear"] = true;
+dojo.provide("dojox.charting.scaler.linear");
+
+
+(function(){
+ var deltaLimit = 3, // pixels
+ dc = dojox.charting, dcs = dc.scaler, dcsc = dcs.common,
+ findString = dcsc.findString,
+ getLabel = dcsc.getNumericLabel;
+
+ var calcTicks = function(min, max, kwArgs, majorTick, minorTick, microTick, span){
+ kwArgs = dojo.delegate(kwArgs);
+ if(!majorTick){
+ if(kwArgs.fixUpper == "major"){ kwArgs.fixUpper = "minor"; }
+ if(kwArgs.fixLower == "major"){ kwArgs.fixLower = "minor"; }
+ }
+ if(!minorTick){
+ if(kwArgs.fixUpper == "minor"){ kwArgs.fixUpper = "micro"; }
+ if(kwArgs.fixLower == "minor"){ kwArgs.fixLower = "micro"; }
+ }
+ if(!microTick){
+ if(kwArgs.fixUpper == "micro"){ kwArgs.fixUpper = "none"; }
+ if(kwArgs.fixLower == "micro"){ kwArgs.fixLower = "none"; }
+ }
+ var lowerBound = findString(kwArgs.fixLower, ["major"]) ?
+ Math.floor(kwArgs.min / majorTick) * majorTick :
+ findString(kwArgs.fixLower, ["minor"]) ?
+ Math.floor(kwArgs.min / minorTick) * minorTick :
+ findString(kwArgs.fixLower, ["micro"]) ?
+ Math.floor(kwArgs.min / microTick) * microTick : kwArgs.min,
+ upperBound = findString(kwArgs.fixUpper, ["major"]) ?
+ Math.ceil(kwArgs.max / majorTick) * majorTick :
+ findString(kwArgs.fixUpper, ["minor"]) ?
+ Math.ceil(kwArgs.max / minorTick) * minorTick :
+ findString(kwArgs.fixUpper, ["micro"]) ?
+ Math.ceil(kwArgs.max / microTick) * microTick : kwArgs.max;
+
+ if(kwArgs.useMin){ min = lowerBound; }
+ if(kwArgs.useMax){ max = upperBound; }
+
+ var majorStart = (!majorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major"])) ?
+ min : Math.ceil(min / majorTick) * majorTick,
+ minorStart = (!minorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor"])) ?
+ min : Math.ceil(min / minorTick) * minorTick,
+ microStart = (! microTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor", "micro"])) ?
+ min : Math.ceil(min / microTick) * microTick,
+ majorCount = !majorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major"]) ?
+ Math.round((max - majorStart) / majorTick) :
+ Math.floor((max - majorStart) / majorTick)) + 1,
+ minorCount = !minorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor"]) ?
+ Math.round((max - minorStart) / minorTick) :
+ Math.floor((max - minorStart) / minorTick)) + 1,
+ microCount = !microTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor", "micro"]) ?
+ Math.round((max - microStart) / microTick) :
+ Math.floor((max - microStart) / microTick)) + 1,
+ minorPerMajor = minorTick ? Math.round(majorTick / minorTick) : 0,
+ microPerMinor = microTick ? Math.round(minorTick / microTick) : 0,
+ majorPrecision = majorTick ? Math.floor(Math.log(majorTick) / Math.LN10) : 0,
+ minorPrecision = minorTick ? Math.floor(Math.log(minorTick) / Math.LN10) : 0,
+ scale = span / (max - min);
+ if(!isFinite(scale)){ scale = 1; }
+
+ return {
+ bounds: {
+ lower: lowerBound,
+ upper: upperBound,
+ from: min,
+ to: max,
+ scale: scale,
+ span: span
+ },
+ major: {
+ tick: majorTick,
+ start: majorStart,
+ count: majorCount,
+ prec: majorPrecision
+ },
+ minor: {
+ tick: minorTick,
+ start: minorStart,
+ count: minorCount,
+ prec: minorPrecision
+ },
+ micro: {
+ tick: microTick,
+ start: microStart,
+ count: microCount,
+ prec: 0
+ },
+ minorPerMajor: minorPerMajor,
+ microPerMinor: microPerMinor,
+ scaler: dcs.linear
+ };
+ };
+
+ dojo.mixin(dojox.charting.scaler.linear, {
+ buildScaler: function(/*Number*/ min, /*Number*/ max, /*Number*/ span, /*Object*/ kwArgs){
+ var h = {fixUpper: "none", fixLower: "none", natural: false};
+ if(kwArgs){
+ if("fixUpper" in kwArgs){ h.fixUpper = String(kwArgs.fixUpper); }
+ if("fixLower" in kwArgs){ h.fixLower = String(kwArgs.fixLower); }
+ if("natural" in kwArgs){ h.natural = Boolean(kwArgs.natural); }
+ }
+
+ // update bounds
+ if("min" in kwArgs){ min = kwArgs.min; }
+ if("max" in kwArgs){ max = kwArgs.max; }
+ if(kwArgs.includeZero){
+ if(min > 0){ min = 0; }
+ if(max < 0){ max = 0; }
+ }
+ h.min = min;
+ h.useMin = true;
+ h.max = max;
+ h.useMax = true;
+
+ if("from" in kwArgs){
+ min = kwArgs.from;
+ h.useMin = false;
+ }
+ if("to" in kwArgs){
+ max = kwArgs.to;
+ h.useMax = false;
+ }
+
+ // check for erroneous condition
+ if(max <= min){
+ return calcTicks(min, max, h, 0, 0, 0, span); // Object
+ }
+
+ var mag = Math.floor(Math.log(max - min) / Math.LN10),
+ major = kwArgs && ("majorTickStep" in kwArgs) ? kwArgs.majorTickStep : Math.pow(10, mag),
+ minor = 0, micro = 0, ticks;
+
+ // calculate minor ticks
+ if(kwArgs && ("minorTickStep" in kwArgs)){
+ minor = kwArgs.minorTickStep;
+ }else{
+ do{
+ minor = major / 10;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ minor = major / 5;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ minor = major / 2;
+ if(!h.natural || minor > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, 0, span);
+ if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+ }
+ return calcTicks(min, max, h, major, 0, 0, span); // Object
+ }while(false);
+ }
+
+ // calculate micro ticks
+ if(kwArgs && ("microTickStep" in kwArgs)){
+ micro = kwArgs.microTickStep;
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ }else{
+ do{
+ micro = minor / 10;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = minor / 5;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = minor / 2;
+ if(!h.natural || micro > 0.9){
+ ticks = calcTicks(min, max, h, major, minor, micro, span);
+ if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+ }
+ micro = 0;
+ }while(false);
+ }
+
+ return micro ? ticks : calcTicks(min, max, h, major, minor, 0, span); // Object
+ },
+ buildTicks: function(/*Object*/ scaler, /*Object*/ kwArgs){
+ var step, next, tick,
+ nextMajor = scaler.major.start,
+ nextMinor = scaler.minor.start,
+ nextMicro = scaler.micro.start;
+ if(kwArgs.microTicks && scaler.micro.tick){
+ step = scaler.micro.tick, next = nextMicro;
+ }else if(kwArgs.minorTicks && scaler.minor.tick){
+ step = scaler.minor.tick, next = nextMinor;
+ }else if(scaler.major.tick){
+ step = scaler.major.tick, next = nextMajor;
+ }else{
+ // no ticks
+ return null;
+ }
+ // make sure that we have finite bounds
+ var revScale = 1 / scaler.bounds.scale;
+ if(scaler.bounds.to <= scaler.bounds.from || isNaN(revScale) || !isFinite(revScale) ||
+ step <= 0 || isNaN(step) || !isFinite(step)){
+ // no ticks
+ return null;
+ }
+ // loop over all ticks
+ var majorTicks = [], minorTicks = [], microTicks = [];
+ while(next <= scaler.bounds.to + revScale){
+ if(Math.abs(nextMajor - next) < step / 2){
+ // major tick
+ tick = {value: nextMajor};
+ if(kwArgs.majorLabels){
+ tick.label = getLabel(nextMajor, scaler.major.prec, kwArgs);
+ }
+ majorTicks.push(tick);
+ nextMajor += scaler.major.tick;
+ nextMinor += scaler.minor.tick;
+ nextMicro += scaler.micro.tick;
+ }else if(Math.abs(nextMinor - next) < step / 2){
+ // minor tick
+ if(kwArgs.minorTicks){
+ tick = {value: nextMinor};
+ if(kwArgs.minorLabels && (scaler.minMinorStep <= scaler.minor.tick * scaler.bounds.scale)){
+ tick.label = getLabel(nextMinor, scaler.minor.prec, kwArgs);
+ }
+ minorTicks.push(tick);
+ }
+ nextMinor += scaler.minor.tick;
+ nextMicro += scaler.micro.tick;
+ }else{
+ // micro tick
+ if(kwArgs.microTicks){
+ microTicks.push({value: nextMicro});
+ }
+ nextMicro += scaler.micro.tick;
+ }
+ next += step;
+ }
+ return {major: majorTicks, minor: minorTicks, micro: microTicks}; // Object
+ },
+ getTransformerFromModel: function(/*Object*/ scaler){
+ var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+ return function(x){ return (x - offset) * scale; }; // Function
+ },
+ getTransformerFromPlot: function(/*Object*/ scaler){
+ var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+ return function(x){ return x / scale + offset; }; // Function
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.common"] = true;
+dojo.provide("dojox.charting.axis2d.common");
+
+
+
+(function(){
+ var g = dojox.gfx;
+
+ var clearNode = function(s){
+ s.marginLeft = "0px";
+ s.marginTop = "0px";
+ s.marginRight = "0px";
+ s.marginBottom = "0px";
+ s.paddingLeft = "0px";
+ s.paddingTop = "0px";
+ s.paddingRight = "0px";
+ s.paddingBottom = "0px";
+ s.borderLeftWidth = "0px";
+ s.borderTopWidth = "0px";
+ s.borderRightWidth = "0px";
+ s.borderBottomWidth = "0px";
+ };
+
+ var getBoxWidth = function(n){
+ // marginBox is incredibly slow, so avoid it if we can
+ if(n["getBoundingClientRect"]){
+ var bcr = n.getBoundingClientRect();
+ return bcr.width || (bcr.right - bcr.left);
+ }else{
+ return dojo.marginBox(n).w;
+ }
+ };
+
+ dojo.mixin(dojox.charting.axis2d.common, {
+ createText: {
+ gfx: function(chart, creator, x, y, align, text, font, fontColor){
+ return creator.createText({
+ x: x, y: y, text: text, align: align
+ }).setFont(font).setFill(fontColor);
+ },
+ html: function(chart, creator, x, y, align, text, font, fontColor, labelWidth){
+ // setup the text node
+ var p = dojo.doc.createElement("div"), s = p.style, boxWidth;
+ clearNode(s);
+ s.font = font;
+ p.innerHTML = String(text).replace(/\s/g, "&nbsp;");
+ s.color = fontColor;
+ // measure the size
+ s.position = "absolute";
+ s.left = "-10000px";
+ dojo.body().appendChild(p);
+ var size = g.normalizedLength(g.splitFontString(font).size);
+
+ // do we need to calculate the label width?
+ if(!labelWidth){
+ boxWidth = getBoxWidth(p);
+ }
+
+ // new settings for the text node
+ dojo.body().removeChild(p);
+
+ s.position = "relative";
+ if(labelWidth){
+ s.width = labelWidth + "px";
+ // s.border = "1px dotted grey";
+ switch(align){
+ case "middle":
+ s.textAlign = "center";
+ s.left = (x - labelWidth / 2) + "px";
+ break;
+ case "end":
+ s.textAlign = "right";
+ s.left = (x - labelWidth) + "px";
+ break;
+ default:
+ s.left = x + "px";
+ s.textAlign = "left";
+ break;
+ }
+ }else{
+ switch(align){
+ case "middle":
+ s.left = Math.floor(x - boxWidth / 2) + "px";
+ // s.left = Math.floor(x - p.offsetWidth / 2) + "px";
+ break;
+ case "end":
+ s.left = Math.floor(x - boxWidth) + "px";
+ // s.left = Math.floor(x - p.offsetWidth) + "px";
+ break;
+ //case "start":
+ default:
+ s.left = Math.floor(x) + "px";
+ break;
+ }
+ }
+ s.top = Math.floor(y - size) + "px";
+ // setup the wrapper node
+ var wrap = dojo.doc.createElement("div"), w = wrap.style;
+ clearNode(w);
+ w.width = "0px";
+ w.height = "0px";
+ // insert nodes
+ wrap.appendChild(p)
+ chart.node.insertBefore(wrap, chart.node.firstChild);
+ return wrap;
+ }
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Base"] = true;
+dojo.provide("dojox.charting.axis2d.Base");
+
+
+
+dojo.declare("dojox.charting.axis2d.Base", dojox.charting.Element, {
+ constructor: function(chart, kwArgs){
+ this.vertical = kwArgs && kwArgs.vertical;
+ },
+ clear: function(){
+ return this;
+ },
+ initialized: function(){
+ return false;
+ },
+ calculate: function(min, max, span){
+ return this;
+ },
+ getScaler: function(){
+ return null;
+ },
+ getTicks: function(){
+ return null;
+ },
+ getOffsets: function(){
+ return {l: 0, r: 0, t: 0, b: 0};
+ },
+ render: function(dim, offsets){
+ return this;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.string"] = true;
+dojo.provide("dojo.string");
+
+/*=====
+dojo.string = {
+ // summary: String utilities for Dojo
+};
+=====*/
+
+dojo.string.rep = function(/*String*/str, /*Integer*/num){
+ // summary:
+ // Efficiently replicate a string `n` times.
+ // str:
+ // the string to replicate
+ // num:
+ // number of times to replicate the string
+
+ if(num <= 0 || !str){ return ""; }
+
+ var buf = [];
+ for(;;){
+ if(num & 1){
+ buf.push(str);
+ }
+ if(!(num >>= 1)){ break; }
+ str += str;
+ }
+ return buf.join(""); // String
+};
+
+dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){
+ // summary:
+ // Pad a string to guarantee that it is at least `size` length by
+ // filling with the character `ch` at either the start or end of the
+ // string. Pads at the start, by default.
+ // text:
+ // the string to pad
+ // size:
+ // length to provide padding
+ // ch:
+ // character to pad, defaults to '0'
+ // end:
+ // adds padding at the end if true, otherwise pads at start
+ // example:
+ // | // Fill the string to length 10 with "+" characters on the right. Yields "Dojo++++++".
+ // | dojo.string.pad("Dojo", 10, "+", true);
+
+ if(!ch){
+ ch = '0';
+ }
+ var out = String(text),
+ pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length));
+ return end ? out + pad : pad + out; // String
+};
+
+dojo.string.substitute = function( /*String*/ template,
+ /*Object|Array*/map,
+ /*Function?*/ transform,
+ /*Object?*/ thisObject){
+ // summary:
+ // Performs parameterized substitutions on a string. Throws an
+ // exception if any parameter is unmatched.
+ // template:
+ // a string with expressions in the form `${key}` to be replaced or
+ // `${key:format}` which specifies a format function. keys are case-sensitive.
+ // map:
+ // hash to search for substitutions
+ // transform:
+ // a function to process all parameters before substitution takes
+ // place, e.g. mylib.encodeXML
+ // thisObject:
+ // where to look for optional format function; default to the global
+ // namespace
+ // example:
+ // Substitutes two expressions in a string from an Array or Object
+ // | // returns "File 'foo.html' is not found in directory '/temp'."
+ // | // by providing substitution data in an Array
+ // | dojo.string.substitute(
+ // | "File '${0}' is not found in directory '${1}'.",
+ // | ["foo.html","/temp"]
+ // | );
+ // |
+ // | // also returns "File 'foo.html' is not found in directory '/temp'."
+ // | // but provides substitution data in an Object structure. Dotted
+ // | // notation may be used to traverse the structure.
+ // | dojo.string.substitute(
+ // | "File '${name}' is not found in directory '${info.dir}'.",
+ // | { name: "foo.html", info: { dir: "/temp" } }
+ // | );
+ // example:
+ // Use a transform function to modify the values:
+ // | // returns "file 'foo.html' is not found in directory '/temp'."
+ // | dojo.string.substitute(
+ // | "${0} is not found in ${1}.",
+ // | ["foo.html","/temp"],
+ // | function(str){
+ // | // try to figure out the type
+ // | var prefix = (str.charAt(0) == "/") ? "directory": "file";
+ // | return prefix + " '" + str + "'";
+ // | }
+ // | );
+ // example:
+ // Use a formatter
+ // | // returns "thinger -- howdy"
+ // | dojo.string.substitute(
+ // | "${0:postfix}", ["thinger"], null, {
+ // | postfix: function(value, key){
+ // | return value + " -- howdy";
+ // | }
+ // | }
+ // | );
+
+ thisObject = thisObject || dojo.global;
+ transform = transform ?
+ dojo.hitch(thisObject, transform) : function(v){ return v; };
+
+ return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
+ function(match, key, format){
+ var value = dojo.getObject(key, false, map);
+ if(format){
+ value = dojo.getObject(format, false, thisObject).call(thisObject, value, key);
+ }
+ return transform(value, key).toString();
+ }); // String
+};
+
+/*=====
+dojo.string.trim = function(str){
+ // summary:
+ // Trims whitespace from both sides of the string
+ // str: String
+ // String to be trimmed
+ // returns: String
+ // Returns the trimmed string
+ // description:
+ // This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+ // The short yet performant version of this function is dojo.trim(),
+ // which is part of Dojo base. Uses String.prototype.trim instead, if available.
+ return ""; // String
+}
+=====*/
+
+dojo.string.trim = String.prototype.trim ?
+ dojo.trim : // aliasing to the native function
+ function(str){
+ str = str.replace(/^\s+/, '');
+ for(var i = str.length - 1; i >= 0; i--){
+ if(/\S/.test(str.charAt(i))){
+ str = str.substring(0, i + 1);
+ break;
+ }
+ }
+ return str;
+ };
+
+}
+
+if(!dojo._hasResource["dojox.lang.utils"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.utils"] = true;
+dojo.provide("dojox.lang.utils");
+
+(function(){
+ var empty = {}, du = dojox.lang.utils;
+
+ var clone = function(o){
+ if(dojo.isArray(o)){
+ return dojo._toArray(o);
+ }
+ if(!dojo.isObject(o) || dojo.isFunction(o)){
+ return o;
+ }
+ return dojo.delegate(o);
+ }
+
+ dojo.mixin(du, {
+ coerceType: function(target, source){
+ switch(typeof target){
+ case "number": return Number(eval("(" + source + ")"));
+ case "string": return String(source);
+ case "boolean": return Boolean(eval("(" + source + ")"));
+ }
+ return eval("(" + source + ")");
+ },
+
+ updateWithObject: function(target, source, conv){
+ // summary: updates an existing object in place with properties from an "source" object.
+ // target: Object: the "target" object to be updated
+ // source: Object: the "source" object, whose properties will be used to source the existed object.
+ // conv: Boolean?: force conversion to the original type
+ if(!source){ return target; }
+ for(var x in target){
+ if(x in source && !(x in empty)){
+ var t = target[x];
+ if(t && typeof t == "object"){
+ du.updateWithObject(t, source[x], conv);
+ }else{
+ target[x] = conv ? du.coerceType(t, source[x]) : clone(source[x]);
+ }
+ }
+ }
+ return target; // Object
+ },
+
+ updateWithPattern: function(target, source, pattern, conv){
+ // summary: updates an existing object in place with properties from an "source" object.
+ // target: Object: the "target" object to be updated
+ // source: Object: the "source" object, whose properties will be used to source the existed object.
+ // pattern: Array: an array of properties to be copied
+ // conv: Boolean?: force conversion to the original type
+ if(!source || !pattern){ return target; }
+ for(var x in pattern){
+ if(x in source && !(x in empty)){
+ target[x] = conv ? du.coerceType(pattern[x], source[x]) : clone(source[x]);
+ }
+ }
+ return target; // Object
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Default"] = true;
+dojo.provide("dojox.charting.axis2d.Default");
+
+
+
+
+
+
+
+
+
+
+
+(function(){
+ var dc = dojox.charting,
+ df = dojox.lang.functional,
+ du = dojox.lang.utils,
+ g = dojox.gfx,
+ lin = dc.scaler.linear,
+ labelGap = 4; // in pixels
+
+ dojo.declare("dojox.charting.axis2d.Default", dojox.charting.axis2d.Base, {
+ defaultParams: {
+ vertical: false, // true for vertical axis
+ fixUpper: "none", // align the upper on ticks: "major", "minor", "micro", "none"
+ fixLower: "none", // align the lower on ticks: "major", "minor", "micro", "none"
+ natural: false, // all tick marks should be made on natural numbers
+ leftBottom: true, // position of the axis, used with "vertical"
+ includeZero: false, // 0 should be included
+ fixed: true, // all labels are fixed numbers
+ majorLabels: true, // draw major labels
+ minorTicks: true, // draw minor ticks
+ minorLabels: true, // draw minor labels
+ microTicks: false, // draw micro ticks
+ htmlLabels: true // use HTML to draw labels
+ },
+ optionalParams: {
+ min: 0, // minimal value on this axis
+ max: 1, // maximal value on this axis
+ from: 0, // visible from this value
+ to: 1, // visible to this value
+ majorTickStep: 4, // major tick step
+ minorTickStep: 2, // minor tick step
+ microTickStep: 1, // micro tick step
+ labels: [], // array of labels for major ticks
+ // with corresponding numeric values
+ // ordered by values
+ labelFunc: null, // function to compute label values
+ maxLabelSize: 0, // size in px. For use with labelFunc
+
+ // TODO: add support for minRange!
+ // minRange: 1, // smallest distance from min allowed on the axis
+
+ // theme components
+ stroke: {}, // stroke for an axis
+ majorTick: {}, // stroke + length for a tick
+ minorTick: {}, // stroke + length for a tick
+ microTick: {}, // stroke + length for a tick
+ font: "", // font for labels
+ fontColor: "" // color for labels as a string
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.delegate(this.defaultParams, kwArgs);
+ // du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ },
+ dependOnData: function(){
+ return !("min" in this.opt) || !("max" in this.opt);
+ },
+ clear: function(){
+ delete this.scaler;
+ delete this.ticks;
+ this.dirty = true;
+ return this;
+ },
+ initialized: function(){
+ return "scaler" in this && !(this.dirty && this.dependOnData());
+ },
+ setWindow: function(scale, offset){
+ this.scale = scale;
+ this.offset = offset;
+ return this.clear();
+ },
+ getWindowScale: function(){
+ return "scale" in this ? this.scale : 1;
+ },
+ getWindowOffset: function(){
+ return "offset" in this ? this.offset : 0;
+ },
+ _groupLabelWidth: function(labels, font){
+ if(labels[0]["text"]){
+ labels = df.map(labels, function(label){ return label.text; });
+ }
+ var s = labels.join("<br>");
+ return dojox.gfx._base._getTextBox(s, {font: font}).w || 0;
+ },
+ calculate: function(min, max, span, labels){
+ if(this.initialized()){
+ return this;
+ }
+ var o = this.opt;
+ this.labels = "labels" in o ? o.labels : labels;
+ this.scaler = lin.buildScaler(min, max, span, o);
+ var tsb = this.scaler.bounds;
+ if("scale" in this){
+ // calculate new range
+ o.from = tsb.lower + this.offset;
+ o.to = (tsb.upper - tsb.lower) / this.scale + o.from;
+ // make sure that bounds are correct
+ if( !isFinite(o.from) ||
+ isNaN(o.from) ||
+ !isFinite(o.to) ||
+ isNaN(o.to) ||
+ o.to - o.from >= tsb.upper - tsb.lower
+ ){
+ // any error --- remove from/to bounds
+ delete o.from;
+ delete o.to;
+ delete this.scale;
+ delete this.offset;
+ }else{
+ // shift the window, if we are out of bounds
+ if(o.from < tsb.lower){
+ o.to += tsb.lower - o.from;
+ o.from = tsb.lower;
+ }else if(o.to > tsb.upper){
+ o.from += tsb.upper - o.to;
+ o.to = tsb.upper;
+ }
+ // update the offset
+ this.offset = o.from - tsb.lower;
+ }
+ // re-calculate the scaler
+ this.scaler = lin.buildScaler(min, max, span, o);
+ tsb = this.scaler.bounds;
+ // cleanup
+ if(this.scale == 1 && this.offset == 0){
+ delete this.scale;
+ delete this.offset;
+ }
+ }
+ var minMinorStep = 0, ta = this.chart.theme.axis,
+ taFont = "font" in o ? o.font : ta.font,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+ if(this.vertical){
+ if(size){
+ minMinorStep = size + labelGap;
+ }
+ }else{
+ if(size){
+ var labelWidth, i;
+ if(o.labelFunc && o.maxLabelSize){
+ labelWidth = o.maxLabelSize;
+ }else if(this.labels){
+ labelWidth = this._groupLabelWidth(this.labels, taFont);
+ }else{
+ var labelLength = Math.ceil(
+ Math.log(
+ Math.max(
+ Math.abs(tsb.from),
+ Math.abs(tsb.to)
+ )
+ ) / Math.LN10
+ ),
+ t = [];
+ if(tsb.from < 0 || tsb.to < 0){
+ t.push("-");
+ }
+ t.push(dojo.string.rep("9", labelLength));
+ var precision = Math.floor(
+ Math.log( tsb.to - tsb.from ) / Math.LN10
+ );
+ if(precision > 0){
+ t.push(".");
+ for(i = 0; i < precision; ++i){
+ t.push("9");
+ }
+ }
+ labelWidth = dojox.gfx._base._getTextBox(
+ t.join(""),
+ { font: taFont }
+ ).w;
+ }
+ minMinorStep = labelWidth + labelGap;
+ }
+ }
+ this.scaler.minMinorStep = minMinorStep;
+ this.ticks = lin.buildTicks(this.scaler, o);
+ return this;
+ },
+ getScaler: function(){
+ return this.scaler;
+ },
+ getTicks: function(){
+ return this.ticks;
+ },
+ getOffsets: function(){
+ var o = this.opt;
+ var offsets = { l: 0, r: 0, t: 0, b: 0 },
+ labelWidth,
+ a,
+ b,
+ c,
+ d,
+ gl = dc.scaler.common.getNumericLabel,
+ offset = 0,
+ ta = this.chart.theme.axis,
+ taFont = "font" in o ? o.font : ta.font,
+ taMajorTick = "majorTick" in o ? o.majorTick : ta.majorTick,
+ taMinorTick = "minorTick" in o ? o.minorTick : ta.minorTick,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+ s = this.scaler;
+ if(!s){
+ return offsets;
+ }
+ var ma = s.major, mi = s.minor;
+ if(this.vertical){
+ if(size){
+ if(o.labelFunc && o.maxLabelSize){
+ labelWidth = o.maxLabelSize;
+ }else if(this.labels){
+ labelWidth = this._groupLabelWidth(
+ this.labels,
+ taFont
+ );
+ }else{
+ labelWidth = this._groupLabelWidth([
+ gl(ma.start, ma.prec, o),
+ gl(ma.start + ma.count * ma.tick, ma.prec, o),
+ gl(mi.start, mi.prec, o),
+ gl(mi.start + mi.count * mi.tick, mi.prec, o)
+ ], taFont);
+ }
+ offset = labelWidth + labelGap;
+ }
+ offset += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+ offsets[o.leftBottom ? "l" : "r"] = offset;
+ offsets.t = offsets.b = size / 2;
+ }else{
+ if(size){
+ offset = size + labelGap;
+ }
+ offset += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+ offsets[o.leftBottom ? "b" : "t"] = offset;
+ if(size){
+ if(o.labelFunc && o.maxLabelSize){
+ labelWidth = o.maxLabelSize;
+ }else if(this.labels){
+ labelWidth = this._groupLabelWidth(this.labels, taFont);
+ }else{
+ labelWidth = this._groupLabelWidth([
+ gl(ma.start, ma.prec, o),
+ gl(ma.start + ma.count * ma.tick, ma.prec, o),
+ gl(mi.start, mi.prec, o),
+ gl(mi.start + mi.count * mi.tick, mi.prec, o)
+ ], taFont);
+ }
+ offsets.l = offsets.r = labelWidth / 2;
+ }
+ }
+ if(labelWidth){
+ this._cachedLabelWidth = labelWidth;
+ }
+ return offsets;
+ },
+ render: function(dim, offsets){
+ if(!this.dirty){
+ return this;
+ }
+ // prepare variable
+ var o = this.opt;
+ var start,
+ stop,
+ axisVector,
+ tickVector,
+ labelOffset,
+ labelAlign,
+ ta = this.chart.theme.axis,
+ taStroke = "stroke" in o ? o.stroke : ta.stroke,
+ taMajorTick = "majorTick" in o ? o.majorTick : ta.majorTick,
+ taMinorTick = "minorTick" in o ? o.minorTick : ta.minorTick,
+ taMicroTick = "microTick" in o ? o.microTick : ta.minorTick,
+ taFont = "font" in o ? o.font : ta.font,
+ taFontColor = "fontColor" in o ? o.fontColor : ta.fontColor,
+ tickSize = Math.max(taMajorTick.length, taMinorTick.length),
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+ if(this.vertical){
+ start = { y: dim.height - offsets.b };
+ stop = { y: offsets.t };
+ axisVector = { x: 0, y: -1 };
+ if(o.leftBottom){
+ start.x = stop.x = offsets.l;
+ tickVector = { x: -1, y: 0 };
+ labelAlign = "end";
+ }else{
+ start.x = stop.x = dim.width - offsets.r;
+ tickVector = { x: 1, y: 0 };
+ labelAlign = "start";
+ }
+ labelOffset = {
+ x: tickVector.x * (tickSize + labelGap),
+ y: size * 0.4
+ };
+ }else{
+ start = { x: offsets.l };
+ stop = { x: dim.width - offsets.r };
+ axisVector = { x: 1, y: 0 };
+ labelAlign = "middle";
+ if(o.leftBottom){
+ start.y = stop.y = dim.height - offsets.b;
+ tickVector = { x: 0, y: 1 };
+ labelOffset = { y: tickSize + labelGap + size };
+ }else{
+ start.y = stop.y = offsets.t;
+ tickVector = { x: 0, y: -1 };
+ labelOffset = { y: -tickSize - labelGap };
+ }
+ labelOffset.x = 0;
+ }
+
+ // render shapes
+
+ this.cleanGroup();
+
+ try{
+ var s = this.group,
+ c = this.scaler,
+ t = this.ticks,
+ canLabel,
+ f = lin.getTransformerFromModel(this.scaler),
+ forceHtmlLabels = (dojox.gfx.renderer == "canvas"),
+ labelType = forceHtmlLabels || this.opt.htmlLabels && !dojo.isIE && !dojo.isOpera ? "html" : "gfx",
+ dx = tickVector.x * taMajorTick.length,
+ dy = tickVector.y * taMajorTick.length;
+
+ s.createLine({
+ x1: start.x,
+ y1: start.y,
+ x2: stop.x,
+ y2: stop.y
+ }).setStroke(taStroke);
+
+ dojo.forEach(t.major, function(tick){
+ var offset = f(tick.value), elem,
+ x = start.x + axisVector.x * offset,
+ y = start.y + axisVector.y * offset;
+ s.createLine({
+ x1: x, y1: y,
+ x2: x + dx,
+ y2: y + dy
+ }).setStroke(taMajorTick);
+ if(tick.label){
+ elem = dc.axis2d.common.createText[labelType](
+ this.chart,
+ s,
+ x + labelOffset.x,
+ y + labelOffset.y,
+ labelAlign,
+ tick.label,
+ taFont,
+ taFontColor,
+ this._cachedLabelWidth
+ );
+ if(labelType == "html"){
+ this.htmlElements.push(elem);
+ }
+ }
+ }, this);
+
+ dx = tickVector.x * taMinorTick.length;
+ dy = tickVector.y * taMinorTick.length;
+ canLabel = c.minMinorStep <= c.minor.tick * c.bounds.scale;
+ dojo.forEach(t.minor, function(tick){
+ var offset = f(tick.value), elem,
+ x = start.x + axisVector.x * offset,
+ y = start.y + axisVector.y * offset;
+ s.createLine({
+ x1: x, y1: y,
+ x2: x + dx,
+ y2: y + dy
+ }).setStroke(taMinorTick);
+ if(canLabel && tick.label){
+ elem = dc.axis2d.common.createText[labelType](
+ this.chart,
+ s,
+ x + labelOffset.x,
+ y + labelOffset.y,
+ labelAlign,
+ tick.label,
+ taFont,
+ taFontColor,
+ this._cachedLabelWidth
+ );
+ if(labelType == "html"){
+ this.htmlElements.push(elem);
+ }
+ }
+ }, this);
+
+ dx = tickVector.x * taMicroTick.length;
+ dy = tickVector.y * taMicroTick.length;
+ dojo.forEach(t.micro, function(tick){
+ var offset = f(tick.value), elem,
+ x = start.x + axisVector.x * offset,
+ y = start.y + axisVector.y * offset;
+ s.createLine({
+ x1: x, y1: y,
+ x2: x + dx,
+ y2: y + dy
+ }).setStroke(taMicroTick);
+ }, this);
+ }catch(e){
+ // squelch
+ }
+
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.common"] = true;
+dojo.provide("dojox.charting.plot2d.common");
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common;
+
+ dojo.mixin(dojox.charting.plot2d.common, {
+ makeStroke: function(stroke){
+ if(!stroke){ return stroke; }
+ if(typeof stroke == "string" || stroke instanceof dojo.Color){
+ stroke = {color: stroke};
+ }
+ return dojox.gfx.makeParameters(dojox.gfx.defaultStroke, stroke);
+ },
+ augmentColor: function(target, color){
+ var t = new dojo.Color(target),
+ c = new dojo.Color(color);
+ c.a = t.a;
+ return c;
+ },
+ augmentStroke: function(stroke, color){
+ var s = dc.makeStroke(stroke);
+ if(s){
+ s.color = dc.augmentColor(s.color, color);
+ }
+ return s;
+ },
+ augmentFill: function(fill, color){
+ var fc, c = new dojo.Color(color);
+ if(typeof fill == "string" || fill instanceof dojo.Color){
+ return dc.augmentColor(fill, color);
+ }
+ return fill;
+ },
+
+ defaultStats: {
+ hmin: Number.POSITIVE_INFINITY, hmax: Number.NEGATIVE_INFINITY,
+ vmin: Number.POSITIVE_INFINITY, vmax: Number.NEGATIVE_INFINITY
+ },
+
+ collectSimpleStats: function(series){
+ var stats = dojo.clone(dc.defaultStats);
+ for(var i = 0; i < series.length; ++i){
+ var run = series[i];
+ if(!run.data.length){ continue; }
+ if(typeof run.data[0] == "number"){
+ // 1D case
+ var old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, i){
+ var x = i + 1, y = val;
+ if(isNaN(y)){ y = 0; }
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, y);
+ stats.vmax = Math.max(stats.vmax, y);
+ });
+ }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }else{
+ // 2D case
+ var old_hmin = stats.hmin, old_hmax = stats.hmax,
+ old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("xmin" in run) || !("xmax" in run) || !("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, i){
+ var x = "x" in val ? val.x : i + 1, y = val.y;
+ if(isNaN(x)){ x = 0; }
+ if(isNaN(y)){ y = 0; }
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, y);
+ stats.vmax = Math.max(stats.vmax, y);
+ });
+ }
+ if("xmin" in run){ stats.hmin = Math.min(old_hmin, run.xmin); }
+ if("xmax" in run){ stats.hmax = Math.max(old_hmax, run.xmax); }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }
+ }
+ return stats;
+ },
+
+ calculateBarSize: function(/* Number */ availableSize, /* Object */ opt, /* Number? */ clusterSize){
+ if(!clusterSize){
+ clusterSize = 1;
+ }
+ var gap = opt.gap, size = (availableSize - 2 * gap) / clusterSize;
+ if("minBarSize" in opt){
+ size = Math.max(size, opt.minBarSize);
+ }
+ if("maxBarSize" in opt){
+ size = Math.min(size, opt.maxBarSize);
+ }
+ size = Math.max(size, 1);
+ gap = (availableSize - size * clusterSize) / 2;
+ return {size: size, gap: gap}; // Object
+ },
+
+ collectStackedStats: function(series){
+ // collect statistics
+ var stats = dojo.clone(dc.defaultStats);
+ if(series.length){
+ // 1st pass: find the maximal length of runs
+ stats.hmin = Math.min(stats.hmin, 1);
+ stats.hmax = df.foldl(series, "seed, run -> Math.max(seed, run.data.length)", stats.hmax);
+ // 2nd pass: stack values
+ for(var i = 0; i < stats.hmax; ++i){
+ var v = series[0].data[i];
+ if(isNaN(v)){ v = 0; }
+ stats.vmin = Math.min(stats.vmin, v);
+ for(var j = 1; j < series.length; ++j){
+ var t = series[j].data[i];
+ if(isNaN(t)){ t = 0; }
+ v += t;
+ }
+ stats.vmax = Math.max(stats.vmax, v);
+ }
+ }
+ return stats;
+ },
+
+ curve: function(/* Number[] */a, /* Number|String */tension){
+ // FIX for #7235, submitted by Enzo Michelangeli.
+ // Emulates the smoothing algorithms used in a famous, unnamed spreadsheet
+ // program ;)
+ var arr = a.slice(0);
+ if(tension == "x") {
+ arr[arr.length] = arr[0]; // add a last element equal to the first, closing the loop
+ }
+ var p=dojo.map(arr, function(item, i){
+ if(i==0){ return "M" + item.x + "," + item.y; }
+ if(!isNaN(tension)) { // use standard Dojo smoothing in tension is numeric
+ var dx=item.x-arr[i-1].x, dy=arr[i-1].y;
+ return "C"+(item.x-(tension-1)*(dx/tension))+","+dy+" "+(item.x-(dx/tension))+","+item.y+" "+item.x+","+item.y;
+ } else if(tension == "X" || tension == "x" || tension == "S") {
+ // use Excel "line smoothing" algorithm (http://xlrotor.com/resources/files.shtml)
+ var p0, p1 = arr[i-1], p2 = arr[i], p3;
+ var bz1x, bz1y, bz2x, bz2y;
+ var f = 1/6;
+ if(i==1) {
+ if(tension == "x") {
+ p0 = arr[arr.length-2];
+ } else { // "tension == X || tension == "S"
+ p0 = p1;
+ }
+ f = 1/3;
+ } else {
+ p0 = arr[i-2];
+ }
+ if(i==(arr.length-1)) {
+ if(tension == "x") {
+ p3 = arr[1];
+ } else { // "tension == X || tension == "S"
+ p3 = p2;
+ }
+ f = 1/3;
+ } else {
+ p3 = arr[i+1];
+ }
+ var p1p2 = Math.sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
+ var p0p2 = Math.sqrt((p2.x-p0.x)*(p2.x-p0.x)+(p2.y-p0.y)*(p2.y-p0.y));
+ var p1p3 = Math.sqrt((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y));
+
+ var p0p2f = p0p2 * f;
+ var p1p3f = p1p3 * f;
+
+ if(p0p2f > p1p2/2 && p1p3f > p1p2/2) {
+ p0p2f = p1p2/2;
+ p1p3f = p1p2/2;
+ } else if(p0p2f > p1p2/2) {
+ p0p2f = p1p2/2;
+ p1p3f = p1p2/2 * p1p3/p0p2;
+ } else if(p1p3f > p1p2/2) {
+ p1p3f = p1p2/2;
+ p0p2f = p1p2/2 * p0p2/p1p3;
+ }
+
+ if(tension == "S") {
+ if(p0 == p1) { p0p2f = 0; }
+ if(p2 == p3) { p1p3f = 0; }
+ }
+
+ bz1x = p1.x + p0p2f*(p2.x - p0.x)/p0p2;
+ bz1y = p1.y + p0p2f*(p2.y - p0.y)/p0p2;
+ bz2x = p2.x - p1p3f*(p3.x - p1.x)/p1p3;
+ bz2y = p2.y - p1p3f*(p3.y - p1.y)/p1p3;
+ }
+ return "C"+(bz1x+","+bz1y+" "+bz2x+","+bz2y+" "+p2.x+","+p2.y);
+ });
+ return p.join(" ");
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.primitive"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.primitive"] = true;
+dojo.provide("dojox.charting.scaler.primitive");
+
+dojox.charting.scaler.primitive = {
+ buildScaler: function(/*Number*/ min, /*Number*/ max, /*Number*/ span, /*Object*/ kwArgs){
+ return {
+ bounds: {
+ lower: min,
+ upper: max,
+ from: min,
+ to: max,
+ scale: span / (max - min),
+ span: span
+ },
+ scaler: dojox.charting.scaler.primitive
+ };
+ },
+ buildTicks: function(/*Object*/ scaler, /*Object*/ kwArgs){
+ return {major: [], minor: [], micro: []}; // Object
+ },
+ getTransformerFromModel: function(/*Object*/ scaler){
+ var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+ return function(x){ return (x - offset) * scale; }; // Function
+ },
+ getTransformerFromPlot: function(/*Object*/ scaler){
+ var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+ return function(x){ return x / scale + offset; }; // Function
+ }
+};
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Base"] = true;
+dojo.provide("dojox.charting.plot2d.Base");
+
+
+
+
+
+dojo.declare("dojox.charting.plot2d.Base", dojox.charting.Element, {
+ destroy: function(){
+ this.resetEvents();
+ this.inherited(arguments);
+ },
+ clear: function(){
+ this.series = [];
+ this._hAxis = null;
+ this._vAxis = null;
+ this.dirty = true;
+ return this;
+ },
+ setAxis: function(axis){
+ if(axis){
+ this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+ }
+ return this;
+ },
+ addSeries: function(run){
+ this.series.push(run);
+ return this;
+ },
+ calculateAxes: function(dim){
+ return this;
+ },
+ isDirty: function(){
+ return this.dirty || this._hAxis && this._hAxis.dirty || this._vAxis && this._vAxis.dirty;
+ },
+ render: function(dim, offsets){
+ return this;
+ },
+ getRequiredColors: function(){
+ return this.series.length;
+ },
+
+ // events
+ plotEvent: function(o){
+ // intentionally empty --- used for events
+ },
+ connect: function(object, method){
+ this.dirty = true;
+ return dojo.connect(this, "plotEvent", object, method);
+ },
+ events: function(){
+ var ls = this.plotEvent._listeners;
+ if(!ls || !ls.length){ return false; }
+ for(var i in ls){
+ if(!(i in Array.prototype)){
+ return true;
+ }
+ }
+ return false;
+ },
+ resetEvents: function(){
+ this.plotEvent({type: "onplotreset", plot: this});
+ },
+
+ // utilities
+ _calc: function(dim, stats){
+ // calculate scaler
+ if(this._hAxis){
+ if(!this._hAxis.initialized()){
+ this._hAxis.calculate(stats.hmin, stats.hmax, dim.width);
+ }
+ this._hScaler = this._hAxis.getScaler();
+ }else{
+ this._hScaler = dojox.charting.scaler.primitive.buildScaler(stats.hmin, stats.hmax, dim.width);
+ }
+ if(this._vAxis){
+ if(!this._vAxis.initialized()){
+ this._vAxis.calculate(stats.vmin, stats.vmax, dim.height);
+ }
+ this._vScaler = this._vAxis.getScaler();
+ }else{
+ this._vScaler = dojox.charting.scaler.primitive.buildScaler(stats.vmin, stats.vmax, dim.height);
+ }
+ },
+
+ _connectEvents: function(shape, o){
+ shape.connect("onmouseover", this, function(e){
+ o.type = "onmouseover";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ shape.connect("onmouseout", this, function(e){
+ o.type = "onmouseout";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ shape.connect("onclick", this, function(e){
+ o.type = "onclick";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Default"] = true;
+dojo.provide("dojox.charting.plot2d.Default");
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Default", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ lines: true, // draw lines
+ areas: false, // draw areas
+ markers: false, // draw markers
+ shadows: 0, // draw shadows
+ tension: 0 // draw curved lines (tension>0)
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ calculateAxes: function(dim){
+ this._calc(dim, dc.collectSimpleStats(this.series));
+ return this;
+ },
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, stroke, outline, color, marker, events = this.events();
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ if(!run.data.length){
+ run.dirty = false;
+ continue;
+ }
+
+ var s = run.group, lpoly,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+ if(typeof run.data[0] == "number"){
+ lpoly = dojo.map(run.data, function(v, i){
+ return {
+ x: ht(i + 1) + offsets.l,
+ y: dim.height - offsets.b - vt(v)
+ };
+ }, this);
+ }else{
+ lpoly = dojo.map(run.data, function(v, i){
+ return {
+ x: ht(v.x) + offsets.l,
+ y: dim.height - offsets.b - vt(v.y)
+ };
+ }, this);
+ }
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+
+ var lpath = this.opt.tension ? dc.curve(lpoly, this.opt.tension) : "";
+
+ if(this.opt.areas){
+ var fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ var apoly = dojo.clone(lpoly);
+ if(this.opt.tension){
+ var apath = "L" + apoly[apoly.length-1].x + "," + (dim.height - offsets.b) +
+ " L" + apoly[0].x + "," + (dim.height - offsets.b) +
+ " L" + apoly[0].x + "," + apoly[0].y;
+ run.dyn.fill = s.createPath(lpath + " " + apath).setFill(fill).getFill();
+ } else {
+ apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+ apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+ apoly.push(lpoly[0]);
+ run.dyn.fill = s.createPolyline(apoly).setFill(fill).getFill();
+ }
+ }
+ if(this.opt.lines || this.opt.markers){
+ // need a stroke
+ stroke = run.dyn.stroke = run.stroke ? dc.makeStroke(run.stroke) : dc.augmentStroke(t.series.stroke, color);
+ if(run.outline || t.series.outline){
+ outline = run.dyn.outline = dc.makeStroke(run.outline ? run.outline : t.series.outline);
+ outline.width = 2 * outline.width + stroke.width;
+ }
+ }
+ if(this.opt.markers){
+ // need a marker
+ marker = run.dyn.marker = run.marker ? run.marker : t.next("marker");
+ }
+ var frontMarkers = null, outlineMarkers = null, shadowMarkers = null;
+ if(this.opt.shadows && stroke){
+ var sh = this.opt.shadows, shadowColor = new dojo.Color([0, 0, 0, 0.3]),
+ spoly = dojo.map(lpoly, function(c){
+ return {x: c.x + sh.dx, y: c.y + sh.dy};
+ }),
+ shadowStroke = dojo.clone(outline ? outline : stroke);
+ shadowStroke.color = shadowColor;
+ shadowStroke.width += sh.dw ? sh.dw : 0;
+ if(this.opt.lines){
+ if(this.opt.tension){
+ run.dyn.shadow = s.createPath(dc.curve(spoly, this.opt.tension)).setStroke(shadowStroke).getStroke();
+ } else {
+ run.dyn.shadow = s.createPolyline(spoly).setStroke(shadowStroke).getStroke();
+ }
+ }
+ if(this.opt.markers){
+ shadowMarkers = dojo.map(spoly, function(c){
+ return s.createPath("M" + c.x + " " + c.y + " " + marker).
+ setStroke(shadowStroke).setFill(shadowColor);
+ }, this);
+ }
+ }
+ if(this.opt.lines){
+ if(outline){
+ if(this.opt.tension){
+ run.dyn.outline = s.createPath(lpath).setStroke(outline).getStroke();
+ } else {
+ run.dyn.outline = s.createPolyline(lpoly).setStroke(outline).getStroke();
+ }
+ }
+ if(this.opt.tension){
+ run.dyn.stroke = s.createPath(lpath).setStroke(stroke).getStroke();
+ } else {
+ run.dyn.stroke = s.createPolyline(lpoly).setStroke(stroke).getStroke();
+ }
+ }
+ if(this.opt.markers){
+ frontMarkers = new Array(lpoly.length);
+ outlineMarkers = new Array(lpoly.length);
+ dojo.forEach(lpoly, function(c, i){
+ var path = "M" + c.x + " " + c.y + " " + marker;
+ if(outline){
+ outlineMarkers[i] = s.createPath(path).setStroke(outline);
+ }
+ frontMarkers[i] = s.createPath(path).setStroke(stroke).setFill(stroke.color);
+ }, this);
+ if(events){
+ dojo.forEach(frontMarkers, function(s, i){
+ var o = {
+ element: "marker",
+ index: i,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: s,
+ outline: outlineMarkers[i] || null,
+ shadow: shadowMarkers && shadowMarkers[i] || null,
+ cx: lpoly[i].x,
+ cy: lpoly[i].y
+ };
+ if(typeof run.data[0] == "number"){
+ o.x = i + 1;
+ o.y = run.data[i];
+ }else{
+ o.x = run.data[i].x;
+ o.y = run.data[i].y;
+ }
+ this._connectEvents(s, o);
+ }, this);
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Lines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Lines"] = true;
+dojo.provide("dojox.charting.plot2d.Lines");
+
+
+
+dojo.declare("dojox.charting.plot2d.Lines", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Areas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Areas"] = true;
+dojo.provide("dojox.charting.plot2d.Areas");
+
+
+
+dojo.declare("dojox.charting.plot2d.Areas", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = true;
+ this.opt.areas = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Markers"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Markers"] = true;
+dojo.provide("dojox.charting.plot2d.Markers");
+
+
+
+dojo.declare("dojox.charting.plot2d.Markers", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.markers = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.MarkersOnly"] = true;
+dojo.provide("dojox.charting.plot2d.MarkersOnly");
+
+
+
+dojo.declare("dojox.charting.plot2d.MarkersOnly", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = false;
+ this.opt.markers = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Scatter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Scatter"] = true;
+dojo.provide("dojox.charting.plot2d.Scatter");
+
+
+
+dojo.declare("dojox.charting.plot2d.Scatter", dojox.charting.plot2d.Default, {
+ constructor: function(){
+ this.opt.lines = false;
+ this.opt.markers = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.sequence"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.sequence"] = true;
+dojo.provide("dojox.lang.functional.sequence");
+
+
+
+// This module adds high-level functions and related constructs:
+// - sequence generators
+
+// If you want more general sequence builders check out listcomp.js and
+// unfold() (in fold.js).
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+
+(function(){
+ var d = dojo, df = dojox.lang.functional;
+
+ d.mixin(df, {
+ // sequence generators
+ repeat: function(/*Number*/ n, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: builds an array by repeatedly applying a unary function N times
+ // with a seed value Z. N should be greater than 0.
+ o = o || d.global; f = df.lambda(f);
+ var t = new Array(n), i = 1;
+ t[0] = z;
+ for(; i < n; t[i] = z = f.call(o, z), ++i);
+ return t; // Array
+ },
+ until: function(/*Function|String|Array*/ pr, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: builds an array by repeatedly applying a unary function with
+ // a seed value Z until the predicate is satisfied.
+ o = o || d.global; f = df.lambda(f); pr = df.lambda(pr);
+ var t = [];
+ for(; !pr.call(o, z); t.push(z), z = f.call(o, z));
+ return t; // Array
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Stacked"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Stacked"] = true;
+dojo.provide("dojox.charting.plot2d.Stacked");
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Stacked", dojox.charting.plot2d.Default, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series);
+ this._maxRunLength = stats.hmax;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this._maxRunLength <= 0){
+ return this;
+ }
+
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+
+ var t = this.chart.theme, stroke, outline, color, marker, events = this.events(),
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+ this.resetEvents();
+
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group,
+ lpoly = dojo.map(acc, function(v, i){
+ return {
+ x: ht(i + 1) + offsets.l,
+ y: dim.height - offsets.b - vt(v)
+ };
+ }, this);
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = new dojo.Color(t.next("color"));
+ }
+
+ var lpath = this.opt.tension ? dc.curve(lpoly, this.opt.tension) : "";
+
+ if(this.opt.areas){
+ var apoly = dojo.clone(lpoly);
+ var fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ if(this.opt.tension){
+ var p=dc.curve(apoly, this.opt.tension);
+ p += " L" + lpoly[lpoly.length - 1].x + "," + (dim.height - offsets.b) +
+ " L" + lpoly[0].x + "," + (dim.height - offsets.b) +
+ " L" + lpoly[0].x + "," + lpoly[0].y;
+ run.dyn.fill = s.createPath(p).setFill(fill).getFill();
+ } else {
+ apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+ apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+ apoly.push(lpoly[0]);
+ run.dyn.fill = s.createPolyline(apoly).setFill(fill).getFill();
+ }
+ }
+ if(this.opt.lines || this.opt.markers){
+ // need a stroke
+ stroke = run.stroke ? dc.makeStroke(run.stroke) : dc.augmentStroke(t.series.stroke, color);
+ if(run.outline || t.series.outline){
+ outline = dc.makeStroke(run.outline ? run.outline : t.series.outline);
+ outline.width = 2 * outline.width + stroke.width;
+ }
+ }
+ if(this.opt.markers){
+ // need a marker
+ marker = run.dyn.marker = run.marker ? run.marker : t.next("marker");
+ }
+ var frontMarkers, outlineMarkers, shadowMarkers;
+ if(this.opt.shadows && stroke){
+ var sh = this.opt.shadows, shadowColor = new dojo.Color([0, 0, 0, 0.3]),
+ spoly = dojo.map(lpoly, function(c){
+ return {x: c.x + sh.dx, y: c.y + sh.dy};
+ }),
+ shadowStroke = dojo.clone(outline ? outline : stroke);
+ shadowStroke.color = shadowColor;
+ shadowStroke.width += sh.dw ? sh.dw : 0;
+ if(this.opt.lines){
+ if(this.opt.tension){
+ run.dyn.shadow = s.createPath(dc.curve(spoly, this.opt.tension)).setStroke(shadowStroke).getStroke();
+ } else {
+ run.dyn.shadow = s.createPolyline(spoly).setStroke(shadowStroke).getStroke();
+ }
+ }
+ if(this.opt.markers){
+ shadowMarkers = dojo.map(spoly, function(c){
+ return s.createPath("M" + c.x + " " + c.y + " " + marker).
+ setStroke(shadowStroke).setFill(shadowColor);
+ }, this);
+ }
+ }
+ if(this.opt.lines){
+ if(outline){
+ if(this.opt.tension){
+ run.dyn.outline = s.createPath(lpath).setStroke(outline).getStroke();
+ } else {
+ run.dyn.outline = s.createPolyline(lpoly).setStroke(outline).getStroke();
+ }
+ }
+ if(this.opt.tension){
+ run.dyn.stroke = s.createPath(lpath).setStroke(stroke).getStroke();
+ } else {
+ run.dyn.stroke = s.createPolyline(lpoly).setStroke(stroke).getStroke();
+ }
+ }
+ if(this.opt.markers){
+ frontMarkers = new Array(lpoly.length);
+ outlineMarkers = new Array(lpoly.length);
+ dojo.forEach(lpoly, function(c, i){
+ var path = "M" + c.x + " " + c.y + " " + marker;
+ if(outline){
+ outlineMarkers[i] = s.createPath(path).setStroke(outline);
+ }
+ frontMarkers[i] = s.createPath(path).setStroke(stroke).setFill(stroke.color);
+ }, this);
+ if(events){
+ dojo.forEach(frontMarkers, function(s, i){
+ var o = {
+ element: "marker",
+ index: i,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: s,
+ outline: outlineMarkers[i] || null,
+ shadow: shadowMarkers && shadowMarkers[i] || null,
+ cx: lpoly[i].x,
+ cy: lpoly[i].y,
+ x: i + 1,
+ y: run.data[i]
+ };
+ this._connectEvents(s, o);
+ }, this);
+ }
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedLines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedLines"] = true;
+dojo.provide("dojox.charting.plot2d.StackedLines");
+
+
+
+dojo.declare("dojox.charting.plot2d.StackedLines", dojox.charting.plot2d.Stacked, {
+ constructor: function(){
+ this.opt.lines = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedAreas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedAreas"] = true;
+dojo.provide("dojox.charting.plot2d.StackedAreas");
+
+
+
+dojo.declare("dojox.charting.plot2d.StackedAreas", dojox.charting.plot2d.Stacked, {
+ constructor: function(){
+ this.opt.lines = true;
+ this.opt.areas = true;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.fx"] = true;
+dojo.provide("dojox.gfx.fx");
+
+
+
+(function(){
+ var d = dojo, g = dojox.gfx, m = g.matrix;
+
+ // Generic interpolators. Should they be moved to dojox.fx?
+
+ var InterpolNumber = function(start, end){
+ this.start = start, this.end = end;
+ };
+ d.extend(InterpolNumber, {
+ getValue: function(r){
+ return (this.end - this.start) * r + this.start;
+ }
+ });
+
+ var InterpolUnit = function(start, end, units){
+ this.start = start, this.end = end;
+ this.units = units;
+ };
+ d.extend(InterpolUnit, {
+ getValue: function(r){
+ return (this.end - this.start) * r + this.start + this.units;
+ }
+ });
+
+ var InterpolColor = function(start, end){
+ this.start = start, this.end = end;
+ this.temp = new dojo.Color();
+ };
+ d.extend(InterpolColor, {
+ getValue: function(r){
+ return d.blendColors(this.start, this.end, r, this.temp);
+ }
+ });
+
+ var InterpolValues = function(values){
+ this.values = values;
+ this.length = values.length;
+ };
+ d.extend(InterpolValues, {
+ getValue: function(r){
+ return this.values[Math.min(Math.floor(r * this.length), this.length - 1)];
+ }
+ });
+
+ var InterpolObject = function(values, def){
+ this.values = values;
+ this.def = def ? def : {};
+ };
+ d.extend(InterpolObject, {
+ getValue: function(r){
+ var ret = dojo.clone(this.def);
+ for(var i in this.values){
+ ret[i] = this.values[i].getValue(r);
+ }
+ return ret;
+ }
+ });
+
+ var InterpolTransform = function(stack, original){
+ this.stack = stack;
+ this.original = original;
+ };
+ d.extend(InterpolTransform, {
+ getValue: function(r){
+ var ret = [];
+ dojo.forEach(this.stack, function(t){
+ if(t instanceof m.Matrix2D){
+ ret.push(t);
+ return;
+ }
+ if(t.name == "original" && this.original){
+ ret.push(this.original);
+ return;
+ }
+ if(!(t.name in m)){ return; }
+ var f = m[t.name];
+ if(typeof f != "function"){
+ // constant
+ ret.push(f);
+ return;
+ }
+ var val = dojo.map(t.start, function(v, i){
+ return (t.end[i] - v) * r + v;
+ }),
+ matrix = f.apply(m, val);
+ if(matrix instanceof m.Matrix2D){
+ ret.push(matrix);
+ }
+ }, this);
+ return ret;
+ }
+ });
+
+ var transparent = new d.Color(0, 0, 0, 0);
+
+ var getColorInterpol = function(prop, obj, name, def){
+ if(prop.values){
+ return new InterpolValues(prop.values);
+ }
+ var value, start, end;
+ if(prop.start){
+ start = g.normalizeColor(prop.start);
+ }else{
+ start = value = obj ? (name ? obj[name] : obj) : def;
+ }
+ if(prop.end){
+ end = g.normalizeColor(prop.end);
+ }else{
+ if(!value){
+ value = obj ? (name ? obj[name] : obj) : def;
+ }
+ end = value;
+ }
+ return new InterpolColor(start, end);
+ };
+
+ var getNumberInterpol = function(prop, obj, name, def){
+ if(prop.values){
+ return new InterpolValues(prop.values);
+ }
+ var value, start, end;
+ if(prop.start){
+ start = prop.start;
+ }else{
+ start = value = obj ? obj[name] : def;
+ }
+ if(prop.end){
+ end = prop.end;
+ }else{
+ if(typeof value != "number"){
+ value = obj ? obj[name] : def;
+ }
+ end = value;
+ }
+ return new InterpolNumber(start, end);
+ };
+
+ g.fx.animateStroke = function(/*Object*/ args){
+ // summary:
+ // Returns an animation which will change stroke properties over time
+ // example:
+ // | dojox.gfx.fx.animateStroke{{
+ // | shape: shape,
+ // | duration: 500,
+ // | color: {start: "red", end: "green"},
+ // | width: {end: 15},
+ // | join: {values: ["miter", "bevel", "round"]}
+ // | }).play();
+ if(!args.easing){ args.easing = d._defaultEasing; }
+ var anim = new d.Animation(args), shape = args.shape, stroke;
+ d.connect(anim, "beforeBegin", anim, function(){
+ stroke = shape.getStroke();
+ var prop = args.color, values = {}, value, start, end;
+ if(prop){
+ values.color = getColorInterpol(prop, stroke, "color", transparent);
+ }
+ prop = args.style;
+ if(prop && prop.values){
+ values.style = new InterpolValues(prop.values);
+ }
+ prop = args.width;
+ if(prop){
+ values.width = getNumberInterpol(prop, stroke, "width", 1);
+ }
+ prop = args.cap;
+ if(prop && prop.values){
+ values.cap = new InterpolValues(prop.values);
+ }
+ prop = args.join;
+ if(prop){
+ if(prop.values){
+ values.join = new InterpolValues(prop.values);
+ }else{
+ start = prop.start ? prop.start : (stroke && stroke.join || 0);
+ end = prop.end ? prop.end : (stroke && stroke.join || 0);
+ if(typeof start == "number" && typeof end == "number"){
+ values.join = new InterpolNumber(start, end);
+ }
+ }
+ }
+ this.curve = new InterpolObject(values, stroke);
+ });
+ d.connect(anim, "onAnimate", shape, "setStroke");
+ return anim; // dojo.Animation
+ };
+
+ g.fx.animateFill = function(/*Object*/ args){
+ // summary:
+ // Returns an animation which will change fill color over time.
+ // Only solid fill color is supported at the moment
+ // example:
+ // | dojox.gfx.fx.animateFill{{
+ // | shape: shape,
+ // | duration: 500,
+ // | color: {start: "red", end: "green"}
+ // | }).play();
+ if(!args.easing){ args.easing = d._defaultEasing; }
+ var anim = new d.Animation(args), shape = args.shape, fill;
+ d.connect(anim, "beforeBegin", anim, function(){
+ fill = shape.getFill();
+ var prop = args.color, values = {};
+ if(prop){
+ this.curve = getColorInterpol(prop, fill, "", transparent);
+ }
+ });
+ d.connect(anim, "onAnimate", shape, "setFill");
+ return anim; // dojo.Animation
+ };
+
+ g.fx.animateFont = function(/*Object*/ args){
+ // summary:
+ // Returns an animation which will change font properties over time
+ // example:
+ // | dojox.gfx.fx.animateFont{{
+ // | shape: shape,
+ // | duration: 500,
+ // | variant: {values: ["normal", "small-caps"]},
+ // | size: {end: 10, units: "pt"}
+ // | }).play();
+ if(!args.easing){ args.easing = d._defaultEasing; }
+ var anim = new d.Animation(args), shape = args.shape, font;
+ d.connect(anim, "beforeBegin", anim, function(){
+ font = shape.getFont();
+ var prop = args.style, values = {}, value, start, end;
+ if(prop && prop.values){
+ values.style = new InterpolValues(prop.values);
+ }
+ prop = args.variant;
+ if(prop && prop.values){
+ values.variant = new InterpolValues(prop.values);
+ }
+ prop = args.weight;
+ if(prop && prop.values){
+ values.weight = new InterpolValues(prop.values);
+ }
+ prop = args.family;
+ if(prop && prop.values){
+ values.family = new InterpolValues(prop.values);
+ }
+ prop = args.size;
+ if(prop && prop.units){
+ start = parseFloat(prop.start ? prop.start : (shape.font && shape.font.size || "0"));
+ end = parseFloat(prop.end ? prop.end : (shape.font && shape.font.size || "0"));
+ values.size = new InterpolUnit(start, end, prop.units);
+ }
+ this.curve = new InterpolObject(values, font);
+ });
+ d.connect(anim, "onAnimate", shape, "setFont");
+ return anim; // dojo.Animation
+ };
+
+ g.fx.animateTransform = function(/*Object*/ args){
+ // summary:
+ // Returns an animation which will change transformation over time
+ // example:
+ // | dojox.gfx.fx.animateTransform{{
+ // | shape: shape,
+ // | duration: 500,
+ // | transform: [
+ // | {name: "translate", start: [0, 0], end: [200, 200]},
+ // | {name: "original"}
+ // | ]
+ // | }).play();
+ if(!args.easing){ args.easing = d._defaultEasing; }
+ var anim = new d.Animation(args), shape = args.shape, original;
+ d.connect(anim, "beforeBegin", anim, function(){
+ original = shape.getTransform();
+ this.curve = new InterpolTransform(args.transform, original);
+ });
+ d.connect(anim, "onAnimate", shape, "setTransform");
+ return anim; // dojo.Animation
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Columns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Columns"] = true;
+dojo.provide("dojox.charting.plot2d.Columns");
+
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Columns", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 0, // gap between columns in pixels
+ shadows: null, // draw shadows
+ animate: null // animate bars into place
+ },
+ optionalParams: {
+ minBarSize: 1, // minimal bar size in pixels
+ maxBarSize: 1 // maximal bar size in pixels
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ this.animate = this.opt.animate;
+ },
+
+ calculateAxes: function(dim){
+ var stats = dc.collectSimpleStats(this.series);
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, width,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._vScaler.bounds.lower),
+ baselineHeight = vt(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ width = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j],
+ v = typeof value == "number" ? value : value.y,
+ vv = vt(v),
+ height = vv - baselineHeight,
+ h = Math.abs(height),
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(width >= 1 && h >= 1){
+ var shape = s.createRect({
+ x: offsets.l + ht(j + 0.5) + gap,
+ y: dim.height - offsets.b - (v > baseline ? vv : baselineHeight),
+ width: width, height: h
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "column",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: j + 0.5,
+ y: v
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateColumn(shape, dim.height - offsets.b - baselineHeight, h);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ },
+ _animateColumn: function(shape, voffset, vsize){
+ dojox.gfx.fx.animateTransform(dojo.delegate({
+ shape: shape,
+ duration: 1200,
+ transform: [
+ {name: "translate", start: [0, voffset - (voffset/vsize)], end: [0, 0]},
+ {name: "scale", start: [1, 1/vsize], end: [1, 1]},
+ {name: "original"}
+ ]
+ }, this.animate)).play();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedColumns"] = true;
+dojo.provide("dojox.charting.plot2d.StackedColumns");
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.StackedColumns", dojox.charting.plot2d.Columns, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series);
+ this._maxRunLength = stats.hmax;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this._maxRunLength <= 0){
+ return this;
+ }
+
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j], v = typeof value == "number" ? value : value.y;
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, width,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ events = this.events();
+ f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ width = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < acc.length; ++j){
+ var v = acc[j],
+ height = vt(v),
+ value = run.data[j],
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(width >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l + ht(j + 0.5) + gap,
+ y: dim.height - offsets.b - vt(v),
+ width: width, height: height
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "column",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: j + 0.5,
+ y: v
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateColumn(shape, dim.height - offsets.b, height);
+ }
+ }
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j], v = typeof value == "number" ? value : value.y;
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredColumns");
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.ClusteredColumns", dojox.charting.plot2d.Columns, {
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, width, thickness,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._vScaler.bounds.lower),
+ baselineHeight = vt(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt, this.series.length);
+ gap = f.gap;
+ width = thickness = f.size;
+ this.resetEvents();
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i], shift = thickness * i;
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j],
+ v = typeof value == "number" ? value : value.y,
+ vv = vt(v),
+ height = vv - baselineHeight,
+ h = Math.abs(height),
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(width >= 1 && h >= 1){
+ var shape = s.createRect({
+ x: offsets.l + ht(j + 0.5) + gap + shift,
+ y: dim.height - offsets.b - (v > baseline ? vv : baselineHeight),
+ width: width, height: h
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "column",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: j + 0.5,
+ y: v
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateColumn(shape, dim.height - offsets.b - baselineHeight, h);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Bars"] = true;
+dojo.provide("dojox.charting.plot2d.Bars");
+
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Bars", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 0, // gap between columns in pixels
+ shadows: null, // draw shadows
+ animate: null // animate bars into place
+ },
+ optionalParams: {
+ minBarSize: 1, // minimal bar size in pixels
+ maxBarSize: 1 // maximal bar size in pixels
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ this.animate = this.opt.animate;
+ },
+
+ calculateAxes: function(dim){
+ var stats = dc.collectSimpleStats(this.series), t;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+ t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, height,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._hScaler.bounds.lower),
+ baselineWidth = ht(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ height = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j],
+ v = typeof value == "number" ? value : value.y,
+ hv = ht(v),
+ width = hv - baselineWidth,
+ w = Math.abs(width),
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(w >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l + (v < baseline ? hv : baselineWidth),
+ y: dim.height - offsets.b - vt(j + 1.5) + gap,
+ width: w, height: height
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "bar",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: v,
+ y: j + 1.5
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateBar(shape, offsets.l + baselineWidth, -w);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ },
+ _animateBar: function(shape, hoffset, hsize){
+ dojox.gfx.fx.animateTransform(dojo.delegate({
+ shape: shape,
+ duration: 1200,
+ transform: [
+ {name: "translate", start: [hoffset - (hoffset/hsize), 0], end: [0, 0]},
+ {name: "scale", start: [1/hsize, 1], end: [1, 1]},
+ {name: "original"}
+ ]
+ }, this.animate)).play();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedBars"] = true;
+dojo.provide("dojox.charting.plot2d.StackedBars");
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.StackedBars", dojox.charting.plot2d.Bars, {
+ calculateAxes: function(dim){
+ var stats = dc.collectStackedStats(this.series), t;
+ this._maxRunLength = stats.hmax;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+ t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+ this._calc(dim, stats);
+ return this;
+ },
+ render: function(dim, offsets){
+ if(this._maxRunLength <= 0){
+ return this;
+ }
+
+ // stack all values
+ var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+ for(var i = 0; i < this.series.length; ++i){
+ var run = this.series[i];
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j], v = typeof value == "number" ? value : value.y;
+ if(isNaN(v)){ v = 0; }
+ acc[j] += v;
+ }
+ }
+ // draw runs in backwards
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, height,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ events = this.events();
+ f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ height = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < acc.length; ++j){
+ var v = acc[j],
+ width = ht(v),
+ value = run.data[j],
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(width >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l,
+ y: dim.height - offsets.b - vt(j + 1.5) + gap,
+ width: width, height: height
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "bar",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: v,
+ y: j + 1.5
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateBar(shape, offsets.l, -width);
+ }
+ }
+ }
+ run.dirty = false;
+ // update the accumulator
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j], v = typeof value == "number" ? value : value.y;
+ if(isNaN(v)){ v = 0; }
+ acc[j] -= v;
+ }
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredBars"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredBars");
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.ClusteredBars", dojox.charting.plot2d.Bars, {
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, height, thickness,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._hScaler.bounds.lower),
+ baselineWidth = ht(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt, this.series.length);
+ gap = f.gap;
+ height = thickness = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i], shift = thickness * (this.series.length - i - 1);
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+ for(var j = 0; j < run.data.length; ++j){
+ var value = run.data[j],
+ v = typeof value == "number" ? value : value.y,
+ hv = ht(v),
+ width = hv - baselineWidth,
+ w = Math.abs(width),
+ specialColor = color,
+ specialFill = fill,
+ specialStroke = stroke;
+ if(typeof value != "number"){
+ if(value.color){
+ specialColor = new dojo.Color(value.color);
+ }
+ if("fill" in value){
+ specialFill = value.fill;
+ }else if(value.color){
+ specialFill = dc.augmentFill(t.series.fill, specialColor);
+ }
+ if("stroke" in value){
+ specialStroke = value.stroke;
+ }else if(value.color){
+ specialStroke = dc.augmentStroke(t.series.stroke, specialColor);
+ }
+ }
+ if(w >= 1 && height >= 1){
+ var shape = s.createRect({
+ x: offsets.l + (v < baseline ? hv : baselineWidth),
+ y: dim.height - offsets.b - vt(j + 1.5) + gap + shift,
+ width: w, height: height
+ }).setFill(specialFill).setStroke(specialStroke);
+ run.dyn.fill = shape.getFill();
+ run.dyn.stroke = shape.getStroke();
+ if(events){
+ var o = {
+ element: "bar",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: shape,
+ x: v,
+ y: j + 1.5
+ };
+ this._connectEvents(shape, o);
+ }
+ if(this.animate){
+ this._animateBar(shape, offsets.l + baselineWidth, -width);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Grid"] = true;
+dojo.provide("dojox.charting.plot2d.Grid");
+
+
+
+
+
+(function(){
+ var du = dojox.lang.utils;
+
+ dojo.declare("dojox.charting.plot2d.Grid", dojox.charting.Element, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ hMajorLines: true, // draw horizontal major lines
+ hMinorLines: false, // draw horizontal minor lines
+ vMajorLines: true, // draw vertical major lines
+ vMinorLines: false, // draw vertical minor lines
+ hStripes: "none", // TBD
+ vStripes: "none" // TBD
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ this.dirty = true;
+ },
+ clear: function(){
+ this._hAxis = null;
+ this._vAxis = null;
+ this.dirty = true;
+ return this;
+ },
+ setAxis: function(axis){
+ if(axis){
+ this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+ }
+ return this;
+ },
+ addSeries: function(run){
+ // nothing
+ return this;
+ },
+ calculateAxes: function(dim){
+ // nothing
+ return this;
+ },
+ isDirty: function(){
+ return this.dirty || this._hAxis && this._hAxis.dirty || this._vAxis && this._vAxis.dirty;
+ },
+ getRequiredColors: function(){
+ return 0;
+ },
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(!this.dirty){ return this; }
+ this.cleanGroup();
+ var s = this.group, ta = this.chart.theme.axis;
+ // draw horizontal stripes and lines
+ try{
+ var vScaler = this._vAxis.getScaler(),
+ vt = vScaler.scaler.getTransformerFromModel(vScaler),
+ ticks = this._vAxis.getTicks();
+ if(this.opt.hMinorLines){
+ dojo.forEach(ticks.minor, function(tick){
+ var y = dim.height - offsets.b - vt(tick.value);
+ s.createLine({
+ x1: offsets.l,
+ y1: y,
+ x2: dim.width - offsets.r,
+ y2: y
+ }).setStroke(ta.minorTick);
+ });
+ }
+ if(this.opt.hMajorLines){
+ dojo.forEach(ticks.major, function(tick){
+ var y = dim.height - offsets.b - vt(tick.value);
+ s.createLine({
+ x1: offsets.l,
+ y1: y,
+ x2: dim.width - offsets.r,
+ y2: y
+ }).setStroke(ta.majorTick);
+ });
+ }
+ }catch(e){
+ // squelch
+ }
+ // draw vertical stripes and lines
+ try{
+ var hScaler = this._hAxis.getScaler(),
+ ht = hScaler.scaler.getTransformerFromModel(hScaler),
+ ticks = this._hAxis.getTicks();
+ if(ticks && this.opt.vMinorLines){
+ dojo.forEach(ticks.minor, function(tick){
+ var x = offsets.l + ht(tick.value);
+ s.createLine({
+ x1: x,
+ y1: offsets.t,
+ x2: x,
+ y2: dim.height - offsets.b
+ }).setStroke(ta.minorTick);
+ });
+ }
+ if(ticks && this.opt.vMajorLines){
+ dojo.forEach(ticks.major, function(tick){
+ var x = offsets.l + ht(tick.value);
+ s.createLine({
+ x1: x,
+ y1: offsets.t,
+ x2: x,
+ y2: dim.height - offsets.b
+ }).setStroke(ta.majorTick);
+ });
+ }
+ }catch(e){
+ // squelch
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Pie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Pie"] = true;
+dojo.provide("dojox.charting.plot2d.Pie");
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ da = dojox.charting.axis2d.common,
+ g = dojox.gfx;
+
+ dojo.declare("dojox.charting.plot2d.Pie", dojox.charting.Element, {
+ defaultParams: {
+ labels: true,
+ ticks: false,
+ fixed: true,
+ precision: 1,
+ labelOffset: 20,
+ labelStyle: "default", // default/rows/auto
+ htmlLabels: true // use HTML to draw labels
+ },
+ optionalParams: {
+ font: "",
+ fontColor: "",
+ radius: 0
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.run = null;
+ this.dyn = [];
+ },
+ destroy: function(){
+ this.resetEvents();
+ this.inherited(arguments);
+ },
+ clear: function(){
+ this.dirty = true;
+ this.dyn = [];
+ this.run = null;
+ return this;
+ },
+ setAxis: function(axis){
+ // nothing
+ return this;
+ },
+ addSeries: function(run){
+ this.run = run;
+ return this;
+ },
+ calculateAxes: function(dim){
+ // nothing
+ return this;
+ },
+ getRequiredColors: function(){
+ return this.run ? this.run.data.length : 0;
+ },
+
+ // events
+ plotEvent: function(o){
+ // intentionally empty --- used for events
+ },
+ connect: function(object, method){
+ this.dirty = true;
+ return dojo.connect(this, "plotEvent", object, method);
+ },
+ events: function(){
+ var ls = this.plotEvent._listeners;
+ if(!ls || !ls.length){ return false; }
+ for(var i in ls){
+ if(!(i in Array.prototype)){
+ return true;
+ }
+ }
+ return false;
+ },
+ resetEvents: function(){
+ this.plotEvent({type: "onplotreset", plot: this});
+ },
+ _connectEvents: function(shape, o){
+ shape.connect("onmouseover", this, function(e){
+ o.type = "onmouseover";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ shape.connect("onmouseout", this, function(e){
+ o.type = "onmouseout";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ shape.connect("onclick", this, function(e){
+ o.type = "onclick";
+ o.event = e;
+ this.plotEvent(o);
+ });
+ },
+
+ render: function(dim, offsets){
+ if(!this.dirty){ return this; }
+ this.dirty = false;
+ this.cleanGroup();
+ var s = this.group, color, t = this.chart.theme;
+ this.resetEvents();
+
+ if(!this.run || !this.run.data.length){
+ return this;
+ }
+
+ // calculate the geometry
+ var rx = (dim.width - offsets.l - offsets.r) / 2,
+ ry = (dim.height - offsets.t - offsets.b) / 2,
+ r = Math.min(rx, ry),
+ taFont = "font" in this.opt ? this.opt.font : t.axis.font,
+ size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+ taFontColor = "fontColor" in this.opt ? this.opt.fontColor : t.axis.fontColor,
+ start = 0, step, filteredRun, slices, labels, shift, labelR,
+ run = this.run.data,
+ events = this.events();
+ if(typeof run[0] == "number"){
+ filteredRun = df.map(run, "Math.max(x, 0)");
+ if(df.every(filteredRun, "<= 0")){
+ return this;
+ }
+ slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+ if(this.opt.labels){
+ labels = dojo.map(slices, function(x){
+ return x > 0 ? this._getLabel(x * 100) + "%" : "";
+ }, this);
+ }
+ }else{
+ filteredRun = df.map(run, "Math.max(x.y, 0)");
+ if(df.every(filteredRun, "<= 0")){
+ return this;
+ }
+ slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+ if(this.opt.labels){
+ labels = dojo.map(slices, function(x, i){
+ if(x <= 0){ return ""; }
+ var v = run[i];
+ return "text" in v ? v.text : this._getLabel(x * 100) + "%";
+ }, this);
+ }
+ }
+ if(this.opt.labels){
+ shift = df.foldl1(df.map(labels, function(label){
+ return dojox.gfx._base._getTextBox(label, {font: taFont}).w;
+ }, this), "Math.max(a, b)") / 2;
+ if(this.opt.labelOffset < 0){
+ r = Math.min(rx - 2 * shift, ry - size) + this.opt.labelOffset;
+ }
+ labelR = r - this.opt.labelOffset;
+ }
+ if("radius" in this.opt){
+ r = this.opt.radius;
+ labelR = r - this.opt.labelOffset;
+ }
+ var circle = {
+ cx: offsets.l + rx,
+ cy: offsets.t + ry,
+ r: r
+ };
+
+ this.dyn = [];
+ // draw slices
+ dojo.some(slices, function(slice, i){
+ if(slice <= 0){
+ // degenerated slice
+ return false; // continue
+ }
+ var v = run[i];
+ if(slice >= 1){
+ // whole pie
+ var color, fill, stroke;
+ if(typeof v == "object"){
+ color = "color" in v ? v.color : new dojo.Color(t.next("color"));
+ fill = "fill" in v ? v.fill : dc.augmentFill(t.series.fill, color);
+ stroke = "stroke" in v ? v.stroke : dc.augmentStroke(t.series.stroke, color);
+ }else{
+ color = new dojo.Color(t.next("color"));
+ fill = dc.augmentFill(t.series.fill, color);
+ stroke = dc.augmentStroke(t.series.stroke, color);
+ }
+ var shape = s.createCircle(circle).setFill(fill).setStroke(stroke);
+ this.dyn.push({color: color, fill: fill, stroke: stroke});
+
+ if(events){
+ var o = {
+ element: "slice",
+ index: i,
+ run: this.run,
+ plot: this,
+ shape: shape,
+ x: i,
+ y: typeof v == "number" ? v : v.y,
+ cx: circle.cx,
+ cy: circle.cy,
+ cr: r
+ };
+ this._connectEvents(shape, o);
+ }
+
+ return true; // stop iteration
+ }
+ // calculate the geometry of the slice
+ var end = start + slice * 2 * Math.PI;
+ if(i + 1 == slices.length){
+ end = 2 * Math.PI;
+ }
+ var step = end - start,
+ x1 = circle.cx + r * Math.cos(start),
+ y1 = circle.cy + r * Math.sin(start),
+ x2 = circle.cx + r * Math.cos(end),
+ y2 = circle.cy + r * Math.sin(end);
+ // draw the slice
+ var color, fill, stroke;
+ if(typeof v == "object"){
+ color = "color" in v ? v.color : new dojo.Color(t.next("color"));
+ fill = "fill" in v ? v.fill : dc.augmentFill(t.series.fill, color);
+ stroke = "stroke" in v ? v.stroke : dc.augmentStroke(t.series.stroke, color);
+ }else{
+ color = new dojo.Color(t.next("color"));
+ fill = dc.augmentFill(t.series.fill, color);
+ stroke = dc.augmentStroke(t.series.stroke, color);
+ }
+ var shape = s.createPath({}).
+ moveTo(circle.cx, circle.cy).
+ lineTo(x1, y1).
+ arcTo(r, r, 0, step > Math.PI, true, x2, y2).
+ lineTo(circle.cx, circle.cy).
+ closePath().
+ setFill(fill).
+ setStroke(stroke);
+ this.dyn.push({color: color, fill: fill, stroke: stroke});
+
+ if(events){
+ var o = {
+ element: "slice",
+ index: i,
+ run: this.run,
+ plot: this,
+ shape: shape,
+ x: i,
+ y: typeof v == "number" ? v : v.y,
+ cx: circle.cx,
+ cy: circle.cy,
+ cr: r
+ };
+ this._connectEvents(shape, o);
+ }
+
+ start = end;
+
+ return false; // continue
+ }, this);
+ // draw labels
+ if(this.opt.labels){
+ start = 0;
+ dojo.some(slices, function(slice, i){
+ if(slice <= 0){
+ // degenerated slice
+ return false; // continue
+ }
+ if(slice >= 1){
+ // whole pie
+ var v = run[i], elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, circle.cx, circle.cy + size / 2, "middle",
+ labels[i], taFont, (typeof v == "object" && "fontColor" in v) ? v.fontColor : taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ return true; // stop iteration
+ }
+ // calculate the geometry of the slice
+ var end = start + slice * 2 * Math.PI, v = run[i];
+ if(i + 1 == slices.length){
+ end = 2 * Math.PI;
+ }
+ var labelAngle = (start + end) / 2,
+ x = circle.cx + labelR * Math.cos(labelAngle),
+ y = circle.cy + labelR * Math.sin(labelAngle) + size / 2;
+ // draw the label
+ var elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+ (this.chart, s, x, y, "middle",
+ labels[i], taFont,
+ (typeof v == "object" && "fontColor" in v)
+ ? v.fontColor : taFontColor);
+ if(this.opt.htmlLabels){ this.htmlElements.push(elem); }
+ start = end;
+ return false; // continue
+ }, this);
+ }
+ return this;
+ },
+
+ // utilities
+ _getLabel: function(number){
+ return this.opt.fixed ? number.toFixed(this.opt.precision) : number.toString();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bubble"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Bubble"] = true;
+dojo.provide("dojox.charting.plot2d.Bubble");
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ dojo.declare("dojox.charting.plot2d.Bubble", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y" // use a vertical axis named "y"
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ calculateAxes: function(dim){
+ this._calc(dim, dc.collectSimpleStats(this.series));
+ return this;
+ },
+
+ // override the render so that we are plotting only circles.
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+
+ var t = this.chart.theme, stroke, outline, color, shadowStroke, shadowColor,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ events = this.events();
+
+ this.resetEvents();
+
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ if(!run.data.length){
+ run.dirty = false;
+ continue;
+ }
+
+ if(typeof run.data[0] == "number"){
+ console.warn("dojox.charting.plot2d.Bubble: the data in the following series cannot be rendered as a bubble chart; ", run);
+ continue;
+ }
+
+ var s = run.group,
+ points = dojo.map(run.data, function(v, i){
+ return {
+ x: ht(v.x) + offsets.l,
+ y: dim.height - offsets.b - vt(v.y),
+ radius: this._vScaler.bounds.scale * (v.size / 2)
+ };
+ }, this);
+
+ if(run.fill){
+ color = run.fill;
+ }else if(run.stroke){
+ color = run.stroke;
+ }else{
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ run.dyn.fill = color;
+
+ stroke = run.dyn.stroke = run.stroke ? dc.makeStroke(run.stroke) : dc.augmentStroke(t.series.stroke, color);
+
+ var frontCircles = null, outlineCircles = null, shadowCircles = null;
+
+ // make shadows if needed
+ if(this.opt.shadows && stroke){
+ var sh = this.opt.shadows, shadowColor = new dojo.Color([0, 0, 0, 0.2]),
+ shadowStroke = dojo.clone(outline ? outline : stroke);
+ shadowStroke.color = shadowColor;
+ shadowStroke.width += sh.dw ? sh.dw : 0;
+ run.dyn.shadow = shadowStroke;
+ var shadowMarkers = dojo.map(points, function(item){
+ var sh = this.opt.shadows;
+ return s.createCircle({
+ cx: item.x + sh.dx, cy: item.y + sh.dy, r: item.radius
+ }).setStroke(shadowStroke).setFill(shadowColor);
+ }, this);
+ }
+
+ // make outlines if needed
+ if(run.outline || t.series.outline){
+ outline = dc.makeStroke(run.outline ? run.outline : t.series.outline);
+ outline.width = 2 * outline.width + stroke.width;
+ run.dyn.outline = outline;
+ outlineCircles = dojo.map(points, function(item){
+ s.createCircle({ cx: item.x, cy: item.y, r: item.radius }).setStroke(outline);
+ }, this);
+ }
+
+ // run through the data and add the circles.
+ frontCircles = dojo.map(points, function(item){
+ return s.createCircle({ cx: item.x, cy: item.y, r: item.radius }).setStroke(stroke).setFill(color);
+ }, this);
+
+ if(events){
+ dojo.forEach(frontCircles, function(s, i){
+ var o = {
+ element: "circle",
+ index: i,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: s,
+ outline: outlineCircles && outlineCircles[i] || null,
+ shadow: shadowCircles && shadowCircles[i] || null,
+ x: run.data[i].x,
+ y: run.data[i].y,
+ r: run.data[i].size / 2,
+ cx: points[i].x,
+ cy: points[i].y,
+ cr: points[i].radius
+ };
+ this._connectEvents(s, o);
+ }, this);
+ }
+
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Candlesticks"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Candlesticks"] = true;
+dojo.provide("dojox.charting.plot2d.Candlesticks");
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ // Candlesticks are based on the Bars plot type; we expect the following passed
+ // as values in a series:
+ // { x?, open, close, high, low, mid? }
+ // if x is not provided, the array index is used.
+ // failing to provide the OHLC values will throw an error.
+ dojo.declare("dojox.charting.plot2d.Candlesticks", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 2, // gap between columns in pixels
+ shadows: null // draw shadows
+ },
+ optionalParams: {
+ minBarSize: 1, // minimal bar size in pixels
+ maxBarSize: 1 // maximal bar size in pixels
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ collectStats: function(series){
+ // we have to roll our own, since we need to use all four passed
+ // values to figure out our stats, and common only assumes x and y.
+ var stats = dojo.clone(dc.defaultStats);
+ for(var i=0; i<series.length; i++){
+ var run = series[i];
+ if(!run.data.length){ continue; }
+ var old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, idx){
+ var x = val.x || idx + 1;
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, val.open, val.close, val.high, val.low);
+ stats.vmax = Math.max(stats.vmax, val.open, val.close, val.high, val.low);
+ });
+ }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }
+ return stats;
+ },
+
+ calculateAxes: function(dim){
+ var stats = this.collectStats(this.series), t;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, width,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._vScaler.bounds.lower),
+ baselineHeight = vt(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ width = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+
+ // calculate the points we need for OHLC
+ var x = ht(v.x || (j+0.5)) + offsets.l + gap,
+ y = dim.height - offsets.b,
+ open = vt(v.open),
+ close = vt(v.close),
+ high = vt(v.high),
+ low = vt(v.low);
+ if("mid" in v){
+ var mid = vt(v.mid);
+ }
+ if(low > high){
+ var tmp = high;
+ high = low;
+ low = tmp;
+ }
+
+ if(width >= 1){
+ // draw the line and rect, set up as a group and pass that to the events.
+ var doFill = open > close;
+ var line = { x1: width/2, x2: width/2, y1: y - high, y2: y - low },
+ rect = {
+ x: 0, y: y-Math.max(open, close),
+ width: width, height: Math.max(doFill ? open-close : close-open, 1)
+ };
+ shape = s.createGroup();
+ shape.setTransform({dx: x, dy: 0 });
+ var inner = shape.createGroup();
+ inner.createLine(line).setStroke(stroke);
+ inner.createRect(rect).setStroke(stroke).setFill(doFill?fill:"white");
+ if("mid" in v){
+ // add the mid line.
+ inner.createLine({ x1: (stroke.width||1), x2: width-(stroke.width||1), y1: y - mid, y2: y - mid})
+ .setStroke(doFill?{color:"white"}:stroke);
+ }
+
+ // TODO: double check this.
+ run.dyn.fill = fill;
+ run.dyn.stroke = stroke;
+ if(events){
+ var o = {
+ element: "candlestick",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: inner,
+ x: x,
+ y: y-Math.max(open, close),
+ cx: width/2,
+ cy: (y-Math.max(open, close)) + (Math.max(doFill ? open-close : close-open, 1)/2),
+ width: width,
+ height: Math.max(doFill ? open-close : close-open, 1),
+ data: v
+ };
+ this._connectEvents(shape, o);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.OHLC"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.OHLC"] = true;
+dojo.provide("dojox.charting.plot2d.OHLC");
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, du = dojox.lang.utils,
+ dc = dojox.charting.plot2d.common,
+ purgeGroup = df.lambda("item.purgeGroup()");
+
+ // Candlesticks are based on the Bars plot type; we expect the following passed
+ // as values in a series:
+ // { x?, open, close, high, low }
+ // if x is not provided, the array index is used.
+ // failing to provide the OHLC values will throw an error.
+ dojo.declare("dojox.charting.plot2d.OHLC", dojox.charting.plot2d.Base, {
+ defaultParams: {
+ hAxis: "x", // use a horizontal axis named "x"
+ vAxis: "y", // use a vertical axis named "y"
+ gap: 2, // gap between columns in pixels
+ shadows: null // draw shadows
+ },
+ optionalParams: {
+ minBarSize: 1, // minimal bar size in pixels
+ maxBarSize: 1 // maximal bar size in pixels
+ },
+
+ constructor: function(chart, kwArgs){
+ this.opt = dojo.clone(this.defaultParams);
+ du.updateWithObject(this.opt, kwArgs);
+ du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+ this.series = [];
+ this.hAxis = this.opt.hAxis;
+ this.vAxis = this.opt.vAxis;
+ },
+
+ collectStats: function(series){
+ // we have to roll our own, since we need to use all four passed
+ // values to figure out our stats, and common only assumes x and y.
+ var stats = dojo.clone(dc.defaultStats);
+ for(var i=0; i<series.length; i++){
+ var run = series[i];
+ if(!run.data.length){ continue; }
+ var old_vmin = stats.vmin, old_vmax = stats.vmax;
+ if(!("ymin" in run) || !("ymax" in run)){
+ dojo.forEach(run.data, function(val, idx){
+ var x = val.x || idx + 1;
+ stats.hmin = Math.min(stats.hmin, x);
+ stats.hmax = Math.max(stats.hmax, x);
+ stats.vmin = Math.min(stats.vmin, val.open, val.close, val.high, val.low);
+ stats.vmax = Math.max(stats.vmax, val.open, val.close, val.high, val.low);
+ });
+ }
+ if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+ if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+ }
+ return stats;
+ },
+
+ calculateAxes: function(dim){
+ var stats = this.collectStats(this.series), t;
+ stats.hmin -= 0.5;
+ stats.hmax += 0.5;
+ this._calc(dim, stats);
+ return this;
+ },
+
+ render: function(dim, offsets){
+ this.dirty = this.isDirty();
+ if(this.dirty){
+ dojo.forEach(this.series, purgeGroup);
+ this.cleanGroup();
+ var s = this.group;
+ df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+ }
+ var t = this.chart.theme, color, stroke, fill, f, gap, width,
+ ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+ vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+ baseline = Math.max(0, this._vScaler.bounds.lower),
+ baselineHeight = vt(baseline),
+ events = this.events();
+ f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+ gap = f.gap;
+ width = f.size;
+ this.resetEvents();
+ for(var i = this.series.length - 1; i >= 0; --i){
+ var run = this.series[i];
+ if(!this.dirty && !run.dirty){ continue; }
+ run.cleanGroup();
+ var s = run.group;
+ if(!run.fill || !run.stroke){
+ // need autogenerated color
+ color = run.dyn.color = new dojo.Color(t.next("color"));
+ }
+ // note that fill does not get used with this
+ stroke = run.stroke ? run.stroke : dc.augmentStroke(t.series.stroke, color);
+ fill = run.fill ? run.fill : dc.augmentFill(t.series.fill, color);
+
+ for(var j = 0; j < run.data.length; ++j){
+ var v = run.data[j];
+
+ // calculate the points we need for OHLC
+ var x = ht(v.x || (j+0.5)) + offsets.l + gap,
+ y = dim.height - offsets.b,
+ open = vt(v.open),
+ close = vt(v.close),
+ high = vt(v.high),
+ low = vt(v.low);
+ if(low > high){
+ var tmp = high;
+ high = low;
+ low = tmp;
+ }
+
+ if(width >= 1){
+ var hl = { x1: width/2, x2: width/2, y1: y - high, y2: y - low },
+ op = { x1: 0, x2: ((width/2) + ((stroke.width||1)/2)), y1: y-open, y2: y-open},
+ cl = { x1: ((width/2) - ((stroke.width||1)/2)), x2: width, y1: y-close, y2: y-close };
+ shape = s.createGroup();
+ shape.setTransform({dx: x, dy: 0 });
+ var inner = shape.createGroup();
+ inner.createLine(hl).setStroke(stroke);
+ inner.createLine(op).setStroke(stroke);
+ inner.createLine(cl).setStroke(stroke);
+
+ // TODO: double check this.
+ run.dyn.fill = fill;
+ run.dyn.stroke = stroke;
+ if(events){
+ var o = {
+ element: "candlestick",
+ index: j,
+ run: run,
+ plot: this,
+ hAxis: this.hAxis || null,
+ vAxis: this.vAxis || null,
+ shape: inner,
+ x: x,
+ y: y-Math.max(open, close),
+ cx: width/2,
+ cy: (y-Math.max(open, close)) + (Math.max(open > close ? open-close : close-open, 1)/2),
+ width: width,
+ height: Math.max(open > close ? open-close : close-open, 1),
+ data: v
+ };
+ this._connectEvents(shape, o);
+ }
+ }
+ }
+ run.dirty = false;
+ }
+ this.dirty = false;
+ return this;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Chart2D"] = true;
+dojo.provide("dojox.charting.Chart2D");
+
+
+
+
+
+
+
+
+
+// require all axes to support references by name
+
+
+// require all plots to support references by name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(function(){
+ var df = dojox.lang.functional, dc = dojox.charting,
+ clear = df.lambda("item.clear()"),
+ purge = df.lambda("item.purgeGroup()"),
+ destroy = df.lambda("item.destroy()"),
+ makeClean = df.lambda("item.dirty = false"),
+ makeDirty = df.lambda("item.dirty = true");
+
+ dojo.declare("dojox.charting.Chart2D", null, {
+ constructor: function(node, kwArgs){
+ // initialize parameters
+ if(!kwArgs){ kwArgs = {}; }
+ this.margins = kwArgs.margins ? kwArgs.margins : {l: 10, t: 10, r: 10, b: 10};
+ this.stroke = kwArgs.stroke;
+ this.fill = kwArgs.fill;
+
+ // default initialization
+ this.theme = null;
+ this.axes = {}; // map of axes
+ this.stack = []; // stack of plotters
+ this.plots = {}; // map of plotter indices
+ this.series = []; // stack of data runs
+ this.runs = {}; // map of data run indices
+ this.dirty = true;
+ this.coords = null;
+
+ // create a surface
+ this.node = dojo.byId(node);
+ var box = dojo.marginBox(node);
+ this.surface = dojox.gfx.createSurface(this.node, box.w, box.h);
+ },
+ destroy: function(){
+ dojo.forEach(this.series, destroy);
+ dojo.forEach(this.stack, destroy);
+ df.forIn(this.axes, destroy);
+ this.surface.destroy();
+ },
+ getCoords: function(){
+ if(!this.coords){
+ this.coords = dojo.coords(this.node, true);
+ }
+ return this.coords;
+ },
+ setTheme: function(theme){
+ this.theme = theme._clone();
+ this.dirty = true;
+ return this;
+ },
+ addAxis: function(name, kwArgs){
+ var axis;
+ if(!kwArgs || !("type" in kwArgs)){
+ axis = new dc.axis2d.Default(this, kwArgs);
+ }else{
+ axis = typeof kwArgs.type == "string" ?
+ new dc.axis2d[kwArgs.type](this, kwArgs) :
+ new kwArgs.type(this, kwArgs);
+ }
+ axis.name = name;
+ axis.dirty = true;
+ if(name in this.axes){
+ this.axes[name].destroy();
+ }
+ this.axes[name] = axis;
+ this.dirty = true;
+ return this;
+ },
+ getAxis: function(name){
+ return this.axes[name];
+ },
+ removeAxis: function(name){
+ if(name in this.axes){
+ // destroy the axis
+ this.axes[name].destroy();
+ delete this.axes[name];
+ // mark the chart as dirty
+ this.dirty = true;
+ }
+ return this; // self
+ },
+ addPlot: function(name, kwArgs){
+ var plot;
+ if(!kwArgs || !("type" in kwArgs)){
+ plot = new dc.plot2d.Default(this, kwArgs);
+ }else{
+ plot = typeof kwArgs.type == "string" ?
+ new dc.plot2d[kwArgs.type](this, kwArgs) :
+ new kwArgs.type(this, kwArgs);
+ }
+ plot.name = name;
+ plot.dirty = true;
+ if(name in this.plots){
+ this.stack[this.plots[name]].destroy();
+ this.stack[this.plots[name]] = plot;
+ }else{
+ this.plots[name] = this.stack.length;
+ this.stack.push(plot);
+ }
+ this.dirty = true;
+ return this;
+ },
+ removePlot: function(name){
+ if(name in this.plots){
+ // get the index and remove the name
+ var index = this.plots[name];
+ delete this.plots[name];
+ // destroy the plot
+ this.stack[index].destroy();
+ // remove the plot from the stack
+ this.stack.splice(index, 1);
+ // update indices to reflect the shift
+ df.forIn(this.plots, function(idx, name, plots){
+ if(idx > index){
+ plots[name] = idx - 1;
+ }
+ });
+ // mark the chart as dirty
+ this.dirty = true;
+ }
+ return this; // self
+ },
+ addSeries: function(name, data, kwArgs){
+ var run = new dc.Series(this, data, kwArgs);
+ if(name in this.runs){
+ this.series[this.runs[name]].destroy();
+ this.series[this.runs[name]] = run;
+ }else{
+ this.runs[name] = this.series.length;
+ this.series.push(run);
+ }
+ run.name = name;
+ this.dirty = true;
+ // fix min/max
+ if(!("ymin" in run) && "min" in run){ run.ymin = run.min; }
+ if(!("ymax" in run) && "max" in run){ run.ymax = run.max; }
+ return this;
+ },
+ removeSeries: function(name){
+ if(name in this.runs){
+ // get the index and remove the name
+ var index = this.runs[name],
+ plotName = this.series[index].plot;
+ delete this.runs[name];
+ // destroy the run
+ this.series[index].destroy();
+ // remove the run from the stack of series
+ this.series.splice(index, 1);
+ // update indices to reflect the shift
+ df.forIn(this.runs, function(idx, name, runs){
+ if(idx > index){
+ runs[name] = idx - 1;
+ }
+ });
+ this.dirty = true;
+ }
+ return this; // self
+ },
+ updateSeries: function(name, data){
+ if(name in this.runs){
+ var run = this.series[this.runs[name]];
+ run.data = data;
+ run.dirty = true;
+ this._invalidateDependentPlots(run.plot, false);
+ this._invalidateDependentPlots(run.plot, true);
+ }
+ return this;
+ },
+ resize: function(width, height){
+ var box;
+ switch(arguments.length){
+ case 0:
+ box = dojo.marginBox(this.node);
+ break;
+ case 1:
+ box = width;
+ break;
+ default:
+ box = { w: width, h: height };
+ break;
+ }
+ dojo.marginBox(this.node, box);
+ this.surface.setDimensions(box.w, box.h);
+ this.dirty = true;
+ this.coords = null;
+ return this.render();
+ },
+ getGeometry: function(){
+ var ret = {};
+ df.forIn(this.axes, function(axis){
+ if(axis.initialized()){
+ ret[axis.name] = {
+ name: axis.name,
+ vertical: axis.vertical,
+ scaler: axis.scaler,
+ ticks: axis.ticks
+ };
+ }
+ });
+ return ret;
+ },
+ setAxisWindow: function(name, scale, offset){
+ var axis = this.axes[name];
+ if(axis){
+ axis.setWindow(scale, offset);
+ }
+ return this;
+ },
+ setWindow: function(sx, sy, dx, dy){
+ if(!("plotArea" in this)){
+ this.calculateGeometry();
+ }
+ df.forIn(this.axes, function(axis){
+ var scale, offset, bounds = axis.getScaler().bounds,
+ s = bounds.span / (bounds.upper - bounds.lower);
+ if(axis.vertical){
+ scale = sy;
+ offset = dy / s / scale;
+ }else{
+ scale = sx;
+ offset = dx / s / scale;
+ }
+ axis.setWindow(scale, offset);
+ });
+ return this;
+ },
+ calculateGeometry: function(){
+ if(this.dirty){
+ return this.fullGeometry();
+ }
+
+ // calculate geometry
+ dojo.forEach(this.stack, function(plot){
+ if( plot.dirty ||
+ (plot.hAxis && this.axes[plot.hAxis].dirty) ||
+ (plot.vAxis && this.axes[plot.vAxis].dirty)
+ ){
+ plot.calculateAxes(this.plotArea);
+ }
+ }, this);
+
+ return this;
+ },
+ fullGeometry: function(){
+ this._makeDirty();
+
+ // clear old values
+ dojo.forEach(this.stack, clear);
+
+ // rebuild new connections, and add defaults
+
+ // set up a theme
+ if(!this.theme){
+ this.setTheme(new dojox.charting.Theme(dojox.charting._def));
+ }
+
+ // assign series
+ dojo.forEach(this.series, function(run){
+ if(!(run.plot in this.plots)){
+ var plot = new dc.plot2d.Default(this, {});
+ plot.name = run.plot;
+ this.plots[run.plot] = this.stack.length;
+ this.stack.push(plot);
+ }
+ this.stack[this.plots[run.plot]].addSeries(run);
+ }, this);
+ // assign axes
+ dojo.forEach(this.stack, function(plot){
+ if(plot.hAxis){
+ plot.setAxis(this.axes[plot.hAxis]);
+ }
+ if(plot.vAxis){
+ plot.setAxis(this.axes[plot.vAxis]);
+ }
+ }, this);
+
+ // calculate geometry
+
+ // 1st pass
+ var dim = this.dim = this.surface.getDimensions();
+ dim.width = dojox.gfx.normalizedLength(dim.width);
+ dim.height = dojox.gfx.normalizedLength(dim.height);
+ df.forIn(this.axes, clear);
+ dojo.forEach(this.stack, function(p){ p.calculateAxes(dim); });
+
+ // assumption: we don't have stacked axes yet
+ var offsets = this.offsets = { l: 0, r: 0, t: 0, b: 0 };
+ df.forIn(this.axes, function(axis){
+ df.forIn(axis.getOffsets(), function(o, i){ offsets[i] += o; });
+ });
+ // add margins
+ df.forIn(this.margins, function(o, i){ offsets[i] += o; });
+
+ // 2nd pass with realistic dimensions
+ this.plotArea = {
+ width: dim.width - offsets.l - offsets.r,
+ height: dim.height - offsets.t - offsets.b
+ };
+ df.forIn(this.axes, clear);
+ dojo.forEach(this.stack, function(plot){ plot.calculateAxes(this.plotArea); }, this);
+
+ return this;
+ },
+ render: function(){
+ if(this.theme){
+ this.theme.clear();
+ }
+
+ if(this.dirty){
+ return this.fullRender();
+ }
+
+ this.calculateGeometry();
+
+ // go over the stack backwards
+ df.forEachRev(this.stack, function(plot){ plot.render(this.dim, this.offsets); }, this);
+
+ // go over axes
+ df.forIn(this.axes, function(axis){ axis.render(this.dim, this.offsets); }, this);
+
+ this._makeClean();
+
+ // BEGIN FOR HTML CANVAS
+ if(this.surface.render){ this.surface.render(); };
+ // END FOR HTML CANVAS
+
+ return this;
+ },
+ fullRender: function(){
+ // calculate geometry
+ this.fullGeometry();
+ var offsets = this.offsets, dim = this.dim;
+
+ // get required colors
+ var requiredColors = df.foldl(this.stack, "z + plot.getRequiredColors()", 0);
+ this.theme.defineColors({num: requiredColors, cache: false});
+
+ // clear old shapes
+ dojo.forEach(this.series, purge);
+ df.forIn(this.axes, purge);
+ dojo.forEach(this.stack, purge);
+ this.surface.clear();
+
+ // generate shapes
+
+ // draw a plot background
+ var t = this.theme,
+ fill = t.plotarea && t.plotarea.fill,
+ stroke = t.plotarea && t.plotarea.stroke;
+ if(fill){
+ this.surface.createRect({
+ x: offsets.l, y: offsets.t,
+ width: dim.width - offsets.l - offsets.r,
+ height: dim.height - offsets.t - offsets.b
+ }).setFill(fill);
+ }
+ if(stroke){
+ this.surface.createRect({
+ x: offsets.l, y: offsets.t,
+ width: dim.width - offsets.l - offsets.r - 1,
+ height: dim.height - offsets.t - offsets.b - 1
+ }).setStroke(stroke);
+ }
+
+ // go over the stack backwards
+ df.foldr(this.stack, function(z, plot){ return plot.render(dim, offsets), 0; }, 0);
+
+ // pseudo-clipping: matting
+ fill = this.fill ? this.fill : (t.chart && t.chart.fill);
+ stroke = this.stroke ? this.stroke : (t.chart && t.chart.stroke);
+
+ // TRT: support for "inherit" as a named value in a theme.
+ if(fill == "inherit"){
+ // find the background color of the nearest ancestor node, and use that explicitly.
+ var node = this.node, fill = new dojo.Color(dojo.style(node, "backgroundColor"));
+ while(fill.a==0 && node!=document.documentElement){
+ fill = new dojo.Color(dojo.style(node, "backgroundColor"));
+ node = node.parentNode;
+ }
+ }
+
+ if(fill){
+ if(offsets.l){ // left
+ this.surface.createRect({
+ width: offsets.l,
+ height: dim.height + 1
+ }).setFill(fill);
+ }
+ if(offsets.r){ // right
+ this.surface.createRect({
+ x: dim.width - offsets.r,
+ width: offsets.r + 1,
+ height: dim.height + 1
+ }).setFill(fill);
+ }
+ if(offsets.t){ // top
+ this.surface.createRect({
+ width: dim.width + 1,
+ height: offsets.t
+ }).setFill(fill);
+ }
+ if(offsets.b){ // bottom
+ this.surface.createRect({
+ y: dim.height - offsets.b,
+ width: dim.width + 1,
+ height: offsets.b + 2
+ }).setFill(fill);
+ }
+ }
+ if(stroke){
+ this.surface.createRect({
+ width: dim.width - 1,
+ height: dim.height - 1
+ }).setStroke(stroke);
+ }
+
+ // go over axes
+ df.forIn(this.axes, function(axis){ axis.render(dim, offsets); });
+
+ this._makeClean();
+
+ // BEGIN FOR HTML CANVAS
+ if(this.surface.render){ this.surface.render(); };
+ // END FOR HTML CANVAS
+
+ return this;
+ },
+ connectToPlot: function(name, object, method){
+ return name in this.plots ? this.stack[this.plots[name]].connect(object, method) : null;
+ },
+ _makeClean: function(){
+ // reset dirty flags
+ dojo.forEach(this.axes, makeClean);
+ dojo.forEach(this.stack, makeClean);
+ dojo.forEach(this.series, makeClean);
+ this.dirty = false;
+ },
+ _makeDirty: function(){
+ // reset dirty flags
+ dojo.forEach(this.axes, makeDirty);
+ dojo.forEach(this.stack, makeDirty);
+ dojo.forEach(this.series, makeDirty);
+ this.dirty = true;
+ },
+ _invalidateDependentPlots: function(plotName, /* Boolean */ verticalAxis){
+ if(plotName in this.plots){
+ var plot = this.stack[this.plots[plotName]], axis,
+ axisName = verticalAxis ? "vAxis" : "hAxis";
+ if(plot[axisName]){
+ axis = this.axes[plot[axisName]];
+ if(axis && axis.dependOnData()){
+ axis.dirty = true;
+ // find all plots and mark them dirty
+ dojo.forEach(this.stack, function(p){
+ if(p[axisName] && p[axisName] == plot[axisName]){
+ p.dirty = true;
+ }
+ });
+ }
+ }else{
+ plot.dirty = true;
+ }
+ }
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.fx.easing"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx.easing"] = true;
+dojo.provide("dojo.fx.easing");
+
+dojo.fx.easing = {
+ // summary:
+ // Collection of easing functions to use beyond the default
+ // `dojo._defaultEasing` function.
+ //
+ // description:
+ //
+ // Easing functions are used to manipulate the iteration through
+ // an `dojo.Animation`s _Line. _Line being the properties of an Animation,
+ // and the easing function progresses through that Line determing
+ // how quickly (or slowly) it should go. Or more accurately: modify
+ // the value of the _Line based on the percentage of animation completed.
+ //
+ // All functions follow a simple naming convention of "ease type" + "when".
+ // If the name of the function ends in Out, the easing described appears
+ // towards the end of the animation. "In" means during the beginning,
+ // and InOut means both ranges of the Animation will applied, both
+ // beginning and end.
+ //
+ // One does not call the easing function directly, it must be passed to
+ // the `easing` property of an animation.
+ //
+ // example:
+ // |
+ // | var anim = dojo.fadeOut({
+ // | node: 'node',
+ // | duration: 2000,
+ // | // note there is no ()
+ // | easing: dojo.fx.easing.quadIn
+ // | }).play();
+ //
+
+ linear: function(/* Decimal? */n){
+ // summary: A linear easing function
+ return n;
+ },
+
+ quadIn: function(/* Decimal? */n){
+ return Math.pow(n, 2);
+ },
+
+ quadOut: function(/* Decimal? */n){
+ return n * (n - 2) * -1;
+ },
+
+ quadInOut: function(/* Decimal? */n){
+ n = n * 2;
+ if(n < 1){ return Math.pow(n, 2) / 2; }
+ return -1 * ((--n) * (n - 2) - 1) / 2;
+ },
+
+ cubicIn: function(/* Decimal? */n){
+ return Math.pow(n, 3);
+ },
+
+ cubicOut: function(/* Decimal? */n){
+ return Math.pow(n - 1, 3) + 1;
+ },
+
+ cubicInOut: function(/* Decimal? */n){
+ n = n * 2;
+ if(n < 1){ return Math.pow(n, 3) / 2; }
+ n -= 2;
+ return (Math.pow(n, 3) + 2) / 2;
+ },
+
+ quartIn: function(/* Decimal? */n){
+ return Math.pow(n, 4);
+ },
+
+ quartOut: function(/* Decimal? */n){
+ return -1 * (Math.pow(n - 1, 4) - 1);
+ },
+
+ quartInOut: function(/* Decimal? */n){
+ n = n * 2;
+ if(n < 1){ return Math.pow(n, 4) / 2; }
+ n -= 2;
+ return -1 / 2 * (Math.pow(n, 4) - 2);
+ },
+
+ quintIn: function(/* Decimal? */n){
+ return Math.pow(n, 5);
+ },
+
+ quintOut: function(/* Decimal? */n){
+ return Math.pow(n - 1, 5) + 1;
+ },
+
+ quintInOut: function(/* Decimal? */n){
+ n = n * 2;
+ if(n < 1){ return Math.pow(n, 5) / 2; };
+ n -= 2;
+ return (Math.pow(n, 5) + 2) / 2;
+ },
+
+ sineIn: function(/* Decimal? */n){
+ return -1 * Math.cos(n * (Math.PI / 2)) + 1;
+ },
+
+ sineOut: function(/* Decimal? */n){
+ return Math.sin(n * (Math.PI / 2));
+ },
+
+ sineInOut: function(/* Decimal? */n){
+ return -1 * (Math.cos(Math.PI * n) - 1) / 2;
+ },
+
+ expoIn: function(/* Decimal? */n){
+ return (n == 0) ? 0 : Math.pow(2, 10 * (n - 1));
+ },
+
+ expoOut: function(/* Decimal? */n){
+ return (n == 1) ? 1 : (-1 * Math.pow(2, -10 * n) + 1);
+ },
+
+ expoInOut: function(/* Decimal? */n){
+ if(n == 0){ return 0; }
+ if(n == 1){ return 1; }
+ n = n * 2;
+ if(n < 1){ return Math.pow(2, 10 * (n - 1)) / 2; }
+ --n;
+ return (-1 * Math.pow(2, -10 * n) + 2) / 2;
+ },
+
+ circIn: function(/* Decimal? */n){
+ return -1 * (Math.sqrt(1 - Math.pow(n, 2)) - 1);
+ },
+
+ circOut: function(/* Decimal? */n){
+ n = n - 1;
+ return Math.sqrt(1 - Math.pow(n, 2));
+ },
+
+ circInOut: function(/* Decimal? */n){
+ n = n * 2;
+ if(n < 1){ return -1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) - 1); }
+ n -= 2;
+ return 1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) + 1);
+ },
+
+ backIn: function(/* Decimal? */n){
+ // summary:
+ // An easing function that starts away from the target,
+ // and quickly accelerates towards the end value.
+ //
+ // Use caution when the easing will cause values to become
+ // negative as some properties cannot be set to negative values.
+ var s = 1.70158;
+ return Math.pow(n, 2) * ((s + 1) * n - s);
+ },
+
+ backOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function that pops past the range briefly, and slowly comes back.
+ //
+ // description:
+ // An easing function that pops past the range briefly, and slowly comes back.
+ //
+ // Use caution when the easing will cause values to become negative as some
+ // properties cannot be set to negative values.
+
+ n = n - 1;
+ var s = 1.70158;
+ return Math.pow(n, 2) * ((s + 1) * n + s) + 1;
+ },
+
+ backInOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function combining the effects of `backIn` and `backOut`
+ //
+ // description:
+ // An easing function combining the effects of `backIn` and `backOut`.
+ // Use caution when the easing will cause values to become negative
+ // as some properties cannot be set to negative values.
+ var s = 1.70158 * 1.525;
+ n = n * 2;
+ if(n < 1){ return (Math.pow(n, 2) * ((s + 1) * n - s)) / 2; }
+ n-=2;
+ return (Math.pow(n, 2) * ((s + 1) * n + s) + 2) / 2;
+ },
+
+ elasticIn: function(/* Decimal? */n){
+ // summary:
+ // An easing function the elastically snaps from the start value
+ //
+ // description:
+ // An easing function the elastically snaps from the start value
+ //
+ // Use caution when the elasticity will cause values to become negative
+ // as some properties cannot be set to negative values.
+ if(n == 0 || n == 1){ return n; }
+ var p = .3;
+ var s = p / 4;
+ n = n - 1;
+ return -1 * Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p);
+ },
+
+ elasticOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function that elasticly snaps around the target value,
+ // near the end of the Animation
+ //
+ // description:
+ // An easing function that elasticly snaps around the target value,
+ // near the end of the Animation
+ //
+ // Use caution when the elasticity will cause values to become
+ // negative as some properties cannot be set to negative values.
+ if(n==0 || n == 1){ return n; }
+ var p = .3;
+ var s = p / 4;
+ return Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p) + 1;
+ },
+
+ elasticInOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function that elasticly snaps around the value, near
+ // the beginning and end of the Animation.
+ //
+ // description:
+ // An easing function that elasticly snaps around the value, near
+ // the beginning and end of the Animation.
+ //
+ // Use caution when the elasticity will cause values to become
+ // negative as some properties cannot be set to negative values.
+ if(n == 0) return 0;
+ n = n * 2;
+ if(n == 2) return 1;
+ var p = .3 * 1.5;
+ var s = p / 4;
+ if(n < 1){
+ n -= 1;
+ return -.5 * (Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p));
+ }
+ n -= 1;
+ return .5 * (Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p)) + 1;
+ },
+
+ bounceIn: function(/* Decimal? */n){
+ // summary:
+ // An easing function that 'bounces' near the beginning of an Animation
+ return (1 - dojo.fx.easing.bounceOut(1 - n)); // Decimal
+ },
+
+ bounceOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function that 'bounces' near the end of an Animation
+ var s = 7.5625;
+ var p = 2.75;
+ var l;
+ if(n < (1 / p)){
+ l = s * Math.pow(n, 2);
+ }else if(n < (2 / p)){
+ n -= (1.5 / p);
+ l = s * Math.pow(n, 2) + .75;
+ }else if(n < (2.5 / p)){
+ n -= (2.25 / p);
+ l = s * Math.pow(n, 2) + .9375;
+ }else{
+ n -= (2.625 / p);
+ l = s * Math.pow(n, 2) + .984375;
+ }
+ return l;
+ },
+
+ bounceInOut: function(/* Decimal? */n){
+ // summary:
+ // An easing function that 'bounces' at the beginning and end of the Animation
+ if(n < 0.5){ return dojo.fx.easing.bounceIn(n * 2) / 2; }
+ return (dojo.fx.easing.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal
+ }
+};
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Base"] = true;
+dojo.provide("dojox.charting.action2d.Base");
+
+
+
+
+
+(function(){
+ var DEFAULT_DURATION = 400, // ms
+ DEFAULT_EASING = dojo.fx.easing.backOut,
+ df = dojox.lang.functional;
+
+ dojo.declare("dojox.charting.action2d.Base", null, {
+
+ overOutEvents: {onmouseover: 1, onmouseout: 1},
+
+ constructor: function(chart, plot, kwargs){
+ this.chart = chart;
+ this.plot = plot ? plot : "default";
+ this.anim = {};
+
+ // process common optional named parameters
+ if(!kwargs){ kwargs = {}; }
+ this.duration = kwargs.duration ? kwargs.duration : DEFAULT_DURATION;
+ this.easing = kwargs.easing ? kwargs.easing : DEFAULT_EASING;
+ },
+
+ connect: function(){
+ this.handle = this.chart.connectToPlot(this.plot, this, "process");
+ },
+
+ disconnect: function(){
+ if(this.handle){
+ dojo.disconnect(this.handle);
+ this.handle = null;
+ }
+ },
+
+ reset: function(){
+ // nothing by default
+ },
+
+ destroy: function(){
+ if(this.handle){
+ this.disconnect();
+ }
+ df.forIn(this.anim, function(o){
+ df.forIn(o, function(anim){
+ anim.action.stop(true);
+ });
+ });
+ this.anim = {};
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Highlight"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Highlight"] = true;
+dojo.provide("dojox.charting.action2d.Highlight");
+
+
+
+
+(function(){
+ var DEFAULT_SATURATION = 100, // %
+ DEFAULT_LUMINOSITY1 = 75, // %
+ DEFAULT_LUMINOSITY2 = 50, // %
+
+ c = dojox.color,
+
+ cc = function(color){
+ return function(){ return color; };
+ },
+
+ hl = function(color){
+ var a = new c.Color(color),
+ x = a.toHsl();
+ if(x.s == 0){
+ x.l = x.l < 50 ? 100 : 0;
+ }else{
+ x.s = DEFAULT_SATURATION;
+ if(x.l < DEFAULT_LUMINOSITY2){
+ x.l = DEFAULT_LUMINOSITY1;
+ }else if(x.l > DEFAULT_LUMINOSITY1){
+ x.l = DEFAULT_LUMINOSITY2;
+ }else{
+ x.l = x.l - DEFAULT_LUMINOSITY2 > DEFAULT_LUMINOSITY1 - x.l ?
+ DEFAULT_LUMINOSITY2 : DEFAULT_LUMINOSITY1;
+ }
+ }
+ return c.fromHsl(x);
+ };
+
+ dojo.declare("dojox.charting.action2d.Highlight", dojox.charting.action2d.Base, {
+ // the data description block for the widget parser
+ defaultParams: {
+ duration: 400, // duration of the action in ms
+ easing: dojo.fx.easing.backOut // easing for the action
+ },
+ optionalParams: {
+ highlight: "red" // name for the highlight color
+ // programmatic instantiation can use functions and color objects
+ },
+
+ constructor: function(chart, plot, kwArgs){
+ // process optional named parameters
+ var a = kwArgs && kwArgs.highlight;
+ this.colorFun = a ? (dojo.isFunction(a) ? a : cc(a)) : hl;
+
+ this.connect();
+ },
+
+ process: function(o){
+ if(!o.shape || !(o.type in this.overOutEvents)){ return; }
+
+ var runName = o.run.name, index = o.index, anim, startFill, endFill;
+
+ if(runName in this.anim){
+ anim = this.anim[runName][index];
+ }else{
+ this.anim[runName] = {};
+ }
+
+ if(anim){
+ anim.action.stop(true);
+ }else{
+ var color = o.shape.getFill();
+ if(!color || !(color instanceof dojo.Color)){
+ return;
+ }
+ this.anim[runName][index] = anim = {
+ start: color,
+ end: this.colorFun(color)
+ };
+ }
+
+ var start = anim.start, end = anim.end;
+ if(o.type == "onmouseout"){
+ // swap colors
+ var t = start;
+ start = end;
+ end = t;
+ }
+
+ anim.action = dojox.gfx.fx.animateFill({
+ shape: o.shape,
+ duration: this.duration,
+ easing: this.easing,
+ color: {start: start, end: end}
+ });
+ if(o.type == "onmouseout"){
+ dojo.connect(anim.action, "onEnd", this, function(){
+ if(this.anim[runName]){
+ delete this.anim[runName][index];
+ }
+ });
+ }
+ anim.action.play();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx.Toggler"] = true;
+dojo.provide("dojo.fx.Toggler");
+
+dojo.declare("dojo.fx.Toggler", null, {
+ // summary:
+ // A simple `dojo.Animation` toggler API.
+ //
+ // description:
+ // class constructor for an animation toggler. It accepts a packed
+ // set of arguments about what type of animation to use in each
+ // direction, duration, etc. All available members are mixed into
+ // these animations from the constructor (for example, `node`,
+ // `showDuration`, `hideDuration`).
+ //
+ // example:
+ // | var t = new dojo.fx.Toggler({
+ // | node: "nodeId",
+ // | showDuration: 500,
+ // | // hideDuration will default to "200"
+ // | showFunc: dojo.fx.wipeIn,
+ // | // hideFunc will default to "fadeOut"
+ // | });
+ // | t.show(100); // delay showing for 100ms
+ // | // ...time passes...
+ // | t.hide();
+
+ // node: DomNode
+ // the node to target for the showing and hiding animations
+ node: null,
+
+ // showFunc: Function
+ // The function that returns the `dojo.Animation` to show the node
+ showFunc: dojo.fadeIn,
+
+ // hideFunc: Function
+ // The function that returns the `dojo.Animation` to hide the node
+ hideFunc: dojo.fadeOut,
+
+ // showDuration:
+ // Time in milliseconds to run the show Animation
+ showDuration: 200,
+
+ // hideDuration:
+ // Time in milliseconds to run the hide Animation
+ hideDuration: 200,
+
+ // FIXME: need a policy for where the toggler should "be" the next
+ // time show/hide are called if we're stopped somewhere in the
+ // middle.
+ // FIXME: also would be nice to specify individual showArgs/hideArgs mixed into
+ // each animation individually.
+ // FIXME: also would be nice to have events from the animations exposed/bridged
+
+ /*=====
+ _showArgs: null,
+ _showAnim: null,
+
+ _hideArgs: null,
+ _hideAnim: null,
+
+ _isShowing: false,
+ _isHiding: false,
+ =====*/
+
+ constructor: function(args){
+ var _t = this;
+
+ dojo.mixin(_t, args);
+ _t.node = args.node;
+ _t._showArgs = dojo.mixin({}, args);
+ _t._showArgs.node = _t.node;
+ _t._showArgs.duration = _t.showDuration;
+ _t.showAnim = _t.showFunc(_t._showArgs);
+
+ _t._hideArgs = dojo.mixin({}, args);
+ _t._hideArgs.node = _t.node;
+ _t._hideArgs.duration = _t.hideDuration;
+ _t.hideAnim = _t.hideFunc(_t._hideArgs);
+
+ dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true));
+ dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true));
+ },
+
+ show: function(delay){
+ // summary: Toggle the node to showing
+ // delay: Integer?
+ // Ammount of time to stall playing the show animation
+ return this.showAnim.play(delay || 0);
+ },
+
+ hide: function(delay){
+ // summary: Toggle the node to hidden
+ // delay: Integer?
+ // Ammount of time to stall playing the hide animation
+ return this.hideAnim.play(delay || 0);
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx"] = true;
+dojo.provide("dojo.fx");
+ // FIXME: remove this back-compat require in 2.0
+/*=====
+dojo.fx = {
+ // summary: Effects library on top of Base animations
+};
+=====*/
+(function(){
+
+ var d = dojo,
+ _baseObj = {
+ _fire: function(evt, args){
+ if(this[evt]){
+ this[evt].apply(this, args||[]);
+ }
+ return this;
+ }
+ };
+
+ var _chain = function(animations){
+ this._index = -1;
+ this._animations = animations||[];
+ this._current = this._onAnimateCtx = this._onEndCtx = null;
+
+ this.duration = 0;
+ d.forEach(this._animations, function(a){
+ this.duration += a.duration;
+ if(a.delay){ this.duration += a.delay; }
+ }, this);
+ };
+ d.extend(_chain, {
+ _onAnimate: function(){
+ this._fire("onAnimate", arguments);
+ },
+ _onEnd: function(){
+ d.disconnect(this._onAnimateCtx);
+ d.disconnect(this._onEndCtx);
+ this._onAnimateCtx = this._onEndCtx = null;
+ if(this._index + 1 == this._animations.length){
+ this._fire("onEnd");
+ }else{
+ // switch animations
+ this._current = this._animations[++this._index];
+ this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+ this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+ this._current.play(0, true);
+ }
+ },
+ play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+ if(!this._current){ this._current = this._animations[this._index = 0]; }
+ if(!gotoStart && this._current.status() == "playing"){ return this; }
+ var beforeBegin = d.connect(this._current, "beforeBegin", this, function(){
+ this._fire("beforeBegin");
+ }),
+ onBegin = d.connect(this._current, "onBegin", this, function(arg){
+ this._fire("onBegin", arguments);
+ }),
+ onPlay = d.connect(this._current, "onPlay", this, function(arg){
+ this._fire("onPlay", arguments);
+ d.disconnect(beforeBegin);
+ d.disconnect(onBegin);
+ d.disconnect(onPlay);
+ });
+ if(this._onAnimateCtx){
+ d.disconnect(this._onAnimateCtx);
+ }
+ this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+ if(this._onEndCtx){
+ d.disconnect(this._onEndCtx);
+ }
+ this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+ this._current.play.apply(this._current, arguments);
+ return this;
+ },
+ pause: function(){
+ if(this._current){
+ var e = d.connect(this._current, "onPause", this, function(arg){
+ this._fire("onPause", arguments);
+ d.disconnect(e);
+ });
+ this._current.pause();
+ }
+ return this;
+ },
+ gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+ this.pause();
+ var offset = this.duration * percent;
+ this._current = null;
+ d.some(this._animations, function(a){
+ if(a.duration <= offset){
+ this._current = a;
+ return true;
+ }
+ offset -= a.duration;
+ return false;
+ });
+ if(this._current){
+ this._current.gotoPercent(offset / this._current.duration, andPlay);
+ }
+ return this;
+ },
+ stop: function(/*boolean?*/ gotoEnd){
+ if(this._current){
+ if(gotoEnd){
+ for(; this._index + 1 < this._animations.length; ++this._index){
+ this._animations[this._index].stop(true);
+ }
+ this._current = this._animations[this._index];
+ }
+ var e = d.connect(this._current, "onStop", this, function(arg){
+ this._fire("onStop", arguments);
+ d.disconnect(e);
+ });
+ this._current.stop();
+ }
+ return this;
+ },
+ status: function(){
+ return this._current ? this._current.status() : "stopped";
+ },
+ destroy: function(){
+ if(this._onAnimateCtx){ d.disconnect(this._onAnimateCtx); }
+ if(this._onEndCtx){ d.disconnect(this._onEndCtx); }
+ }
+ });
+ d.extend(_chain, _baseObj);
+
+ dojo.fx.chain = function(/*dojo.Animation[]*/ animations){
+ // summary:
+ // Chain a list of `dojo.Animation`s to run in sequence
+ //
+ // description:
+ // Return a `dojo.Animation` which will play all passed
+ // `dojo.Animation` instances in sequence, firing its own
+ // synthesized events simulating a single animation. (eg:
+ // onEnd of this animation means the end of the chain,
+ // not the individual animations within)
+ //
+ // example:
+ // Once `node` is faded out, fade in `otherNode`
+ // | dojo.fx.chain([
+ // | dojo.fadeIn({ node:node }),
+ // | dojo.fadeOut({ node:otherNode })
+ // | ]).play();
+ //
+ return new _chain(animations) // dojo.Animation
+ };
+
+ var _combine = function(animations){
+ this._animations = animations||[];
+ this._connects = [];
+ this._finished = 0;
+
+ this.duration = 0;
+ d.forEach(animations, function(a){
+ var duration = a.duration;
+ if(a.delay){ duration += a.delay; }
+ if(this.duration < duration){ this.duration = duration; }
+ this._connects.push(d.connect(a, "onEnd", this, "_onEnd"));
+ }, this);
+
+ this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration});
+ var self = this;
+ d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"],
+ function(evt){
+ self._connects.push(d.connect(self._pseudoAnimation, evt,
+ function(){ self._fire(evt, arguments); }
+ ));
+ }
+ );
+ };
+ d.extend(_combine, {
+ _doAction: function(action, args){
+ d.forEach(this._animations, function(a){
+ a[action].apply(a, args);
+ });
+ return this;
+ },
+ _onEnd: function(){
+ if(++this._finished > this._animations.length){
+ this._fire("onEnd");
+ }
+ },
+ _call: function(action, args){
+ var t = this._pseudoAnimation;
+ t[action].apply(t, args);
+ },
+ play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+ this._finished = 0;
+ this._doAction("play", arguments);
+ this._call("play", arguments);
+ return this;
+ },
+ pause: function(){
+ this._doAction("pause", arguments);
+ this._call("pause", arguments);
+ return this;
+ },
+ gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+ var ms = this.duration * percent;
+ d.forEach(this._animations, function(a){
+ a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay);
+ });
+ this._call("gotoPercent", arguments);
+ return this;
+ },
+ stop: function(/*boolean?*/ gotoEnd){
+ this._doAction("stop", arguments);
+ this._call("stop", arguments);
+ return this;
+ },
+ status: function(){
+ return this._pseudoAnimation.status();
+ },
+ destroy: function(){
+ d.forEach(this._connects, dojo.disconnect);
+ }
+ });
+ d.extend(_combine, _baseObj);
+
+ dojo.fx.combine = function(/*dojo.Animation[]*/ animations){
+ // summary:
+ // Combine a list of `dojo.Animation`s to run in parallel
+ //
+ // description:
+ // Combine an array of `dojo.Animation`s to run in parallel,
+ // providing a new `dojo.Animation` instance encompasing each
+ // animation, firing standard animation events.
+ //
+ // example:
+ // Fade out `node` while fading in `otherNode` simultaneously
+ // | dojo.fx.combine([
+ // | dojo.fadeIn({ node:node }),
+ // | dojo.fadeOut({ node:otherNode })
+ // | ]).play();
+ //
+ // example:
+ // When the longest animation ends, execute a function:
+ // | var anim = dojo.fx.combine([
+ // | dojo.fadeIn({ node: n, duration:700 }),
+ // | dojo.fadeOut({ node: otherNode, duration: 300 })
+ // | ]);
+ // | dojo.connect(anim, "onEnd", function(){
+ // | // overall animation is done.
+ // | });
+ // | anim.play(); // play the animation
+ //
+ return new _combine(animations); // dojo.Animation
+ };
+
+ dojo.fx.wipeIn = function(/*Object*/ args){
+ // summary:
+ // Expand a node to it's natural height.
+ //
+ // description:
+ // Returns an animation that will expand the
+ // node defined in 'args' object from it's current height to
+ // it's natural height (with no scrollbar).
+ // Node must have no margin/border/padding.
+ //
+ // args: Object
+ // A hash-map of standard `dojo.Animation` constructor properties
+ // (such as easing: node: duration: and so on)
+ //
+ // example:
+ // | dojo.fx.wipeIn({
+ // | node:"someId"
+ // | }).play()
+ var node = args.node = d.byId(args.node), s = node.style, o;
+
+ var anim = d.animateProperty(d.mixin({
+ properties: {
+ height: {
+ // wrapped in functions so we wait till the last second to query (in case value has changed)
+ start: function(){
+ // start at current [computed] height, but use 1px rather than 0
+ // because 0 causes IE to display the whole panel
+ o = s.overflow;
+ s.overflow = "hidden";
+ if(s.visibility == "hidden" || s.display == "none"){
+ s.height = "1px";
+ s.display = "";
+ s.visibility = "";
+ return 1;
+ }else{
+ var height = d.style(node, "height");
+ return Math.max(height, 1);
+ }
+ },
+ end: function(){
+ return node.scrollHeight;
+ }
+ }
+ }
+ }, args));
+
+ d.connect(anim, "onEnd", function(){
+ s.height = "auto";
+ s.overflow = o;
+ });
+
+ return anim; // dojo.Animation
+ }
+
+ dojo.fx.wipeOut = function(/*Object*/ args){
+ // summary:
+ // Shrink a node to nothing and hide it.
+ //
+ // description:
+ // Returns an animation that will shrink node defined in "args"
+ // from it's current height to 1px, and then hide it.
+ //
+ // args: Object
+ // A hash-map of standard `dojo.Animation` constructor properties
+ // (such as easing: node: duration: and so on)
+ //
+ // example:
+ // | dojo.fx.wipeOut({ node:"someId" }).play()
+
+ var node = args.node = d.byId(args.node), s = node.style, o;
+
+ var anim = d.animateProperty(d.mixin({
+ properties: {
+ height: {
+ end: 1 // 0 causes IE to display the whole panel
+ }
+ }
+ }, args));
+
+ d.connect(anim, "beforeBegin", function(){
+ o = s.overflow;
+ s.overflow = "hidden";
+ s.display = "";
+ });
+ d.connect(anim, "onEnd", function(){
+ s.overflow = o;
+ s.height = "auto";
+ s.display = "none";
+ });
+
+ return anim; // dojo.Animation
+ }
+
+ dojo.fx.slideTo = function(/*Object*/ args){
+ // summary:
+ // Slide a node to a new top/left position
+ //
+ // description:
+ // Returns an animation that will slide "node"
+ // defined in args Object from its current position to
+ // the position defined by (args.left, args.top).
+ //
+ // args: Object
+ // A hash-map of standard `dojo.Animation` constructor properties
+ // (such as easing: node: duration: and so on). Special args members
+ // are `top` and `left`, which indicate the new position to slide to.
+ //
+ // example:
+ // | dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play()
+
+ var node = args.node = d.byId(args.node),
+ top = null, left = null;
+
+ var init = (function(n){
+ return function(){
+ var cs = d.getComputedStyle(n);
+ var pos = cs.position;
+ top = (pos == 'absolute' ? n.offsetTop : parseInt(cs.top) || 0);
+ left = (pos == 'absolute' ? n.offsetLeft : parseInt(cs.left) || 0);
+ if(pos != 'absolute' && pos != 'relative'){
+ var ret = d.position(n, true);
+ top = ret.y;
+ left = ret.x;
+ n.style.position="absolute";
+ n.style.top=top+"px";
+ n.style.left=left+"px";
+ }
+ };
+ })(node);
+ init();
+
+ var anim = d.animateProperty(d.mixin({
+ properties: {
+ top: args.top || 0,
+ left: args.left || 0
+ }
+ }, args));
+ d.connect(anim, "beforeBegin", anim, init);
+
+ return anim; // dojo.Animation
+ }
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Magnify"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Magnify"] = true;
+dojo.provide("dojox.charting.action2d.Magnify");
+
+
+
+
+
+(function(){
+ var DEFAULT_SCALE = 2,
+ m = dojox.gfx.matrix,
+ gf = dojox.gfx.fx;
+
+ dojo.declare("dojox.charting.action2d.Magnify", dojox.charting.action2d.Base, {
+ // the data description block for the widget parser
+ defaultParams: {
+ duration: 400, // duration of the action in ms
+ easing: dojo.fx.easing.backOut, // easing for the action
+ scale: DEFAULT_SCALE // scale of magnification
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, plot, kwArgs){
+ // process optional named parameters
+ this.scale = kwArgs && typeof kwArgs.scale == "number" ? kwArgs.scale : DEFAULT_SCALE;
+
+ this.connect();
+ },
+
+ process: function(o){
+ if(!o.shape || !(o.type in this.overOutEvents) ||
+ !("cx" in o) || !("cy" in o)){ return; }
+
+ var runName = o.run.name, index = o.index, vector = [], anim, init, scale;
+
+ if(runName in this.anim){
+ anim = this.anim[runName][index];
+ }else{
+ this.anim[runName] = {};
+ }
+
+ if(anim){
+ anim.action.stop(true);
+ }else{
+ this.anim[runName][index] = anim = {};
+ }
+
+ if(o.type == "onmouseover"){
+ init = m.identity;
+ scale = this.scale;
+ }else{
+ init = m.scaleAt(this.scale, o.cx, o.cy);
+ scale = 1 / this.scale;
+ }
+
+ var kwArgs = {
+ shape: o.shape,
+ duration: this.duration,
+ easing: this.easing,
+ transform: [
+ {name: "scaleAt", start: [1, o.cx, o.cy], end: [scale, o.cx, o.cy]},
+ init
+ ]
+ };
+ if(o.shape){
+ vector.push(gf.animateTransform(kwArgs));
+ }
+ if(o.oultine){
+ kwArgs.shape = o.outline;
+ vector.push(gf.animateTransform(kwArgs));
+ }
+ if(o.shadow){
+ kwArgs.shape = o.shadow;
+ vector.push(gf.animateTransform(kwArgs));
+ }
+
+ if(!vector.length){
+ delete this.anim[runName][index];
+ return;
+ }
+
+ anim.action = dojo.fx.combine(vector);
+ if(o.type == "onmouseout"){
+ dojo.connect(anim.action, "onEnd", this, function(){
+ if(this.anim[runName]){
+ delete this.anim[runName][index];
+ }
+ });
+ }
+ anim.action.play();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.scan"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.scan"] = true;
+dojo.provide("dojox.lang.functional.scan");
+
+
+
+// This module adds high-level functions and related constructs:
+// - "scan" family of functions
+
+// Notes:
+// - missing high-level functions are provided with the compatible API:
+// scanl, scanl1, scanr, scanr1
+
+// Defined methods:
+// - take any valid lambda argument as the functional argument
+// - operate on dense arrays
+// - take a string as the array argument
+// - take an iterator objects as the array argument (only scanl, and scanl1)
+
+(function(){
+ var d = dojo, df = dojox.lang.functional, empty = {};
+
+ d.mixin(df, {
+ // classic reduce-class functions
+ scanl: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right using a seed value as a starting point; returns an array
+ // of values produced by foldl() at that point.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var t, n, i;
+ if(d.isArray(a)){
+ // array
+ t = new Array((n = a.length) + 1);
+ t[0] = z;
+ for(i = 0; i < n; z = f.call(o, z, a[i], i, a), t[++i] = z);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ t = [z];
+ for(i = 0; a.hasNext(); t.push(z = f.call(o, z, a.next(), i++, a)));
+ }else{
+ // object/dictionary
+ t = [z];
+ for(i in a){
+ if(!(i in empty)){
+ t.push(z = f.call(o, z, a[i], i, a));
+ }
+ }
+ }
+ return t; // Array
+ },
+ scanl1: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from left
+ // to right; returns an array of values produced by foldl1() at that
+ // point.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var t, n, z, first = true;
+ if(d.isArray(a)){
+ // array
+ t = new Array(n = a.length);
+ t[0] = z = a[0];
+ for(var i = 1; i < n; t[i] = z = f.call(o, z, a[i], i, a), ++i);
+ }else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+ // iterator
+ if(a.hasNext()){
+ t = [z = a.next()];
+ for(var i = 1; a.hasNext(); t.push(z = f.call(o, z, a.next(), i++, a)));
+ }
+ }else{
+ // object/dictionary
+ for(var i in a){
+ if(!(i in empty)){
+ if(first){
+ t = [z = a[i]];
+ first = false;
+ }else{
+ t.push(z = f.call(o, z, a[i], i, a));
+ }
+ }
+ }
+ }
+ return t; // Array
+ },
+ scanr: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from right
+ // to left using a seed value as a starting point; returns an array
+ // of values produced by foldr() at that point.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var n = a.length, t = new Array(n + 1), i = n;
+ t[n] = z;
+ for(; i > 0; --i, z = f.call(o, z, a[i], i, a), t[i] = z);
+ return t; // Array
+ },
+ scanr1: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+ // summary: repeatedly applies a binary function to an array from right
+ // to left; returns an array of values produced by foldr1() at that
+ // point.
+ if(typeof a == "string"){ a = a.split(""); }
+ o = o || d.global; f = df.lambda(f);
+ var n = a.length, t = new Array(n), z = a[n - 1], i = n - 1;
+ t[i] = z;
+ for(; i > 0; --i, z = f.call(o, z, a[i], i, a), t[i] = z);
+ return t; // Array
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.MoveSlice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.MoveSlice"] = true;
+dojo.provide("dojox.charting.action2d.MoveSlice");
+
+
+
+
+
+
+
+
+(function(){
+ var DEFAULT_SCALE = 1.05,
+ DEFAULT_SHIFT = 7, // px
+ m = dojox.gfx.matrix,
+ gf = dojox.gfx.fx,
+ df = dojox.lang.functional;
+
+ dojo.declare("dojox.charting.action2d.MoveSlice", dojox.charting.action2d.Base, {
+ // the data description block for the widget parser
+ defaultParams: {
+ duration: 400, // duration of the action in ms
+ easing: dojo.fx.easing.backOut, // easing for the action
+ scale: DEFAULT_SCALE, // scale of magnification
+ shift: DEFAULT_SHIFT // shift of the slice
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, plot, kwArgs){
+ // process optional named parameters
+ if(!kwArgs){ kwArgs = {}; }
+ this.scale = typeof kwArgs.scale == "number" ? kwArgs.scale : DEFAULT_SCALE;
+ this.shift = typeof kwArgs.shift == "number" ? kwArgs.shift : DEFAULT_SHIFT;
+
+ this.connect();
+ },
+
+ process: function(o){
+ if(!o.shape || o.element != "slice" || !(o.type in this.overOutEvents)){ return; }
+
+ if(!this.angles){
+ // calculate the running total of slice angles
+ if(typeof o.run.data[0] == "number"){
+ this.angles = df.map(df.scanl(o.run.data, "+", 0),
+ "* 2 * Math.PI / this", df.foldl(o.run.data, "+", 0));
+ }else{
+ this.angles = df.map(df.scanl(o.run.data, "a + b.y", 0),
+ "* 2 * Math.PI / this", df.foldl(o.run.data, "a + b.y", 0));
+ }
+ }
+
+ var index = o.index, anim, startScale, endScale, startOffset, endOffset,
+ angle = (this.angles[index] + this.angles[index + 1]) / 2,
+ rotateTo0 = m.rotateAt(-angle, o.cx, o.cy),
+ rotateBack = m.rotateAt( angle, o.cx, o.cy);
+
+ anim = this.anim[index];
+
+ if(anim){
+ anim.action.stop(true);
+ }else{
+ this.anim[index] = anim = {};
+ }
+
+ if(o.type == "onmouseover"){
+ startOffset = 0;
+ endOffset = this.shift;
+ startScale = 1;
+ endScale = this.scale;
+ }else{
+ startOffset = this.shift;
+ endOffset = 0;
+ startScale = this.scale;
+ endScale = 1;
+ }
+
+ anim.action = dojox.gfx.fx.animateTransform({
+ shape: o.shape,
+ duration: this.duration,
+ easing: this.easing,
+ transform: [
+ rotateBack,
+ {name: "translate", start: [startOffset, 0], end: [endOffset, 0]},
+ {name: "scaleAt", start: [startScale, o.cx, o.cy], end: [endScale, o.cx, o.cy]},
+ rotateTo0
+ ]
+ });
+
+ if(o.type == "onmouseout"){
+ dojo.connect(anim.action, "onEnd", this, function(){
+ delete this.anim[index];
+ });
+ }
+ anim.action.play();
+ },
+
+ reset: function(){
+ delete this.angles;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Shake"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Shake"] = true;
+dojo.provide("dojox.charting.action2d.Shake");
+
+
+
+
+
+(function(){
+ var DEFAULT_SHIFT = 3,
+ m = dojox.gfx.matrix,
+ gf = dojox.gfx.fx;
+
+ dojo.declare("dojox.charting.action2d.Shake", dojox.charting.action2d.Base, {
+ // the data description block for the widget parser
+ defaultParams: {
+ duration: 400, // duration of the action in ms
+ easing: dojo.fx.easing.backOut, // easing for the action
+ shiftX: DEFAULT_SHIFT, // shift of the element along the X axis
+ shiftY: DEFAULT_SHIFT // shift of the element along the Y axis
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, plot, kwArgs){
+ // process optional named parameters
+ if(!kwArgs){ kwArgs = {}; }
+ this.shiftX = typeof kwArgs.shiftX == "number" ? kwArgs.shiftX : DEFAULT_SHIFT;
+ this.shiftY = typeof kwArgs.shiftY == "number" ? kwArgs.shiftY : DEFAULT_SHIFT;
+
+ this.connect();
+ },
+
+ process: function(o){
+ if(!o.shape || !(o.type in this.overOutEvents)){ return; }
+
+ var runName = o.run.name, index = o.index, vector = [], anim,
+ shiftX = o.type == "onmouseover" ? this.shiftX : -this.shiftX,
+ shiftY = o.type == "onmouseover" ? this.shiftY : -this.shiftY;
+
+ if(runName in this.anim){
+ anim = this.anim[runName][index];
+ }else{
+ this.anim[runName] = {};
+ }
+
+ if(anim){
+ anim.action.stop(true);
+ }else{
+ this.anim[runName][index] = anim = {};
+ }
+
+ var kwArgs = {
+ shape: o.shape,
+ duration: this.duration,
+ easing: this.easing,
+ transform: [
+ {name: "translate", start: [this.shiftX, this.shiftY], end: [0, 0]},
+ m.identity
+ ]
+ };
+ if(o.shape){
+ vector.push(gf.animateTransform(kwArgs));
+ }
+ if(o.oultine){
+ kwArgs.shape = o.outline;
+ vector.push(gf.animateTransform(kwArgs));
+ }
+ if(o.shadow){
+ kwArgs.shape = o.shadow;
+ vector.push(gf.animateTransform(kwArgs));
+ }
+
+ if(!vector.length){
+ delete this.anim[runName][index];
+ return;
+ }
+
+ anim.action = dojo.fx.combine(vector);
+ if(o.type == "onmouseout"){
+ dojo.connect(anim.action, "onEnd", this, function(){
+ if(this.anim[runName]){
+ delete this.anim[runName][index];
+ }
+ });
+ }
+ anim.action.play();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.stamp"] = true;
+dojo.provide("dojo.date.stamp");
+
+// Methods to convert dates to or from a wire (string) format using well-known conventions
+
+dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+ // summary:
+ // Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
+ //
+ // description:
+ // Accepts a string formatted according to a profile of ISO8601 as defined by
+ // [RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
+ // Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime)
+ // The following combinations are valid:
+ //
+ // * dates only
+ // | * yyyy
+ // | * yyyy-MM
+ // | * yyyy-MM-dd
+ // * times only, with an optional time zone appended
+ // | * THH:mm
+ // | * THH:mm:ss
+ // | * THH:mm:ss.SSS
+ // * and "datetimes" which could be any combination of the above
+ //
+ // timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
+ // Assumes the local time zone if not specified. Does not validate. Improperly formatted
+ // input may return null. Arguments which are out of bounds will be handled
+ // by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
+ // Only years between 100 and 9999 are supported.
+ //
+ // formattedString:
+ // A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
+ //
+ // defaultTime:
+ // Used for defaults for fields omitted in the formattedString.
+ // Uses 1970-01-01T00:00:00.0Z by default.
+
+ if(!dojo.date.stamp._isoRegExp){
+ dojo.date.stamp._isoRegExp =
+//TODO: could be more restrictive and check for 00-59, etc.
+ /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+ }
+
+ var match = dojo.date.stamp._isoRegExp.exec(formattedString),
+ result = null;
+
+ if(match){
+ match.shift();
+ if(match[1]){match[1]--;} // Javascript Date months are 0-based
+ if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds
+
+ if(defaultTime){
+ // mix in defaultTime. Relatively expensive, so use || operators for the fast path of defaultTime === 0
+ defaultTime = new Date(defaultTime);
+ dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
+ return defaultTime["get" + prop]();
+ }).forEach(function(value, index){
+ if(match[index] === undefined){
+ match[index] = value;
+ }
+ });
+ }
+ result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults
+ if(match[0] < 100){
+ result.setFullYear(match[0] || 1970);
+ }
+
+ var offset = 0,
+ zoneSign = match[7] && match[7].charAt(0);
+ if(zoneSign != 'Z'){
+ offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
+ if(zoneSign != '-'){ offset *= -1; }
+ }
+ if(zoneSign){
+ offset -= result.getTimezoneOffset();
+ }
+ if(offset){
+ result.setTime(result.getTime() + offset * 60000);
+ }
+ }
+
+ return result; // Date or null
+}
+
+/*=====
+ dojo.date.stamp.__Options = function(){
+ // selector: String
+ // "date" or "time" for partial formatting of the Date object.
+ // Both date and time will be formatted by default.
+ // zulu: Boolean
+ // if true, UTC/GMT is used for a timezone
+ // milliseconds: Boolean
+ // if true, output milliseconds
+ this.selector = selector;
+ this.zulu = zulu;
+ this.milliseconds = milliseconds;
+ }
+=====*/
+
+dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+ // summary:
+ // Format a Date object as a string according a subset of the ISO-8601 standard
+ //
+ // description:
+ // When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt)
+ // The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
+ // Does not check bounds. Only years between 100 and 9999 are supported.
+ //
+ // dateObject:
+ // A Date object
+
+ var _ = function(n){ return (n < 10) ? "0" + n : n; };
+ options = options || {};
+ var formattedDate = [],
+ getter = options.zulu ? "getUTC" : "get",
+ date = "";
+ if(options.selector != "time"){
+ var year = dateObject[getter+"FullYear"]();
+ date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
+ }
+ formattedDate.push(date);
+ if(options.selector != "date"){
+ var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
+ var millis = dateObject[getter+"Milliseconds"]();
+ if(options.milliseconds){
+ time += "."+ (millis < 100 ? "0" : "") + _(millis);
+ }
+ if(options.zulu){
+ time += "Z";
+ }else if(options.selector != "time"){
+ var timezoneOffset = dateObject.getTimezoneOffset();
+ var absOffset = Math.abs(timezoneOffset);
+ time += (timezoneOffset > 0 ? "-" : "+") +
+ _(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
+ }
+ formattedDate.push(time);
+ }
+ return formattedDate.join('T'); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.parser"] = true;
+dojo.provide("dojo.parser");
+
+
+dojo.parser = new function(){
+ // summary: The Dom/Widget parsing package
+
+ var d = dojo;
+ this._attrName = d._scopeName + "Type";
+ this._query = "[" + this._attrName + "]";
+
+ function val2type(/*Object*/ value){
+ // summary:
+ // Returns name of type of given value.
+
+ if(d.isString(value)){ return "string"; }
+ if(typeof value == "number"){ return "number"; }
+ if(typeof value == "boolean"){ return "boolean"; }
+ if(d.isFunction(value)){ return "function"; }
+ if(d.isArray(value)){ return "array"; } // typeof [] == "object"
+ if(value instanceof Date) { return "date"; } // assume timestamp
+ if(value instanceof d._Url){ return "url"; }
+ return "object";
+ }
+
+ function str2obj(/*String*/ value, /*String*/ type){
+ // summary:
+ // Convert given string value to given type
+ switch(type){
+ case "string":
+ return value;
+ case "number":
+ return value.length ? Number(value) : NaN;
+ case "boolean":
+ // for checked/disabled value might be "" or "checked". interpret as true.
+ return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
+ case "function":
+ if(d.isFunction(value)){
+ // IE gives us a function, even when we say something like onClick="foo"
+ // (in which case it gives us an invalid function "function(){ foo }").
+ // Therefore, convert to string
+ value=value.toString();
+ value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
+ }
+ try{
+ if(value.search(/[^\w\.]+/i) != -1){
+ // The user has specified some text for a function like "return x+5"
+ return new Function(value);
+ }else{
+ // The user has specified the name of a function like "myOnClick"
+ return d.getObject(value, false);
+ }
+ }catch(e){ return new Function(); }
+ case "array":
+ return value ? value.split(/\s*,\s*/) : [];
+ case "date":
+ switch(value){
+ case "": return new Date(""); // the NaN of dates
+ case "now": return new Date(); // current date
+ default: return d.date.stamp.fromISOString(value);
+ }
+ case "url":
+ return d.baseUrl + value;
+ default:
+ return d.fromJson(value);
+ }
+ }
+
+ var instanceClasses = {
+ // map from fully qualified name (like "dijit.Button") to structure like
+ // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
+ };
+
+ // Widgets like BorderContainer add properties to _Widget via dojo.extend().
+ // If BorderContainer is loaded after _Widget's parameter list has been cached,
+ // we need to refresh that parameter list (for _Widget and all widgets that extend _Widget).
+ dojo.connect(dojo, "extend", function(){
+ instanceClasses = {};
+ });
+
+ function getClassInfo(/*String*/ className){
+ // className:
+ // fully qualified name (like "dijit.form.Button")
+ // returns:
+ // structure like
+ // {
+ // cls: dijit.Button,
+ // params: { label: "string", disabled: "boolean"}
+ // }
+
+ if(!instanceClasses[className]){
+ // get pointer to widget class
+ var cls = d.getObject(className);
+ if(!d.isFunction(cls)){
+ throw new Error("Could not load class '" + className +
+ "'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");
+ }
+ var proto = cls.prototype;
+
+ // get table of parameter names & types
+ var params = {}, dummyClass = {};
+ for(var name in proto){
+ if(name.charAt(0)=="_"){ continue; } // skip internal properties
+ if(name in dummyClass){ continue; } // skip "constructor" and "toString"
+ var defVal = proto[name];
+ params[name]=val2type(defVal);
+ }
+
+ instanceClasses[className] = { cls: cls, params: params };
+ }
+ return instanceClasses[className];
+ }
+
+ this._functionFromScript = function(script){
+ var preamble = "";
+ var suffix = "";
+ var argsStr = script.getAttribute("args");
+ if(argsStr){
+ d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
+ preamble += "var "+part+" = arguments["+idx+"]; ";
+ });
+ }
+ var withStr = script.getAttribute("with");
+ if(withStr && withStr.length){
+ d.forEach(withStr.split(/\s*,\s*/), function(part){
+ preamble += "with("+part+"){";
+ suffix += "}";
+ });
+ }
+ return new Function(preamble+script.innerHTML+suffix);
+ }
+
+ this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
+ // summary:
+ // Takes array of nodes, and turns them into class instances and
+ // potentially calls a layout method to allow them to connect with
+ // any children
+ // mixin: Object?
+ // An object that will be mixed in with each node in the array.
+ // Values in the mixin will override values in the node, if they
+ // exist.
+ // args: Object?
+ // An object used to hold kwArgs for instantiation.
+ // Only supports 'noStart' currently.
+ var thelist = [], dp = dojo.parser;
+ mixin = mixin||{};
+ args = args||{};
+
+ d.forEach(nodes, function(node){
+ if(!node){ return; }
+ var type = dp._attrName in mixin?mixin[dp._attrName]:node.getAttribute(dp._attrName);
+ if(!type || !type.length){ return; }
+ var clsInfo = getClassInfo(type),
+ clazz = clsInfo.cls,
+ ps = clazz._noScript || clazz.prototype._noScript;
+
+ // read parameters (ie, attributes).
+ // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+ var params = {},
+ attributes = node.attributes;
+ for(var name in clsInfo.params){
+ var item = name in mixin?{value:mixin[name],specified:true}:attributes.getNamedItem(name);
+ if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
+ var value = item.value;
+ // Deal with IE quirks for 'class' and 'style'
+ switch(name){
+ case "class":
+ value = "className" in mixin?mixin.className:node.className;
+ break;
+ case "style":
+ value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera?
+ }
+ var _type = clsInfo.params[name];
+ if(typeof value == "string"){
+ params[name] = str2obj(value, _type);
+ }else{
+ params[name] = value;
+ }
+ }
+
+ // Process <script type="dojo/*"> script tags
+ // <script type="dojo/method" event="foo"> tags are added to params, and passed to
+ // the widget on instantiation.
+ // <script type="dojo/method"> tags (with no event) are executed after instantiation
+ // <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
+ // note: dojo/* script tags cannot exist in self closing widgets, like <input />
+ if(!ps){
+ var connects = [], // functions to connect after instantiation
+ calls = []; // functions to call after instantiation
+
+ d.query("> script[type^='dojo/']", node).orphan().forEach(function(script){
+ var event = script.getAttribute("event"),
+ type = script.getAttribute("type"),
+ nf = d.parser._functionFromScript(script);
+ if(event){
+ if(type == "dojo/connect"){
+ connects.push({event: event, func: nf});
+ }else{
+ params[event] = nf;
+ }
+ }else{
+ calls.push(nf);
+ }
+ });
+ }
+
+ var markupFactory = clazz.markupFactory || clazz.prototype && clazz.prototype.markupFactory;
+ // create the instance
+ var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
+ thelist.push(instance);
+
+ // map it to the JS namespace if that makes sense
+ var jsname = node.getAttribute("jsId");
+ if(jsname){
+ d.setObject(jsname, instance);
+ }
+
+ // process connections and startup functions
+ if(!ps){
+ d.forEach(connects, function(connect){
+ d.connect(instance, connect.event, null, connect.func);
+ });
+ d.forEach(calls, function(func){
+ func.call(instance);
+ });
+ }
+ });
+
+ // Call startup on each top level instance if it makes sense (as for
+ // widgets). Parent widgets will recursively call startup on their
+ // (non-top level) children
+ if(!mixin._started){
+ d.forEach(thelist, function(instance){
+ if( !args.noStart && instance &&
+ instance.startup &&
+ !instance._started &&
+ (!instance.getParent || !instance.getParent())
+ ){
+ instance.startup();
+ }
+ });
+ }
+ return thelist;
+ };
+
+ this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+ // summary:
+ // Scan the DOM for class instances, and instantiate them.
+ //
+ // description:
+ // Search specified node (or root node) recursively for class instances,
+ // and instantiate them Searches for
+ // dojoType="qualified.class.name"
+ //
+ // rootNode: DomNode?
+ // A default starting root node from which to start the parsing. Can be
+ // omitted, defaulting to the entire document. If omitted, the `args`
+ // object can be passed in this place. If the `args` object has a
+ // `rootNode` member, that is used.
+ //
+ // args:
+ // a kwArgs object passed along to instantiate()
+ //
+ // * noStart: Boolean?
+ // when set will prevent the parser from calling .startup()
+ // when locating the nodes.
+ // * rootNode: DomNode?
+ // identical to the function's `rootNode` argument, though
+ // allowed to be passed in via this `args object.
+ //
+ // example:
+ // Parse all widgets on a page:
+ // | dojo.parser.parse();
+ //
+ // example:
+ // Parse all classes within the node with id="foo"
+ // | dojo.parser.parse(dojo.byId(foo));
+ //
+ // example:
+ // Parse all classes in a page, but do not call .startup() on any
+ // child
+ // | dojo.parser.parse({ noStart: true })
+ //
+ // example:
+ // Parse all classes in a node, but do not call .startup()
+ // | dojo.parser.parse(someNode, { noStart:true });
+ // | // or
+ // | dojo.parser.parse({ noStart:true, rootNode: someNode });
+
+ // determine the root node based on the passed arguments.
+ var root;
+ if(!args && rootNode && rootNode.rootNode){
+ args = rootNode;
+ root = args.rootNode;
+ }else{
+ root = rootNode;
+ }
+
+ var list = d.query(this._query, root);
+ // go build the object instances
+ return this.instantiate(list, null, args); // Array
+
+ };
+}();
+
+//Register the parser callback. It should be the first callback
+//after the a11y test.
+
+(function(){
+ var parseRunner = function(){
+ if(dojo.config.parseOnLoad){
+ dojo.parser.parse();
+ }
+ };
+
+ // FIXME: need to clobber cross-dependency!!
+ if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+ dojo._loaders.splice(1, 0, parseRunner);
+ }else{
+ dojo._loaders.unshift(parseRunner);
+ }
+})();
+
+}
+
+if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cache"] = true;
+dojo.provide("dojo.cache");
+
+/*=====
+dojo.cache = {
+ // summary:
+ // A way to cache string content that is fetchable via `dojo.moduleUrl`.
+};
+=====*/
+
+(function(){
+ var cache = {};
+ dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
+ // summary:
+ // A getter and setter for storing the string content associated with the
+ // module and url arguments.
+ // description:
+ // module and url are used to call `dojo.moduleUrl()` to generate a module URL.
+ // If value is specified, the cache value for the moduleUrl will be set to
+ // that value. Otherwise, dojo.cache will fetch the moduleUrl and store it
+ // in its internal cache and return that cached value for the URL. To clear
+ // a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the
+ // the URL contents, only modules on the same domain of the page can use this capability.
+ // The build system can inline the cache values though, to allow for xdomain hosting.
+ // module: String||Object
+ // If a String, the module name to use for the base part of the URL, similar to module argument
+ // to `dojo.moduleUrl`. If an Object, something that has a .toString() method that
+ // generates a valid path for the cache item. For example, a dojo._Url object.
+ // url: String
+ // The rest of the path to append to the path derived from the module argument. If
+ // module is an object, then this second argument should be the "value" argument instead.
+ // value: String||Object?
+ // If a String, the value to use in the cache for the module/url combination.
+ // If an Object, it can have two properties: value and sanitize. The value property
+ // should be the value to use in the cache, and sanitize can be set to true or false,
+ // to indicate if XML declarations should be removed from the value and if the HTML
+ // inside a body tag in the value should be extracted as the real value. The value argument
+ // or the value property on the value argument are usually only used by the build system
+ // as it inlines cache content.
+ // example:
+ // To ask dojo.cache to fetch content and store it in the cache (the dojo["cache"] style
+ // of call is used to avoid an issue with the build system erroneously trying to intern
+ // this example. To get the build system to intern your dojo.cache calls, use the
+ // "dojo.cache" style of call):
+ // | //If template.html contains "<h1>Hello</h1>" that will be
+ // | //the value for the text variable.
+ // | var text = dojo["cache"]("my.module", "template.html");
+ // example:
+ // To ask dojo.cache to fetch content and store it in the cache, and sanitize the input
+ // (the dojo["cache"] style of call is used to avoid an issue with the build system
+ // erroneously trying to intern this example. To get the build system to intern your
+ // dojo.cache calls, use the "dojo.cache" style of call):
+ // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+ // | //text variable will contain just "<h1>Hello</h1>".
+ // | var text = dojo["cache"]("my.module", "template.html", {sanitize: true});
+ // example:
+ // Same example as previous, but demostrates how an object can be passed in as
+ // the first argument, then the value argument can then be the second argument.
+ // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+ // | //text variable will contain just "<h1>Hello</h1>".
+ // | var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true});
+
+ //Module could be a string, or an object that has a toString() method
+ //that will return a useful path. If it is an object, then the "url" argument
+ //will actually be the value argument.
+ if(typeof module == "string"){
+ var pathObj = dojo.moduleUrl(module, url);
+ }else{
+ pathObj = module;
+ value = url;
+ }
+ var key = pathObj.toString();
+
+ var val = value;
+ if(value !== undefined && !dojo.isString(value)){
+ val = ("value" in value ? value.value : undefined);
+ }
+
+ var sanitize = value && value.sanitize ? true : false;
+
+ if(val || val === null){
+ //We have a value, either clear or set the cache value.
+ if(val == null){
+ delete cache[key];
+ }else{
+ val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+ }
+ }else{
+ //Allow cache values to be empty strings. If key property does
+ //not exist, fetch it.
+ if(!(key in cache)){
+ val = dojo._getText(key);
+ cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+ }
+ val = cache[key];
+ }
+ return val; //String
+ };
+
+ dojo.cache._sanitize = function(/*String*/val){
+ // summary:
+ // Strips <?xml ...?> declarations so that external SVG and XML
+ // documents can be added to a document without worry. Also, if the string
+ // is an HTML document, only the part inside the body tag is returned.
+ // description:
+ // Copied from dijit._Templated._sanitizeTemplateString.
+ if(val){
+ val = val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+ var matches = val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+ if(matches){
+ val = matches[1];
+ }
+ }else{
+ val = "";
+ }
+ return val; //String
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Templated"] = true;
+dojo.provide("dijit._Templated");
+
+
+
+
+
+
+dojo.declare("dijit._Templated",
+ null,
+ {
+ // summary:
+ // Mixin for widgets that are instantiated from a template
+
+ // templateString: [protected] String
+ // A string that represents the widget template. Pre-empts the
+ // templatePath. In builds that have their strings "interned", the
+ // templatePath is converted to an inline templateString, thereby
+ // preventing a synchronous network call.
+ //
+ // Use in conjunction with dojo.cache() to load from a file.
+ templateString: null,
+
+ // templatePath: [protected deprecated] String
+ // Path to template (HTML file) for this widget relative to dojo.baseUrl.
+ // Deprecated: use templateString with dojo.cache() instead.
+ templatePath: null,
+
+ // widgetsInTemplate: [protected] Boolean
+ // Should we parse the template to find widgets that might be
+ // declared in markup inside it? False by default.
+ widgetsInTemplate: false,
+
+ // skipNodeCache: [protected] Boolean
+ // If using a cached widget template node poses issues for a
+ // particular widget class, it can set this property to ensure
+ // that its template is always re-built from a string
+ _skipNodeCache: false,
+
+ // _earlyTemplatedStartup: Boolean
+ // A fallback to preserve the 1.0 - 1.3 behavior of children in
+ // templates having their startup called before the parent widget
+ // fires postCreate. Defaults to 'false', causing child widgets to
+ // have their .startup() called immediately before a parent widget
+ // .startup(), but always after the parent .postCreate(). Set to
+ // 'true' to re-enable to previous, arguably broken, behavior.
+ _earlyTemplatedStartup: false,
+
+ // _attachPoints: [private] String[]
+ // List of widget attribute names associated with dojoAttachPoint=... in the
+ // template, ex: ["containerNode", "labelNode"]
+/*=====
+ _attachPoints: [],
+ =====*/
+
+ constructor: function(){
+ this._attachPoints = [];
+ },
+
+ _stringRepl: function(tmpl){
+ // summary:
+ // Does substitution of ${foo} type properties in template string
+ // tags:
+ // private
+ var className = this.declaredClass, _this = this;
+ // Cache contains a string because we need to do property replacement
+ // do the property replacement
+ return dojo.string.substitute(tmpl, this, function(value, key){
+ if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
+ if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
+ if(value == null){ return ""; }
+
+ // Substitution keys beginning with ! will skip the transform step,
+ // in case a user wishes to insert unescaped markup, e.g. ${!foo}
+ return key.charAt(0) == "!" ? value :
+ // Safer substitution, see heading "Attribute values" in
+ // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+ value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
+ }, this);
+ },
+
+ // method over-ride
+ buildRendering: function(){
+ // summary:
+ // Construct the UI for this widget from a template, setting this.domNode.
+ // tags:
+ // protected
+
+ // Lookup cached version of template, and download to cache if it
+ // isn't there already. Returns either a DomNode or a string, depending on
+ // whether or not the template contains ${foo} replacement parameters.
+ var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
+
+ var node;
+ if(dojo.isString(cached)){
+ node = dojo._toDom(this._stringRepl(cached));
+ if(node.nodeType != 1){
+ // Flag common problems such as templates with multiple top level nodes (nodeType == 11)
+ throw new Error("Invalid template: " + cached);
+ }
+ }else{
+ // if it's a node, all we have to do is clone it
+ node = cached.cloneNode(true);
+ }
+
+ this.domNode = node;
+
+ // recurse through the node, looking for, and attaching to, our
+ // attachment points and events, which should be defined on the template node.
+ this._attachTemplateNodes(node);
+
+ if(this.widgetsInTemplate){
+ // Make sure dojoType is used for parsing widgets in template.
+ // The dojo.parser.query could be changed from multiversion support.
+ var parser = dojo.parser, qry, attr;
+ if(parser._query != "[dojoType]"){
+ qry = parser._query;
+ attr = parser._attrName;
+ parser._query = "[dojoType]";
+ parser._attrName = "dojoType";
+ }
+
+ // Store widgets that we need to start at a later point in time
+ var cw = (this._startupWidgets = dojo.parser.parse(node, {
+ noStart: !this._earlyTemplatedStartup
+ }));
+
+ // Restore the query.
+ if(qry){
+ parser._query = qry;
+ parser._attrName = attr;
+ }
+
+ this._supportingWidgets = dijit.findWidgets(node);
+
+ this._attachTemplateNodes(cw, function(n,p){
+ return n[p];
+ });
+ }
+
+ this._fillContent(this.srcNodeRef);
+ },
+
+ _fillContent: function(/*DomNode*/ source){
+ // summary:
+ // Relocate source contents to templated container node.
+ // this.containerNode must be able to receive children, or exceptions will be thrown.
+ // tags:
+ // protected
+ var dest = this.containerNode;
+ if(source && dest){
+ while(source.hasChildNodes()){
+ dest.appendChild(source.firstChild);
+ }
+ }
+ },
+
+ _attachTemplateNodes: function(rootNode, getAttrFunc){
+ // summary:
+ // Iterate through the template and attach functions and nodes accordingly.
+ // description:
+ // Map widget properties and functions to the handlers specified in
+ // the dom node and it's descendants. This function iterates over all
+ // nodes and looks for these properties:
+ // * dojoAttachPoint
+ // * dojoAttachEvent
+ // * waiRole
+ // * waiState
+ // rootNode: DomNode|Array[Widgets]
+ // the node to search for properties. All children will be searched.
+ // getAttrFunc: Function?
+ // a function which will be used to obtain property for a given
+ // DomNode/Widget
+ // tags:
+ // private
+
+ getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
+
+ var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
+ var x = dojo.isArray(rootNode) ? 0 : -1;
+ for(; x<nodes.length; x++){
+ var baseNode = (x == -1) ? rootNode : nodes[x];
+ if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
+ continue;
+ }
+ // Process dojoAttachPoint
+ var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+ if(attachPoint){
+ var point, points = attachPoint.split(/\s*,\s*/);
+ while((point = points.shift())){
+ if(dojo.isArray(this[point])){
+ this[point].push(baseNode);
+ }else{
+ this[point]=baseNode;
+ }
+ this._attachPoints.push(point);
+ }
+ }
+
+ // Process dojoAttachEvent
+ var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+ if(attachEvent){
+ // NOTE: we want to support attributes that have the form
+ // "domEvent: nativeEvent; ..."
+ var event, events = attachEvent.split(/\s*,\s*/);
+ var trim = dojo.trim;
+ while((event = events.shift())){
+ if(event){
+ var thisFunc = null;
+ if(event.indexOf(":") != -1){
+ // oh, if only JS had tuple assignment
+ var funcNameArr = event.split(":");
+ event = trim(funcNameArr[0]);
+ thisFunc = trim(funcNameArr[1]);
+ }else{
+ event = trim(event);
+ }
+ if(!thisFunc){
+ thisFunc = event;
+ }
+ this.connect(baseNode, event, thisFunc);
+ }
+ }
+ }
+
+ // waiRole, waiState
+ var role = getAttrFunc(baseNode, "waiRole");
+ if(role){
+ dijit.setWaiRole(baseNode, role);
+ }
+ var values = getAttrFunc(baseNode, "waiState");
+ if(values){
+ dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
+ if(stateValue.indexOf('-') != -1){
+ var pair = stateValue.split('-');
+ dijit.setWaiState(baseNode, pair[0], pair[1]);
+ }
+ });
+ }
+ }
+ },
+
+ startup: function(){
+ dojo.forEach(this._startupWidgets, function(w){
+ if(w && !w._started && w.startup){
+ w.startup();
+ }
+ });
+ this.inherited(arguments);
+ },
+
+ destroyRendering: function(){
+ // Delete all attach points to prevent IE6 memory leaks.
+ dojo.forEach(this._attachPoints, function(point){
+ delete this[point];
+ }, this);
+ this._attachPoints = [];
+
+ this.inherited(arguments);
+ }
+ }
+);
+
+// key is either templatePath or templateString; object is either string or DOM tree
+dijit._Templated._templateCache = {};
+
+dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
+ // summary:
+ // Static method to get a template based on the templatePath or
+ // templateString key
+ // templatePath: String||dojo.uri.Uri
+ // The URL to get the template from.
+ // templateString: String?
+ // a string to use in lieu of fetching the template from a URL. Takes precedence
+ // over templatePath
+ // returns: Mixed
+ // Either string (if there are ${} variables that need to be replaced) or just
+ // a DOM tree (if the node can be cloned directly)
+
+ // is it already cached?
+ var tmplts = dijit._Templated._templateCache;
+ var key = templateString || templatePath;
+ var cached = tmplts[key];
+ if(cached){
+ try{
+ // if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
+ if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
+ // string or node of the same document
+ return cached;
+ }
+ }catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
+ dojo.destroy(cached);
+ }
+
+ // If necessary, load template string from template path
+ if(!templateString){
+ templateString = dojo.cache(templatePath, {sanitize: true});
+ }
+ templateString = dojo.string.trim(templateString);
+
+ if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
+ // there are variables in the template so all we can do is cache the string
+ return (tmplts[key] = templateString); //String
+ }else{
+ // there are no variables in the template so we can cache the DOM tree
+ var node = dojo._toDom(templateString);
+ if(node.nodeType != 1){
+ throw new Error("Invalid template: " + templateString);
+ }
+ return (tmplts[key] = node); //Node
+ }
+};
+
+if(dojo.isIE){
+ dojo.addOnWindowUnload(function(){
+ var cache = dijit._Templated._templateCache;
+ for(var key in cache){
+ var value = cache[key];
+ if(typeof value == "object"){ // value is either a string or a DOM node template
+ dojo.destroy(value);
+ }
+ delete cache[key];
+ }
+ });
+}
+
+// These arguments can be specified for widgets which are used in templates.
+// Since any widget can be specified as sub widgets in template, mix it
+// into the base widget class. (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget,{
+ dojoAttachEvent: "",
+ dojoAttachPoint: "",
+ waiRole: "",
+ waiState:""
+});
+
+}
+
+if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tooltip"] = true;
+dojo.provide("dijit.Tooltip");
+
+
+
+
+dojo.declare(
+ "dijit._MasterTooltip",
+ [dijit._Widget, dijit._Templated],
+ {
+ // summary:
+ // Internal widget that holds the actual tooltip markup,
+ // which occurs once per page.
+ // Called by Tooltip widgets which are just containers to hold
+ // the markup
+ // tags:
+ // protected
+
+ // duration: Integer
+ // Milliseconds to fade in/fade out
+ duration: dijit.defaultDuration,
+
+ templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),
+
+ postCreate: function(){
+ dojo.body().appendChild(this.domNode);
+
+ this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+
+ // Setup fade-in and fade-out functions.
+ this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
+ this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
+
+ },
+
+ show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position){
+ // summary:
+ // Display tooltip w/specified contents to right of specified node
+ // (To left if there's no space on the right, or if LTR==right)
+
+ if(this.aroundNode && this.aroundNode === aroundNode){
+ return;
+ }
+
+ if(this.fadeOut.status() == "playing"){
+ // previous tooltip is being hidden; wait until the hide completes then show new one
+ this._onDeck=arguments;
+ return;
+ }
+ this.containerNode.innerHTML=innerHTML;
+
+ // Firefox bug. when innerHTML changes to be shorter than previous
+ // one, the node size will not be updated until it moves.
+ this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
+
+ var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, this.isLeftToRight()), dojo.hitch(this, "orient"));
+
+ // show it
+ dojo.style(this.domNode, "opacity", 0);
+ this.fadeIn.play();
+ this.isShowingNow = true;
+ this.aroundNode = aroundNode;
+ },
+
+ orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){
+ // summary:
+ // Private function to set CSS for tooltip node based on which position it's in.
+ // This is called by the dijit popup code.
+ // tags:
+ // protected
+
+ node.className = "dijitTooltip " +
+ {
+ "BL-TL": "dijitTooltipBelow dijitTooltipABLeft",
+ "TL-BL": "dijitTooltipAbove dijitTooltipABLeft",
+ "BR-TR": "dijitTooltipBelow dijitTooltipABRight",
+ "TR-BR": "dijitTooltipAbove dijitTooltipABRight",
+ "BR-BL": "dijitTooltipRight",
+ "BL-BR": "dijitTooltipLeft"
+ }[aroundCorner + "-" + tooltipCorner];
+ },
+
+ _onShow: function(){
+ // summary:
+ // Called at end of fade-in operation
+ // tags:
+ // protected
+ if(dojo.isIE){
+ // the arrow won't show up on a node w/an opacity filter
+ this.domNode.style.filter="";
+ }
+ },
+
+ hide: function(aroundNode){
+ // summary:
+ // Hide the tooltip
+ if(this._onDeck && this._onDeck[1] == aroundNode){
+ // this hide request is for a show() that hasn't even started yet;
+ // just cancel the pending show()
+ this._onDeck=null;
+ }else if(this.aroundNode === aroundNode){
+ // this hide request is for the currently displayed tooltip
+ this.fadeIn.stop();
+ this.isShowingNow = false;
+ this.aroundNode = null;
+ this.fadeOut.play();
+ }else{
+ // just ignore the call, it's for a tooltip that has already been erased
+ }
+ },
+
+ _onHide: function(){
+ // summary:
+ // Called at end of fade-out operation
+ // tags:
+ // protected
+
+ this.domNode.style.cssText=""; // to position offscreen again
+ if(this._onDeck){
+ // a show request has been queued up; do it now
+ this.show.apply(this, this._onDeck);
+ this._onDeck=null;
+ }
+ }
+
+ }
+);
+
+dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position){
+ // summary:
+ // Display tooltip w/specified contents in specified position.
+ // See description of dijit.Tooltip.defaultPosition for details on position parameter.
+ // If position is not specified then dijit.Tooltip.defaultPosition is used.
+ if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+ return dijit._masterTT.show(innerHTML, aroundNode, position);
+};
+
+dijit.hideTooltip = function(aroundNode){
+ // summary:
+ // Hide the tooltip
+ if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+ return dijit._masterTT.hide(aroundNode);
+};
+
+dojo.declare(
+ "dijit.Tooltip",
+ dijit._Widget,
+ {
+ // summary:
+ // Pops up a tooltip (a help message) when you hover over a node.
+
+ // label: String
+ // Text to display in the tooltip.
+ // Specified as innerHTML when creating the widget from markup.
+ label: "",
+
+ // showDelay: Integer
+ // Number of milliseconds to wait after hovering over/focusing on the object, before
+ // the tooltip is displayed.
+ showDelay: 400,
+
+ // connectId: [const] String[]
+ // Id's of domNodes to attach the tooltip to.
+ // When user hovers over any of the specified dom nodes, the tooltip will appear.
+ //
+ // Note: Currently connectId can only be specified on initialization, it cannot
+ // be changed via attr('connectId', ...)
+ //
+ // Note: in 2.0 this will be renamed to connectIds for less confusion.
+ connectId: [],
+
+ // position: String[]
+ // See description of `dijit.Tooltip.defaultPosition` for details on position parameter.
+ position: [],
+
+ constructor: function(){
+ // Map id's of nodes I'm connected to to a list of the this.connect() handles
+ this._nodeConnectionsById = {};
+ },
+
+ _setConnectIdAttr: function(newIds){
+ for(var oldId in this._nodeConnectionsById){
+ this.removeTarget(oldId);
+ }
+ dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this);
+ },
+
+ _getConnectIdAttr: function(){
+ var ary = [];
+ for(var id in this._nodeConnectionsById){
+ ary.push(id);
+ }
+ return ary;
+ },
+
+ addTarget: function(/*DOMNODE || String*/ id){
+ // summary:
+ // Attach tooltip to specified node, if it's not already connected
+ var node = dojo.byId(id);
+ if(!node){ return; }
+ if(node.id in this._nodeConnectionsById){ return; }//Already connected
+
+ this._nodeConnectionsById[node.id] = [
+ this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
+ this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
+ this.connect(node, "onfocus", "_onTargetFocus"),
+ this.connect(node, "onblur", "_onTargetBlur")
+ ];
+ if(dojo.isIE && !node.style.zoom){//preserve zoom
+ // BiDi workaround
+ node.style.zoom = 1;
+ }
+ },
+
+ removeTarget: function(/*DOMNODE || String*/ node){
+ // summary:
+ // Detach tooltip from specified node
+
+ // map from DOMNode back to plain id string
+ var id = node.id || node;
+
+ if(id in this._nodeConnectionsById){
+ dojo.forEach(this._nodeConnectionsById[id], this.disconnect, this);
+ delete this._nodeConnectionsById[id];
+ }
+ },
+
+ postCreate: function(){
+ dojo.addClass(this.domNode,"dijitTooltipData");
+ },
+
+ startup: function(){
+ this.inherited(arguments);
+
+ // If this tooltip was created in a template, or for some other reason the specified connectId[s]
+ // didn't exist during the widget's initialization, then connect now.
+ var ids = this.connectId;
+ dojo.forEach(dojo.isArrayLike(ids) ? ids : [ids], this.addTarget, this);
+ },
+
+ _onTargetMouseEnter: function(/*Event*/ e){
+ // summary:
+ // Handler for mouseenter event on the target node
+ // tags:
+ // private
+ this._onHover(e);
+ },
+
+ _onTargetMouseLeave: function(/*Event*/ e){
+ // summary:
+ // Handler for mouseleave event on the target node
+ // tags:
+ // private
+ this._onUnHover(e);
+ },
+
+ _onTargetFocus: function(/*Event*/ e){
+ // summary:
+ // Handler for focus event on the target node
+ // tags:
+ // private
+
+ this._focus = true;
+ this._onHover(e);
+ },
+
+ _onTargetBlur: function(/*Event*/ e){
+ // summary:
+ // Handler for blur event on the target node
+ // tags:
+ // private
+
+ this._focus = false;
+ this._onUnHover(e);
+ },
+
+ _onHover: function(/*Event*/ e){
+ // summary:
+ // Despite the name of this method, it actually handles both hover and focus
+ // events on the target node, setting a timer to show the tooltip.
+ // tags:
+ // private
+ if(!this._showTimer){
+ var target = e.target;
+ this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
+ }
+ },
+
+ _onUnHover: function(/*Event*/ e){
+ // summary:
+ // Despite the name of this method, it actually handles both mouseleave and blur
+ // events on the target node, hiding the tooltip.
+ // tags:
+ // private
+
+ // keep a tooltip open if the associated element still has focus (even though the
+ // mouse moved away)
+ if(this._focus){ return; }
+
+ if(this._showTimer){
+ clearTimeout(this._showTimer);
+ delete this._showTimer;
+ }
+ this.close();
+ },
+
+ open: function(/*DomNode*/ target){
+ // summary:
+ // Display the tooltip; usually not called directly.
+ // tags:
+ // private
+
+ if(this._showTimer){
+ clearTimeout(this._showTimer);
+ delete this._showTimer;
+ }
+ dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position);
+
+ this._connectNode = target;
+ this.onShow(target, this.position);
+ },
+
+ close: function(){
+ // summary:
+ // Hide the tooltip or cancel timer for show of tooltip
+ // tags:
+ // private
+
+ if(this._connectNode){
+ // if tooltip is currently shown
+ dijit.hideTooltip(this._connectNode);
+ delete this._connectNode;
+ this.onHide();
+ }
+ if(this._showTimer){
+ // if tooltip is scheduled to be shown (after a brief delay)
+ clearTimeout(this._showTimer);
+ delete this._showTimer;
+ }
+ },
+
+ onShow: function(target, position){
+ // summary:
+ // Called when the tooltip is shown
+ // tags:
+ // callback
+ },
+
+ onHide: function(){
+ // summary:
+ // Called when the tooltip is hidden
+ // tags:
+ // callback
+ },
+
+ uninitialize: function(){
+ this.close();
+ this.inherited(arguments);
+ }
+ }
+);
+
+// dijit.Tooltip.defaultPosition: String[]
+// This variable controls the position of tooltips, if the position is not specified to
+// the Tooltip widget or *TextBox widget itself. It's an array of strings with the following values:
+//
+// * before: places tooltip to the left of the target node/widget, or to the right in
+// the case of RTL scripts like Hebrew and Arabic
+// * after: places tooltip to the right of the target node/widget, or to the left in
+// the case of RTL scripts like Hebrew and Arabic
+// * above: tooltip goes above target node
+// * below: tooltip goes below target node
+//
+// The list is positions is tried, in order, until a position is found where the tooltip fits
+// within the viewport.
+//
+// Be careful setting this parameter. A value of "above" may work fine until the user scrolls
+// the screen so that there's no room above the target node. Nodes with drop downs, like
+// DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
+// that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
+// is only room below (or above) the target node, but not both.
+dijit.Tooltip.defaultPosition = ["after", "before"];
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Tooltip"] = true;
+dojo.provide("dojox.charting.action2d.Tooltip");
+
+
+
+
+
+
+
+
+(function(){
+ var DEFAULT_TEXT = function(o){
+ var t = o.run && o.run.data && o.run.data[o.index];
+ if(t && typeof t != "number" && (t.tooltip || t.text)){
+ return t.tooltip || t.text;
+ }
+ if(o.element == "candlestick"){
+ return '<table cellpadding="1" cellspacing="0" border="0" style="font-size:0.9em;">'
+ + '<tr><td>Open:</td><td align="right"><strong>' + o.data.open + '</strong></td></tr>'
+ + '<tr><td>High:</td><td align="right"><strong>' + o.data.high + '</strong></td></tr>'
+ + '<tr><td>Low:</td><td align="right"><strong>' + o.data.low + '</strong></td></tr>'
+ + '<tr><td>Close:</td><td align="right"><strong>' + o.data.close + '</strong></td></tr>'
+ + (o.data.mid !== undefined ? '<tr><td>Mid:</td><td align="right"><strong>' + o.data.mid + '</strong></td></tr>' : '')
+ + '</table>';
+ }
+ return o.element == "bar" ? o.x : o.y;
+ };
+
+ var df = dojox.lang.functional, pi4 = Math.PI / 4, pi2 = Math.PI / 2;
+
+ dojo.declare("dojox.charting.action2d.Tooltip", dojox.charting.action2d.Base, {
+ // the data description block for the widget parser
+ defaultParams: {
+ text: DEFAULT_TEXT // the function to produce a tooltip from the object
+ },
+ optionalParams: {}, // no optional parameters
+
+ constructor: function(chart, plot, kwArgs){
+ // process optional named parameters
+ this.text = kwArgs && kwArgs.text ? kwArgs.text : DEFAULT_TEXT;
+
+ this.connect();
+ },
+
+ process: function(o){
+ if(o.type === "onplotreset" || o.type === "onmouseout"){
+ dijit.hideTooltip(this.aroundRect);
+ this.aroundRect = null;
+ return;
+ }
+
+ if(!o.shape || o.type !== "onmouseover"){ return; }
+
+ // calculate relative coordinates and the position
+ var aroundRect = {type: "rect"}, position = ["after", "before"];
+ switch(o.element){
+ case "marker":
+ aroundRect.x = o.cx;
+ aroundRect.y = o.cy;
+ aroundRect.width = aroundRect.height = 1;
+ break;
+ case "circle":
+ aroundRect.x = o.cx - o.cr;
+ aroundRect.y = o.cy - o.cr;
+ aroundRect.width = aroundRect.height = 2 * o.cr;
+ break;
+ case "column":
+ position = ["above", "below"];
+ // intentional fall down
+ case "bar":
+ aroundRect = dojo.clone(o.shape.getShape());
+ break;
+ case "candlestick":
+ aroundRect.x = o.x;
+ aroundRect.y = o.y;
+ aroundRect.width = o.width;
+ aroundRect.height = o.height;
+ break;
+ default:
+ //case "slice":
+ if(!this.angles){
+ // calculate the running total of slice angles
+ if(typeof o.run.data[0] == "number"){
+ this.angles = df.map(df.scanl(o.run.data, "+", 0),
+ "* 2 * Math.PI / this", df.foldl(o.run.data, "+", 0));
+ }else{
+ this.angles = df.map(df.scanl(o.run.data, "a + b.y", 0),
+ "* 2 * Math.PI / this", df.foldl(o.run.data, "a + b.y", 0));
+ }
+ }
+ var angle = (this.angles[o.index] + this.angles[o.index + 1]) / 2;
+ aroundRect.x = o.cx + o.cr * Math.cos(angle);
+ aroundRect.y = o.cy + o.cr * Math.sin(angle);
+ aroundRect.width = aroundRect.height = 1;
+ // calculate the position
+ if(angle < pi4){
+ // do nothing: the position is right
+ }else if(angle < pi2 + pi4){
+ position = ["below", "above"];
+ }else if(angle < Math.PI + pi4){
+ position = ["before", "after"];
+ }else if(angle < 2 * Math.PI - pi4){
+ position = ["above", "below"];
+ }
+ /*
+ else{
+ // do nothing: the position is right
+ }
+ */
+ break;
+ }
+
+ // adjust relative coordinates to absolute, and remove fractions
+ var lt = dojo.coords(this.chart.node, true);
+ aroundRect.x += lt.x;
+ aroundRect.y += lt.y;
+ aroundRect.x = Math.round(aroundRect.x);
+ aroundRect.y = Math.round(aroundRect.y);
+ aroundRect.width = Math.ceil(aroundRect.width);
+ aroundRect.height = Math.ceil(aroundRect.height);
+ this.aroundRect = aroundRect;
+
+ dijit.showTooltip(this.text(o), this.aroundRect, position);
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Chart2D"] = true;
+dojo.provide("dojox.charting.widget.Chart2D");
+
+
+
+
+
+// require all actions to support references by name
+
+
+
+
+
+
+(function(){
+ var collectParams, collectAxisParams, collectPlotParams,
+ collectActionParams, collectDataParams,
+ notNull = function(o){ return o; },
+ df = dojox.lang.functional,
+ du = dojox.lang.utils,
+ dc = dojox.charting,
+ d = dojo;
+
+ dojo.declare("dojox.charting.widget.Chart2D", dijit._Widget, {
+ // parameters for the markup
+
+ // theme for the chart
+ theme: null,
+
+ // margins for the chart: {l: 10, r: 10, t: 10, b: 10}
+ margins: null,
+
+ // chart area
+ stroke: null,
+ fill: null,
+
+ // methods
+
+ buildRendering: function(){
+ var n = this.domNode = this.srcNodeRef;
+
+ // collect chart parameters
+ var axes = d.query("> .axis", n).map(collectAxisParams).filter(notNull),
+ plots = d.query("> .plot", n).map(collectPlotParams).filter(notNull),
+ actions = d.query("> .action", n).map(collectActionParams).filter(notNull),
+ series = d.query("> .series", n).map(collectDataParams).filter(notNull);
+
+ // build the chart
+ n.innerHTML = "";
+ var c = this.chart = new dc.Chart2D(n, {
+ margins: this.margins,
+ stroke: this.stroke,
+ fill: this.fill
+ });
+
+ // add collected parameters
+ if(this.theme){
+ c.setTheme(this.theme);
+ }
+ axes.forEach(function(axis){
+ c.addAxis(axis.name, axis.kwArgs);
+ });
+ plots.forEach(function(plot){
+ c.addPlot(plot.name, plot.kwArgs);
+ });
+
+ this.actions = actions.map(function(action){
+ return new action.action(c, action.plot, action.kwArgs)
+ });
+
+ var render = df.foldl(series, function(render, series){
+ if(series.type == "data"){
+ c.addSeries(series.name, series.data, series.kwArgs);
+ render = true;
+ }else{
+ c.addSeries(series.name, [0], series.kwArgs);
+ var kw = {};
+ du.updateWithPattern(
+ kw,
+ series.kwArgs,
+ {
+ "query": "",
+ "queryOptions": null,
+ "start": 0,
+ "count": 1 //,
+ // "sort": []
+ },
+ true
+ );
+ if(series.kwArgs.sort){
+ // sort is a complex object type and doesn't survive coercian
+ kw.sort = dojo.clone(series.kwArgs.sort);
+ }
+ d.mixin(kw, {
+ onComplete: function(data){
+ var values;
+ if("valueFn" in series.kwArgs){
+ var fn = series.kwArgs.valueFn;
+ values = d.map(data, function(x){
+ return fn(series.data.getValue(x, series.field, 0));
+ });
+ }else{
+ values = d.map(data, function(x){
+ return series.data.getValue(x, series.field, 0);
+ });
+ }
+ c.addSeries(series.name, values, series.kwArgs).render();
+ }
+ });
+ series.data.fetch(kw);
+ }
+ return render;
+ }, false);
+ if(render){ c.render(); }
+ },
+ destroy: function(){
+ // summary: properly destroy the widget
+ this.chart.destroy();
+ this.inherited(arguments);
+ },
+ resize: function(box){
+ // summary: resize the widget
+ if(box.w > 0 && box.h > 0){
+ dojo.marginBox(this.domNode, box);
+ this.chart.resize();
+ }
+ }
+ });
+
+ collectParams = function(node, type, kw){
+ var dp = eval("(" + type + ".prototype.defaultParams)");
+ var x, attr;
+ for(x in dp){
+ if(x in kw){ continue; }
+ attr = node.getAttribute(x);
+ kw[x] = du.coerceType(dp[x], attr == null || typeof attr == "undefined" ? dp[x] : attr);
+ }
+ var op = eval("(" + type + ".prototype.optionalParams)");
+ for(x in op){
+ if(x in kw){ continue; }
+ attr = node.getAttribute(x);
+ if(attr != null){
+ kw[x] = du.coerceType(op[x], attr);
+ }
+ }
+ };
+
+ collectAxisParams = function(node){
+ var name = node.getAttribute("name"), type = node.getAttribute("type");
+ if(!name){ return null; }
+ var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+ if(type){
+ if(dc.axis2d[type]){
+ type = dojox._scopeName + ".charting.axis2d." + type;
+ }
+ var axis = eval("(" + type + ")");
+ if(axis){ kw.type = axis; }
+ }else{
+ type = dojox._scopeName + ".charting.axis2d.Default";
+ }
+ collectParams(node, type, kw);
+ return o;
+ };
+
+ collectPlotParams = function(node){
+ // var name = d.attr(node, "name"), type = d.attr(node, "type");
+ var name = node.getAttribute("name"), type = node.getAttribute("type");
+ if(!name){ return null; }
+ var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+ if(type){
+ if(dc.plot2d[type]){
+ type = dojox._scopeName + ".charting.plot2d." + type;
+ }
+ var plot = eval("(" + type + ")");
+ if(plot){ kw.type = plot; }
+ }else{
+ type = dojox._scopeName + ".charting.plot2d.Default";
+ }
+ collectParams(node, type, kw);
+ return o;
+ };
+
+ collectActionParams = function(node){
+ // var plot = d.attr(node, "plot"), type = d.attr(node, "type");
+ var plot = node.getAttribute("plot"), type = node.getAttribute("type");
+ if(!plot){ plot = "default"; }
+ var o = {plot: plot, kwArgs: {}}, kw = o.kwArgs;
+ if(type){
+ if(dc.action2d[type]){
+ type = dojox._scopeName + ".charting.action2d." + type;
+ }
+ var action = eval("(" + type + ")");
+ if(!action){ return null; }
+ o.action = action;
+ }else{
+ return null;
+ }
+ collectParams(node, type, kw);
+ return o;
+ };
+
+ collectDataParams = function(node){
+ var ga = d.partial(d.attr, node);
+ var name = ga("name");
+ if(!name){ return null; }
+ var o = { name: name, kwArgs: {} }, kw = o.kwArgs, t;
+ t = ga("plot");
+ if(t != null){ kw.plot = t; }
+ t = ga("marker");
+ if(t != null){ kw.marker = t; }
+ t = ga("stroke");
+ if(t != null){ kw.stroke = eval("(" + t + ")"); }
+ t = ga("fill");
+ if(t != null){ kw.fill = eval("(" + t + ")"); }
+ t = ga("legend");
+ if(t != null){ kw.legend = t; }
+ t = ga("data");
+ if(t != null){
+ o.type = "data";
+ o.data = dojo.map(String(t).split(','), Number);
+ return o;
+ }
+ t = ga("array");
+ if(t != null){
+ o.type = "data";
+ o.data = eval("(" + t + ")");
+ return o;
+ }
+ t = ga("store");
+ if(t != null){
+ o.type = "store";
+ o.data = eval("(" + t + ")");
+ t = ga("field");
+ o.field = t != null ? t : "value";
+ t = ga("query");
+ if(!!t){ kw.query = t; }
+ t = ga("queryOptions");
+ if(!!t){ kw.queryOptions = eval("(" + t + ")"); }
+ t = ga("start");
+ if(!!t){ kw.start = Number(t); }
+ t = ga("count");
+ if(!!t){ kw.count = Number(t); }
+ t = ga("sort");
+ if(!!t){ kw.sort = eval("("+t+")"); }
+ t = ga("valueFn");
+ if(!!t){ kw.valueFn = df.lambda(t); }
+ return o;
+ }
+ return null;
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.ET.greys"] = true;
+dojo.provide("dojox.charting.themes.ET.greys");
+
+dojo.deprecated("dojox.charting.themes.ET.greys", "1.3");
+
+(function(){
+ var dxc=dojox.charting;
+ dxc.themes.ET.greys = new dxc.Theme({
+ antiAlias: false,
+ chart: {
+ stroke: null,
+ fill: "inherit"
+ },
+ plotarea: {
+ // stroke: { width: 0.2, color: "#666666" },
+ stroke: null,
+ fill: "transparent"
+ },
+ axis:{
+ stroke:{ width: 0 },
+ line:{ width: 0 },
+ majorTick:{
+ color: "#666666",
+ width: 1,
+ length: 5
+ },
+ minorTick: {
+ color: "black",
+ width: 0.5,
+ length: 2
+ },
+ font:"normal normal normal 8pt Tahoma",
+ fontColor:"#999999"
+ },
+ series:{
+ outline:{ width: 0, color: "black" },
+ stroke: { width: 1, color: "black" },
+ fill: dojo.colorFromHex("#3b444b"),
+ font: "normal normal normal 7pt Tahoma", // label
+ fontColor: "#717171"
+ },
+ marker:{ // any markers on a series.
+ stroke:{ width:1 },
+ fill:"#333",
+ font:"normal normal normal 7pt Tahoma", // label
+ fontColor:"#000"
+ },
+ colors:[
+ dojo.colorFromHex("#8a8c8f"),
+ dojo.colorFromHex("#4b4b4b"),
+ dojo.colorFromHex("#3b444b"),
+ dojo.colorFromHex("#2e2d30"),
+ dojo.colorFromHex("#000000")
+ ]
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Sparkline"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Sparkline"] = true;
+dojo.provide("dojox.charting.widget.Sparkline");
+
+
+
+
+(function(){
+
+ var d = dojo;
+
+ dojo.declare("dojox.charting.widget.Sparkline",
+ dojox.charting.widget.Chart2D,
+ {
+ theme: dojox.charting.themes.ET.greys,
+ margins: { l: 0, r: 0, t: 0, b: 0 },
+ type: "Lines",
+ valueFn: "Number(x)",
+ store: "",
+ field: "",
+ query: "",
+ queryOptions: "",
+ start: "0",
+ count: "Infinity",
+ sort: "",
+ data: "",
+ name: "default",
+ buildRendering: function(){
+ var n = this.srcNodeRef;
+ if( !n.childNodes.length || // shortcut the query
+ !d.query("> .axis, > .plot, > .action, > .series", n).length){
+ var plot = document.createElement("div");
+ d.attr(plot, {
+ "class": "plot",
+ "name": "default",
+ "type": this.type
+ });
+ n.appendChild(plot);
+
+ var series = document.createElement("div");
+ d.attr(series, {
+ "class": "series",
+ plot: "default",
+ name: this.name,
+ start: this.start,
+ count: this.count,
+ valueFn: this.valueFn
+ });
+ d.forEach(
+ ["store", "field", "query", "queryOptions", "sort", "data"],
+ function(i){
+ if(this[i].length){
+ d.attr(series, i, this[i]);
+ }
+ },
+ this
+ );
+ n.appendChild(series);
+ }
+ this.inherited(arguments);
+ }
+ }
+ );
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Legend"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Legend"] = true;
+dojo.provide("dojox.charting.widget.Legend");
+
+
+
+
+
+
+
+dojo.declare("dojox.charting.widget.Legend", [dijit._Widget, dijit._Templated], {
+ // summary: A legend for a chart. A legend contains summary labels for
+ // each series of data contained in the chart.
+ //
+ // Set the boolean horizontal attribute to false to layout legend labels vertically.
+ //
+ // (Line or Scatter charts (colored lines with shape symbols) )
+ // -o- Series1 -X- Series2 -v- Series3
+ //
+ // (Area/Bar/Pie charts (letters represent colors))
+ // [a] Series1 [b] Series2 [c] Series3
+
+ chartRef: "",
+ horizontal: true,
+ swatchSize: 18,
+
+ templateString: "<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",
+
+ legendNode: null,
+ legendBody: null,
+
+ postCreate: function(){
+ if(!this.chart){
+ if(!this.chartRef){ return; }
+ this.chart = dijit.byId(this.chartRef);
+ if(!this.chart){
+ var node = dojo.byId(this.chartRef);
+ if(node){
+ this.chart = dijit.byNode(node);
+ }else{
+ console.log("Could not find chart instance with id: " + this.chartRef);
+ return;
+ }
+ }
+ this.series = this.chart.chart.series;
+ }else{
+ this.series = this.chart.series;
+ }
+
+ this.refresh();
+ },
+ refresh: function(){
+ // summary: regenerates the legend to reflect changes to the chart
+
+ var df = dojox.lang.functional;
+
+ // cleanup
+ if(this._surfaces){
+ dojo.forEach(this._surfaces, function(surface){
+ surface.destroy();
+ });
+ }
+ this._surfaces = [];
+ while(this.legendBody.lastChild){
+ dojo.destroy(this.legendBody.lastChild);
+ }
+
+ if(this.horizontal){
+ dojo.addClass(this.legendNode, "dojoxLegendHorizontal");
+ // make a container <tr>
+ this._tr = dojo.doc.createElement("tr");
+ this.legendBody.appendChild(this._tr);
+ }
+
+ var s = this.series;
+ if(s.length == 0){
+ return;
+ }
+ if(s[0].chart.stack[0].declaredClass == "dojox.charting.plot2d.Pie"){
+ var t = s[0].chart.stack[0];
+ if(typeof t.run.data[0] == "number"){
+ var filteredRun = df.map(t.run.data, "Math.max(x, 0)");
+ if(df.every(filteredRun, "<= 0")){
+ return;
+ }
+ var slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+ dojo.forEach(slices, function(x, i){
+ this._addLabel(t.dyn[i], t._getLabel(x * 100) + "%");
+ }, this);
+ }else{
+ dojo.forEach(t.run.data, function(x, i){
+ this._addLabel(t.dyn[i], x.legend || x.text || x.y);
+ }, this);
+ }
+ }else{
+ dojo.forEach(s, function(x){
+ this._addLabel(x.dyn, x.legend || x.name);
+ }, this);
+ }
+ },
+ _addLabel: function(dyn, label){
+ // create necessary elements
+ var icon = dojo.doc.createElement("td"),
+ text = dojo.doc.createElement("td"),
+ div = dojo.doc.createElement("div");
+ dojo.addClass(icon, "dojoxLegendIcon");
+ dojo.addClass(text, "dojoxLegendText");
+ div.style.width = this.swatchSize + "px";
+ div.style.height = this.swatchSize + "px";
+ icon.appendChild(div);
+
+ // create a skeleton
+ if(this._tr){
+ // horizontal
+ this._tr.appendChild(icon);
+ this._tr.appendChild(text);
+ }else{
+ // vertical
+ var tr = dojo.doc.createElement("tr");
+ this.legendBody.appendChild(tr);
+ tr.appendChild(icon);
+ tr.appendChild(text);
+ }
+
+ // populate the skeleton
+ this._makeIcon(div, dyn);
+ text.innerHTML = String(label);
+ },
+ _makeIcon: function(div, dyn){
+ var mb = { h: this.swatchSize, w: this.swatchSize };
+ var surface = dojox.gfx.createSurface(div, mb.w, mb.h);
+ this._surfaces.push(surface);
+ if(dyn.fill){
+ // regions
+ surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+ setFill(dyn.fill).setStroke(dyn.stroke);
+ }else if(dyn.stroke || dyn.marker){
+ // draw line
+ var line = {x1: 0, y1: mb.h / 2, x2: mb.w, y2: mb.h / 2};
+ if(dyn.stroke){
+ surface.createLine(line).setStroke(dyn.stroke);
+ }
+ if(dyn.marker){
+ // draw marker on top
+ var c = {x: mb.w / 2, y: mb.h / 2};
+ if(dyn.stroke){
+ surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+ setFill(dyn.stroke.color).setStroke(dyn.stroke);
+ }else{
+ surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+ setFill(dyn.color).setStroke(dyn.color);
+ }
+ }
+ }else{
+ // nothing
+ surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+ setStroke("black");
+ surface.createLine({x1: 2, y1: 2, x2: mb.w - 2, y2: mb.h - 2}).setStroke("black");
+ surface.createLine({x1: 2, y1: mb.h - 2, x2: mb.w - 2, y2: 2}).setStroke("black");
+ }
+ }
+});
+
+}
+
diff --git a/js/dojo/dojox/charting/widget/Legend.js b/js/dojo/dojox/charting/widget/Legend.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/widget/Legend.js
@@ -0,0 +1,120 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.widget.Legend"]){
+dojo._hasResource["dojox.charting.widget.Legend"]=true;
+dojo.provide("dojox.charting.widget.Legend");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.fold");
+dojo.declare("dojox.charting.widget.Legend",[dijit._Widget,dijit._Templated],{chartRef:"",horizontal:true,swatchSize:18,templateString:"<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",legendNode:null,legendBody:null,postCreate:function(){
+if(!this.chart){
+if(!this.chartRef){
+return;
+}
+this.chart=dijit.byId(this.chartRef);
+if(!this.chart){
+var _1=dojo.byId(this.chartRef);
+if(_1){
+this.chart=dijit.byNode(_1);
+}else{
+return;
+}
+}
+this.series=this.chart.chart.series;
+}else{
+this.series=this.chart.series;
+}
+this.refresh();
+},refresh:function(){
+var df=dojox.lang.functional;
+if(this._surfaces){
+dojo.forEach(this._surfaces,function(_2){
+_2.destroy();
+});
+}
+this._surfaces=[];
+while(this.legendBody.lastChild){
+dojo.destroy(this.legendBody.lastChild);
+}
+if(this.horizontal){
+dojo.addClass(this.legendNode,"dojoxLegendHorizontal");
+this._tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(this._tr);
+}
+var s=this.series;
+if(s.length==0){
+return;
+}
+if(s[0].chart.stack[0].declaredClass=="dojox.charting.plot2d.Pie"){
+var t=s[0].chart.stack[0];
+if(typeof t.run.data[0]=="number"){
+var _3=df.map(t.run.data,"Math.max(x, 0)");
+if(df.every(_3,"<= 0")){
+return;
+}
+var _4=df.map(_3,"/this",df.foldl(_3,"+",0));
+dojo.forEach(_4,function(x,i){
+this._addLabel(t.dyn[i],t._getLabel(x*100)+"%");
+},this);
+}else{
+dojo.forEach(t.run.data,function(x,i){
+this._addLabel(t.dyn[i],x.legend||x.text||x.y);
+},this);
+}
+}else{
+dojo.forEach(s,function(x){
+this._addLabel(x.dyn,x.legend||x.name);
+},this);
+}
+},_addLabel:function(_5,_6){
+var _7=dojo.doc.createElement("td"),_8=dojo.doc.createElement("td"),_9=dojo.doc.createElement("div");
+dojo.addClass(_7,"dojoxLegendIcon");
+dojo.addClass(_8,"dojoxLegendText");
+_9.style.width=this.swatchSize+"px";
+_9.style.height=this.swatchSize+"px";
+_7.appendChild(_9);
+if(this._tr){
+this._tr.appendChild(_7);
+this._tr.appendChild(_8);
+}else{
+var tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(tr);
+tr.appendChild(_7);
+tr.appendChild(_8);
+}
+this._makeIcon(_9,_5);
+_8.innerHTML=String(_6);
+},_makeIcon:function(_a,_b){
+var mb={h:this.swatchSize,w:this.swatchSize};
+var _c=dojox.gfx.createSurface(_a,mb.w,mb.h);
+this._surfaces.push(_c);
+if(_b.fill){
+_c.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setFill(_b.fill).setStroke(_b.stroke);
+}else{
+if(_b.stroke||_b.marker){
+var _d={x1:0,y1:mb.h/2,x2:mb.w,y2:mb.h/2};
+if(_b.stroke){
+_c.createLine(_d).setStroke(_b.stroke);
+}
+if(_b.marker){
+var c={x:mb.w/2,y:mb.h/2};
+if(_b.stroke){
+_c.createPath({path:"M"+c.x+" "+c.y+" "+_b.marker}).setFill(_b.stroke.color).setStroke(_b.stroke);
+}else{
+_c.createPath({path:"M"+c.x+" "+c.y+" "+_b.marker}).setFill(_b.color).setStroke(_b.color);
+}
+}
+}else{
+_c.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setStroke("black");
+_c.createLine({x1:2,y1:2,x2:mb.w-2,y2:mb.h-2}).setStroke("black");
+_c.createLine({x1:2,y1:mb.h-2,x2:mb.w-2,y2:2}).setStroke("black");
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/charting/widget/Sparkline.js b/js/dojo/dojox/charting/widget/Sparkline.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/charting/widget/Sparkline.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.widget.Sparkline"]){
+dojo._hasResource["dojox.charting.widget.Sparkline"]=true;
+dojo.provide("dojox.charting.widget.Sparkline");
+dojo.require("dojox.charting.widget.Chart2D");
+dojo.require("dojox.charting.themes.ET.greys");
+(function(){
+var d=dojo;
+dojo.declare("dojox.charting.widget.Sparkline",dojox.charting.widget.Chart2D,{theme:dojox.charting.themes.ET.greys,margins:{l:0,r:0,t:0,b:0},type:"Lines",valueFn:"Number(x)",store:"",field:"",query:"",queryOptions:"",start:"0",count:"Infinity",sort:"",data:"",name:"default",buildRendering:function(){
+var n=this.srcNodeRef;
+if(!n.childNodes.length||!d.query("> .axis, > .plot, > .action, > .series",n).length){
+var _1=document.createElement("div");
+d.attr(_1,{"class":"plot","name":"default","type":this.type});
+n.appendChild(_1);
+var _2=document.createElement("div");
+d.attr(_2,{"class":"series",plot:"default",name:this.name,start:this.start,count:this.count,valueFn:this.valueFn});
+d.forEach(["store","field","query","queryOptions","sort","data"],function(i){
+if(this[i].length){
+d.attr(_2,i,this[i]);
+}
+},this);
+n.appendChild(_2);
+}
+this.inherited(arguments);
+}});
+})();
+}
diff --git a/js/dojo/dojox/color/Palette.js b/js/dojo/dojox/color/Palette.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/color/Palette.js
@@ -0,0 +1,174 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.color.Palette"]){
+dojo._hasResource["dojox.color.Palette"]=true;
+dojo.provide("dojox.color.Palette");
+dojo.require("dojox.color");
+(function(){
+var _1=dojox.color;
+_1.Palette=function(_2){
+this.colors=[];
+if(_2 instanceof dojox.color.Palette){
+this.colors=_2.colors.slice(0);
+}else{
+if(_2 instanceof dojox.color.Color){
+this.colors=[null,null,_2,null,null];
+}else{
+if(dojo.isArray(_2)){
+this.colors=dojo.map(_2.slice(0),function(_3){
+if(dojo.isString(_3)){
+return new dojox.color.Color(_3);
+}
+return _3;
+});
+}else{
+if(dojo.isString(_2)){
+this.colors=[null,null,new dojox.color.Color(_2),null,null];
+}
+}
+}
+}
+};
+function _4(p,_5,_6){
+var _7=new dojox.color.Palette();
+_7.colors=[];
+dojo.forEach(p.colors,function(_8){
+var r=(_5=="dr")?_8.r+_6:_8.r,g=(_5=="dg")?_8.g+_6:_8.g,b=(_5=="db")?_8.b+_6:_8.b,a=(_5=="da")?_8.a+_6:_8.a;
+_7.colors.push(new dojox.color.Color({r:Math.min(255,Math.max(0,r)),g:Math.min(255,Math.max(0,g)),b:Math.min(255,Math.max(0,b)),a:Math.min(1,Math.max(0,a))}));
+});
+return _7;
+};
+function _9(p,_a,_b){
+var _c=new dojox.color.Palette();
+_c.colors=[];
+dojo.forEach(p.colors,function(_d){
+var o=_d.toCmy(),c=(_a=="dc")?o.c+_b:o.c,m=(_a=="dm")?o.m+_b:o.m,y=(_a=="dy")?o.y+_b:o.y;
+_c.colors.push(dojox.color.fromCmy(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y))));
+});
+return _c;
+};
+function _e(p,_f,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_10){
+var o=_10.toCmyk(),c=(_f=="dc")?o.c+val:o.c,m=(_f=="dm")?o.m+val:o.m,y=(_f=="dy")?o.y+val:o.y,k=(_f=="dk")?o.b+val:o.b;
+ret.colors.push(dojox.color.fromCmyk(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y)),Math.min(100,Math.max(0,k))));
+});
+return ret;
+};
+function _11(p,_12,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_13){
+var o=_13.toHsl(),h=(_12=="dh")?o.h+val:o.h,s=(_12=="ds")?o.s+val:o.s,l=(_12=="dl")?o.l+val:o.l;
+ret.colors.push(dojox.color.fromHsl(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,l))));
+});
+return ret;
+};
+function _14(p,_15,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_16){
+var o=_16.toHsv(),h=(_15=="dh")?o.h+val:o.h,s=(_15=="ds")?o.s+val:o.s,v=(_15=="dv")?o.v+val:o.v;
+ret.colors.push(dojox.color.fromHsv(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,v))));
+});
+return ret;
+};
+function _17(val,low,_18){
+return _18-((_18-val)*((_18-low)/_18));
+};
+dojo.extend(_1.Palette,{transform:function(_19){
+var fn=_4;
+if(_19.use){
+var use=_19.use.toLowerCase();
+if(use.indexOf("hs")==0){
+if(use.charAt(2)=="l"){
+fn=_11;
+}else{
+fn=_14;
+}
+}else{
+if(use.indexOf("cmy")==0){
+if(use.charAt(3)=="k"){
+fn=_e;
+}else{
+fn=_9;
+}
+}
+}
+}else{
+if("dc" in _19||"dm" in _19||"dy" in _19){
+if("dk" in _19){
+fn=_e;
+}else{
+fn=_9;
+}
+}else{
+if("dh" in _19||"ds" in _19){
+if("dv" in _19){
+fn=_14;
+}else{
+fn=_11;
+}
+}
+}
+}
+var _1a=this;
+for(var p in _19){
+if(p=="use"){
+continue;
+}
+_1a=fn(_1a,p,_19[p]);
+}
+return _1a;
+},clone:function(){
+return new _1.Palette(this);
+}});
+dojo.mixin(_1.Palette,{generators:{analogous:function(_1b){
+var _1c=_1b.high||60,low=_1b.low||18,_1d=dojo.isString(_1b.base)?new dojox.color.Color(_1b.base):_1b.base,hsv=_1d.toHsv();
+var h=[(hsv.h+low+360)%360,(hsv.h+Math.round(low/2)+360)%360,hsv.h,(hsv.h-Math.round(_1c/2)+360)%360,(hsv.h-_1c+360)%360];
+var s1=Math.max(10,(hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),s2=(hsv.s>1)?hsv.s-1:21-hsv.s,v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9,20),v2=(hsv.v<=90)?Math.max(hsv.v+5,20):(95+Math.ceil((hsv.v-90)/2)),s=[s1,s2,hsv.s,s1,s1],v=[v1,v2,hsv.v,v1,v2];
+return new _1.Palette(dojo.map(h,function(hue,i){
+return dojox.color.fromHsv(hue,s[i],v[i]);
+}));
+},monochromatic:function(_1e){
+var _1f=dojo.isString(_1e.base)?new dojox.color.Color(_1e.base):_1e.base,hsv=_1f.toHsv();
+var s1=(hsv.s-30>9)?hsv.s-30:hsv.s+30,s2=hsv.s,v1=_17(hsv.v,20,100),v2=(hsv.v-20>20)?hsv.v-20:hsv.v+60,v3=(hsv.v-50>20)?hsv.v-50:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v3),_1f,dojox.color.fromHsv(hsv.h,s1,v3),dojox.color.fromHsv(hsv.h,s2,v2)]);
+},triadic:function(_20){
+var _21=dojo.isString(_20.base)?new dojox.color.Color(_20.base):_20.base,hsv=_21.toHsv();
+var h1=(hsv.h+57+360)%360,h2=(hsv.h-157+360)%360,s1=(hsv.s>20)?hsv.s-10:hsv.s+10,s2=(hsv.s>90)?hsv.s-10:hsv.s+10,s3=(hsv.s>95)?hsv.s-5:hsv.s+5,v1=(hsv.v-20>20)?hsv.v-20:hsv.v+20,v2=(hsv.v-30>20)?hsv.v-30:hsv.v+30,v3=(hsv.v-30>70)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(h1,s1,hsv.v),dojox.color.fromHsv(hsv.h,s2,v2),_21,dojox.color.fromHsv(h2,s2,v1),dojox.color.fromHsv(h2,s3,v3)]);
+},complementary:function(_22){
+var _23=dojo.isString(_22.base)?new dojox.color.Color(_22.base):_22.base,hsv=_23.toHsv();
+var h1=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,s1=Math.max(hsv.s-10,0),s2=_17(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v2),_23,dojox.color.fromHsv(h1,s3,v2),dojox.color.fromHsv(h1,hsv.s,hsv.v)]);
+},splitComplementary:function(_24){
+var _25=dojo.isString(_24.base)?new dojox.color.Color(_24.base):_24.base,_26=_24.da||30,hsv=_25.toHsv();
+var _27=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,h1=(_27-_26+360)%360,h2=(_27+_26)%360,s1=Math.max(hsv.s-10,0),s2=_17(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),_25,dojox.color.fromHsv(h2,s3,v2),dojox.color.fromHsv(h2,hsv.s,hsv.v)]);
+},compound:function(_28){
+var _29=dojo.isString(_28.base)?new dojox.color.Color(_28.base):_28.base,hsv=_29.toHsv();
+var h1=((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,h2=((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,h3=((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,s1=(hsv.s-40>10)?hsv.s-40:hsv.s+40,s2=(hsv.s-10>80)?hsv.s-10:hsv.s+10,s3=(hsv.s-25>10)?hsv.s-25:hsv.s+25,v1=(hsv.v-40>10)?hsv.v-40:hsv.v+40,v2=(hsv.v-20>80)?hsv.v-20:hsv.v+20,v3=Math.max(hsv.v,20);
+return new _1.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),_29,dojox.color.fromHsv(h2,s3,v3),dojox.color.fromHsv(h3,s2,v2)]);
+},shades:function(_2a){
+var _2b=dojo.isString(_2a.base)?new dojox.color.Color(_2a.base):_2a.base,hsv=_2b.toHsv();
+var s=(hsv.s==100&&hsv.v==0)?0:hsv.s,v1=(hsv.v-50>20)?hsv.v-50:hsv.v+30,v2=(hsv.v-25>=20)?hsv.v-25:hsv.v+55,v3=(hsv.v-75>=20)?hsv.v-75:hsv.v+5,v4=Math.max(hsv.v-10,20);
+return new _1.Palette([new dojox.color.fromHsv(hsv.h,s,v1),new dojox.color.fromHsv(hsv.h,s,v2),_2b,new dojox.color.fromHsv(hsv.h,s,v3),new dojox.color.fromHsv(hsv.h,s,v4)]);
+}},generate:function(_2c,_2d){
+if(dojo.isFunction(_2d)){
+return _2d({base:_2c});
+}else{
+if(_1.Palette.generators[_2d]){
+return _1.Palette.generators[_2d]({base:_2c});
+}
+}
+throw new Error("dojox.color.Palette.generate: the specified generator ('"+_2d+"') does not exist.");
+}});
+})();
+}
diff --git a/js/dojo/dojox/cometd/HttpChannels.js b/js/dojo/dojox/cometd/HttpChannels.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/HttpChannels.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.HttpChannels"]){
+dojo._hasResource["dojox.cometd.HttpChannels"]=true;
+dojo.provide("dojox.cometd.HttpChannels");
+dojo.require("dojox.io.httpParse");
+dojo.require("dojox.cometd.RestChannels");
+dojox.cometd.HttpChannels=dojox.cometd.RestChannels;
+}
diff --git a/js/dojo/dojox/cometd/README b/js/dojo/dojox/cometd/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/README
@@ -0,0 +1,29 @@
+-------------------------------------------------------------------------------
+Cometd (client)
+-------------------------------------------------------------------------------
+Version 0.4
+Release date: May 29, 2007
+-------------------------------------------------------------------------------
+Project state: beta
+-------------------------------------------------------------------------------
+Project authors
+ Alex Russell (alex@dojotoolkit.org)
+ Greg Wilkins
+-------------------------------------------------------------------------------
+Project description
+
+Low-latency data transfer from servers to clients. dojox.cometd implements a
+Bayeux protocol client for use with most Bayeux servers. See cometd.com for
+details on Cometd or on the Bayeux protocol.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Needs a cooperating Bayeux server
+-------------------------------------------------------------------------------
+Documentation
+
+See http://cometd.com
+-------------------------------------------------------------------------------
+Installation instructions
+
+Use this library with (preferably through) an existing Cometd server.
diff --git a/js/dojo/dojox/cometd/RestChannels.js b/js/dojo/dojox/cometd/RestChannels.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/RestChannels.js
@@ -0,0 +1,337 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.RestChannels"]){
+dojo._hasResource["dojox.cometd.RestChannels"]=true;
+dojo.provide("dojox.cometd.RestChannels");
+dojo.require("dojox.rpc.Client");
+dojo.requireIf(dojox.data&&!!dojox.data.JsonRestStore,"dojox.data.restListener");
+(function(){
+dojo.declare("dojox.cometd.RestChannels",null,{constructor:function(_1){
+dojo.mixin(this,_1);
+if(dojox.rpc.Rest&&this.autoSubscribeRoot){
+var _2=dojox.rpc.Rest._get;
+var _3=this;
+dojox.rpc.Rest._get=function(_4,id){
+var _5=dojo.xhrGet;
+dojo.xhrGet=function(r){
+var _6=_3.autoSubscribeRoot;
+return (_6&&r.url.substring(0,_6.length)==_6)?_3.get(r.url,r):_5(r);
+};
+var _7=_2.apply(this,arguments);
+dojo.xhrGet=_5;
+return _7;
+};
+}
+},absoluteUrl:function(_8,_9){
+return new dojo._Url(_8,_9)+"";
+},acceptType:"application/rest+json,application/http;q=0.9,*/*;q=0.7",subscriptions:{},subCallbacks:{},autoReconnectTime:3000,reloadDataOnReconnect:true,sendAsJson:false,url:"/channels",autoSubscribeRoot:"/",open:function(){
+this.started=true;
+if(!this.connected){
+this.connectionId=dojox.rpc.Client.clientId;
+var _a=this.createdClientId?"Client-Id":"Create-Client-Id";
+this.createdClientId=true;
+var _b={Accept:this.acceptType};
+_b[_a]=this.connectionId;
+var _c=dojo.xhrPost({headers:_b,url:this.url,noStatus:true});
+var _d=this;
+this.lastIndex=0;
+var _e,_f=function(_10){
+if(typeof dojo=="undefined"){
+return null;
+}
+if(xhr&&xhr.status>400){
+return _e(true);
+}
+if(typeof _10=="string"){
+_10=_10.substring(_d.lastIndex);
+}
+var _11=xhr&&(xhr.contentType||xhr.getResponseHeader("Content-Type"))||(typeof _10!="string"&&"already json");
+var _12=_d.onprogress(xhr,_10,_11);
+if(_12){
+if(_e()){
+return new Error(_12);
+}
+}
+if(!xhr||xhr.readyState==4){
+xhr=null;
+if(_d.connected){
+_d.connected=false;
+_d.open();
+}
+}
+return _10;
+};
+_e=function(_13){
+if(xhr&&xhr.status==409){
+_d.disconnected();
+return null;
+}
+_d.createdClientId=false;
+_d.disconnected();
+return _13;
+};
+_c.addCallbacks(_f,_e);
+var xhr=_c.ioArgs.xhr;
+if(xhr){
+xhr.onreadystatechange=function(){
+var _14;
+try{
+if(xhr.readyState==3){
+_d.readyState=3;
+_14=xhr.responseText;
+}
+}
+catch(e){
+}
+if(typeof _14=="string"){
+_f(_14);
+}
+};
+}
+if(window.attachEvent){
+window.attachEvent("onunload",function(){
+_d.connected=false;
+if(xhr){
+xhr.abort();
+}
+});
+}
+this.connected=true;
+}
+},_send:function(_15,_16,_17){
+if(this.sendAsJson){
+_16.postData=dojo.toJson({target:_16.url,method:_15,content:_17,params:_16.content,subscribe:_16.headers["Subscribe"]});
+_16.url=this.url;
+_15="POST";
+}else{
+_16.postData=dojo.toJson(_17);
+}
+return dojo.xhr(_15,_16,_16.postData);
+},subscribe:function(_18,_19){
+_19=_19||{};
+_19.url=this.absoluteUrl(this.url,_18);
+if(_19.headers){
+delete _19.headers.Range;
+}
+var _1a=this.subscriptions[_18];
+var _1b=_19.method||"HEAD";
+var _1c=_19.since;
+var _1d=_19.callback;
+var _1e=_19.headers||(_19.headers={});
+this.subscriptions[_18]=_1c||_1a||0;
+var _1f=this.subCallbacks[_18];
+if(_1d){
+this.subCallbacks[_18]=_1f?function(m){
+_1f(m);
+_1d(m);
+}:_1d;
+}
+if(!this.connected){
+this.open();
+}
+if(_1a===undefined||_1a!=_1c){
+_1e["Cache-Control"]="max-age=0";
+_1c=typeof _1c=="number"?new Date(_1c).toUTCString():_1c;
+if(_1c){
+_1e["Subscribe-Since"]=_1c;
+}
+_1e["Subscribe"]=_19.unsubscribe?"none":"*";
+var dfd=this._send(_1b,_19);
+var _20=this;
+dfd.addBoth(function(_21){
+var xhr=dfd.ioArgs.xhr;
+if(!(_21 instanceof Error)){
+if(_19.confirmation){
+_19.confirmation();
+}
+}
+if(xhr&&xhr.getResponseHeader("Subscribed")=="OK"){
+var _22=xhr.getResponseHeader("Last-Modified");
+if(xhr.responseText){
+_20.subscriptions[_18]=_22||new Date().toUTCString();
+}else{
+return null;
+}
+}else{
+if(xhr&&!(_21 instanceof Error)){
+delete _20.subscriptions[_18];
+}
+}
+if(!(_21 instanceof Error)){
+var _23={responseText:xhr&&xhr.responseText,channel:_18,getResponseHeader:function(_24){
+return xhr.getResponseHeader(_24);
+},getAllResponseHeaders:function(){
+return xhr.getAllResponseHeaders();
+},result:_21};
+if(_20.subCallbacks[_18]){
+_20.subCallbacks[_18](_23);
+}
+}else{
+if(_20.subCallbacks[_18]){
+_20.subCallbacks[_18](xhr);
+}
+}
+return _21;
+});
+return dfd;
+}
+return null;
+},publish:function(_25,_26){
+return this._send("POST",{url:_25,contentType:"application/json"},_26);
+},_processMessage:function(_27){
+_27.event=_27.event||_27.getResponseHeader("Event");
+if(_27.event=="connection-conflict"){
+return "conflict";
+}
+try{
+_27.result=_27.result||dojo.fromJson(_27.responseText);
+}
+catch(e){
+}
+var _28=this;
+var loc=_27.channel=new dojo._Url(this.url,_27.source||_27.getResponseHeader("Content-Location"))+"";
+if(loc in this.subscriptions&&_27.getResponseHeader){
+this.subscriptions[loc]=_27.getResponseHeader("Last-Modified");
+}
+if(this.subCallbacks[loc]){
+setTimeout(function(){
+_28.subCallbacks[loc](_27);
+},0);
+}
+this.receive(_27);
+return null;
+},onprogress:function(xhr,_29,_2a){
+if(!_2a||_2a.match(/application\/rest\+json/)){
+var _2b=_29.length;
+_29=_29.replace(/^\s*[,\[]?/,"[").replace(/[,\]]?\s*$/,"]");
+try{
+var _2c=dojo.fromJson(_29);
+this.lastIndex+=_2b;
+}
+catch(e){
+}
+}else{
+if(dojox.io&&dojox.io.httpParse&&_2a.match(/application\/http/)){
+var _2d="";
+if(xhr&&xhr.getAllResponseHeaders){
+_2d=xhr.getAllResponseHeaders();
+}
+_2c=dojox.io.httpParse(_29,_2d,xhr.readyState!=4);
+}else{
+if(typeof _29=="object"){
+_2c=_29;
+}
+}
+}
+if(_2c){
+for(var i=0;i<_2c.length;i++){
+if(this._processMessage(_2c[i])){
+return "conflict";
+}
+}
+return null;
+}
+if(!xhr){
+return "error";
+}
+if(xhr.readyState!=4){
+return null;
+}
+if(xhr.__proto__){
+xhr={channel:"channel",__proto__:xhr};
+}
+return this._processMessage(xhr);
+},get:function(_2e,_2f){
+(_2f=_2f||{}).method="GET";
+return this.subscribe(_2e,_2f);
+},receive:function(_30){
+if(dojox.data&&dojox.data.restListener){
+dojox.data.restListener(_30);
+}
+},disconnected:function(){
+var _31=this;
+if(this.connected){
+this.connected=false;
+if(this.started){
+setTimeout(function(){
+var _32=_31.subscriptions;
+_31.subscriptions={};
+for(var i in _32){
+if(_31.reloadDataOnReconnect&&dojox.rpc.JsonRest){
+delete dojox.rpc.Rest._index[i];
+dojox.rpc.JsonRest.fetch(i);
+}else{
+_31.subscribe(i,{since:_32[i]});
+}
+}
+_31.open();
+},this.autoReconnectTime);
+}
+}
+},unsubscribe:function(_33,_34){
+_34=_34||{};
+_34.unsubscribe=true;
+this.subscribe(_33,_34);
+},disconnect:function(){
+this.started=false;
+this.xhr.abort();
+}});
+var _35=dojox.cometd.RestChannels.defaultInstance=new dojox.cometd.RestChannels();
+if(dojox.cometd.connectionTypes){
+_35.startup=function(_36){
+_35.open();
+this._cometd._deliver({channel:"/meta/connect",successful:true});
+};
+_35.check=function(_37,_38,_39){
+for(var i=0;i<_37.length;i++){
+if(_37[i]=="rest-channels"){
+return !_39;
+}
+}
+return false;
+};
+_35.deliver=function(_3a){
+};
+dojo.connect(this,"receive",null,function(_3b){
+_3b.data=_3b.result;
+this._cometd._deliver(_3b);
+});
+_35.sendMessages=function(_3c){
+for(var i=0;i<_3c.length;i++){
+var _3d=_3c[i];
+var _3e=_3d.channel;
+var _3f=this._cometd;
+var _40={confirmation:function(){
+_3f._deliver({channel:_3e,successful:true});
+}};
+if(_3e=="/meta/subscribe"){
+this.subscribe(_3d.subscription,_40);
+}else{
+if(_3e=="/meta/unsubscribe"){
+this.unsubscribe(_3d.subscription,_40);
+}else{
+if(_3e=="/meta/connect"){
+_40.confirmation();
+}else{
+if(_3e=="/meta/disconnect"){
+_35.disconnect();
+_40.confirmation();
+}else{
+if(_3e.substring(0,6)!="/meta/"){
+this.publish(_3e,_3d.data);
+}
+}
+}
+}
+}
+}
+};
+dojox.cometd.connectionTypes.register("rest-channels",_35.check,_35,false,true);
+}
+})();
+}
diff --git a/js/dojo/dojox/cometd/_base.js b/js/dojo/dojox/cometd/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/_base.js
@@ -0,0 +1,400 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd._base"]){
+dojo._hasResource["dojox.cometd._base"]=true;
+dojo.provide("dojox.cometd._base");
+dojo.require("dojo.AdapterRegistry");
+dojox.cometd={Connection:function(_1){
+dojo.mixin(this,{prefix:_1,_status:"unconnected",_handshook:false,_initialized:false,_polling:false,expectedNetworkDelay:10000,connectTimeout:0,version:"1.0",minimumVersion:"0.9",clientId:null,messageId:0,batch:0,_isXD:false,handshakeReturn:null,currentTransport:null,url:null,lastMessage:null,_messageQ:[],handleAs:"json",_advice:{},_backoffInterval:0,_backoffIncrement:1000,_backoffMax:60000,_deferredSubscribes:{},_deferredUnsubscribes:{},_subscriptions:[],_extendInList:[],_extendOutList:[]});
+this.state=function(){
+return this._status;
+};
+this.init=function(_2,_3,_4){
+_3=_3||{};
+_3.version=this.version;
+_3.minimumVersion=this.minimumVersion;
+_3.channel="/meta/handshake";
+_3.id=""+this.messageId++;
+this.url=_2||dojo.config["cometdRoot"];
+if(!this.url){
+throw "no cometd root";
+return null;
+}
+var _5="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var _6=(""+window.location).match(new RegExp(_5));
+if(_6[4]){
+var _7=_6[4].split(":");
+var _8=_7[0];
+var _9=_7[1]||"80";
+_6=this.url.match(new RegExp(_5));
+if(_6[4]){
+_7=_6[4].split(":");
+var _a=_7[0];
+var _b=_7[1]||"80";
+this._isXD=((_a!=_8)||(_b!=_9));
+}
+}
+if(!this._isXD){
+_3.supportedConnectionTypes=dojo.map(dojox.cometd.connectionTypes.pairs,"return item[0]");
+}
+_3=this._extendOut(_3);
+var _c={url:this.url,handleAs:this.handleAs,content:{"message":dojo.toJson([_3])},load:dojo.hitch(this,function(_d){
+this._backon();
+this._finishInit(_d);
+}),error:dojo.hitch(this,function(e){
+this._backoff();
+this._finishInit(e);
+}),timeout:this.expectedNetworkDelay};
+if(_4){
+dojo.mixin(_c,_4);
+}
+this._props=_3;
+for(var _e in this._subscriptions){
+for(var _f in this._subscriptions[_e]){
+if(this._subscriptions[_e][_f].topic){
+dojo.unsubscribe(this._subscriptions[_e][_f].topic);
+}
+}
+}
+this._messageQ=[];
+this._subscriptions=[];
+this._initialized=true;
+this._status="handshaking";
+this.batch=0;
+this.startBatch();
+var r;
+if(this._isXD){
+_c.callbackParamName="jsonp";
+r=dojo.io.script.get(_c);
+}else{
+r=dojo.xhrPost(_c);
+}
+return r;
+};
+this.publish=function(_10,_11,_12){
+var _13={data:_11,channel:_10};
+if(_12){
+dojo.mixin(_13,_12);
+}
+this._sendMessage(_13);
+};
+this.subscribe=function(_14,_15,_16,_17){
+_17=_17||{};
+if(_15){
+var _18=_1+_14;
+var _19=this._subscriptions[_18];
+if(!_19||_19.length==0){
+_19=[];
+_17.channel="/meta/subscribe";
+_17.subscription=_14;
+this._sendMessage(_17);
+var _1a=this._deferredSubscribes;
+if(_1a[_14]){
+_1a[_14].cancel();
+delete _1a[_14];
+}
+_1a[_14]=new dojo.Deferred();
+}
+for(var i in _19){
+if(_19[i].objOrFunc===_15&&(!_19[i].funcName&&!_16||_19[i].funcName==_16)){
+return null;
+}
+}
+var _1b=dojo.subscribe(_18,_15,_16);
+_19.push({topic:_1b,objOrFunc:_15,funcName:_16});
+this._subscriptions[_18]=_19;
+}
+var ret=this._deferredSubscribes[_14]||{};
+ret.args=dojo._toArray(arguments);
+return ret;
+};
+this.unsubscribe=function(_1c,_1d,_1e,_1f){
+if((arguments.length==1)&&(!dojo.isString(_1c))&&(_1c.args)){
+return this.unsubscribe.apply(this,_1c.args);
+}
+var _20=_1+_1c;
+var _21=this._subscriptions[_20];
+if(!_21||_21.length==0){
+return null;
+}
+var s=0;
+for(var i in _21){
+var sb=_21[i];
+if((!_1d)||(sb.objOrFunc===_1d&&(!sb.funcName&&!_1e||sb.funcName==_1e))){
+dojo.unsubscribe(_21[i].topic);
+delete _21[i];
+}else{
+s++;
+}
+}
+if(s==0){
+_1f=_1f||{};
+_1f.channel="/meta/unsubscribe";
+_1f.subscription=_1c;
+delete this._subscriptions[_20];
+this._sendMessage(_1f);
+this._deferredUnsubscribes[_1c]=new dojo.Deferred();
+if(this._deferredSubscribes[_1c]){
+this._deferredSubscribes[_1c].cancel();
+delete this._deferredSubscribes[_1c];
+}
+}
+return this._deferredUnsubscribes[_1c];
+};
+this.disconnect=function(){
+for(var _22 in this._subscriptions){
+for(var sub in this._subscriptions[_22]){
+if(this._subscriptions[_22][sub].topic){
+dojo.unsubscribe(this._subscriptions[_22][sub].topic);
+}
+}
+}
+this._subscriptions=[];
+this._messageQ=[];
+if(this._initialized&&this.currentTransport){
+this._initialized=false;
+this.currentTransport.disconnect();
+}
+if(!this._polling){
+this._publishMeta("connect",false);
+}
+this._initialized=false;
+this._handshook=false;
+this._status="disconnected";
+this._publishMeta("disconnect",true);
+};
+this.subscribed=function(_23,_24){
+};
+this.unsubscribed=function(_25,_26){
+};
+this.tunnelInit=function(_27,_28){
+};
+this.tunnelCollapse=function(){
+};
+this._backoff=function(){
+if(!this._advice){
+this._advice={reconnect:"retry",interval:0};
+}else{
+if(!this._advice.interval){
+this._advice.interval=0;
+}
+}
+if(this._backoffInterval<this._backoffMax){
+this._backoffInterval+=this._backoffIncrement;
+}
+};
+this._backon=function(){
+this._backoffInterval=0;
+};
+this._interval=function(){
+var i=this._backoffInterval+(this._advice?(this._advice.interval?this._advice.interval:0):0);
+if(i>0){
+}
+return i;
+};
+this._publishMeta=function(_29,_2a,_2b){
+try{
+var _2c={cometd:this,action:_29,successful:_2a,state:this.state()};
+if(_2b){
+dojo.mixin(_2c,_2b);
+}
+dojo.publish(this.prefix+"/meta",[_2c]);
+}
+catch(e){
+}
+};
+this._finishInit=function(_2d){
+if(this._status!="handshaking"){
+return;
+}
+var _2e=this._handshook;
+var _2f=false;
+var _30={};
+if(_2d instanceof Error){
+dojo.mixin(_30,{reestablish:false,failure:true,error:_2d,advice:this._advice});
+}else{
+_2d=_2d[0];
+_2d=this._extendIn(_2d);
+this.handshakeReturn=_2d;
+if(_2d["advice"]){
+this._advice=_2d.advice;
+}
+_2f=_2d.successful?_2d.successful:false;
+if(_2d.version<this.minimumVersion){
+if(console.log){
+}
+_2f=false;
+this._advice.reconnect="none";
+}
+dojo.mixin(_30,{reestablish:_2f&&_2e,response:_2d});
+}
+this._publishMeta("handshake",_2f,_30);
+if(this._status!="handshaking"){
+return;
+}
+if(_2f){
+this._status="connecting";
+this._handshook=true;
+this.currentTransport=dojox.cometd.connectionTypes.match(_2d.supportedConnectionTypes,_2d.version,this._isXD);
+var _31=this.currentTransport;
+_31._cometd=this;
+_31.version=_2d.version;
+this.clientId=_2d.clientId;
+this.tunnelInit=_31.tunnelInit&&dojo.hitch(_31,"tunnelInit");
+this.tunnelCollapse=_31.tunnelCollapse&&dojo.hitch(_31,"tunnelCollapse");
+_31.startup(_2d);
+}else{
+if(!this._advice||this._advice["reconnect"]!="none"){
+setTimeout(dojo.hitch(this,"init",this.url,this._props),this._interval());
+}
+}
+};
+this._extendIn=function(_32){
+dojo.forEach(dojox.cometd._extendInList,function(f){
+_32=f(_32)||_32;
+});
+return _32;
+};
+this._extendOut=function(_33){
+dojo.forEach(dojox.cometd._extendOutList,function(f){
+_33=f(_33)||_33;
+});
+return _33;
+};
+this.deliver=function(_34){
+dojo.forEach(_34,this._deliver,this);
+return _34;
+};
+this._deliver=function(_35){
+_35=this._extendIn(_35);
+if(!_35["channel"]){
+if(_35["success"]!==true){
+return;
+}
+}
+this.lastMessage=_35;
+if(_35.advice){
+this._advice=_35.advice;
+}
+var _36=null;
+if((_35["channel"])&&(_35.channel.length>5)&&(_35.channel.substr(0,5)=="/meta")){
+switch(_35.channel){
+case "/meta/connect":
+var _37={response:_35};
+if(_35.successful){
+if(this._status!="connected"){
+this._status="connected";
+this.endBatch();
+}
+}
+if(this._initialized){
+this._publishMeta("connect",_35.successful,_37);
+}
+break;
+case "/meta/subscribe":
+_36=this._deferredSubscribes[_35.subscription];
+try{
+if(!_35.successful){
+if(_36){
+_36.errback(new Error(_35.error));
+}
+this.currentTransport.cancelConnect();
+return;
+}
+if(_36){
+_36.callback(true);
+}
+this.subscribed(_35.subscription,_35);
+}
+catch(e){
+log.warn(e);
+}
+break;
+case "/meta/unsubscribe":
+_36=this._deferredUnsubscribes[_35.subscription];
+try{
+if(!_35.successful){
+if(_36){
+_36.errback(new Error(_35.error));
+}
+this.currentTransport.cancelConnect();
+return;
+}
+if(_36){
+_36.callback(true);
+}
+this.unsubscribed(_35.subscription,_35);
+}
+catch(e){
+log.warn(e);
+}
+break;
+default:
+if(_35.successful&&!_35.successful){
+this.currentTransport.cancelConnect();
+return;
+}
+}
+}
+this.currentTransport.deliver(_35);
+if(_35.data){
+try{
+var _38=[_35];
+var _39=_1+_35.channel;
+var _3a=_35.channel.split("/");
+var _3b=_1;
+for(var i=1;i<_3a.length-1;i++){
+dojo.publish(_3b+"/**",_38);
+_3b+="/"+_3a[i];
+}
+dojo.publish(_3b+"/**",_38);
+dojo.publish(_3b+"/*",_38);
+dojo.publish(_39,_38);
+}
+catch(e){
+}
+}
+};
+this._sendMessage=function(_3c){
+if(this.currentTransport&&!this.batch){
+return this.currentTransport.sendMessages([_3c]);
+}else{
+this._messageQ.push(_3c);
+return null;
+}
+};
+this.startBatch=function(){
+this.batch++;
+};
+this.endBatch=function(){
+if(--this.batch<=0&&this.currentTransport&&this._status=="connected"){
+this.batch=0;
+var _3d=this._messageQ;
+this._messageQ=[];
+if(_3d.length>0){
+this.currentTransport.sendMessages(_3d);
+}
+}
+};
+this._onUnload=function(){
+dojo.addOnUnload(dojox.cometd,"disconnect");
+};
+this._connectTimeout=function(){
+var _3e=0;
+if(this._advice&&this._advice.timeout&&this.expectedNetworkDelay>0){
+_3e=this._advice.timeout+this.expectedNetworkDelay;
+}
+if(this.connectTimeout>0&&this.connectTimeout<_3e){
+return this.connectTimeout;
+}
+return _3e;
+};
+},connectionTypes:new dojo.AdapterRegistry(true)};
+dojox.cometd.Connection.call(dojox.cometd,"/cometd");
+dojo.addOnUnload(dojox.cometd,"_onUnload");
+}
diff --git a/js/dojo/dojox/cometd/ack.js b/js/dojo/dojox/cometd/ack.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/ack.js
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.ack"]){
+dojo._hasResource["dojox.cometd.ack"]=true;
+dojo.provide("dojox.cometd.ack");
+dojo.require("dojox.cometd._base");
+dojox.cometd._ack=new function(){
+var _1=false;
+var _2=-1;
+this._in=function(_3){
+if(_3.channel=="/meta/handshake"){
+_1=_3.ext&&_3.ext.ack;
+}else{
+if(_1&&_3.channel=="/meta/connect"&&_3.ext&&_3.ext.ack&&_3.successful){
+var _4=parseInt(_3.ext.ack);
+_2=_4;
+}
+}
+return _3;
+};
+this._out=function(_5){
+if(_5.channel=="/meta/handshake"){
+if(!_5.ext){
+_5.ext={};
+}
+_5.ext.ack=dojox.cometd.ackEnabled;
+_2=-1;
+}
+if(_1&&_5.channel=="/meta/connect"){
+if(!_5.ext){
+_5.ext={};
+}
+_5.ext.ack=_2;
+}
+return _5;
+};
+};
+dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd._ack,"_in"));
+dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd._ack,"_out"));
+dojox.cometd.ackEnabled=true;
+}
diff --git a/js/dojo/dojox/cometd/callbackPollTransport.js b/js/dojo/dojox/cometd/callbackPollTransport.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/callbackPollTransport.js
@@ -0,0 +1,74 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.callbackPollTransport"]){
+dojo._hasResource["dojox.cometd.callbackPollTransport"]=true;
+dojo.provide("dojox.cometd.callbackPollTransport");
+dojo.require("dojox.cometd._base");
+dojo.require("dojox.cometd.longPollTransport");
+dojo.require("dojo.io.script");
+dojox.cometd.callbackPollTransport=new function(){
+this._connectionType="callback-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return (dojo.indexOf(_1,"callback-polling")>=0);
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith([_4]);
+};
+this.tunnelCollapse=dojox.cometd.longPollTransport.tunnelCollapse;
+this._connect=dojox.cometd.longPollTransport._connect;
+this.deliver=dojox.cometd.longPollTransport.deliver;
+this.openTunnelWith=function(_5,_6){
+this._cometd._polling=true;
+var _7={load:dojo.hitch(this,function(_8){
+this._cometd._polling=false;
+this._cometd.deliver(_8);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_9){
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false);
+this._cometd._backoff();
+this.tunnelCollapse();
+}),url:(_6||this._cometd.url),content:{message:dojo.toJson(_5)},callbackParamName:"jsonp"};
+var _a=this._cometd._connectTimeout();
+if(_a>0){
+_7.timeout=_a;
+}
+dojo.io.script.get(_7);
+};
+this.sendMessages=function(_b){
+for(var i=0;i<_b.length;i++){
+_b[i].clientId=this._cometd.clientId;
+_b[i].id=""+this._cometd.messageId++;
+_b[i]=this._cometd._extendOut(_b[i]);
+}
+var _c={url:this._cometd.url||dojo.config["cometdRoot"],load:dojo.hitch(this._cometd,"deliver"),callbackParamName:"jsonp",content:{message:dojo.toJson(_b)},error:dojo.hitch(this,function(_d){
+this._cometd._publishMeta("publish",false,{messages:_b});
+}),timeout:this._cometd.expectedNetworkDelay};
+return dojo.io.script.get(_c);
+};
+this.startup=function(_e){
+if(this._cometd._connected){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=dojox.cometd.longPollTransport.disconnect;
+this.disconnect=function(){
+var _f={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_f=this._cometd._extendOut(_f);
+dojo.io.script.get({url:this._cometd.url||dojo.config["cometdRoot"],callbackParamName:"jsonp",content:{message:dojo.toJson([_f])}});
+};
+this.cancelConnect=function(){
+};
+};
+dojox.cometd.connectionTypes.register("callback-polling",dojox.cometd.callbackPollTransport.check,dojox.cometd.callbackPollTransport);
+}
diff --git a/js/dojo/dojox/cometd/longPollTransport.js b/js/dojo/dojox/cometd/longPollTransport.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/longPollTransport.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransport"]){
+dojo._hasResource["dojox.cometd.longPollTransport"]=true;
+dojo.provide("dojox.cometd.longPollTransport");
+dojo.require("dojox.cometd.longPollTransportJsonEncoded");
+}
diff --git a/js/dojo/dojox/cometd/longPollTransportFormEncoded.js b/js/dojo/dojox/cometd/longPollTransportFormEncoded.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/longPollTransportFormEncoded.js
@@ -0,0 +1,118 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransportFormEncoded"]){
+dojo._hasResource["dojox.cometd.longPollTransportFormEncoded"]=true;
+dojo.provide("dojox.cometd.longPollTransportFormEncoded");
+dojo.require("dojox.cometd._base");
+dojox.cometd.longPollTransportFormEncoded=new function(){
+this._connectionType="long-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return ((!_3)&&(dojo.indexOf(_1,"long-polling")>=0));
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith({message:dojo.toJson([_4])});
+};
+this.tunnelCollapse=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._advice&&this._cometd._advice["reconnect"]=="none"){
+return;
+}
+var _5=this._cometd._interval();
+if(this._cometd._status=="connected"){
+setTimeout(dojo.hitch(this,"_connect"),_5);
+}else{
+setTimeout(dojo.hitch(this._cometd,function(){
+this.init(this.url,this._props);
+}),_5);
+}
+};
+this._connect=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._polling){
+return;
+}
+if((this._cometd._advice)&&(this._cometd._advice["reconnect"]=="handshake")){
+this._cometd._status="unconnected";
+this._initialized=false;
+this._cometd.init(this._cometd.url,this._cometd._props);
+}else{
+if(this._cometd._status=="connected"){
+var _6={channel:"/meta/connect",connectionType:this._connectionType,clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+if(this._cometd.connectTimeout>=this._cometd.expectedNetworkDelay){
+_6.advice={timeout:this._cometd.connectTimeout-this._cometd.expectedNetworkDelay};
+}
+_6=this._cometd._extendOut(_6);
+this.openTunnelWith({message:dojo.toJson([_6])});
+}
+}
+};
+this.deliver=function(_7){
+};
+this.openTunnelWith=function(_8,_9){
+this._cometd._polling=true;
+var _a={url:(_9||this._cometd.url),content:_8,handleAs:this._cometd.handleAs,load:dojo.hitch(this,function(_b){
+this._cometd._polling=false;
+this._cometd.deliver(_b);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_c){
+var _d={failure:true,error:_c,advice:this._cometd._advice};
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,_d);
+this._cometd._backoff();
+this.tunnelCollapse();
+})};
+var _e=this._cometd._connectTimeout();
+if(_e>0){
+_a.timeout=_e;
+}
+this._poll=dojo.xhrPost(_a);
+};
+this.sendMessages=function(_f){
+for(var i=0;i<_f.length;i++){
+_f[i].clientId=this._cometd.clientId;
+_f[i].id=""+this._cometd.messageId++;
+_f[i]=this._cometd._extendOut(_f[i]);
+}
+return dojo.xhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,load:dojo.hitch(this._cometd,"deliver"),content:{message:dojo.toJson(_f)},error:dojo.hitch(this,function(err){
+this._cometd._publishMeta("publish",false,{messages:_f});
+}),timeout:this._cometd.expectedNetworkDelay});
+};
+this.startup=function(_10){
+if(this._cometd._status=="connected"){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=function(){
+var _11={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_11=this._cometd._extendOut(_11);
+dojo.xhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,content:{message:dojo.toJson([_11])}});
+};
+this.cancelConnect=function(){
+if(this._poll){
+this._poll.cancel();
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,{cancel:true});
+this._cometd._backoff();
+this.disconnect();
+this.tunnelCollapse();
+}
+};
+};
+dojox.cometd.longPollTransport=dojox.cometd.longPollTransportFormEncoded;
+dojox.cometd.connectionTypes.register("long-polling",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportFormEncoded);
+dojox.cometd.connectionTypes.register("long-polling-form-encoded",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportFormEncoded);
+}
diff --git a/js/dojo/dojox/cometd/longPollTransportJsonEncoded.js b/js/dojo/dojox/cometd/longPollTransportJsonEncoded.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/longPollTransportJsonEncoded.js
@@ -0,0 +1,119 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransportJsonEncoded"]){
+dojo._hasResource["dojox.cometd.longPollTransportJsonEncoded"]=true;
+dojo.provide("dojox.cometd.longPollTransportJsonEncoded");
+dojo.require("dojox.cometd._base");
+dojox.cometd.longPollTransportJsonEncoded=new function(){
+this._connectionType="long-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return ((!_3)&&(dojo.indexOf(_1,"long-polling")>=0));
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith([_4]);
+};
+this.tunnelCollapse=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._advice&&this._cometd._advice["reconnect"]=="none"){
+return;
+}
+if(this._cometd._status=="connected"){
+setTimeout(dojo.hitch(this,function(){
+this._connect();
+}),this._cometd._interval());
+}else{
+setTimeout(dojo.hitch(this._cometd,function(){
+this.init(this.url,this._props);
+}),this._cometd._interval());
+}
+};
+this._connect=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._polling){
+return;
+}
+if((this._cometd._advice)&&(this._cometd._advice["reconnect"]=="handshake")){
+this._cometd._status="unconnected";
+this._initialized=false;
+this._cometd.init(this._cometd.url,this._cometd._props);
+}else{
+if(this._cometd._status=="connected"){
+var _5={channel:"/meta/connect",connectionType:this._connectionType,clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+if(this._cometd.connectTimeout>=this._cometd.expectedNetworkDelay){
+_5.advice={timeout:(this._cometd.connectTimeout-this._cometd.expectedNetworkDelay)};
+}
+_5=this._cometd._extendOut(_5);
+this.openTunnelWith([_5]);
+}
+}
+};
+this.deliver=function(_6){
+};
+this.openTunnelWith=function(_7,_8){
+this._cometd._polling=true;
+var _9={url:(_8||this._cometd.url),postData:dojo.toJson(_7),contentType:"text/json;charset=UTF-8",handleAs:this._cometd.handleAs,load:dojo.hitch(this,function(_a){
+this._cometd._polling=false;
+this._cometd.deliver(_a);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_b){
+this._cometd._polling=false;
+var _c={failure:true,error:_b,advice:this._cometd._advice};
+this._cometd._publishMeta("connect",false,_c);
+this._cometd._backoff();
+this.tunnelCollapse();
+})};
+var _d=this._cometd._connectTimeout();
+if(_d>0){
+_9.timeout=_d;
+}
+this._poll=dojo.rawXhrPost(_9);
+};
+this.sendMessages=function(_e){
+for(var i=0;i<_e.length;i++){
+_e[i].clientId=this._cometd.clientId;
+_e[i].id=""+this._cometd.messageId++;
+_e[i]=this._cometd._extendOut(_e[i]);
+}
+return dojo.rawXhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,load:dojo.hitch(this._cometd,"deliver"),postData:dojo.toJson(_e),contentType:"text/json;charset=UTF-8",error:dojo.hitch(this,function(_f){
+this._cometd._publishMeta("publish",false,{messages:_e});
+}),timeout:this._cometd.expectedNetworkDelay});
+};
+this.startup=function(_10){
+if(this._cometd._status=="connected"){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=function(){
+var _11={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_11=this._cometd._extendOut(_11);
+dojo.rawXhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,postData:dojo.toJson([_11]),contentType:"text/json;charset=UTF-8"});
+};
+this.cancelConnect=function(){
+if(this._poll){
+this._poll.cancel();
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,{cancel:true});
+this._cometd._backoff();
+this.disconnect();
+this.tunnelCollapse();
+}
+};
+};
+dojox.cometd.longPollTransport=dojox.cometd.longPollTransportJsonEncoded;
+dojox.cometd.connectionTypes.register("long-polling",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportJsonEncoded);
+dojox.cometd.connectionTypes.register("long-polling-json-encoded",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportJsonEncoded);
+}
diff --git a/js/dojo/dojox/cometd/timestamp.js b/js/dojo/dojox/cometd/timestamp.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/timestamp.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.timestamp"]){
+dojo._hasResource["dojox.cometd.timestamp"]=true;
+dojo.provide("dojox.cometd.timestamp");
+dojo.require("dojox.cometd._base");
+dojox.cometd._extendOutList.push(function(_1){
+_1.timestamp=new Date().toUTCString();
+return _1;
+});
+}
diff --git a/js/dojo/dojox/cometd/timesync.js b/js/dojo/dojox/cometd/timesync.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/cometd/timesync.js
@@ -0,0 +1,75 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.timesync"]){
+dojo._hasResource["dojox.cometd.timesync"]=true;
+dojo.provide("dojox.cometd.timesync");
+dojo.require("dojox.cometd._base");
+dojox.cometd.timesync=new function(){
+this._window=10;
+this._lags=[];
+this._offsets=[];
+this.lag=0;
+this.offset=0;
+this.samples=0;
+this.getServerTime=function(){
+return new Date().getTime()+this.offset;
+};
+this.getServerDate=function(){
+return new Date(this.getServerTime());
+};
+this.setTimeout=function(_1,_2){
+var ts=(_2 instanceof Date)?_2.getTime():(0+_2);
+var tc=ts-this.offset;
+var _3=tc-new Date().getTime();
+if(_3<=0){
+_3=1;
+}
+return setTimeout(_1,_3);
+};
+this._in=function(_4){
+var _5=_4.channel;
+if(_5&&_5.indexOf("/meta/")==0){
+if(_4.ext&&_4.ext.timesync){
+var _6=_4.ext.timesync;
+var _7=new Date().getTime();
+var l=(_7-_6.tc-_6.p)/2-_6.a;
+var o=_6.ts-_6.tc-l;
+this._lags.push(l);
+this._offsets.push(o);
+if(this._offsets.length>this._window){
+this._offsets.shift();
+this._lags.shift();
+}
+this.samples++;
+l=0;
+o=0;
+for(var i in this._offsets){
+l+=this._lags[i];
+o+=this._offsets[i];
+}
+this.offset=parseInt((o/this._offsets.length).toFixed());
+this.lag=parseInt((l/this._lags.length).toFixed());
+}
+}
+return _4;
+};
+this._out=function(_8){
+var _9=_8.channel;
+if(_9&&_9.indexOf("/meta/")==0){
+var _a=new Date().getTime();
+if(!_8.ext){
+_8.ext={};
+}
+_8.ext.timesync={tc:_a,l:this.lag,o:this.offset};
+}
+return _8;
+};
+};
+dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd.timesync,"_in"));
+dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd.timesync,"_out"));
+}
diff --git a/js/dojo/dojox/data/AndOrReadStore.js b/js/dojo/dojox/data/AndOrReadStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/AndOrReadStore.js
@@ -0,0 +1,671 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AndOrReadStore"]){
+dojo._hasResource["dojox.data.AndOrReadStore"]=true;
+dojo.provide("dojox.data.AndOrReadStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojox.data.AndOrReadStore",null,{constructor:function(_1){
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._jsonFileUrl=_1.url;
+this._ccUrl=_1.url;
+this.url=_1.url;
+this._jsonData=_1.data;
+this.data=null;
+this._datatypeMap=_1.typeMap||{};
+if(!this._datatypeMap["Date"]){
+this._datatypeMap["Date"]={type:Date,deserialize:function(_2){
+return dojo.date.stamp.fromISOString(_2);
+}};
+}
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._itemsByIdentity=null;
+this._storeRefPropName="_S";
+this._itemNumPropName="_0";
+this._rootItemPropName="_RI";
+this._reverseRefMap="_RRM";
+this._loadInProgress=false;
+this._queuedFetches=[];
+if(_1.urlPreventCache!==undefined){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1.hierarchical!==undefined){
+this.hierarchical=_1.hierarchical?true:false;
+}
+if(_1.clearOnClose){
+this.clearOnClose=true;
+}
+},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,hierarchical:true,_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojox.data.AndOrReadStore: Invalid item argument.");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojox.data.AndOrReadStore: Invalid attribute argument.");
+}
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+return (_8.length>0)?_8[0]:_7;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+return _9[_a]||[];
+},getAttributes:function(_b){
+this._assertIsItem(_b);
+var _c=[];
+for(var _d in _b){
+if((_d!==this._storeRefPropName)&&(_d!==this._itemNumPropName)&&(_d!==this._rootItemPropName)&&(_d!==this._reverseRefMap)){
+_c.push(_d);
+}
+}
+return _c;
+},hasAttribute:function(_e,_f){
+this._assertIsItem(_e);
+this._assertIsAttribute(_f);
+return (_f in _e);
+},containsValue:function(_10,_11,_12){
+var _13=undefined;
+if(typeof _12==="string"){
+_13=dojo.data.util.filter.patternToRegExp(_12,false);
+}
+return this._containsValue(_10,_11,_12,_13);
+},_containsValue:function(_14,_15,_16,_17){
+return dojo.some(this.getValues(_14,_15),function(_18){
+if(_18!==null&&!dojo.isObject(_18)&&_17){
+if(_18.toString().match(_17)){
+return true;
+}
+}else{
+if(_16===_18){
+return true;
+}
+}
+});
+},isItem:function(_19){
+if(_19&&_19[this._storeRefPropName]===this){
+if(this._arrayOfAllItems[_19[this._itemNumPropName]]===_19){
+return true;
+}
+}
+return false;
+},isItemLoaded:function(_1a){
+return this.isItem(_1a);
+},loadItem:function(_1b){
+this._assertIsItem(_1b.item);
+},getFeatures:function(){
+return this._features;
+},getLabel:function(_1c){
+if(this._labelAttr&&this.isItem(_1c)){
+return this.getValue(_1c,this._labelAttr);
+}
+return undefined;
+},getLabelAttributes:function(_1d){
+if(this._labelAttr){
+return [this._labelAttr];
+}
+return null;
+},_fetchItems:function(_1e,_1f,_20){
+var _21=this;
+var _22=function(_23,_24){
+var _25=[];
+if(_23.query){
+var _26=dojo.fromJson(dojo.toJson(_23.query));
+if(typeof _26=="object"){
+var _27=0;
+var p;
+for(p in _26){
+_27++;
+}
+if(_27>1&&_26.complexQuery){
+var cq=_26.complexQuery;
+var _28=false;
+for(p in _26){
+if(p!=="complexQuery"){
+if(!_28){
+cq="( "+cq+" )";
+_28=true;
+}
+var v=_23.query[p];
+if(dojo.isString(v)){
+v="'"+v+"'";
+}
+cq+=" AND "+p+":"+v;
+delete _26[p];
+}
+}
+_26.complexQuery=cq;
+}
+}
+var _29=_23.queryOptions?_23.queryOptions.ignoreCase:false;
+if(typeof _26!="string"){
+_26=dojo.toJson(_26);
+_26=_26.replace(/\\\\/g,"\\");
+}
+_26=_26.replace(/\\"/g,"\"");
+var _2a=dojo.trim(_26.replace(/{|}/g,""));
+var _2b,i;
+if(_2a.match(/"? *complexQuery *"?:/)){
+_2a=dojo.trim(_2a.replace(/"?\s*complexQuery\s*"?:/,""));
+var _2c=["'","\""];
+var _2d,_2e;
+var _2f=false;
+for(i=0;i<_2c.length;i++){
+_2d=_2a.indexOf(_2c[i]);
+_2b=_2a.indexOf(_2c[i],1);
+_2e=_2a.indexOf(":",1);
+if(_2d===0&&_2b!=-1&&_2e<_2b){
+_2f=true;
+break;
+}
+}
+if(_2f){
+_2a=_2a.replace(/^\"|^\'|\"$|\'$/g,"");
+}
+}
+var _30=_2a;
+var _31=/^,|^NOT |^AND |^OR |^\(|^\)|^!|^&&|^\|\|/i;
+var _32="";
+var op="";
+var val="";
+var pos=-1;
+var err=false;
+var key="";
+var _33="";
+var tok="";
+_2b=-1;
+for(i=0;i<_24.length;++i){
+var _34=true;
+var _35=_24[i];
+if(_35===null){
+_34=false;
+}else{
+_2a=_30;
+_32="";
+while(_2a.length>0&&!err){
+op=_2a.match(_31);
+while(op&&!err){
+_2a=dojo.trim(_2a.replace(op[0],""));
+op=dojo.trim(op[0]).toUpperCase();
+op=op=="NOT"?"!":op=="AND"||op==","?"&&":op=="OR"?"||":op;
+op=" "+op+" ";
+_32+=op;
+op=_2a.match(_31);
+}
+if(_2a.length>0){
+pos=_2a.indexOf(":");
+if(pos==-1){
+err=true;
+break;
+}else{
+key=dojo.trim(_2a.substring(0,pos).replace(/\"|\'/g,""));
+_2a=dojo.trim(_2a.substring(pos+1));
+tok=_2a.match(/^\'|^\"/);
+if(tok){
+tok=tok[0];
+pos=_2a.indexOf(tok);
+_2b=_2a.indexOf(tok,pos+1);
+if(_2b==-1){
+err=true;
+break;
+}
+_33=_2a.substring(pos+1,_2b);
+if(_2b==_2a.length-1){
+_2a="";
+}else{
+_2a=dojo.trim(_2a.substring(_2b+1));
+}
+_32+=_21._containsValue(_35,key,_33,dojo.data.util.filter.patternToRegExp(_33,_29));
+}else{
+tok=_2a.match(/\s|\)|,/);
+if(tok){
+var _36=new Array(tok.length);
+for(var j=0;j<tok.length;j++){
+_36[j]=_2a.indexOf(tok[j]);
+}
+pos=_36[0];
+if(_36.length>1){
+for(var j=1;j<_36.length;j++){
+pos=Math.min(pos,_36[j]);
+}
+}
+_33=dojo.trim(_2a.substring(0,pos));
+_2a=dojo.trim(_2a.substring(pos));
+}else{
+_33=dojo.trim(_2a);
+_2a="";
+}
+_32+=_21._containsValue(_35,key,_33,dojo.data.util.filter.patternToRegExp(_33,_29));
+}
+}
+}
+}
+_34=eval(_32);
+}
+if(_34){
+_25.push(_35);
+}
+}
+if(err){
+_25=[];
+}
+_1f(_25,_23);
+}else{
+for(var i=0;i<_24.length;++i){
+var _37=_24[i];
+if(_37!==null){
+_25.push(_37);
+}
+}
+_1f(_25,_23);
+}
+};
+if(this._loadFinished){
+_22(_1e,this._getItemsArray(_1e.queryOptions));
+}else{
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_1e,filter:_22});
+}else{
+this._loadInProgress=true;
+var _38={url:_21._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache};
+var _39=dojo.xhrGet(_38);
+_39.addCallback(function(_3a){
+try{
+_21._getItemsFromLoadedData(_3a);
+_21._loadFinished=true;
+_21._loadInProgress=false;
+_22(_1e,_21._getItemsArray(_1e.queryOptions));
+_21._handleQueuedFetches();
+}
+catch(e){
+_21._loadFinished=true;
+_21._loadInProgress=false;
+_20(e,_1e);
+}
+});
+_39.addErrback(function(_3b){
+_21._loadInProgress=false;
+_20(_3b,_1e);
+});
+var _3c=null;
+if(_1e.abort){
+_3c=_1e.abort;
+}
+_1e.abort=function(){
+var df=_39;
+if(df&&df.fired===-1){
+df.cancel();
+df=null;
+}
+if(_3c){
+_3c.call(_1e);
+}
+};
+}
+}else{
+if(this._jsonData){
+try{
+this._loadFinished=true;
+this._getItemsFromLoadedData(this._jsonData);
+this._jsonData=null;
+_22(_1e,this._getItemsArray(_1e.queryOptions));
+}
+catch(e){
+_20(e,_1e);
+}
+}else{
+_20(new Error("dojox.data.AndOrReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1e);
+}
+}
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _3d=this._queuedFetches[i];
+var _3e=_3d.args;
+var _3f=_3d.filter;
+if(_3f){
+_3f(_3e,this._getItemsArray(_3e.queryOptions));
+}else{
+this.fetchItemByIdentity(_3e);
+}
+}
+this._queuedFetches=[];
+}
+},_getItemsArray:function(_40){
+if(_40&&_40.deep){
+return this._arrayOfAllItems;
+}
+return this._arrayOfTopLevelItems;
+},close:function(_41){
+if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){
+if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){
+}
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._itemsByIdentity=null;
+this._loadInProgress=false;
+this._queuedFetches=[];
+}
+},_getItemsFromLoadedData:function(_42){
+var _43=this;
+function _44(_45){
+var _46=((_45!==null)&&(typeof _45==="object")&&(!dojo.isArray(_45))&&(!dojo.isFunction(_45))&&(_45.constructor==Object)&&(typeof _45._reference==="undefined")&&(typeof _45._type==="undefined")&&(typeof _45._value==="undefined")&&_43.hierarchical);
+return _46;
+};
+function _47(_48){
+_43._arrayOfAllItems.push(_48);
+for(var _49 in _48){
+var _4a=_48[_49];
+if(_4a){
+if(dojo.isArray(_4a)){
+var _4b=_4a;
+for(var k=0;k<_4b.length;++k){
+var _4c=_4b[k];
+if(_44(_4c)){
+_47(_4c);
+}
+}
+}else{
+if(_44(_4a)){
+_47(_4a);
+}
+}
+}
+}
+};
+this._labelAttr=_42.label;
+var i;
+var _4d;
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=_42.items;
+for(i=0;i<this._arrayOfTopLevelItems.length;++i){
+_4d=this._arrayOfTopLevelItems[i];
+_47(_4d);
+_4d[this._rootItemPropName]=true;
+}
+var _4e={};
+var key;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4d=this._arrayOfAllItems[i];
+for(key in _4d){
+if(key!==this._rootItemPropName){
+var _4f=_4d[key];
+if(_4f!==null){
+if(!dojo.isArray(_4f)){
+_4d[key]=[_4f];
+}
+}else{
+_4d[key]=[null];
+}
+}
+_4e[key]=key;
+}
+}
+while(_4e[this._storeRefPropName]){
+this._storeRefPropName+="_";
+}
+while(_4e[this._itemNumPropName]){
+this._itemNumPropName+="_";
+}
+while(_4e[this._reverseRefMap]){
+this._reverseRefMap+="_";
+}
+var _50;
+var _51=_42.identifier;
+if(_51){
+this._itemsByIdentity={};
+this._features["dojo.data.api.Identity"]=_51;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4d=this._arrayOfAllItems[i];
+_50=_4d[_51];
+var _52=_50[0];
+if(!this._itemsByIdentity[_52]){
+this._itemsByIdentity[_52]=_4d;
+}else{
+if(this._jsonFileUrl){
+throw new Error("dojox.data.AndOrReadStore: The json data as specified by: ["+this._jsonFileUrl+"] is malformed. Items within the list have identifier: ["+_51+"]. Value collided: ["+_52+"]");
+}else{
+if(this._jsonData){
+throw new Error("dojox.data.AndOrReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: ["+_51+"]. Value collided: ["+_52+"]");
+}
+}
+}
+}
+}else{
+this._features["dojo.data.api.Identity"]=Number;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4d=this._arrayOfAllItems[i];
+_4d[this._storeRefPropName]=this;
+_4d[this._itemNumPropName]=i;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4d=this._arrayOfAllItems[i];
+for(key in _4d){
+_50=_4d[key];
+for(var j=0;j<_50.length;++j){
+_4f=_50[j];
+if(_4f!==null&&typeof _4f=="object"){
+if(("_type" in _4f)&&("_value" in _4f)){
+var _53=_4f._type;
+var _54=this._datatypeMap[_53];
+if(!_54){
+throw new Error("dojox.data.AndOrReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_53+"'");
+}else{
+if(dojo.isFunction(_54)){
+_50[j]=new _54(_4f._value);
+}else{
+if(dojo.isFunction(_54.deserialize)){
+_50[j]=_54.deserialize(_4f._value);
+}else{
+throw new Error("dojox.data.AndOrReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
+}
+}
+}
+}
+if(_4f._reference){
+var _55=_4f._reference;
+if(!dojo.isObject(_55)){
+_50[j]=this._itemsByIdentity[_55];
+}else{
+for(var k=0;k<this._arrayOfAllItems.length;++k){
+var _56=this._arrayOfAllItems[k];
+var _57=true;
+for(var _58 in _55){
+if(_56[_58]!=_55[_58]){
+_57=false;
+}
+}
+if(_57){
+_50[j]=_56;
+}
+}
+}
+if(this.referenceIntegrity){
+var _59=_50[j];
+if(this.isItem(_59)){
+this._addReferenceToMap(_59,_4d,key);
+}
+}
+}else{
+if(this.isItem(_4f)){
+if(this.referenceIntegrity){
+this._addReferenceToMap(_4f,_4d,key);
+}
+}
+}
+}
+}
+}
+}
+},_addReferenceToMap:function(_5a,_5b,_5c){
+},getIdentity:function(_5d){
+var _5e=this._features["dojo.data.api.Identity"];
+if(_5e===Number){
+return _5d[this._itemNumPropName];
+}else{
+var _5f=_5d[_5e];
+if(_5f){
+return _5f[0];
+}
+}
+return null;
+},fetchItemByIdentity:function(_60){
+if(!this._loadFinished){
+var _61=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_60});
+}else{
+this._loadInProgress=true;
+var _62={url:_61._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache};
+var _63=dojo.xhrGet(_62);
+_63.addCallback(function(_64){
+var _65=_60.scope?_60.scope:dojo.global;
+try{
+_61._getItemsFromLoadedData(_64);
+_61._loadFinished=true;
+_61._loadInProgress=false;
+var _66=_61._getItemByIdentity(_60.identity);
+if(_60.onItem){
+_60.onItem.call(_65,_66);
+}
+_61._handleQueuedFetches();
+}
+catch(error){
+_61._loadInProgress=false;
+if(_60.onError){
+_60.onError.call(_65,error);
+}
+}
+});
+_63.addErrback(function(_67){
+_61._loadInProgress=false;
+if(_60.onError){
+var _68=_60.scope?_60.scope:dojo.global;
+_60.onError.call(_68,_67);
+}
+});
+}
+}else{
+if(this._jsonData){
+_61._getItemsFromLoadedData(_61._jsonData);
+_61._jsonData=null;
+_61._loadFinished=true;
+var _69=_61._getItemByIdentity(_60.identity);
+if(_60.onItem){
+var _6a=_60.scope?_60.scope:dojo.global;
+_60.onItem.call(_6a,_69);
+}
+}
+}
+}else{
+var _69=this._getItemByIdentity(_60.identity);
+if(_60.onItem){
+var _6a=_60.scope?_60.scope:dojo.global;
+_60.onItem.call(_6a,_69);
+}
+}
+},_getItemByIdentity:function(_6b){
+var _6c=null;
+if(this._itemsByIdentity){
+_6c=this._itemsByIdentity[_6b];
+}else{
+_6c=this._arrayOfAllItems[_6b];
+}
+if(_6c===undefined){
+_6c=null;
+}
+return _6c;
+},getIdentityAttributes:function(_6d){
+var _6e=this._features["dojo.data.api.Identity"];
+if(_6e===Number){
+return null;
+}else{
+return [_6e];
+}
+},_forceLoad:function(){
+var _6f=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+var _70={url:_6f._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,sync:true};
+var _71=dojo.xhrGet(_70);
+_71.addCallback(function(_72){
+try{
+if(_6f._loadInProgress!==true&&!_6f._loadFinished){
+_6f._getItemsFromLoadedData(_72);
+_6f._loadFinished=true;
+}else{
+if(_6f._loadInProgress){
+throw new Error("dojox.data.AndOrReadStore: Unable to perform a synchronous load, an async load is in progress.");
+}
+}
+}
+catch(e){
+throw e;
+}
+});
+_71.addErrback(function(_73){
+throw _73;
+});
+}else{
+if(this._jsonData){
+_6f._getItemsFromLoadedData(_6f._jsonData);
+_6f._jsonData=null;
+_6f._loadFinished=true;
+}
+}
+}});
+dojo.extend(dojox.data.AndOrReadStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/AndOrWriteStore.js b/js/dojo/dojox/data/AndOrWriteStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/AndOrWriteStore.js
@@ -0,0 +1,511 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AndOrWriteStore"]){
+dojo._hasResource["dojox.data.AndOrWriteStore"]=true;
+dojo.provide("dojox.data.AndOrWriteStore");
+dojo.require("dojox.data.AndOrReadStore");
+dojo.declare("dojox.data.AndOrWriteStore",dojox.data.AndOrReadStore,{constructor:function(_1){
+this._features["dojo.data.api.Write"]=true;
+this._features["dojo.data.api.Notification"]=true;
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+if(!this._datatypeMap["Date"].serialize){
+this._datatypeMap["Date"].serialize=function(_2){
+return dojo.date.stamp.toISOString(_2,{zulu:true});
+};
+}
+if(_1&&(_1.referenceIntegrity===false)){
+this.referenceIntegrity=false;
+}
+this._saveInProgress=false;
+},referenceIntegrity:true,_assert:function(_3){
+if(!_3){
+throw new Error("assertion failed in ItemFileWriteStore");
+}
+},_getIdentifierAttribute:function(){
+var _4=this.getFeatures()["dojo.data.api.Identity"];
+return _4;
+},newItem:function(_5,_6){
+this._assert(!this._saveInProgress);
+if(!this._loadFinished){
+this._forceLoad();
+}
+if(typeof _5!="object"&&typeof _5!="undefined"){
+throw new Error("newItem() was passed something other than an object");
+}
+var _7=null;
+var _8=this._getIdentifierAttribute();
+if(_8===Number){
+_7=this._arrayOfAllItems.length;
+}else{
+_7=_5[_8];
+if(typeof _7==="undefined"){
+throw new Error("newItem() was not passed an identity for the new item");
+}
+if(dojo.isArray(_7)){
+throw new Error("newItem() was not passed an single-valued identity");
+}
+}
+if(this._itemsByIdentity){
+this._assert(typeof this._itemsByIdentity[_7]==="undefined");
+}
+this._assert(typeof this._pending._newItems[_7]==="undefined");
+this._assert(typeof this._pending._deletedItems[_7]==="undefined");
+var _9={};
+_9[this._storeRefPropName]=this;
+_9[this._itemNumPropName]=this._arrayOfAllItems.length;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_7]=_9;
+_9[_8]=[_7];
+}
+this._arrayOfAllItems.push(_9);
+var _a=null;
+if(_6&&_6.parent&&_6.attribute){
+_a={item:_6.parent,attribute:_6.attribute,oldValue:undefined};
+var _b=this.getValues(_6.parent,_6.attribute);
+if(_b&&_b.length>0){
+var _c=_b.slice(0,_b.length);
+if(_b.length===1){
+_a.oldValue=_b[0];
+}else{
+_a.oldValue=_b.slice(0,_b.length);
+}
+_c.push(_9);
+this._setValueOrValues(_6.parent,_6.attribute,_c,false);
+_a.newValue=this.getValues(_6.parent,_6.attribute);
+}else{
+this._setValueOrValues(_6.parent,_6.attribute,_9,false);
+_a.newValue=_9;
+}
+}else{
+_9[this._rootItemPropName]=true;
+this._arrayOfTopLevelItems.push(_9);
+}
+this._pending._newItems[_7]=_9;
+for(var _d in _5){
+if(_d===this._storeRefPropName||_d===this._itemNumPropName){
+throw new Error("encountered bug in ItemFileWriteStore.newItem");
+}
+var _e=_5[_d];
+if(!dojo.isArray(_e)){
+_e=[_e];
+}
+_9[_d]=_e;
+if(this.referenceIntegrity){
+for(var i=0;i<_e.length;i++){
+var _f=_e[i];
+if(this.isItem(_f)){
+this._addReferenceToMap(_f,_9,_d);
+}
+}
+}
+}
+this.onNew(_9,_a);
+return _9;
+},_removeArrayElement:function(_10,_11){
+var _12=dojo.indexOf(_10,_11);
+if(_12!=-1){
+_10.splice(_12,1);
+return true;
+}
+return false;
+},deleteItem:function(_13){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_13);
+var _14=_13[this._itemNumPropName];
+var _15=this.getIdentity(_13);
+if(this.referenceIntegrity){
+var _16=this.getAttributes(_13);
+if(_13[this._reverseRefMap]){
+_13["backup_"+this._reverseRefMap]=dojo.clone(_13[this._reverseRefMap]);
+}
+dojo.forEach(_16,function(_17){
+dojo.forEach(this.getValues(_13,_17),function(_18){
+if(this.isItem(_18)){
+if(!_13["backupRefs_"+this._reverseRefMap]){
+_13["backupRefs_"+this._reverseRefMap]=[];
+}
+_13["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_18),attr:_17});
+this._removeReferenceFromMap(_18,_13,_17);
+}
+},this);
+},this);
+var _19=_13[this._reverseRefMap];
+if(_19){
+for(var _1a in _19){
+var _1b=null;
+if(this._itemsByIdentity){
+_1b=this._itemsByIdentity[_1a];
+}else{
+_1b=this._arrayOfAllItems[_1a];
+}
+if(_1b){
+for(var _1c in _19[_1a]){
+var _1d=this.getValues(_1b,_1c)||[];
+var _1e=dojo.filter(_1d,function(_1f){
+return !(this.isItem(_1f)&&this.getIdentity(_1f)==_15);
+},this);
+this._removeReferenceFromMap(_13,_1b,_1c);
+if(_1e.length<_1d.length){
+this._setValueOrValues(_1b,_1c,_1e);
+}
+}
+}
+}
+}
+}
+this._arrayOfAllItems[_14]=null;
+_13[this._storeRefPropName]=null;
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_15];
+}
+this._pending._deletedItems[_15]=_13;
+if(_13[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_13);
+}
+this.onDelete(_13);
+return true;
+},setValue:function(_20,_21,_22){
+return this._setValueOrValues(_20,_21,_22,true);
+},setValues:function(_23,_24,_25){
+return this._setValueOrValues(_23,_24,_25,true);
+},unsetAttribute:function(_26,_27){
+return this._setValueOrValues(_26,_27,[],true);
+},_setValueOrValues:function(_28,_29,_2a,_2b){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_28);
+this._assert(dojo.isString(_29));
+this._assert(typeof _2a!=="undefined");
+var _2c=this._getIdentifierAttribute();
+if(_29==_2c){
+throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");
+}
+var _2d=this._getValueOrValues(_28,_29);
+var _2e=this.getIdentity(_28);
+if(!this._pending._modifiedItems[_2e]){
+var _2f={};
+for(var key in _28){
+if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){
+_2f[key]=_28[key];
+}else{
+if(key===this._reverseRefMap){
+_2f[key]=dojo.clone(_28[key]);
+}else{
+_2f[key]=_28[key].slice(0,_28[key].length);
+}
+}
+}
+this._pending._modifiedItems[_2e]=_2f;
+}
+var _30=false;
+if(dojo.isArray(_2a)&&_2a.length===0){
+_30=delete _28[_29];
+_2a=undefined;
+if(this.referenceIntegrity&&_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+for(var i=0;i<_31.length;i++){
+var _32=_31[i];
+if(this.isItem(_32)){
+this._removeReferenceFromMap(_32,_28,_29);
+}
+}
+}
+}else{
+var _33;
+if(dojo.isArray(_2a)){
+var _34=_2a;
+_33=_2a.slice(0,_2a.length);
+}else{
+_33=[_2a];
+}
+if(this.referenceIntegrity){
+if(_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+var map={};
+dojo.forEach(_31,function(_35){
+if(this.isItem(_35)){
+var id=this.getIdentity(_35);
+map[id.toString()]=true;
+}
+},this);
+dojo.forEach(_33,function(_36){
+if(this.isItem(_36)){
+var id=this.getIdentity(_36);
+if(map[id.toString()]){
+delete map[id.toString()];
+}else{
+this._addReferenceToMap(_36,_28,_29);
+}
+}
+},this);
+for(var rId in map){
+var _37;
+if(this._itemsByIdentity){
+_37=this._itemsByIdentity[rId];
+}else{
+_37=this._arrayOfAllItems[rId];
+}
+this._removeReferenceFromMap(_37,_28,_29);
+}
+}else{
+for(var i=0;i<_33.length;i++){
+var _32=_33[i];
+if(this.isItem(_32)){
+this._addReferenceToMap(_32,_28,_29);
+}
+}
+}
+}
+_28[_29]=_33;
+_30=true;
+}
+if(_2b){
+this.onSet(_28,_29,_2d,_2a);
+}
+return _30;
+},_addReferenceToMap:function(_38,_39,_3a){
+var _3b=this.getIdentity(_39);
+var _3c=_38[this._reverseRefMap];
+if(!_3c){
+_3c=_38[this._reverseRefMap]={};
+}
+var _3d=_3c[_3b];
+if(!_3d){
+_3d=_3c[_3b]={};
+}
+_3d[_3a]=true;
+},_removeReferenceFromMap:function(_3e,_3f,_40){
+var _41=this.getIdentity(_3f);
+var _42=_3e[this._reverseRefMap];
+var _43;
+if(_42){
+for(_43 in _42){
+if(_43==_41){
+delete _42[_43][_40];
+if(this._isEmpty(_42[_43])){
+delete _42[_43];
+}
+}
+}
+if(this._isEmpty(_42)){
+delete _3e[this._reverseRefMap];
+}
+}
+},_dumpReferenceMap:function(){
+var i;
+for(i=0;i<this._arrayOfAllItems.length;i++){
+var _44=this._arrayOfAllItems[i];
+if(_44&&_44[this._reverseRefMap]){
+}
+}
+},_getValueOrValues:function(_45,_46){
+var _47=undefined;
+if(this.hasAttribute(_45,_46)){
+var _48=this.getValues(_45,_46);
+if(_48.length==1){
+_47=_48[0];
+}else{
+_47=_48;
+}
+}
+return _47;
+},_flatten:function(_49){
+if(this.isItem(_49)){
+var _4a=_49;
+var _4b=this.getIdentity(_4a);
+var _4c={_reference:_4b};
+return _4c;
+}else{
+if(typeof _49==="object"){
+for(var _4d in this._datatypeMap){
+var _4e=this._datatypeMap[_4d];
+if(dojo.isObject(_4e)&&!dojo.isFunction(_4e)){
+if(_49 instanceof _4e.type){
+if(!_4e.serialize){
+throw new Error("ItemFileWriteStore: No serializer defined for type mapping: ["+_4d+"]");
+}
+return {_type:_4d,_value:_4e.serialize(_49)};
+}
+}else{
+if(_49 instanceof _4e){
+return {_type:_4d,_value:_49.toString()};
+}
+}
+}
+}
+return _49;
+}
+},_getNewFileContentString:function(){
+var _4f={};
+var _50=this._getIdentifierAttribute();
+if(_50!==Number){
+_4f.identifier=_50;
+}
+if(this._labelAttr){
+_4f.label=this._labelAttr;
+}
+_4f.items=[];
+for(var i=0;i<this._arrayOfAllItems.length;++i){
+var _51=this._arrayOfAllItems[i];
+if(_51!==null){
+var _52={};
+for(var key in _51){
+if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){
+var _53=key;
+var _54=this.getValues(_51,_53);
+if(_54.length==1){
+_52[_53]=this._flatten(_54[0]);
+}else{
+var _55=[];
+for(var j=0;j<_54.length;++j){
+_55.push(this._flatten(_54[j]));
+_52[_53]=_55;
+}
+}
+}
+}
+_4f.items.push(_52);
+}
+}
+var _56=true;
+return dojo.toJson(_4f,_56);
+},_isEmpty:function(_57){
+var _58=true;
+if(dojo.isObject(_57)){
+var i;
+for(i in _57){
+_58=false;
+break;
+}
+}else{
+if(dojo.isArray(_57)){
+if(_57.length>0){
+_58=false;
+}
+}
+}
+return _58;
+},save:function(_59){
+this._assert(!this._saveInProgress);
+this._saveInProgress=true;
+var _5a=this;
+var _5b=function(){
+_5a._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+_5a._saveInProgress=false;
+if(_59&&_59.onComplete){
+var _5c=_59.scope||dojo.global;
+_59.onComplete.call(_5c);
+}
+};
+var _5d=function(){
+_5a._saveInProgress=false;
+if(_59&&_59.onError){
+var _5e=_59.scope||dojo.global;
+_59.onError.call(_5e);
+}
+};
+if(this._saveEverything){
+var _5f=this._getNewFileContentString();
+this._saveEverything(_5b,_5d,_5f);
+}
+if(this._saveCustom){
+this._saveCustom(_5b,_5d);
+}
+if(!this._saveEverything&&!this._saveCustom){
+_5b();
+}
+},revert:function(){
+this._assert(!this._saveInProgress);
+var _60;
+for(_60 in this._pending._modifiedItems){
+var _61=this._pending._modifiedItems[_60];
+var _62=null;
+if(this._itemsByIdentity){
+_62=this._itemsByIdentity[_60];
+}else{
+_62=this._arrayOfAllItems[_60];
+}
+_61[this._storeRefPropName]=this;
+for(key in _62){
+delete _62[key];
+}
+dojo.mixin(_62,_61);
+}
+var _63;
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+_63[this._storeRefPropName]=this;
+var _64=_63[this._itemNumPropName];
+if(_63["backup_"+this._reverseRefMap]){
+_63[this._reverseRefMap]=_63["backup_"+this._reverseRefMap];
+delete _63["backup_"+this._reverseRefMap];
+}
+this._arrayOfAllItems[_64]=_63;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_60]=_63;
+}
+if(_63[this._rootItemPropName]){
+this._arrayOfTopLevelItems.push(_63);
+}
+}
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+if(_63["backupRefs_"+this._reverseRefMap]){
+dojo.forEach(_63["backupRefs_"+this._reverseRefMap],function(_65){
+var _66;
+if(this._itemsByIdentity){
+_66=this._itemsByIdentity[_65.id];
+}else{
+_66=this._arrayOfAllItems[_65.id];
+}
+this._addReferenceToMap(_66,_63,_65.attr);
+},this);
+delete _63["backupRefs_"+this._reverseRefMap];
+}
+}
+for(_60 in this._pending._newItems){
+var _67=this._pending._newItems[_60];
+_67[this._storeRefPropName]=null;
+this._arrayOfAllItems[_67[this._itemNumPropName]]=null;
+if(_67[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_67);
+}
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_60];
+}
+}
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+return true;
+},isDirty:function(_68){
+if(_68){
+var _69=this.getIdentity(_68);
+return new Boolean(this._pending._newItems[_69]||this._pending._modifiedItems[_69]||this._pending._deletedItems[_69]).valueOf();
+}else{
+if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){
+return true;
+}
+return false;
+}
+},onSet:function(_6a,_6b,_6c,_6d){
+},onNew:function(_6e,_6f){
+},onDelete:function(_70){
+},close:function(_71){
+if(this.clearOnClose){
+if(!this.isDirty()){
+this.inherited(arguments);
+}else{
+throw new Error("dojox.data.AndOrWriteStore: There are unsaved changes present in the store. Please save or revert the changes before invoking close.");
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/data/AppStore.js b/js/dojo/dojox/data/AppStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/AppStore.js
@@ -0,0 +1,550 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AppStore"]){
+dojo._hasResource["dojox.data.AppStore"]=true;
+dojo.provide("dojox.data.AppStore");
+dojo.require("dojox.atom.io.Connection");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.experimental("dojox.data.AppStore");
+dojo.declare("dojox.data.AppStore",null,{url:"",urlPreventCache:false,xmethod:false,_atomIO:null,_feed:null,_requests:null,_processing:null,_updates:null,_adds:null,_deletes:null,constructor:function(_1){
+if(_1&&_1.url){
+this.url=_1.url;
+}
+if(_1&&_1.urlPreventCache){
+this.urlPreventCache=_1.urlPreventCache;
+}
+if(!this.url){
+throw new Error("A URL is required to instantiate an APP Store object");
+}
+},_setFeed:function(_2,_3){
+this._feed=_2;
+var i;
+for(i=0;i<this._feed.entries.length;i++){
+this._feed.entries[i].store=this;
+}
+if(this._requests){
+for(i=0;i<this._requests.length;i++){
+var _4=this._requests[i];
+if(_4.request&&_4.fh&&_4.eh){
+this._finishFetchItems(_4.request,_4.fh,_4.eh);
+}else{
+if(_4.clear){
+this._feed=null;
+}else{
+if(_4.add){
+this._feed.addEntry(_4.add);
+}else{
+if(_4.remove){
+this._feed.removeEntry(_4.remove);
+}
+}
+}
+}
+}
+}
+this._requests=null;
+},_getAllItems:function(){
+var _5=[];
+for(var i=0;i<this._feed.entries.length;i++){
+_5.push(this._feed.entries[i]);
+}
+return _5;
+},_assertIsItem:function(_6){
+if(!this.isItem(_6)){
+throw new Error("This error message is provided when a function is called in the following form: "+"getAttribute(argument, attributeName). The argument variable represents the member "+"or owner of the object. The error is created when an item that does not belong "+"to this store is specified as an argument.");
+}
+},_assertIsAttribute:function(_7){
+if(typeof _7!=="string"){
+throw new Error("The attribute argument must be a string. The error is created "+"when a different type of variable is specified such as an array or object.");
+}
+for(var _8 in dojox.atom.io.model._actions){
+if(_8==_7){
+return true;
+}
+}
+return false;
+},_addUpdate:function(_9){
+if(!this._updates){
+this._updates=[_9];
+}else{
+this._updates.push(_9);
+}
+},getValue:function(_a,_b,_c){
+var _d=this.getValues(_a,_b);
+return (_d.length>0)?_d[0]:_c;
+},getValues:function(_e,_f){
+this._assertIsItem(_e);
+var _10=this._assertIsAttribute(_f);
+if(_10){
+if((_f==="author"||_f==="contributor"||_f==="link")&&_e[_f+"s"]){
+return _e[_f+"s"];
+}
+if(_f==="category"&&_e.categories){
+return _e.categories;
+}
+if(_e[_f]){
+_e=_e[_f];
+if(_e.declaredClass=="dojox.atom.io.model.Content"){
+return [_e.value];
+}
+return [_e];
+}
+}
+return [];
+},getAttributes:function(_11){
+this._assertIsItem(_11);
+var _12=[];
+for(var key in dojox.atom.io.model._actions){
+if(this.hasAttribute(_11,key)){
+_12.push(key);
+}
+}
+return _12;
+},hasAttribute:function(_13,_14){
+return this.getValues(_13,_14).length>0;
+},containsValue:function(_15,_16,_17){
+var _18=undefined;
+if(typeof _17==="string"){
+_18=dojo.data.util.filter.patternToRegExp(_17,false);
+}
+return this._containsValue(_15,_16,_17,_18);
+},_containsValue:function(_19,_1a,_1b,_1c,_1d){
+var _1e=this.getValues(_19,_1a);
+for(var i=0;i<_1e.length;++i){
+var _1f=_1e[i];
+if(typeof _1f==="string"&&_1c){
+if(_1d){
+_1f=_1f.replace(new RegExp(/^\s+/),"");
+_1f=_1f.replace(new RegExp(/\s+$/),"");
+}
+_1f=_1f.replace(/\r|\n|\r\n/g,"");
+return (_1f.match(_1c)!==null);
+}else{
+if(_1b===_1f){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_20){
+return _20&&_20.store&&_20.store===this;
+},isItemLoaded:function(_21){
+return this.isItem(_21);
+},loadItem:function(_22){
+this._assertIsItem(_22.item);
+},_fetchItems:function(_23,_24,_25){
+if(this._feed){
+this._finishFetchItems(_23,_24,_25);
+}else{
+var _26=false;
+if(!this._requests){
+this._requests=[];
+_26=true;
+}
+this._requests.push({request:_23,fh:_24,eh:_25});
+if(_26){
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,this._setFeed,null,this);
+}
+}
+},_finishFetchItems:function(_27,_28,_29){
+var _2a=null;
+var _2b=this._getAllItems();
+if(_27.query){
+var _2c=_27.queryOptions?_27.queryOptions.ignoreCase:false;
+_2a=[];
+var _2d={};
+var key;
+var _2e;
+for(key in _27.query){
+_2e=_27.query[key]+"";
+if(typeof _2e==="string"){
+_2d[key]=dojo.data.util.filter.patternToRegExp(_2e,_2c);
+}
+}
+for(var i=0;i<_2b.length;++i){
+var _2f=true;
+var _30=_2b[i];
+for(key in _27.query){
+_2e=_27.query[key]+"";
+if(!this._containsValue(_30,key,_2e,_2d[key],_27.trim)){
+_2f=false;
+}
+}
+if(_2f){
+_2a.push(_30);
+}
+}
+}else{
+if(_2b.length>0){
+_2a=_2b.slice(0,_2b.length);
+}
+}
+try{
+_28(_2a,_27);
+}
+catch(e){
+_29(e,_27);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};
+},close:function(_31){
+this._feed=null;
+},getLabel:function(_32){
+if(this.isItem(_32)){
+return this.getValue(_32,"title","No Title");
+}
+return undefined;
+},getLabelAttributes:function(_33){
+return ["title"];
+},getIdentity:function(_34){
+this._assertIsItem(_34);
+return this.getValue(_34,"id");
+},getIdentityAttributes:function(_35){
+return ["id"];
+},fetchItemByIdentity:function(_36){
+this._fetchItems({query:{id:_36.identity},onItem:_36.onItem,scope:_36.scope},function(_37,_38){
+var _39=_38.scope;
+if(!_39){
+_39=dojo.global;
+}
+if(_37.length<1){
+_38.onItem.call(_39,null);
+}else{
+_38.onItem.call(_39,_37[0]);
+}
+},_36.onError);
+},newItem:function(_3a){
+var _3b=new dojox.atom.io.model.Entry();
+var _3c=null;
+var _3d=null;
+var i;
+for(var key in _3a){
+if(this._assertIsAttribute(key)){
+_3c=_3a[key];
+switch(key){
+case "link":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addLink(_3d.href,_3d.rel,_3d.hrefLang,_3d.title,_3d.type);
+}
+break;
+case "author":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addAuthor(_3d.name,_3d.email,_3d.uri);
+}
+break;
+case "contributor":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addContributor(_3d.name,_3d.email,_3d.uri);
+}
+break;
+case "category":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addCategory(_3d.scheme,_3d.term,_3d.label);
+}
+break;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_3b[key]=_3c;
+break;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_3b[key]=dojox.atom.io.model.util.createDate(_3c);
+break;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_3b[key]=new dojox.atom.io.model.Content(key);
+_3b[key].value=_3c;
+break;
+default:
+_3b[key]=_3c;
+break;
+}
+}
+}
+_3b.store=this;
+_3b.isDirty=true;
+if(!this._adds){
+this._adds=[_3b];
+}else{
+this._adds.push(_3b);
+}
+if(this._feed){
+this._feed.addEntry(_3b);
+}else{
+if(this._requests){
+this._requests.push({add:_3b});
+}else{
+this._requests=[{add:_3b}];
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+}
+}
+return true;
+},deleteItem:function(_3e){
+this._assertIsItem(_3e);
+if(!this._deletes){
+this._deletes=[_3e];
+}else{
+this._deletes.push(_3e);
+}
+if(this._feed){
+this._feed.removeEntry(_3e);
+}else{
+if(this._requests){
+this._requests.push({remove:_3e});
+}else{
+this._requests=[{remove:_3e}];
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+}
+}
+_3e=null;
+return true;
+},setValue:function(_3f,_40,_41){
+this._assertIsItem(_3f);
+var _42={item:_3f};
+if(this._assertIsAttribute(_40)){
+switch(_40){
+case "link":
+_42.links=_3f.links;
+this._addUpdate(_42);
+_3f.links=null;
+_3f.addLink(_41.href,_41.rel,_41.hrefLang,_41.title,_41.type);
+_3f.isDirty=true;
+return true;
+case "author":
+_42.authors=_3f.authors;
+this._addUpdate(_42);
+_3f.authors=null;
+_3f.addAuthor(_41.name,_41.email,_41.uri);
+_3f.isDirty=true;
+return true;
+case "contributor":
+_42.contributors=_3f.contributors;
+this._addUpdate(_42);
+_3f.contributors=null;
+_3f.addContributor(_41.name,_41.email,_41.uri);
+_3f.isDirty=true;
+return true;
+case "category":
+_42.categories=_3f.categories;
+this._addUpdate(_42);
+_3f.categories=null;
+_3f.addCategory(_41.scheme,_41.term,_41.label);
+_3f.isDirty=true;
+return true;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=_41;
+_3f.isDirty=true;
+return true;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=dojox.atom.io.model.util.createDate(_41);
+_3f.isDirty=true;
+return true;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=new dojox.atom.io.model.Content(_40);
+_3f[_40].value=_41;
+_3f.isDirty=true;
+return true;
+default:
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=_41;
+_3f.isDirty=true;
+return true;
+}
+}
+return false;
+},setValues:function(_43,_44,_45){
+if(_45.length===0){
+return this.unsetAttribute(_43,_44);
+}
+this._assertIsItem(_43);
+var _46={item:_43};
+var _47;
+var i;
+if(this._assertIsAttribute(_44)){
+switch(_44){
+case "link":
+_46.links=_43.links;
+_43.links=null;
+for(i in _45){
+_47=_45[i];
+_43.addLink(_47.href,_47.rel,_47.hrefLang,_47.title,_47.type);
+}
+_43.isDirty=true;
+return true;
+case "author":
+_46.authors=_43.authors;
+_43.authors=null;
+for(i in _45){
+_47=_45[i];
+_43.addAuthor(_47.name,_47.email,_47.uri);
+}
+_43.isDirty=true;
+return true;
+case "contributor":
+_46.contributors=_43.contributors;
+_43.contributors=null;
+for(i in _45){
+_47=_45[i];
+_43.addContributor(_47.name,_47.email,_47.uri);
+}
+_43.isDirty=true;
+return true;
+case "categories":
+_46.categories=_43.categories;
+_43.categories=null;
+for(i in _45){
+_47=_45[i];
+_43.addCategory(_47.scheme,_47.term,_47.label);
+}
+_43.isDirty=true;
+return true;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_46[_44]=_43[_44];
+_43[_44]=_45[0];
+_43.isDirty=true;
+return true;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_46[_44]=_43[_44];
+_43[_44]=dojox.atom.io.model.util.createDate(_45[0]);
+_43.isDirty=true;
+return true;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_46[_44]=_43[_44];
+_43[_44]=new dojox.atom.io.model.Content(_44);
+_43[_44].values[0]=_45[0];
+_43.isDirty=true;
+return true;
+default:
+_46[_44]=_43[_44];
+_43[_44]=_45[0];
+_43.isDirty=true;
+return true;
+}
+}
+this._addUpdate(_46);
+return false;
+},unsetAttribute:function(_48,_49){
+this._assertIsItem(_48);
+if(this._assertIsAttribute(_49)){
+if(_48[_49]!==null){
+var _4a={item:_48};
+switch(_49){
+case "author":
+case "contributor":
+case "link":
+_4a[_49+"s"]=_48[_49+"s"];
+break;
+case "category":
+_4a.categories=_48.categories;
+break;
+default:
+_4a[_49]=_48[_49];
+break;
+}
+_48.isDirty=true;
+_48[_49]=null;
+this._addUpdate(_4a);
+return true;
+}
+}
+return false;
+},save:function(_4b){
+var i;
+for(i in this._adds){
+this._atomIO.addEntry(this._adds[i],null,function(){
+},_4b.onError,false,_4b.scope);
+}
+this._adds=null;
+for(i in this._updates){
+this._atomIO.updateEntry(this._updates[i].item,function(){
+},_4b.onError,false,this.xmethod,_4b.scope);
+}
+this._updates=null;
+for(i in this._deletes){
+this._atomIO.removeEntry(this._deletes[i],function(){
+},_4b.onError,this.xmethod,_4b.scope);
+}
+this._deletes=null;
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+if(_4b.onComplete){
+var _4c=_4b.scope||dojo.global;
+_4b.onComplete.call(_4c);
+}
+},revert:function(){
+var i;
+for(i in this._adds){
+this._feed.removeEntry(this._adds[i]);
+}
+this._adds=null;
+var _4d,_4e,key;
+for(i in this._updates){
+_4d=this._updates[i];
+_4e=_4d.item;
+for(key in _4d){
+if(key!=="item"){
+_4e[key]=_4d[key];
+}
+}
+}
+this._updates=null;
+for(i in this._deletes){
+this._feed.addEntry(this._deletes[i]);
+}
+this._deletes=null;
+return true;
+},isDirty:function(_4f){
+if(_4f){
+this._assertIsItem(_4f);
+return _4f.isDirty?true:false;
+}
+return (this._adds!==null||this._updates!==null);
+}});
+dojo.extend(dojox.data.AppStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/AtomReadStore.js b/js/dojo/dojox/data/AtomReadStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/AtomReadStore.js
@@ -0,0 +1,340 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AtomReadStore"]){
+dojo._hasResource["dojox.data.AtomReadStore"]=true;
+dojo.provide("dojox.data.AtomReadStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.date.stamp");
+dojo.experimental("dojox.data.AtomReadStore");
+dojo.declare("dojox.data.AtomReadStore",null,{constructor:function(_1){
+if(_1){
+this.url=_1.url;
+this.rewriteUrl=_1.rewriteUrl;
+this.label=_1.label||this.label;
+this.sendQuery=(_1.sendQuery||_1.sendquery||this.sendQuery);
+this.unescapeHTML=_1.unescapeHTML;
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+if(!this.url){
+throw new Error("AtomReadStore: a URL must be specified when creating the data store");
+}
+},url:"",label:"title",sendQuery:false,unescapeHTML:false,urlPreventCache:false,getValue:function(_2,_3,_4){
+this._assertIsItem(_2);
+this._assertIsAttribute(_3);
+this._initItem(_2);
+_3=_3.toLowerCase();
+if(!_2._attribs[_3]&&!_2._parsed){
+this._parseItem(_2);
+_2._parsed=true;
+}
+var _5=_2._attribs[_3];
+if(!_5&&_3=="summary"){
+var _6=this.getValue(_2,"content");
+var _7=new RegExp("/(<([^>]+)>)/g","i");
+var _8=_6.text.replace(_7,"");
+_5={text:_8.substring(0,Math.min(400,_8.length)),type:"text"};
+_2._attribs[_3]=_5;
+}
+if(_5&&this.unescapeHTML){
+if((_3=="content"||_3=="summary"||_3=="subtitle")&&!_2["_"+_3+"Escaped"]){
+_5.text=this._unescapeHTML(_5.text);
+_2["_"+_3+"Escaped"]=true;
+}
+}
+return _5?dojo.isArray(_5)?_5[0]:_5:_4;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+this._initItem(_9);
+_a=_a.toLowerCase();
+if(!_9._attribs[_a]){
+this._parseItem(_9);
+}
+var _b=_9._attribs[_a];
+return _b?((_b.length!==undefined&&typeof (_b)!=="string")?_b:[_b]):undefined;
+},getAttributes:function(_c){
+this._assertIsItem(_c);
+if(!_c._attribs){
+this._initItem(_c);
+this._parseItem(_c);
+}
+var _d=[];
+for(var x in _c._attribs){
+_d.push(x);
+}
+return _d;
+},hasAttribute:function(_e,_f){
+return (this.getValue(_e,_f)!==undefined);
+},containsValue:function(_10,_11,_12){
+var _13=this.getValues(_10,_11);
+for(var i=0;i<_13.length;i++){
+if((typeof _12==="string")){
+if(_13[i].toString&&_13[i].toString()===_12){
+return true;
+}
+}else{
+if(_13[i]===_12){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_14){
+if(_14&&_14.element&&_14.store&&_14.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_15){
+return this.isItem(_15);
+},loadItem:function(_16){
+},getFeatures:function(){
+var _17={"dojo.data.api.Read":true};
+return _17;
+},getLabel:function(_18){
+if((this.label!=="")&&this.isItem(_18)){
+var _19=this.getValue(_18,this.label);
+if(_19&&_19.text){
+return _19.text;
+}else{
+if(_19){
+return _19.toString();
+}else{
+return undefined;
+}
+}
+}
+return undefined;
+},getLabelAttributes:function(_1a){
+if(this.label!==""){
+return [this.label];
+}
+return null;
+},getFeedValue:function(_1b,_1c){
+var _1d=this.getFeedValues(_1b,_1c);
+if(dojo.isArray(_1d)){
+return _1d[0];
+}
+return _1d;
+},getFeedValues:function(_1e,_1f){
+if(!this.doc){
+return _1f;
+}
+if(!this._feedMetaData){
+this._feedMetaData={element:this.doc.getElementsByTagName("feed")[0],store:this,_attribs:{}};
+this._parseItem(this._feedMetaData);
+}
+return this._feedMetaData._attribs[_1e]||_1f;
+},_initItem:function(_20){
+if(!_20._attribs){
+_20._attribs={};
+}
+},_fetchItems:function(_21,_22,_23){
+var url=this._getFetchUrl(_21);
+if(!url){
+_23(new Error("No URL specified."));
+return;
+}
+var _24=(!this.sendQuery?_21:null);
+var _25=this;
+var _26=function(_27){
+_25.doc=_27;
+var _28=_25._getItems(_27,_24);
+var _29=_21.query;
+if(_29){
+if(_29.id){
+_28=dojo.filter(_28,function(_2a){
+return (_25.getValue(_2a,"id")==_29.id);
+});
+}else{
+if(_29.category){
+_28=dojo.filter(_28,function(_2b){
+var _2c=_25.getValues(_2b,"category");
+if(!_2c){
+return false;
+}
+return dojo.some(_2c,"return item.term=='"+_29.category+"'");
+});
+}
+}
+}
+if(_28&&_28.length>0){
+_22(_28,_21);
+}else{
+_22([],_21);
+}
+};
+if(this.doc){
+_26(this.doc);
+}else{
+var _2d={url:url,handleAs:"xml",preventCache:this.urlPreventCache};
+var _2e=dojo.xhrGet(_2d);
+_2e.addCallback(_26);
+_2e.addErrback(function(_2f){
+_23(_2f,_21);
+});
+}
+},_getFetchUrl:function(_30){
+if(!this.sendQuery){
+return this.url;
+}
+var _31=_30.query;
+if(!_31){
+return this.url;
+}
+if(dojo.isString(_31)){
+return this.url+_31;
+}
+var _32="";
+for(var _33 in _31){
+var _34=_31[_33];
+if(_34){
+if(_32){
+_32+="&";
+}
+_32+=(_33+"="+_34);
+}
+}
+if(!_32){
+return this.url;
+}
+var _35=this.url;
+if(_35.indexOf("?")<0){
+_35+="?";
+}else{
+_35+="&";
+}
+return _35+_32;
+},_getItems:function(_36,_37){
+if(this._items){
+return this._items;
+}
+var _38=[];
+var _39=[];
+if(_36.childNodes.length<1){
+this._items=_38;
+return _38;
+}
+var _3a=dojo.filter(_36.childNodes,"return item.tagName && item.tagName.toLowerCase() == 'feed'");
+var _3b=_37.query;
+if(!_3a||_3a.length!=1){
+return _38;
+}
+_39=dojo.filter(_3a[0].childNodes,"return item.tagName && item.tagName.toLowerCase() == 'entry'");
+if(_37.onBegin){
+_37.onBegin(_39.length,this.sendQuery?_37:{});
+}
+for(var i=0;i<_39.length;i++){
+var _3c=_39[i];
+if(_3c.nodeType!=1){
+continue;
+}
+_38.push(this._getItem(_3c));
+}
+this._items=_38;
+return _38;
+},close:function(_3d){
+},_getItem:function(_3e){
+return {element:_3e,store:this};
+},_parseItem:function(_3f){
+var _40=_3f._attribs;
+var _41=this;
+var _42,_43;
+function _44(_45){
+var txt=_45.textContent||_45.innerHTML||_45.innerXML;
+if(!txt&&_45.childNodes[0]){
+var _46=_45.childNodes[0];
+if(_46&&(_46.nodeType==3||_46.nodeType==4)){
+txt=_45.childNodes[0].nodeValue;
+}
+}
+return txt;
+};
+function _47(_48){
+return {text:_44(_48),type:_48.getAttribute("type")};
+};
+dojo.forEach(_3f.element.childNodes,function(_49){
+var _4a=_49.tagName?_49.tagName.toLowerCase():"";
+switch(_4a){
+case "title":
+_40[_4a]={text:_44(_49),type:_49.getAttribute("type")};
+break;
+case "subtitle":
+case "summary":
+case "content":
+_40[_4a]=_47(_49);
+break;
+case "author":
+var _4b,_4c;
+dojo.forEach(_49.childNodes,function(_4d){
+if(!_4d.tagName){
+return;
+}
+switch(_4d.tagName.toLowerCase()){
+case "name":
+_4b=_4d;
+break;
+case "uri":
+_4c=_4d;
+break;
+}
+});
+var _4e={};
+if(_4b&&_4b.length==1){
+_4e.name=_44(_4b[0]);
+}
+if(_4c&&_4c.length==1){
+_4e.uri=_44(_4c[0]);
+}
+_40[_4a]=_4e;
+break;
+case "id":
+_40[_4a]=_44(_49);
+break;
+case "updated":
+_40[_4a]=dojo.date.stamp.fromISOString(_44(_49));
+break;
+case "published":
+_40[_4a]=dojo.date.stamp.fromISOString(_44(_49));
+break;
+case "category":
+if(!_40[_4a]){
+_40[_4a]=[];
+}
+_40[_4a].push({scheme:_49.getAttribute("scheme"),term:_49.getAttribute("term")});
+break;
+case "link":
+if(!_40[_4a]){
+_40[_4a]=[];
+}
+var _4f={rel:_49.getAttribute("rel"),href:_49.getAttribute("href"),type:_49.getAttribute("type")};
+_40[_4a].push(_4f);
+if(_4f.rel=="alternate"){
+_40["alternate"]=_4f;
+}
+break;
+default:
+break;
+}
+});
+},_unescapeHTML:function(_50){
+_50=_50.replace(/&#8217;/m,"'").replace(/&#8243;/m,"\"").replace(/&#60;/m,">").replace(/&#62;/m,"<").replace(/&#38;/m,"&");
+return _50;
+},_assertIsItem:function(_51){
+if(!this.isItem(_51)){
+throw new Error("dojox.data.AtomReadStore: Invalid item argument.");
+}
+},_assertIsAttribute:function(_52){
+if(typeof _52!=="string"){
+throw new Error("dojox.data.AtomReadStore: Invalid attribute argument.");
+}
+}});
+dojo.extend(dojox.data.AtomReadStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/CdfStore.js b/js/dojo/dojox/data/CdfStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/CdfStore.js
@@ -0,0 +1,318 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CdfStore"]){
+dojo._hasResource["dojox.data.CdfStore"]=true;
+dojo.provide("dojox.data.CdfStore");
+dojo.require("dojo.data.util.sorter");
+dojox.data.ASYNC_MODE=0;
+dojox.data.SYNC_MODE=1;
+dojo.declare("dojox.data.CdfStore",null,{identity:"jsxid",url:"",xmlStr:"",data:null,label:"",mode:dojox.data.ASYNC_MODE,constructor:function(_1){
+if(_1){
+this.url=_1.url;
+this.xmlStr=_1.xmlStr||_1.str;
+if(_1.data){
+this.xmlStr=this._makeXmlString(_1.data);
+}
+this.identity=_1.identity||this.identity;
+this.label=_1.label||this.label;
+this.mode=_1.mode!==undefined?_1.mode:this.mode;
+}
+this._modifiedItems={};
+this.byId=this.fetchItemByIdentity;
+},getValue:function(_2,_3,_4){
+return _2.getAttribute(_3)||_4;
+},getValues:function(_5,_6){
+var v=this.getValue(_5,_6,[]);
+return dojo.isArray(v)?v:[v];
+},getAttributes:function(_7){
+return _7.getAttributeNames();
+},hasAttribute:function(_8,_9){
+return (this.getValue(_8,_9)!==undefined);
+},hasProperty:function(_a,_b){
+return this.hasAttribute(_a,_b);
+},containsValue:function(_c,_d,_e){
+var _f=this.getValues(_c,_d);
+for(var i=0;i<_f.length;i++){
+if(_f[i]===null){
+continue;
+}
+if((typeof _e==="string")){
+if(_f[i].toString&&_f[i].toString()===_e){
+return true;
+}
+}else{
+if(_f[i]===_e){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_10){
+if(_10.getClass&&_10.getClass().equals(jsx3.xml.Entity.jsxclass)){
+return true;
+}
+return false;
+},isItemLoaded:function(_11){
+return this.isItem(_11);
+},loadItem:function(_12){
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};
+},getLabel:function(_13){
+if((this.label!=="")&&this.isItem(_13)){
+var _14=this.getValue(_13,this.label);
+if(_14){
+return _14.toString();
+}
+}
+return undefined;
+},getLabelAttributes:function(_15){
+if(this.label!==""){
+return [this.label];
+}
+return null;
+},fetch:function(_16){
+_16=_16||{};
+if(!_16.store){
+_16.store=this;
+}
+if(_16.mode!==undefined){
+this.mode=_16.mode;
+}
+var _17=this;
+var _18=function(_19){
+if(_16.onError){
+var _1a=_16.scope||dojo.global;
+_16.onError.call(_1a,_19,_16);
+}else{
+console.error("cdfStore Error:",_19);
+}
+};
+var _1b=function(_1c,_1d){
+_1d=_1d||_16;
+var _1e=_1d.abort||null;
+var _1f=false;
+var _20=_1d.start?_1d.start:0;
+var _21=(_1d.count&&(_1d.count!==Infinity))?(_20+_1d.count):_1c.length;
+_1d.abort=function(){
+_1f=true;
+if(_1e){
+_1e.call(_1d);
+}
+};
+var _22=_1d.scope||dojo.global;
+if(!_1d.store){
+_1d.store=_17;
+}
+if(_1d.onBegin){
+_1d.onBegin.call(_22,_1c.length,_1d);
+}
+if(_1d.sort){
+_1c.sort(dojo.data.util.sorter.createSortFunction(_1d.sort,_17));
+}
+if(_1d.onItem){
+for(var i=_20;(i<_1c.length)&&(i<_21);++i){
+var _23=_1c[i];
+if(!_1f){
+_1d.onItem.call(_22,_23,_1d);
+}
+}
+}
+if(_1d.onComplete&&!_1f){
+if(!_1d.onItem){
+_1c=_1c.slice(_20,_21);
+if(_1d.byId){
+_1c=_1c[0];
+}
+}
+_1d.onComplete.call(_22,_1c,_1d);
+}else{
+_1c=_1c.slice(_20,_21);
+if(_1d.byId){
+_1c=_1c[0];
+}
+}
+return _1c;
+};
+if(!this.url&&!this.data&&!this.xmlStr){
+_18(new Error("No URL or data specified."));
+return false;
+}
+var _24=_16||"*";
+if(this.mode==dojox.data.SYNC_MODE){
+var res=this._loadCDF();
+if(res instanceof Error){
+if(_16.onError){
+_16.onError.call(_16.scope||dojo.global,res,_16);
+}else{
+console.error("CdfStore Error:",res);
+}
+return res;
+}
+this.cdfDoc=res;
+var _25=this._getItems(this.cdfDoc,_24);
+if(_25&&_25.length>0){
+_25=_1b(_25,_16);
+}else{
+_25=_1b([],_16);
+}
+return _25;
+}else{
+var dfd=this._loadCDF();
+dfd.addCallbacks(dojo.hitch(this,function(_26){
+var _27=this._getItems(this.cdfDoc,_24);
+if(_27&&_27.length>0){
+_1b(_27,_16);
+}else{
+_1b([],_16);
+}
+}),dojo.hitch(this,function(err){
+_18(err,_16);
+}));
+return dfd;
+}
+},_loadCDF:function(){
+var dfd=new dojo.Deferred();
+if(this.cdfDoc){
+if(this.mode==dojox.data.SYNC_MODE){
+return this.cdfDoc;
+}else{
+setTimeout(dojo.hitch(this,function(){
+dfd.callback(this.cdfDoc);
+}),0);
+return dfd;
+}
+}
+this.cdfDoc=jsx3.xml.CDF.Document.newDocument();
+this.cdfDoc.subscribe("response",this,function(evt){
+dfd.callback(this.cdfDoc);
+});
+this.cdfDoc.subscribe("error",this,function(err){
+dfd.errback(err);
+});
+this.cdfDoc.setAsync(!this.mode);
+if(this.url){
+this.cdfDoc.load(this.url);
+}else{
+if(this.xmlStr){
+this.cdfDoc.loadXML(this.xmlStr);
+if(this.cdfDoc.getError().code){
+return new Error(this.cdfDoc.getError().description);
+}
+}
+}
+if(this.mode==dojox.data.SYNC_MODE){
+return this.cdfDoc;
+}else{
+return dfd;
+}
+},_getItems:function(_28,_29){
+var itr=_28.selectNodes(_29.query,false,1);
+var _2a=[];
+while(itr.hasNext()){
+_2a.push(itr.next());
+}
+return _2a;
+},close:function(_2b){
+},newItem:function(_2c,_2d){
+_2c=(_2c||{});
+if(_2c.tagName){
+if(_2c.tagName!="record"){
+console.warn("Only record inserts are supported at this time");
+}
+delete _2c.tagName;
+}
+_2c.jsxid=_2c.jsxid||this.cdfDoc.getKey();
+if(this.isItem(_2d)){
+_2d=this.getIdentity(_2d);
+}
+var _2e=this.cdfDoc.insertRecord(_2c,_2d);
+this._makeDirty(_2e);
+return _2e;
+},deleteItem:function(_2f){
+this.cdfDoc.deleteRecord(this.getIdentity(_2f));
+this._makeDirty(_2f);
+return true;
+},setValue:function(_30,_31,_32){
+this._makeDirty(_30);
+_30.setAttribute(_31,_32);
+return true;
+},setValues:function(_33,_34,_35){
+this._makeDirty(_33);
+console.warn("cdfStore.setValues only partially implemented.");
+return _33.setAttribute(_34,_35);
+},unsetAttribute:function(_36,_37){
+this._makeDirty(_36);
+_36.removeAttribute(_37);
+return true;
+},revert:function(){
+delete this.cdfDoc;
+this._modifiedItems={};
+return true;
+},isDirty:function(_38){
+if(_38){
+return !!this._modifiedItems[this.getIdentity(_38)];
+}else{
+var _39=false;
+for(var nm in this._modifiedItems){
+_39=true;
+break;
+}
+return _39;
+}
+},_makeDirty:function(_3a){
+var id=this.getIdentity(_3a);
+this._modifiedItems[id]=_3a;
+},_makeXmlString:function(obj){
+var _3b=function(obj,_3c){
+var _3d="";
+var nm;
+if(dojo.isArray(obj)){
+for(var i=0;i<obj.length;i++){
+_3d+=_3b(obj[i],_3c);
+}
+}else{
+if(dojo.isObject(obj)){
+_3d+="<"+_3c+" ";
+for(nm in obj){
+if(!dojo.isObject(obj[nm])){
+_3d+=nm+"=\""+obj[nm]+"\" ";
+}
+}
+_3d+=">";
+for(nm in obj){
+if(dojo.isObject(obj[nm])){
+_3d+=_3b(obj[nm],nm);
+}
+}
+_3d+="</"+_3c+">";
+}
+}
+return _3d;
+};
+return _3b(obj,"data");
+},getIdentity:function(_3e){
+return this.getValue(_3e,this.identity);
+},getIdentityAttributes:function(_3f){
+return [this.identity];
+},fetchItemByIdentity:function(_40){
+if(dojo.isString(_40)){
+var id=_40;
+_40={query:"//record[@jsxid='"+id+"']",mode:dojox.data.SYNC_MODE};
+}else{
+if(_40){
+_40.query="//record[@jsxid='"+_40.identity+"']";
+}
+if(!_40.mode){
+_40.mode=this.mode;
+}
+}
+_40.byId=true;
+return this.fetch(_40);
+},byId:function(_41){
+}});
+}
diff --git a/js/dojo/dojox/data/ClientFilter.js b/js/dojo/dojox/data/ClientFilter.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/ClientFilter.js
@@ -0,0 +1,187 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ClientFilter"]){
+dojo._hasResource["dojox.data.ClientFilter"]=true;
+dojo.provide("dojox.data.ClientFilter");
+dojo.require("dojo.data.util.filter");
+(function(){
+var cf;
+var _1=function(_2,_3,_4){
+return function(_5){
+_2._updates.push({create:_3&&_5,remove:_4&&_5});
+cf.onUpdate();
+};
+};
+cf=dojo.declare("dojox.data.ClientFilter",null,{cacheByDefault:false,constructor:function(){
+this.onSet=_1(this,true,true);
+this.onNew=_1(this,true,false);
+this.onDelete=_1(this,false,true);
+this._updates=[];
+this._fetchCache=[];
+},clearCache:function(){
+this._fetchCache=[];
+},updateResultSet:function(_6,_7){
+if(this.isUpdateable(_7)){
+for(var i=_7._version||0;i<this._updates.length;i++){
+var _8=this._updates[i].create;
+var _9=this._updates[i].remove;
+if(_9){
+for(var j=0;j<_6.length;j++){
+if(_6[j]==_9){
+_6.splice(j--,1);
+var _a=true;
+}
+}
+}
+if(_8&&this.matchesQuery(_8,_7)&&dojo.indexOf(_6,_8)==-1){
+_6.push(_8);
+_a=true;
+}
+}
+if(_7.sort&&_a){
+_6.sort(this.makeComparator(_7.sort.concat()));
+}
+_6._fullLength=_6.length;
+if(_7.count&&_a&&_7.count!==Infinity){
+_6.splice(_7.count,_6.length);
+}
+_7._version=this._updates.length;
+return _a?2:1;
+}
+return 0;
+},querySuperSet:function(_b,_c){
+if(_b.query==_c.query){
+return {};
+}
+if(!(_c.query instanceof Object&&(!_b.query||typeof _b.query=="object"))){
+return false;
+}
+var _d=dojo.mixin({},_c.query);
+for(var i in _b.query){
+if(_d[i]==_b.query[i]){
+delete _d[i];
+}else{
+if(!(typeof _b.query[i]=="string"&&dojo.data.util.filter.patternToRegExp(_b.query[i]).test(_d[i]))){
+return false;
+}
+}
+}
+return _d;
+},serverVersion:0,cachingFetch:function(_e){
+var _f=this;
+for(var i=0;i<this._fetchCache.length;i++){
+var _10=this._fetchCache[i];
+var _11=this.querySuperSet(_10,_e);
+if(_11!==false){
+var _12=_10._loading;
+if(!_12){
+_12=new dojo.Deferred();
+_12.callback(_10.cacheResults);
+}
+_12.addCallback(function(_13){
+_13=_f.clientSideFetch(dojo.mixin(dojo.mixin({},_e),{query:_11}),_13);
+_12.fullLength=_13._fullLength;
+return _13;
+});
+_e._version=_10._version;
+break;
+}
+}
+if(!_12){
+var _14=dojo.mixin({},_e);
+var _15=(_e.queryOptions||0).cache;
+var _16=this._fetchCache;
+if(_15===undefined?this.cacheByDefault:_15){
+if(_e.start||_e.count){
+delete _14.start;
+delete _14.count;
+_e.clientQuery=dojo.mixin(_e.clientQuery||{},{start:_e.start,count:_e.count});
+}
+_e=_14;
+_16.push(_e);
+}
+_12=_e._loading=this._doQuery(_e);
+_12.addErrback(function(){
+_16.splice(dojo.indexOf(_16,_e),1);
+});
+}
+var _17=this.serverVersion;
+_12.addCallback(function(_18){
+delete _e._loading;
+if(_18){
+_e._version=typeof _e._version=="number"?_e._version:_17;
+_f.updateResultSet(_18,_e);
+_e.cacheResults=_18;
+if(!_e.count||_18.length<_e.count){
+_12.fullLength=((_e.start)?_e.start:0)+_18.length;
+}
+}
+return _18;
+});
+return _12;
+},isUpdateable:function(_19){
+return typeof _19.query=="object";
+},clientSideFetch:function(_1a,_1b){
+if(_1a.queryOptions&&_1a.queryOptions.results){
+_1b=_1a.queryOptions.results;
+}
+if(_1a.query){
+var _1c=[];
+for(var i=0;i<_1b.length;i++){
+var _1d=_1b[i];
+if(_1d&&this.matchesQuery(_1d,_1a)){
+_1c.push(_1b[i]);
+}
+}
+}else{
+_1c=_1a.sort?_1b.concat():_1b;
+}
+if(_1a.sort){
+_1c.sort(this.makeComparator(_1a.sort.concat()));
+}
+return this.clientSidePaging(_1a,_1c);
+},clientSidePaging:function(_1e,_1f){
+var _20=_1e.start||0;
+var _21=(_20||_1e.count)?_1f.slice(_20,_20+(_1e.count||_1f.length)):_1f;
+_21._fullLength=_1f.length;
+return _21;
+},matchesQuery:function(_22,_23){
+var _24=_23.query;
+var _25=_23.queryOptions&&_23.queryOptions.ignoreCase;
+for(var i in _24){
+var _26=_24[i];
+var _27=this.getValue(_22,i);
+if((typeof _26=="string"&&(_26.match(/[\*\.]/)||_25))?!dojo.data.util.filter.patternToRegExp(_26,_25).test(_27):_27!=_26){
+return false;
+}
+}
+return true;
+},makeComparator:function(_28){
+var _29=_28.shift();
+if(!_29){
+return function(){
+return 0;
+};
+}
+var _2a=_29.attribute;
+var _2b=!!_29.descending;
+var _2c=this.makeComparator(_28);
+var _2d=this;
+return function(a,b){
+var av=_2d.getValue(a,_2a);
+var bv=_2d.getValue(b,_2a);
+if(av!=bv){
+return av<bv==_2b?1:-1;
+}
+return _2c(a,b);
+};
+}});
+cf.onUpdate=function(){
+};
+})();
+}
diff --git a/js/dojo/dojox/data/CouchDBRestStore.js b/js/dojo/dojox/data/CouchDBRestStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/CouchDBRestStore.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CouchDBRestStore"]){
+dojo._hasResource["dojox.data.CouchDBRestStore"]=true;
+dojo.provide("dojox.data.CouchDBRestStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.CouchDBRestStore",dojox.data.JsonRestStore,{save:function(_1){
+var _2=this.inherited(arguments);
+var _3=this.service.servicePath;
+for(var i=0;i<_2.length;i++){
+(function(_4,_5){
+_5.addCallback(function(_6){
+if(_6){
+_4.__id=_3+_6.id;
+_4._rev=_6.rev;
+}
+return _6;
+});
+})(_2[i].content,_2[i].deferred);
+}
+},fetch:function(_7){
+_7.query=_7.query||"_all_docs?";
+if(_7.start){
+_7.query=(_7.query?(_7.query+"&"):"")+"startkey="+_7.start;
+delete _7.start;
+}
+if(_7.count){
+_7.query=(_7.query?(_7.query+"&"):"")+"limit="+_7.count;
+delete _7.count;
+}
+return this.inherited(arguments);
+},_processResults:function(_8){
+var _9=_8.rows;
+if(_9){
+var _a=this.service.servicePath;
+var _b=this;
+for(var i=0;i<_9.length;i++){
+var _c=_9[i].value;
+_c.__id=_a+_9[i].id;
+_c._id=_9[i].id;
+_c._loadObject=dojox.rpc.JsonRest._loader;
+_9[i]=_c;
+}
+return {totalCount:_8.total_rows,items:_8.rows};
+}else{
+return {items:_8};
+}
+}});
+dojox.data.CouchDBRestStore.getStores=function(_d){
+var _e=dojo.xhrGet({url:_d+"_all_dbs",handleAs:"json",sync:true});
+var _f={};
+_e.addBoth(function(dbs){
+for(var i=0;i<dbs.length;i++){
+_f[dbs[i]]=new dojox.data.CouchDBRestStore({target:_d+dbs[i],idAttribute:"_id"});
+}
+return _f;
+});
+return _f;
+};
+}
diff --git a/js/dojo/dojox/data/CssClassStore.js b/js/dojo/dojox/data/CssClassStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/CssClassStore.js
@@ -0,0 +1,104 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CssClassStore"]){
+dojo._hasResource["dojox.data.CssClassStore"]=true;
+dojo.provide("dojox.data.CssClassStore");
+dojo.require("dojox.data.CssRuleStore");
+dojo.declare("dojox.data.CssClassStore",dojox.data.CssRuleStore,{_labelAttribute:"class",_idAttribute:"class",_cName:"dojox.data.CssClassStore",getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},getAttributes:function(_1){
+this._assertIsItem(_1);
+return ["class","classSans"];
+},getValue:function(_2,_3,_4){
+var _5=this.getValues(_2,_3);
+if(_5&&_5.length>0){
+return _5[0];
+}
+return _4;
+},getValues:function(_6,_7){
+this._assertIsItem(_6);
+this._assertIsAttribute(_7);
+var _8=[];
+if(_7==="class"){
+_8=[_6.className];
+}else{
+if(_7==="classSans"){
+_8=[_6.className.replace(/\./g,"")];
+}
+}
+return _8;
+},_handleRule:function(_9,_a,_b){
+var _c={};
+var s=_9["selectorText"].split(" ");
+for(var j=0;j<s.length;j++){
+var _d=s[j];
+var _e=_d.indexOf(".");
+if(_d&&_d.length>0&&_e!==-1){
+var _f=_d.indexOf(",")||_d.indexOf("[");
+_d=_d.substring(_e,((_f!==-1&&_f>_e)?_f:_d.length));
+_c[_d]=true;
+}
+}
+for(var key in _c){
+if(!this._allItems[key]){
+var _10={};
+_10.className=key;
+_10[this._storeRef]=this;
+this._allItems[key]=_10;
+}
+}
+},_handleReturn:function(){
+var _11=[];
+var _12={};
+for(var i in this._allItems){
+_12[i]=this._allItems[i];
+}
+var _13;
+while(this._pending.length){
+_13=this._pending.pop();
+_13.request._items=_12;
+_11.push(_13);
+}
+while(_11.length){
+_13=_11.pop();
+if(_13.fetch){
+this._handleFetchReturn(_13.request);
+}else{
+this._handleFetchByIdentityReturn(_13.request);
+}
+}
+},_handleFetchByIdentityReturn:function(_14){
+var _15=_14._items;
+var _16=_15[(dojo.isWebKit?_14.identity.toLowerCase():_14.identity)];
+if(!this.isItem(_16)){
+_16=null;
+}
+if(_14.onItem){
+var _17=_14.scope||dojo.global;
+_14.onItem.call(_17,_16);
+}
+},getIdentity:function(_18){
+this._assertIsItem(_18);
+return this.getValue(_18,this._idAttribute);
+},getIdentityAttributes:function(_19){
+this._assertIsItem(_19);
+return [this._idAttribute];
+},fetchItemByIdentity:function(_1a){
+_1a=_1a||{};
+if(!_1a.store){
+_1a.store=this;
+}
+if(this._pending&&this._pending.length>0){
+this._pending.push({request:_1a});
+}else{
+this._pending=[{request:_1a}];
+this._fetch(_1a);
+}
+return _1a;
+}});
+}
diff --git a/js/dojo/dojox/data/CssRuleStore.js b/js/dojo/dojox/data/CssRuleStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/CssRuleStore.js
@@ -0,0 +1,336 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CssRuleStore"]){
+dojo._hasResource["dojox.data.CssRuleStore"]=true;
+dojo.provide("dojox.data.CssRuleStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.sorter");
+dojo.require("dojox.data.css");
+dojo.declare("dojox.data.CssRuleStore",null,{_storeRef:"_S",_labelAttribute:"selector",_cache:null,_browserMap:null,_cName:"dojox.data.CssRuleStore",constructor:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+this._cache={};
+this._allItems=null;
+this._waiting=[];
+this.gatherHandle=null;
+var _2=this;
+function _3(){
+try{
+_2.context=dojox.data.css.determineContext(_2.context);
+if(_2.gatherHandle){
+clearInterval(_2.gatherHandle);
+_2.gatherHandle=null;
+}
+while(_2._waiting.length){
+var _4=_2._waiting.pop();
+dojox.data.css.rules.forEach(_4.forFunc,null,_2.context);
+_4.finishFunc();
+}
+}
+catch(e){
+}
+};
+this.gatherHandle=setInterval(_3,250);
+},setContext:function(_5){
+if(_5){
+this.close();
+this.context=dojox.data.css.determineContext(_5);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},isItem:function(_6){
+if(_6&&_6[this._storeRef]==this){
+return true;
+}
+return false;
+},hasAttribute:function(_7,_8){
+this._assertIsItem(_7);
+this._assertIsAttribute(_8);
+var _9=this.getAttributes(_7);
+if(dojo.indexOf(_9,_8)!=-1){
+return true;
+}
+return false;
+},getAttributes:function(_a){
+this._assertIsItem(_a);
+var _b=["selector","classes","rule","style","cssText","styleSheet","parentStyleSheet","parentStyleSheetHref"];
+var _c=_a.rule.style;
+if(_c){
+var _d;
+for(_d in _c){
+_b.push("style."+_d);
+}
+}
+return _b;
+},getValue:function(_e,_f,_10){
+var _11=this.getValues(_e,_f);
+var _12=_10;
+if(_11&&_11.length>0){
+return _11[0];
+}
+return _10;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+var _15=null;
+if(_14==="selector"){
+_15=_13.rule["selectorText"];
+if(_15&&dojo.isString(_15)){
+_15=_15.split(",");
+}
+}else{
+if(_14==="classes"){
+_15=_13.classes;
+}else{
+if(_14==="rule"){
+_15=_13.rule.rule;
+}else{
+if(_14==="style"){
+_15=_13.rule.style;
+}else{
+if(_14==="cssText"){
+if(dojo.isIE){
+if(_13.rule.style){
+_15=_13.rule.style.cssText;
+if(_15){
+_15="{ "+_15.toLowerCase()+" }";
+}
+}
+}else{
+_15=_13.rule.cssText;
+if(_15){
+_15=_15.substring(_15.indexOf("{"),_15.length);
+}
+}
+}else{
+if(_14==="styleSheet"){
+_15=_13.rule.styleSheet;
+}else{
+if(_14==="parentStyleSheet"){
+_15=_13.rule.parentStyleSheet;
+}else{
+if(_14==="parentStyleSheetHref"){
+if(_13.href){
+_15=_13.href;
+}
+}else{
+if(_14.indexOf("style.")===0){
+var _16=_14.substring(_14.indexOf("."),_14.length);
+_15=_13.rule.style[_16];
+}else{
+_15=[];
+}
+}
+}
+}
+}
+}
+}
+}
+}
+if(_15!==undefined){
+if(!dojo.isArray(_15)){
+_15=[_15];
+}
+}
+return _15;
+},getLabel:function(_17){
+this._assertIsItem(_17);
+return this.getValue(_17,this._labelAttribute);
+},getLabelAttributes:function(_18){
+return [this._labelAttribute];
+},containsValue:function(_19,_1a,_1b){
+var _1c=undefined;
+if(typeof _1b==="string"){
+_1c=dojo.data.util.filter.patternToRegExp(_1b,false);
+}
+return this._containsValue(_19,_1a,_1b,_1c);
+},isItemLoaded:function(_1d){
+return this.isItem(_1d);
+},loadItem:function(_1e){
+this._assertIsItem(_1e.item);
+},fetch:function(_1f){
+_1f=_1f||{};
+if(!_1f.store){
+_1f.store=this;
+}
+var _20=_1f.scope||dojo.global;
+if(this._pending&&this._pending.length>0){
+this._pending.push({request:_1f,fetch:true});
+}else{
+this._pending=[{request:_1f,fetch:true}];
+this._fetch(_1f);
+}
+return _1f;
+},_fetch:function(_21){
+var _22=_21.scope||dojo.global;
+if(this._allItems===null){
+this._allItems={};
+try{
+if(this.gatherHandle){
+this._waiting.push({"forFunc":dojo.hitch(this,this._handleRule),"finishFunc":dojo.hitch(this,this._handleReturn)});
+}else{
+dojox.data.css.rules.forEach(dojo.hitch(this,this._handleRule),null,this.context);
+this._handleReturn();
+}
+}
+catch(e){
+if(_21.onError){
+_21.onError.call(_22,e,_21);
+}
+}
+}else{
+this._handleReturn();
+}
+},_handleRule:function(_23,_24,_25){
+var _26=_23["selectorText"];
+var s=_26.split(" ");
+var _27=[];
+for(var j=0;j<s.length;j++){
+var tmp=s[j];
+var _28=tmp.indexOf(".");
+if(tmp&&tmp.length>0&&_28!==-1){
+var _29=tmp.indexOf(",")||tmp.indexOf("[");
+tmp=tmp.substring(_28,((_29!==-1&&_29>_28)?_29:tmp.length));
+_27.push(tmp);
+}
+}
+var _2a={};
+_2a.rule=_23;
+_2a.styleSheet=_24;
+_2a.href=_25;
+_2a.classes=_27;
+_2a[this._storeRef]=this;
+if(!this._allItems[_26]){
+this._allItems[_26]=[];
+}
+this._allItems[_26].push(_2a);
+},_handleReturn:function(){
+var _2b=[];
+var _2c=[];
+var _2d=null;
+for(var i in this._allItems){
+_2d=this._allItems[i];
+for(var j in _2d){
+_2c.push(_2d[j]);
+}
+}
+var _2e;
+while(this._pending.length){
+_2e=this._pending.pop();
+_2e.request._items=_2c;
+_2b.push(_2e);
+}
+while(_2b.length){
+_2e=_2b.pop();
+this._handleFetchReturn(_2e.request);
+}
+},_handleFetchReturn:function(_2f){
+var _30=_2f.scope||dojo.global;
+var _31=[];
+var _32="all";
+var i;
+if(_2f.query){
+_32=dojo.toJson(_2f.query);
+}
+if(this._cache[_32]){
+_31=this._cache[_32];
+}else{
+if(_2f.query){
+for(i in _2f._items){
+var _33=_2f._items[i];
+var _34=dojo.isWebKit?true:(_2f.queryOptions?_2f.queryOptions.ignoreCase:false);
+var _35={};
+var key;
+var _36;
+for(key in _2f.query){
+_36=_2f.query[key];
+if(typeof _36==="string"){
+_35[key]=dojo.data.util.filter.patternToRegExp(_36,_34);
+}
+}
+var _37=true;
+for(key in _2f.query){
+_36=_2f.query[key];
+if(!this._containsValue(_33,key,_36,_35[key])){
+_37=false;
+}
+}
+if(_37){
+_31.push(_33);
+}
+}
+this._cache[_32]=_31;
+}else{
+for(i in _2f._items){
+_31.push(_2f._items[i]);
+}
+}
+}
+var _38=_31.length;
+if(_2f.sort){
+_31.sort(dojo.data.util.sorter.createSortFunction(_2f.sort,this));
+}
+var _39=0;
+var _3a=_31.length;
+if(_2f.start>0&&_2f.start<_31.length){
+_39=_2f.start;
+}
+if(_2f.count&&_2f.count){
+_3a=_2f.count;
+}
+var _3b=_39+_3a;
+if(_3b>_31.length){
+_3b=_31.length;
+}
+_31=_31.slice(_39,_3b);
+if(_2f.onBegin){
+_2f.onBegin.call(_30,_38,_2f);
+}
+if(_2f.onItem){
+if(dojo.isArray(_31)){
+for(i=0;i<_31.length;i++){
+_2f.onItem.call(_30,_31[i],_2f);
+}
+if(_2f.onComplete){
+_2f.onComplete.call(_30,null,_2f);
+}
+}
+}else{
+if(_2f.onComplete){
+_2f.onComplete.call(_30,_31,_2f);
+}
+}
+return _2f;
+},close:function(){
+this._cache={};
+this._allItems=null;
+},_assertIsItem:function(_3c){
+if(!this.isItem(_3c)){
+throw new Error(this._cName+": Invalid item argument.");
+}
+},_assertIsAttribute:function(_3d){
+if(typeof _3d!=="string"){
+throw new Error(this._cName+": Invalid attribute argument.");
+}
+},_containsValue:function(_3e,_3f,_40,_41){
+return dojo.some(this.getValues(_3e,_3f),function(_42){
+if(_42!==null&&!dojo.isObject(_42)&&_41){
+if(_42.toString().match(_41)){
+return true;
+}
+}else{
+if(_40===_42){
+return true;
+}
+}
+return false;
+});
+}});
+}
diff --git a/js/dojo/dojox/data/FileStore.js b/js/dojo/dojox/data/FileStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/FileStore.js
@@ -0,0 +1,239 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.FileStore"]){
+dojo._hasResource["dojox.data.FileStore"]=true;
+dojo.provide("dojox.data.FileStore");
+dojo.declare("dojox.data.FileStore",null,{constructor:function(_1){
+if(_1&&_1.label){
+this.label=_1.label;
+}
+if(_1&&_1.url){
+this.url=_1.url;
+}
+if(_1&&_1.options){
+if(dojo.isArray(_1.options)){
+this.options=_1.options;
+}else{
+if(dojo.isString(_1.options)){
+this.options=_1.options.split(",");
+}
+}
+}
+if(_1&&_1.pathAsQueryParam){
+this.pathAsQueryParam=true;
+}
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},url:"",_storeRef:"_S",label:"name",_identifier:"path",_attributes:["children","directory","name","path","modified","size","parentDir"],pathSeparator:"/",options:[],failOk:false,urlPreventCache:true,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.FileStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.FileStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},pathAsQueryParam:false,getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return this._attributes;
+},hasAttribute:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+return (_a in _9);
+},getIdentity:function(_b){
+return this.getValue(_b,this._identifier);
+},getIdentityAttributes:function(_c){
+return [this._identifier];
+},isItemLoaded:function(_d){
+var _e=this.isItem(_d);
+if(_e&&typeof _d._loaded=="boolean"&&!_d._loaded){
+_e=false;
+}
+return _e;
+},loadItem:function(_f){
+var _10=_f.item;
+var _11=this;
+var _12=_f.scope||dojo.global;
+var _13={};
+if(this.options.length>0){
+_13.options=dojo.toJson(this.options);
+}
+if(this.pathAsQueryParam){
+_13.path=_10.parentPath+this.pathSeparator+_10.name;
+}
+var _14={url:this.pathAsQueryParam?this.url:this.url+"/"+_10.parentPath+"/"+_10.name,handleAs:"json-comment-optional",content:_13,preventCache:this.urlPreventCache,failOk:this.failOk};
+var _15=dojo.xhrGet(_14);
+_15.addErrback(function(_16){
+if(_f.onError){
+_f.onError.call(_12,_16);
+}
+});
+_15.addCallback(function(_17){
+delete _10.parentPath;
+delete _10._loaded;
+dojo.mixin(_10,_17);
+_11._processItem(_10);
+if(_f.onItem){
+_f.onItem.call(_12,_10);
+}
+});
+},getLabel:function(_18){
+return this.getValue(_18,this.label);
+},getLabelAttributes:function(_19){
+return [this.label];
+},containsValue:function(_1a,_1b,_1c){
+var _1d=this.getValues(_1a,_1b);
+for(var i=0;i<_1d.length;i++){
+if(_1d[i]==_1c){
+return true;
+}
+}
+return false;
+},getValues:function(_1e,_1f){
+this._assertIsItem(_1e);
+this._assertIsAttribute(_1f);
+var _20=_1e[_1f];
+if(typeof _20!=="undefined"&&!dojo.isArray(_20)){
+_20=[_20];
+}else{
+if(typeof _20==="undefined"){
+_20=[];
+}
+}
+return _20;
+},isItem:function(_21){
+if(_21&&_21[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_22){
+},fetch:function(_23){
+_23=_23||{};
+if(!_23.store){
+_23.store=this;
+}
+var _24=this;
+var _25=_23.scope||dojo.global;
+var _26={};
+if(_23.query){
+_26.query=dojo.toJson(_23.query);
+}
+if(_23.sort){
+_26.sort=dojo.toJson(_23.sort);
+}
+if(_23.queryOptions){
+_26.queryOptions=dojo.toJson(_23.queryOptions);
+}
+if(typeof _23.start=="number"){
+_26.start=""+_23.start;
+}
+if(typeof _23.count=="number"){
+_26.count=""+_23.count;
+}
+if(this.options.length>0){
+_26.options=dojo.toJson(this.options);
+}
+var _27={url:this.url,preventCache:this.urlPreventCache,failOk:this.failOk,handleAs:"json-comment-optional",content:_26};
+var _28=dojo.xhrGet(_27);
+_28.addCallback(function(_29){
+_24._processResult(_29,_23);
+});
+_28.addErrback(function(_2a){
+if(_23.onError){
+_23.onError.call(_25,_2a,_23);
+}
+});
+},fetchItemByIdentity:function(_2b){
+var _2c=_2b.identity;
+var _2d=this;
+var _2e=_2b.scope||dojo.global;
+var _2f={};
+if(this.options.length>0){
+_2f.options=dojo.toJson(this.options);
+}
+if(this.pathAsQueryParam){
+_2f.path=_2c;
+}
+var _30={url:this.pathAsQueryParam?this.url:this.url+"/"+_2c,handleAs:"json-comment-optional",content:_2f,preventCache:this.urlPreventCache,failOk:this.failOk};
+var _31=dojo.xhrGet(_30);
+_31.addErrback(function(_32){
+if(_2b.onError){
+_2b.onError.call(_2e,_32);
+}
+});
+_31.addCallback(function(_33){
+var _34=_2d._processItem(_33);
+if(_2b.onItem){
+_2b.onItem.call(_2e,_34);
+}
+});
+},_processResult:function(_35,_36){
+var _37=_36.scope||dojo.global;
+try{
+if(_35.pathSeparator){
+this.pathSeparator=_35.pathSeparator;
+}
+if(_36.onBegin){
+_36.onBegin.call(_37,_35.total,_36);
+}
+var _38=this._processItemArray(_35.items);
+if(_36.onItem){
+var i;
+for(i=0;i<_38.length;i++){
+_36.onItem.call(_37,_38[i],_36);
+}
+_38=null;
+}
+if(_36.onComplete){
+_36.onComplete.call(_37,_38,_36);
+}
+}
+catch(e){
+if(_36.onError){
+_36.onError.call(_37,e,_36);
+}else{
+}
+}
+},_processItemArray:function(_39){
+var i;
+for(i=0;i<_39.length;i++){
+this._processItem(_39[i]);
+}
+return _39;
+},_processItem:function(_3a){
+if(!_3a){
+return null;
+}
+_3a[this._storeRef]=this;
+if(_3a.children&&_3a.directory){
+if(dojo.isArray(_3a.children)){
+var _3b=_3a.children;
+var i;
+for(i=0;i<_3b.length;i++){
+var _3c=_3b[i];
+if(dojo.isObject(_3c)){
+_3b[i]=this._processItem(_3c);
+}else{
+_3b[i]={name:_3c,_loaded:false,parentPath:_3a.path};
+_3b[i][this._storeRef]=this;
+}
+}
+}else{
+delete _3a.children;
+}
+}
+return _3a;
+}});
+}
diff --git a/js/dojo/dojox/data/GoogleFeedStore.js b/js/dojo/dojox/data/GoogleFeedStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/GoogleFeedStore.js
@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.GoogleFeedStore"]){
+dojo._hasResource["dojox.data.GoogleFeedStore"]=true;
+dojo.provide("dojox.data.GoogleFeedStore");
+dojo.experimental("dojox.data.GoogleFeedStore");
+dojo.require("dojox.data.GoogleSearchStore");
+dojo.declare("dojox.data.GoogleFeedStore",dojox.data.GoogleSearchStore,{_type:"",_googleUrl:"http://ajax.googleapis.com/ajax/services/feed/load",_attributes:["title","link","author","published","content","summary","categories"],_queryAttrs:{"url":"q"},getFeedValue:function(_1,_2){
+var _3=this.getFeedValues(_1,_2);
+if(dojo.isArray(_3)){
+return _3[0];
+}
+return _3;
+},getFeedValues:function(_4,_5){
+if(!this._feedMetaData){
+return _5;
+}
+return this._feedMetaData[_4]||_5;
+},_processItem:function(_6,_7){
+this.inherited(arguments);
+_6["summary"]=_6["contentSnippet"];
+_6["published"]=_6["publishedDate"];
+},_getItems:function(_8){
+if(_8["feed"]){
+this._feedMetaData={title:_8.feed.title,desc:_8.feed.description,url:_8.feed.link,author:_8.feed.author};
+return _8.feed.entries;
+}
+return null;
+},_createContent:function(_9,_a,_b){
+var cb=this.inherited(arguments);
+cb.num=(_b.count||10)+(_b.start||0);
+return cb;
+}});
+}
diff --git a/js/dojo/dojox/data/GoogleSearchStore.js b/js/dojo/dojox/data/GoogleSearchStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/GoogleSearchStore.js
@@ -0,0 +1,256 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.GoogleSearchStore"]){
+dojo._hasResource["dojox.data.GoogleSearchStore"]=true;
+dojo.provide("dojox.data.GoogleSearchStore");
+dojo.provide("dojox.data.GoogleWebSearchStore");
+dojo.provide("dojox.data.GoogleBlogSearchStore");
+dojo.provide("dojox.data.GoogleLocalSearchStore");
+dojo.provide("dojox.data.GoogleVideoSearchStore");
+dojo.provide("dojox.data.GoogleNewsSearchStore");
+dojo.provide("dojox.data.GoogleBookSearchStore");
+dojo.provide("dojox.data.GoogleImageSearchStore");
+dojo.require("dojo.io.script");
+dojo.experimental("dojox.data.GoogleSearchStore");
+dojo.declare("dojox.data.GoogleSearchStore",null,{constructor:function(_1){
+if(_1){
+if(_1.label){
+this.label=_1.label;
+}
+if(_1.key){
+this._key=_1.key;
+}
+if(_1.lang){
+this._lang=_1.lang;
+}
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+this._id=dojox.data.GoogleSearchStore.prototype._id++;
+},_id:0,_requestCount:0,_googleUrl:"http://ajax.googleapis.com/ajax/services/search/",_storeRef:"_S",_attributes:["unescapedUrl","url","visibleUrl","cacheUrl","title","titleNoFormatting","content","estimatedResultCount"],_aggregatedAttributes:{estimatedResultCount:"cursor.estimatedResultCount"},label:"titleNoFormatting",_type:"web",urlPreventCache:true,_queryAttrs:{text:"q"},_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.GoogleSearchStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.GoogleSearchStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return this._attributes;
+},hasAttribute:function(_9,_a){
+if(this.getValue(_9,_a)){
+return true;
+}
+return false;
+},isItemLoaded:function(_b){
+return this.isItem(_b);
+},loadItem:function(_c){
+},getLabel:function(_d){
+return this.getValue(_d,this.label);
+},getLabelAttributes:function(_e){
+return [this.label];
+},containsValue:function(_f,_10,_11){
+var _12=this.getValues(_f,_10);
+for(var i=0;i<_12.length;i++){
+if(_12[i]===_11){
+return true;
+}
+}
+return false;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+var val=_13[_14];
+if(dojo.isArray(val)){
+return val;
+}else{
+if(val!==undefined){
+return [val];
+}else{
+return [];
+}
+}
+},isItem:function(_15){
+if(_15&&_15[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_16){
+},_format:function(_17,_18){
+return _17;
+},fetch:function(_19){
+_19=_19||{};
+var _1a=_19.scope||dojo.global;
+if(!_19.query){
+if(_19.onError){
+_19.onError.call(_1a,new Error(this.declaredClass+": A query must be specified."));
+return;
+}
+}
+var _1b={};
+for(var _1c in this._queryAttrs){
+_1b[_1c]=_19.query[_1c];
+}
+_19={query:_1b,onComplete:_19.onComplete,onError:_19.onError,onItem:_19.onItem,onBegin:_19.onBegin,start:_19.start,count:_19.count};
+var _1d=8;
+var _1e="GoogleSearchStoreCallback_"+this._id+"_"+(++this._requestCount);
+var _1f=this._createContent(_1b,_1e,_19);
+var _20;
+if(typeof (_19.start)==="undefined"||_19.start===null){
+_19.start=0;
+}
+if(!_19.count){
+_19.count=_1d;
+}
+_20={start:_19.start-_19.start%_1d};
+var _21=this;
+var _22=this._googleUrl+this._type;
+var _23={url:_22,preventCache:this.urlPreventCache,content:_1f};
+var _24=[];
+var _25=0;
+var _26=false;
+var _27=_19.start-1;
+var _28=0;
+var _29=[];
+function _2a(req){
+_28++;
+_23.content.context=_23.content.start=req.start;
+var _2b=dojo.io.script.get(_23);
+_29.push(_2b.ioArgs.id);
+_2b.addErrback(function(_2c){
+if(_19.onError){
+_19.onError.call(_1a,_2c,_19);
+}
+});
+};
+var _2d=function(_2e,_2f){
+if(_29.length>0){
+dojo.query("#"+_29.splice(0,1)).forEach(dojo.destroy);
+}
+if(_26){
+return;
+}
+var _30=_21._getItems(_2f);
+var _31=_2f?_2f["cursor"]:null;
+if(_30){
+for(var i=0;i<_30.length&&i+_2e<_19.count+_19.start;i++){
+_21._processItem(_30[i],_2f);
+_24[i+_2e]=_30[i];
+}
+_25++;
+if(_25==1){
+var _32=_31?_31.pages:null;
+var _33=_32?Number(_32[_32.length-1].start):0;
+if(_19.onBegin){
+var est=_31?_31.estimatedResultCount:_30.length;
+var _34=est?Math.min(est,_33+_30.length):_33+_30.length;
+_19.onBegin.call(_1a,_34,_19);
+}
+var _35=(_19.start-_19.start%_1d)+_1d;
+var _36=1;
+while(_32){
+if(!_32[_36]||Number(_32[_36].start)>=_19.start+_19.count){
+break;
+}
+if(Number(_32[_36].start)>=_35){
+_2a({start:_32[_36].start});
+}
+_36++;
+}
+}
+if(_19.onItem&&_24[_27+1]){
+do{
+_27++;
+_19.onItem.call(_1a,_24[_27],_19);
+}while(_24[_27+1]&&_27<_19.start+_19.count);
+}
+if(_25==_28){
+_26=true;
+dojo.global[_1e]=null;
+if(_19.onItem){
+_19.onComplete.call(_1a,null,_19);
+}else{
+_24=_24.slice(_19.start,_19.start+_19.count);
+_19.onComplete.call(_1a,_24,_19);
+}
+}
+}
+};
+var _37=[];
+var _38=_20.start-1;
+dojo.global[_1e]=function(_39,_3a,_3b,_3c){
+try{
+if(_3b!=200){
+if(_19.onError){
+_19.onError.call(_1a,new Error("Response from Google was: "+_3b),_19);
+}
+dojo.global[_1e]=function(){
+};
+return;
+}
+if(_39==_38+1){
+_2d(Number(_39),_3a);
+_38+=_1d;
+if(_37.length>0){
+_37.sort(_21._getSort());
+while(_37.length>0&&_37[0].start==_38+1){
+_2d(Number(_37[0].start),_37[0].data);
+_37.splice(0,1);
+_38+=_1d;
+}
+}
+}else{
+_37.push({start:_39,data:_3a});
+}
+}
+catch(e){
+_19.onError.call(_1a,e,_19);
+}
+};
+_2a(_20);
+},_getSort:function(){
+return function(a,b){
+if(a.start<b.start){
+return -1;
+}
+if(b.start<a.start){
+return 1;
+}
+return 0;
+};
+},_processItem:function(_3d,_3e){
+_3d[this._storeRef]=this;
+for(var _3f in this._aggregatedAttributes){
+_3d[_3f]=dojo.getObject(this._aggregatedAttributes[_3f],false,_3e);
+}
+},_getItems:function(_40){
+return _40["results"]||_40;
+},_createContent:function(_41,_42,_43){
+var _44={v:"1.0",rsz:"large",callback:_42,key:this._key,hl:this._lang};
+for(var _45 in this._queryAttrs){
+_44[this._queryAttrs[_45]]=_41[_45];
+}
+return _44;
+}});
+dojo.declare("dojox.data.GoogleWebSearchStore",dojox.data.GoogleSearchStore,{});
+dojo.declare("dojox.data.GoogleBlogSearchStore",dojox.data.GoogleSearchStore,{_type:"blogs",_attributes:["blogUrl","postUrl","title","titleNoFormatting","content","author","publishedDate"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleLocalSearchStore",dojox.data.GoogleSearchStore,{_type:"local",_attributes:["title","titleNoFormatting","url","lat","lng","streetAddress","city","region","country","phoneNumbers","ddUrl","ddUrlToHere","ddUrlFromHere","staticMapUrl","viewport"],_aggregatedAttributes:{viewport:"viewport"},_queryAttrs:{text:"q",centerLatLong:"sll",searchSpan:"sspn"}});
+dojo.declare("dojox.data.GoogleVideoSearchStore",dojox.data.GoogleSearchStore,{_type:"video",_attributes:["title","titleNoFormatting","content","url","published","publisher","duration","tbWidth","tbHeight","tbUrl","playUrl"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleNewsSearchStore",dojox.data.GoogleSearchStore,{_type:"news",_attributes:["title","titleNoFormatting","content","url","unescapedUrl","publisher","clusterUrl","location","publishedDate","relatedStories"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleBookSearchStore",dojox.data.GoogleSearchStore,{_type:"books",_attributes:["title","titleNoFormatting","authors","url","unescapedUrl","bookId","pageCount","publishedYear"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleImageSearchStore",dojox.data.GoogleSearchStore,{_type:"images",_attributes:["title","titleNoFormatting","visibleUrl","url","unescapedUrl","originalContextUrl","width","height","tbWidth","tbHeight","tbUrl","content","contentNoFormatting"],_aggregatedAttributes:{}});
+}
diff --git a/js/dojo/dojox/data/HtmlStore.js b/js/dojo/dojox/data/HtmlStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/HtmlStore.js
@@ -0,0 +1,322 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.HtmlStore"]){
+dojo._hasResource["dojox.data.HtmlStore"]=true;
+dojo.provide("dojox.data.HtmlStore");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.declare("dojox.data.HtmlStore",null,{constructor:function(_1){
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1&&"trimWhitespace" in _1){
+this.trimWhitespace=_1.trimWhitespace?true:false;
+}
+if(_1.url){
+if(!_1.dataId){
+throw new Error("dojo.data.HtmlStore: Cannot instantiate using url without an id!");
+}
+this.url=_1.url;
+this.dataId=_1.dataId;
+}else{
+if(_1.dataId){
+this._rootNode=dojo.byId(_1.dataId);
+this.dataId=this._rootNode.id;
+}else{
+this._rootNode=dojo.byId(this.dataId);
+}
+this._indexItems();
+}
+},url:"",dataId:"",trimWhitespace:false,urlPreventCache:false,_indexItems:function(){
+this._getHeadings();
+if(this._rootNode.rows){
+if(this._rootNode.tBodies&&this._rootNode.tBodies.length>0){
+this._rootNode=this._rootNode.tBodies[0];
+}
+var i;
+for(i=0;i<this._rootNode.rows.length;i++){
+this._rootNode.rows[i].store=this;
+this._rootNode.rows[i]._ident=i+1;
+}
+}else{
+var c=1;
+for(i=0;i<this._rootNode.childNodes.length;i++){
+if(this._rootNode.childNodes[i].nodeType===1){
+this._rootNode.childNodes[i].store=this;
+this._rootNode.childNodes[i]._ident=c;
+c++;
+}
+}
+}
+},_getHeadings:function(){
+this._headings=[];
+if(this._rootNode.tHead){
+dojo.forEach(this._rootNode.tHead.rows[0].cells,dojo.hitch(this,function(th){
+var _2=dojox.xml.parser.textContent(th);
+this._headings.push(this.trimWhitespace?dojo.trim(_2):_2);
+}));
+}else{
+this._headings=["name"];
+}
+},_getAllItems:function(){
+var _3=[];
+var i;
+if(this._rootNode.rows){
+for(i=0;i<this._rootNode.rows.length;i++){
+_3.push(this._rootNode.rows[i]);
+}
+}else{
+for(i=0;i<this._rootNode.childNodes.length;i++){
+if(this._rootNode.childNodes[i].nodeType===1){
+_3.push(this._rootNode.childNodes[i]);
+}
+}
+}
+return _3;
+},_assertIsItem:function(_4){
+if(!this.isItem(_4)){
+throw new Error("dojo.data.HtmlStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_5){
+if(typeof _5!=="string"){
+throw new Error("dojo.data.HtmlStore: a function was passed an attribute argument that was not an attribute name string");
+return -1;
+}
+return dojo.indexOf(this._headings,_5);
+},getValue:function(_6,_7,_8){
+var _9=this.getValues(_6,_7);
+return (_9.length>0)?_9[0]:_8;
+},getValues:function(_a,_b){
+this._assertIsItem(_a);
+var _c=this._assertIsAttribute(_b);
+if(_c>-1){
+var _d;
+if(_a.cells){
+_d=dojox.xml.parser.textContent(_a.cells[_c]);
+}else{
+_d=dojox.xml.parser.textContent(_a);
+}
+return [this.trimWhitespace?dojo.trim(_d):_d];
+}
+return [];
+},getAttributes:function(_e){
+this._assertIsItem(_e);
+var _f=[];
+for(var i=0;i<this._headings.length;i++){
+if(this.hasAttribute(_e,this._headings[i])){
+_f.push(this._headings[i]);
+}
+}
+return _f;
+},hasAttribute:function(_10,_11){
+return this.getValues(_10,_11).length>0;
+},containsValue:function(_12,_13,_14){
+var _15=undefined;
+if(typeof _14==="string"){
+_15=dojo.data.util.filter.patternToRegExp(_14,false);
+}
+return this._containsValue(_12,_13,_14,_15);
+},_containsValue:function(_16,_17,_18,_19){
+var _1a=this.getValues(_16,_17);
+for(var i=0;i<_1a.length;++i){
+var _1b=_1a[i];
+if(typeof _1b==="string"&&_19){
+return (_1b.match(_19)!==null);
+}else{
+if(_18===_1b){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_1c){
+if(_1c&&_1c.store&&_1c.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_1d){
+return this.isItem(_1d);
+},loadItem:function(_1e){
+this._assertIsItem(_1e.item);
+},_fetchItems:function(_1f,_20,_21){
+if(this._rootNode){
+this._finishFetchItems(_1f,_20,_21);
+}else{
+if(!this.url){
+this._rootNode=dojo.byId(this.dataId);
+}else{
+var _22={url:this.url,handleAs:"text",preventCache:this.urlPreventCache};
+var _23=this;
+var _24=dojo.xhrGet(_22);
+_24.addCallback(function(_25){
+var _26=function(_27,id){
+if(_27.id==id){
+return _27;
+}
+if(_27.childNodes){
+for(var i=0;i<_27.childNodes.length;i++){
+var _28=_26(_27.childNodes[i],id);
+if(_28){
+return _28;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_25;
+_23._rootNode=_26(d,_23.dataId);
+_23._indexItems();
+_23._finishFetchItems(_1f,_20,_21);
+});
+_24.addErrback(function(_29){
+_21(_29,_1f);
+});
+}
+}
+},_finishFetchItems:function(_2a,_2b,_2c){
+var _2d=null;
+var _2e=this._getAllItems();
+if(_2a.query){
+var _2f=_2a.queryOptions?_2a.queryOptions.ignoreCase:false;
+_2d=[];
+var _30={};
+var key;
+var _31;
+for(key in _2a.query){
+_31=_2a.query[key]+"";
+if(typeof _31==="string"){
+_30[key]=dojo.data.util.filter.patternToRegExp(_31,_2f);
+}
+}
+for(var i=0;i<_2e.length;++i){
+var _32=true;
+var _33=_2e[i];
+for(key in _2a.query){
+_31=_2a.query[key]+"";
+if(!this._containsValue(_33,key,_31,_30[key])){
+_32=false;
+}
+}
+if(_32){
+_2d.push(_33);
+}
+}
+_2b(_2d,_2a);
+}else{
+if(_2e.length>0){
+_2d=_2e.slice(0,_2e.length);
+}
+_2b(_2d,_2a);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},close:function(_34){
+},getLabel:function(_35){
+if(this.isItem(_35)){
+if(_35.cells){
+return "Item #"+this.getIdentity(_35);
+}else{
+return this.getValue(_35,"name");
+}
+}
+return undefined;
+},getLabelAttributes:function(_36){
+if(_36.cells){
+return null;
+}else{
+return ["name"];
+}
+},getIdentity:function(_37){
+this._assertIsItem(_37);
+if(this.hasAttribute(_37,"name")){
+return this.getValue(_37,"name");
+}else{
+return _37._ident;
+}
+},getIdentityAttributes:function(_38){
+return null;
+},fetchItemByIdentity:function(_39){
+var _3a=_39.identity;
+var _3b=this;
+var _3c=null;
+var _3d=null;
+if(!this._rootNode){
+if(!this.url){
+this._rootNode=dojo.byId(this.dataId);
+this._indexItems();
+if(_3b._rootNode.rows){
+_3c=this._rootNode.rows[_3a+1];
+}else{
+for(var i=0;i<_3b._rootNode.childNodes.length;i++){
+if(_3b._rootNode.childNodes[i].nodeType===1&&_3a===dojox.xml.parser.textContent(_3b._rootNode.childNodes[i])){
+_3c=_3b._rootNode.childNodes[i];
+}
+}
+}
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+}else{
+var _3e={url:this.url,handleAs:"text"};
+var _3f=dojo.xhrGet(_3e);
+_3f.addCallback(function(_40){
+var _41=function(_42,id){
+if(_42.id==id){
+return _42;
+}
+if(_42.childNodes){
+for(var i=0;i<_42.childNodes.length;i++){
+var _43=_41(_42.childNodes[i],id);
+if(_43){
+return _43;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_40;
+_3b._rootNode=_41(d,_3b.dataId);
+_3b._indexItems();
+if(_3b._rootNode.rows&&_3a<=_3b._rootNode.rows.length){
+_3c=_3b._rootNode.rows[_3a-1];
+}else{
+for(var i=0;i<_3b._rootNode.childNodes.length;i++){
+if(_3b._rootNode.childNodes[i].nodeType===1&&_3a===dojox.xml.parser.textContent(_3b._rootNode.childNodes[i])){
+_3c=_3b._rootNode.childNodes[i];
+break;
+}
+}
+}
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+});
+_3f.addErrback(function(_44){
+if(_39.onError){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onError.call(_3d,_44);
+}
+});
+}
+}else{
+if(this._rootNode.rows[_3a+1]){
+_3c=this._rootNode.rows[_3a+1];
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+}
+}
+}});
+dojo.extend(dojox.data.HtmlStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/ItemExplorer.js b/js/dojo/dojox/data/ItemExplorer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/ItemExplorer.js
@@ -0,0 +1,461 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ItemExplorer"]){
+dojo._hasResource["dojox.data.ItemExplorer"]=true;
+dojo.provide("dojox.data.ItemExplorer");
+dojo.require("dijit.Tree");
+dojo.require("dijit.Dialog");
+dojo.require("dijit.Menu");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.form.Textarea");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.FilteringSelect");
+(function(){
+var _1=function(_2,_3,_4){
+var _5=_2.getValues(_3,_4);
+if(_5.length<2){
+_5=_2.getValue(_3,_4);
+}
+return _5;
+};
+dojo.declare("dojox.data.ItemExplorer",dijit.Tree,{useSelect:false,refSelectSearchAttr:null,constructor:function(_6){
+dojo.mixin(this,_6);
+var _7=this;
+var _8={};
+var _9=this.rootModelNode={value:_8,id:"root"};
+this._modelNodeIdMap={};
+this._modelNodePropMap={};
+var _a=1;
+this.model={getRoot:function(_b){
+_b(_9);
+},mayHaveChildren:function(_c){
+return _c.value&&typeof _c.value=="object"&&!(_c.value instanceof Date);
+},getChildren:function(_d,_e,_f){
+var _10,_11,_12=_d.value;
+var _13=[];
+if(_12==_8){
+_e([]);
+return;
+}
+var _14=_7.store&&_7.store.isItem(_12,true);
+if(_14&&!_7.store.isItemLoaded(_12)){
+_7.store.loadItem({item:_12,onItem:function(_15){
+_12=_15;
+_16();
+}});
+}else{
+_16();
+}
+function _16(){
+if(_14){
+_10=_7.store.getAttributes(_12);
+_11=_12;
+}else{
+if(_12&&typeof _12=="object"){
+_11=_d.value;
+_10=[];
+for(var i in _12){
+if(_12.hasOwnProperty(i)&&i!="__id"&&i!="__clientId"){
+_10.push(i);
+}
+}
+}
+}
+if(_10){
+for(var key,k=0;key=_10[k++];){
+_13.push({property:key,value:_14?_1(_7.store,_12,key):_12[key],parent:_11});
+}
+_13.push({addNew:true,parent:_11,parentNode:_d});
+}
+_e(_13);
+};
+},getIdentity:function(_17){
+if(!_17.id){
+if(_17.addNew){
+_17.property="--addNew";
+}
+_17.id=_a++;
+if(_7.store){
+if(_7.store.isItem(_17.value)){
+var _18=_7.store.getIdentity(_17.value);
+(_7._modelNodeIdMap[_18]=_7._modelNodeIdMap[_18]||[]).push(_17);
+}
+if(_17.parent){
+_18=_7.store.getIdentity(_17.parent)+"."+_17.property;
+(_7._modelNodePropMap[_18]=_7._modelNodePropMap[_18]||[]).push(_17);
+}
+}
+}
+return _17.id;
+},getLabel:function(_19){
+return _19===_9?"Object Properties":_19.addNew?(_19.parent instanceof Array?"Add new value":"Add new property"):_19.property+": "+(_19.value instanceof Array?"("+_19.value.length+" elements)":_19.value);
+},onChildrenChange:function(_1a){
+},onChange:function(_1b){
+}};
+},postCreate:function(){
+this.inherited(arguments);
+dojo.connect(this,"onClick",function(_1c,_1d){
+this.lastFocused=_1d;
+if(_1c.addNew){
+this._addProperty();
+}else{
+this._editProperty();
+}
+});
+var _1e=new dijit.Menu({targetNodeIds:[this.rootNode.domNode],id:"contextMenu"});
+dojo.connect(_1e,"_openMyself",this,function(e){
+var _1f=dijit.getEnclosingWidget(e.target);
+if(_1f){
+var _20=_1f.item;
+if(this.store.isItem(_20.value,true)&&!_20.parent){
+_1e.getChildren().forEach(function(_21){
+_21.attr("disabled",(_21.label!="Add"));
+});
+this.lastFocused=_1f;
+}else{
+if(_20.value&&typeof _20.value=="object"&&!(_20.value instanceof Date)){
+_1e.getChildren().forEach(function(_22){
+_22.attr("disabled",(_22.label!="Add")&&(_22.label!="Delete"));
+});
+this.lastFocused=_1f;
+}else{
+if(_20.property&&dojo.indexOf(this.store.getIdentityAttributes(),_20.property)>=0){
+this.focusNode(_1f);
+alert("Cannot modify an Identifier node.");
+}else{
+if(_20.addNew){
+this.focusNode(_1f);
+}else{
+_1e.getChildren().forEach(function(_23){
+_23.attr("disabled",(_23.label!="Edit")&&(_23.label!="Delete"));
+});
+this.lastFocused=_1f;
+}
+}
+}
+}
+}
+});
+_1e.addChild(new dijit.MenuItem({label:"Add",onClick:dojo.hitch(this,"_addProperty")}));
+_1e.addChild(new dijit.MenuItem({label:"Edit",onClick:dojo.hitch(this,"_editProperty")}));
+_1e.addChild(new dijit.MenuItem({label:"Delete",onClick:dojo.hitch(this,"_destroyProperty")}));
+_1e.startup();
+},store:null,setStore:function(_24){
+this.store=_24;
+var _25=this;
+if(this._editDialog){
+this._editDialog.destroyRecursive();
+delete this._editDialog;
+}
+dojo.connect(_24,"onSet",function(_26,_27,_28,_29){
+var _2a,i,_2b=_25.store.getIdentity(_26);
+_2a=_25._modelNodeIdMap[_2b];
+if(_2a&&(_28===undefined||_29===undefined||_28 instanceof Array||_29 instanceof Array||typeof _28=="object"||typeof _29=="object")){
+for(i=0;i<_2a.length;i++){
+(function(_2c){
+_25.model.getChildren(_2c,function(_2d){
+_25.model.onChildrenChange(_2c,_2d);
+});
+})(_2a[i]);
+}
+}
+_2a=_25._modelNodePropMap[_2b+"."+_27];
+if(_2a){
+for(i=0;i<_2a.length;i++){
+_2a[i].value=_29;
+_25.model.onChange(_2a[i]);
+}
+}
+});
+this.rootNode.setChildItems([]);
+},setItem:function(_2e){
+(this._modelNodeIdMap={})[this.store.getIdentity(_2e)]=[this.rootModelNode];
+this._modelNodePropMap={};
+this.rootModelNode.value=_2e;
+var _2f=this;
+this.model.getChildren(this.rootModelNode,function(_30){
+_2f.rootNode.setChildItems(_30);
+});
+},refreshItem:function(){
+this.setItem(this.rootModelNode.value);
+},_createEditDialog:function(){
+this._editDialog=new dijit.Dialog({title:"Edit Property",execute:dojo.hitch(this,"_updateItem"),preload:true});
+this._editDialog.placeAt(dojo.body());
+this._editDialog.startup();
+var _31=dojo.doc.createElement("div");
+var _32=dojo.doc.createElement("label");
+dojo.attr(_32,"for","property");
+dojo.style(_32,"fontWeight","bold");
+dojo.attr(_32,"innerHTML","Property:");
+_31.appendChild(_32);
+var _33=new dijit.form.ValidationTextBox({name:"property",value:"",required:true,disabled:true}).placeAt(_31);
+_31.appendChild(dojo.doc.createElement("br"));
+_31.appendChild(dojo.doc.createElement("br"));
+var _34=new dijit.form.RadioButton({name:"itemType",value:"value",onClick:dojo.hitch(this,function(){
+this._enableFields("value");
+})}).placeAt(_31);
+var _35=dojo.doc.createElement("label");
+dojo.attr(_35,"for","value");
+dojo.attr(_35,"innerHTML","Value (JSON):");
+_31.appendChild(_35);
+var _36=dojo.doc.createElement("div");
+dojo.addClass(_36,"value");
+var _37=new dijit.form.Textarea({name:"jsonVal"}).placeAt(_36);
+_31.appendChild(_36);
+var _38=new dijit.form.RadioButton({name:"itemType",value:"reference",onClick:dojo.hitch(this,function(){
+this._enableFields("reference");
+})}).placeAt(_31);
+var _39=dojo.doc.createElement("label");
+dojo.attr(_39,"for","_reference");
+dojo.attr(_39,"innerHTML","Reference (ID):");
+_31.appendChild(_39);
+_31.appendChild(dojo.doc.createElement("br"));
+var _3a=dojo.doc.createElement("div");
+dojo.addClass(_3a,"reference");
+if(this.useSelect){
+var _3b=new dijit.form.FilteringSelect({name:"_reference",store:this.store,searchAttr:this.refSelectSearchAttr||this.store.getIdentityAttributes()[0],required:false,value:null,pageSize:10}).placeAt(_3a);
+}else{
+var _3c=new dijit.form.ValidationTextBox({name:"_reference",value:"",promptMessage:"Enter the ID of the item to reference",isValid:dojo.hitch(this,function(_3d){
+return true;
+})}).placeAt(_3a);
+}
+_31.appendChild(_3a);
+_31.appendChild(dojo.doc.createElement("br"));
+_31.appendChild(dojo.doc.createElement("br"));
+var _3e=document.createElement("div");
+_3e.setAttribute("dir","rtl");
+var _3f=new dijit.form.Button({type:"reset",label:"Cancel"}).placeAt(_3e);
+_3f.onClick=dojo.hitch(this._editDialog,"onCancel");
+var _40=new dijit.form.Button({type:"submit",label:"OK"}).placeAt(_3e);
+_31.appendChild(_3e);
+this._editDialog.attr("content",_31);
+},_enableFields:function(_41){
+switch(_41){
+case "reference":
+dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_42){
+dijit.getEnclosingWidget(_42).attr("disabled",true);
+});
+dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_43){
+dijit.getEnclosingWidget(_43).attr("disabled",false);
+});
+break;
+case "value":
+dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_44){
+dijit.getEnclosingWidget(_44).attr("disabled",false);
+});
+dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_45){
+dijit.getEnclosingWidget(_45).attr("disabled",true);
+});
+break;
+}
+},_updateItem:function(_46){
+var _47,_48,val,_49,_4a=this._editDialog.attr("title")=="Edit Property";
+var _4b=this._editDialog;
+var _4c=this.store;
+function _4d(){
+try{
+var _4e,_4f=[];
+var _50=_46.property;
+if(_4a){
+while(!_4c.isItem(_48.parent,true)){
+_47=_47.getParent();
+_4f.push(_48.property);
+_48=_47.item;
+}
+if(_4f.length==0){
+_4c.setValue(_48.parent,_48.property,val);
+}else{
+_49=_1(_4c,_48.parent,_48.property);
+if(_49 instanceof Array){
+_49=_49.concat();
+}
+_4e=_49;
+while(_4f.length>1){
+_4e=_4e[_4f.pop()];
+}
+_4e[_4f]=val;
+_4c.setValue(_48.parent,_48.property,_49);
+}
+}else{
+if(_4c.isItem(_51,true)){
+if(!_4c.isItemLoaded(_51)){
+_4c.loadItem({item:_51,onItem:function(_52){
+if(_52 instanceof Array){
+_50=_52.length;
+}
+_4c.setValue(_52,_50,val);
+}});
+}else{
+if(_51 instanceof Array){
+_50=_51.length;
+}
+_4c.setValue(_51,_50,val);
+}
+}else{
+if(_48.value instanceof Array){
+_4f.push(_48.value.length);
+}else{
+_4f.push(_46.property);
+}
+while(!_4c.isItem(_48.parent,true)){
+_47=_47.getParent();
+_4f.push(_48.property);
+_48=_47.item;
+}
+_49=_1(_4c,_48.parent,_48.property);
+_4e=_49;
+while(_4f.length>1){
+_4e=_4e[_4f.pop()];
+}
+_4e[_4f]=val;
+_4c.setValue(_48.parent,_48.property,_49);
+}
+}
+}
+catch(e){
+alert(e);
+}
+};
+if(_4b.validate()){
+_47=this.lastFocused;
+_48=_47.item;
+var _51=_48.value;
+if(_48.addNew){
+_51=_47.item.parent;
+_47=_47.getParent();
+_48=_47.item;
+}
+val=null;
+switch(_46.itemType){
+case "reference":
+this.store.fetchItemByIdentity({identity:_46._reference,onItem:function(_53){
+val=_53;
+_4d();
+},onError:function(){
+alert("The id could not be found");
+}});
+break;
+case "value":
+var _54=_46.jsonVal;
+val=dojo.fromJson(_54);
+if(typeof val=="function"){
+val.toString=function(){
+return _54;
+};
+}
+_4d();
+break;
+}
+}else{
+_4b.show();
+}
+},_editProperty:function(){
+var _55=dojo.mixin({},this.lastFocused.item);
+if(!this._editDialog){
+this._createEditDialog();
+}else{
+this._editDialog.reset();
+}
+if(dojo.indexOf(this.store.getIdentityAttributes(),_55.property)>=0){
+alert("Cannot Edit an Identifier!");
+}else{
+this._editDialog.attr("title","Edit Property");
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true);
+if(this.store.isItem(_55.value,true)){
+if(_55.parent){
+_55.itemType="reference";
+this._enableFields(_55.itemType);
+_55._reference=this.store.getIdentity(_55.value);
+this._editDialog.attr("value",_55);
+this._editDialog.show();
+}
+}else{
+if(_55.value&&typeof _55.value=="object"&&!(_55.value instanceof Date)){
+}else{
+_55.itemType="value";
+this._enableFields(_55.itemType);
+_55.jsonVal=typeof _55.value=="function"?_55.value.toString():_55.value instanceof Date?"new Date(\""+_55.value+"\")":dojo.toJson(_55.value);
+this._editDialog.attr("value",_55);
+this._editDialog.show();
+}
+}
+}
+},_destroyProperty:function(){
+var _56=this.lastFocused;
+var _57=_56.item;
+var _58=[];
+while(!this.store.isItem(_57.parent,true)||_57.parent instanceof Array){
+_56=_56.getParent();
+_58.push(_57.property);
+_57=_56.item;
+}
+if(dojo.indexOf(this.store.getIdentityAttributes(),_57.property)>=0){
+alert("Cannot Delete an Identifier!");
+}else{
+try{
+if(_58.length>0){
+var _59,_5a=_1(this.store,_57.parent,_57.property);
+_59=_5a;
+while(_58.length>1){
+_59=_59[_58.pop()];
+}
+if(dojo.isArray(_59)){
+_59.splice(_58,1);
+}else{
+delete _59[_58];
+}
+this.store.setValue(_57.parent,_57.property,_5a);
+}else{
+this.store.unsetAttribute(_57.parent,_57.property);
+}
+}
+catch(e){
+alert(e);
+}
+}
+},_addProperty:function(){
+var _5b=this.lastFocused.item;
+var _5c=_5b.value;
+var _5d=dojo.hitch(this,function(){
+var _5e=null;
+if(!this._editDialog){
+this._createEditDialog();
+}else{
+this._editDialog.reset();
+}
+if(_5c instanceof Array){
+_5e=_5c.length;
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true);
+}else{
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",false);
+}
+this._editDialog.attr("title","Add Property");
+this._enableFields("value");
+this._editDialog.attr("value",{itemType:"value",property:_5e});
+this._editDialog.show();
+});
+if(_5b.addNew){
+_5b=this.lastFocused.getParent().item;
+_5c=this.lastFocused.item.parent;
+}
+if(_5b.property&&dojo.indexOf(this.store.getIdentityAttributes(),_5b.property)>=0){
+alert("Cannot add properties to an ID node!");
+}else{
+if(this.store.isItem(_5c,true)&&!this.store.isItemLoaded(_5c)){
+this.store.loadItem({item:_5c,onItem:function(_5f){
+_5c=_5f;
+_5d();
+}});
+}else{
+_5d();
+}
+}
+}});
+})();
+}
diff --git a/js/dojo/dojox/data/JsonQueryRestStore.js b/js/dojo/dojox/data/JsonQueryRestStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/JsonQueryRestStore.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.JsonQueryRestStore"]){
+dojo._hasResource["dojox.data.JsonQueryRestStore"]=true;
+dojo.provide("dojox.data.JsonQueryRestStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.require("dojox.data.util.JsonQuery");
+dojo.requireIf(!!dojox.data.ClientFilter,"dojox.json.query");
+dojo.declare("dojox.data.JsonQueryRestStore",[dojox.data.JsonRestStore,dojox.data.util.JsonQuery],{matchesQuery:function(_1,_2){
+return _1.__id&&(_1.__id.indexOf("#")==-1)&&this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/data/JsonRestStore.js b/js/dojo/dojox/data/JsonRestStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/JsonRestStore.js
@@ -0,0 +1,232 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.JsonRestStore"]){
+dojo._hasResource["dojox.data.JsonRestStore"]=true;
+dojo.provide("dojox.data.JsonRestStore");
+dojo.require("dojox.data.ServiceStore");
+dojo.require("dojox.rpc.JsonRest");
+dojo.declare("dojox.data.JsonRestStore",dojox.data.ServiceStore,{constructor:function(_1){
+dojo.connect(dojox.rpc.Rest._index,"onUpdate",this,function(_2,_3,_4,_5){
+var _6=this.service.servicePath;
+if(!_2.__id){
+}else{
+if(_2.__id.substring(0,_6.length)==_6){
+this.onSet(_2,_3,_4,_5);
+}
+}
+});
+this.idAttribute=this.idAttribute||"id";
+if(typeof _1.target=="string"){
+_1.target=_1.target.match(/\/$/)||this.allowNoTrailingSlash?_1.target:(_1.target+"/");
+if(!this.service){
+this.service=dojox.rpc.JsonRest.services[_1.target]||dojox.rpc.Rest(_1.target,true);
+}
+}
+dojox.rpc.JsonRest.registerService(this.service,_1.target,this.schema);
+this.schema=this.service._schema=this.schema||this.service._schema||{};
+this.service._store=this;
+this.service.idAsRef=this.idAsRef;
+this.schema._idAttr=this.idAttribute;
+var _7=dojox.rpc.JsonRest.getConstructor(this.service);
+var _8=this;
+this._constructor=function(_9){
+_7.call(this,_9);
+_8.onNew(this);
+};
+this._constructor.prototype=_7.prototype;
+this._index=dojox.rpc.Rest._index;
+},loadReferencedSchema:true,idAsRef:false,referenceIntegrity:true,target:"",allowNoTrailingSlash:false,newItem:function(_a,_b){
+_a=new this._constructor(_a);
+if(_b){
+var _c=this.getValue(_b.parent,_b.attribute,[]);
+_c=_c.concat([_a]);
+_a.__parent=_c;
+this.setValue(_b.parent,_b.attribute,_c);
+}
+return _a;
+},deleteItem:function(_d){
+var _e=[];
+var _f=dojox.data._getStoreForItem(_d)||this;
+if(this.referenceIntegrity){
+dojox.rpc.JsonRest._saveNotNeeded=true;
+var _10=dojox.rpc.Rest._index;
+var _11=function(_12){
+var _13;
+_e.push(_12);
+_12.__checked=1;
+for(var i in _12){
+if(i.substring(0,2)!="__"){
+var _14=_12[i];
+if(_14==_d){
+if(_12!=_10){
+if(_12 instanceof Array){
+(_13=_13||[]).push(i);
+}else{
+(dojox.data._getStoreForItem(_12)||_f).unsetAttribute(_12,i);
+}
+}
+}else{
+if((typeof _14=="object")&&_14){
+if(!_14.__checked){
+_11(_14);
+}
+if(typeof _14.__checked=="object"&&_12!=_10){
+(dojox.data._getStoreForItem(_12)||_f).setValue(_12,i,_14.__checked);
+}
+}
+}
+}
+}
+if(_13){
+i=_13.length;
+_12=_12.__checked=_12.concat();
+while(i--){
+_12.splice(_13[i],1);
+}
+return _12;
+}
+return null;
+};
+_11(_10);
+dojox.rpc.JsonRest._saveNotNeeded=false;
+var i=0;
+while(_e[i]){
+delete _e[i++].__checked;
+}
+}
+dojox.rpc.JsonRest.deleteObject(_d);
+_f.onDelete(_d);
+},changing:function(_15,_16){
+dojox.rpc.JsonRest.changing(_15,_16);
+},setValue:function(_17,_18,_19){
+var old=_17[_18];
+var _1a=_17.__id?dojox.data._getStoreForItem(_17):this;
+if(dojox.json.schema&&_1a.schema&&_1a.schema.properties){
+dojox.json.schema.mustBeValid(dojox.json.schema.checkPropertyChange(_19,_1a.schema.properties[_18]));
+}
+if(_18==_1a.idAttribute){
+throw new Error("Can not change the identity attribute for an item");
+}
+_1a.changing(_17);
+_17[_18]=_19;
+if(_19&&!_19.__parent){
+_19.__parent=_17;
+}
+_1a.onSet(_17,_18,old,_19);
+},setValues:function(_1b,_1c,_1d){
+if(!dojo.isArray(_1d)){
+throw new Error("setValues expects to be passed an Array object as its value");
+}
+this.setValue(_1b,_1c,_1d);
+},unsetAttribute:function(_1e,_1f){
+this.changing(_1e);
+var old=_1e[_1f];
+delete _1e[_1f];
+this.onSet(_1e,_1f,old,undefined);
+},save:function(_20){
+if(!(_20&&_20.global)){
+(_20=_20||{}).service=this.service;
+}
+if("syncMode" in _20?_20.syncMode:this.syncMode){
+dojox.rpc._sync=true;
+}
+var _21=dojox.rpc.JsonRest.commit(_20);
+this.serverVersion=this._updates&&this._updates.length;
+return _21;
+},revert:function(_22){
+dojox.rpc.JsonRest.revert(_22&&_22.global&&this.service);
+},isDirty:function(_23){
+return dojox.rpc.JsonRest.isDirty(_23);
+},isItem:function(_24,_25){
+return _24&&_24.__id&&(_25||this.service==dojox.rpc.JsonRest.getServiceAndId(_24.__id).service);
+},_doQuery:function(_26){
+var _27=typeof _26.queryStr=="string"?_26.queryStr:_26.query;
+var _28=dojox.rpc.JsonRest.query(this.service,_27,_26);
+var _29=this;
+if(this.loadReferencedSchema){
+_28.addCallback(function(_2a){
+var _2b=_28.ioArgs&&_28.ioArgs.xhr&&_28.ioArgs.xhr.getResponseHeader("Content-Type");
+var _2c=_2b&&_2b.match(/definedby\s*=\s*([^;]*)/);
+if(_2b&&!_2c){
+_2c=_28.ioArgs.xhr.getResponseHeader("Link");
+_2c=_2c&&_2c.match(/<([^>]*)>;\s*rel="?definedby"?/);
+}
+_2c=_2c&&_2c[1];
+if(_2c){
+var _2d=dojox.rpc.JsonRest.getServiceAndId((_29.target+_2c).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/,"$2$3"));
+var _2e=dojox.rpc.JsonRest.byId(_2d.service,_2d.id);
+_2e.addCallbacks(function(_2f){
+dojo.mixin(_29.schema,_2f);
+return _2a;
+},function(_30){
+console.error(_30);
+return _2a;
+});
+return _2e;
+}
+return undefined;
+});
+}
+return _28;
+},_processResults:function(_31,_32){
+var _33=_31.length;
+return {totalCount:_32.fullLength||(_32.request.count==_33?(_32.request.start||0)+_33*2:_33),items:_31};
+},getConstructor:function(){
+return this._constructor;
+},getIdentity:function(_34){
+var id=_34.__clientId||_34.__id;
+if(!id){
+return id;
+}
+var _35=this.service.servicePath.replace(/[^\/]*$/,"");
+return id.substring(0,_35.length)!=_35?id:id.substring(_35.length);
+},fetchItemByIdentity:function(_36){
+var id=_36.identity;
+var _37=this;
+if(id.toString().match(/^(\w*:)?\//)){
+var _38=dojox.rpc.JsonRest.getServiceAndId(id);
+_37=_38.service._store;
+_36.identity=_38.id;
+}
+_36._prefix=_37.service.servicePath.replace(/[^\/]*$/,"");
+return _37.inherited(arguments);
+},onSet:function(){
+},onNew:function(){
+},onDelete:function(){
+},getFeatures:function(){
+var _39=this.inherited(arguments);
+_39["dojo.data.api.Write"]=true;
+_39["dojo.data.api.Notification"]=true;
+return _39;
+},getParent:function(_3a){
+return _3a&&_3a.__parent;
+}});
+dojox.data.JsonRestStore.getStore=function(_3b,_3c){
+if(typeof _3b.target=="string"){
+_3b.target=_3b.target.match(/\/$/)||_3b.allowNoTrailingSlash?_3b.target:(_3b.target+"/");
+var _3d=(dojox.rpc.JsonRest.services[_3b.target]||{})._store;
+if(_3d){
+return _3d;
+}
+}
+return new (_3c||dojox.data.JsonRestStore)(_3b);
+};
+dojox.data._getStoreForItem=function(_3e){
+if(_3e.__id){
+var _3f=dojox.rpc.JsonRest.getServiceAndId(_3e.__id);
+if(_3f&&_3f.service._store){
+return _3f.service._store;
+}else{
+var _40=_3e.__id.toString().match(/.*\//)[0];
+return new dojox.data.JsonRestStore({target:_40});
+}
+}
+return null;
+};
+dojox.json.ref._useRefs=true;
+}
diff --git a/js/dojo/dojox/data/KeyValueStore.js b/js/dojo/dojox/data/KeyValueStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/KeyValueStore.js
@@ -0,0 +1,225 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.KeyValueStore"]){
+dojo._hasResource["dojox.data.KeyValueStore"]=true;
+dojo.provide("dojox.data.KeyValueStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.declare("dojox.data.KeyValueStore",null,{constructor:function(_1){
+if(_1.url){
+this.url=_1.url;
+}
+this._keyValueString=_1.data;
+this._keyValueVar=_1.dataVar;
+this._keyAttribute="key";
+this._valueAttribute="value";
+this._storeProp="_keyValueStore";
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._loadInProgress=false;
+this._queuedFetches=[];
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},url:"",data:"",urlPreventCache:false,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.KeyValueStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3,_4){
+if(!dojo.isString(_4)){
+throw new Error("dojox.data.KeyValueStore: a function was passed an attribute argument that was not an attribute object nor an attribute name string");
+}
+},getValue:function(_5,_6,_7){
+this._assertIsItem(_5);
+this._assertIsAttribute(_5,_6);
+var _8;
+if(_6==this._keyAttribute){
+_8=_5[this._keyAttribute];
+}else{
+_8=_5[this._valueAttribute];
+}
+if(_8===undefined){
+_8=_7;
+}
+return _8;
+},getValues:function(_9,_a){
+var _b=this.getValue(_9,_a);
+return (_b?[_b]:[]);
+},getAttributes:function(_c){
+return [this._keyAttribute,this._valueAttribute,_c[this._keyAttribute]];
+},hasAttribute:function(_d,_e){
+this._assertIsItem(_d);
+this._assertIsAttribute(_d,_e);
+return (_e==this._keyAttribute||_e==this._valueAttribute||_e==_d[this._keyAttribute]);
+},containsValue:function(_f,_10,_11){
+var _12=undefined;
+if(typeof _11==="string"){
+_12=dojo.data.util.filter.patternToRegExp(_11,false);
+}
+return this._containsValue(_f,_10,_11,_12);
+},_containsValue:function(_13,_14,_15,_16){
+var _17=this.getValues(_13,_14);
+for(var i=0;i<_17.length;++i){
+var _18=_17[i];
+if(typeof _18==="string"&&_16){
+return (_18.match(_16)!==null);
+}else{
+if(_15===_18){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_19){
+if(_19&&_19[this._storeProp]===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_1a){
+return this.isItem(_1a);
+},loadItem:function(_1b){
+},getFeatures:function(){
+return this._features;
+},close:function(_1c){
+},getLabel:function(_1d){
+return _1d[this._keyAttribute];
+},getLabelAttributes:function(_1e){
+return [this._keyAttribute];
+},_fetchItems:function(_1f,_20,_21){
+var _22=this;
+var _23=function(_24,_25){
+var _26=null;
+if(_24.query){
+_26=[];
+var _27=_24.queryOptions?_24.queryOptions.ignoreCase:false;
+var _28={};
+for(var key in _24.query){
+var _29=_24.query[key];
+if(typeof _29==="string"){
+_28[key]=dojo.data.util.filter.patternToRegExp(_29,_27);
+}
+}
+for(var i=0;i<_25.length;++i){
+var _2a=true;
+var _2b=_25[i];
+for(var key in _24.query){
+var _29=_24.query[key];
+if(!_22._containsValue(_2b,key,_29,_28[key])){
+_2a=false;
+}
+}
+if(_2a){
+_26.push(_2b);
+}
+}
+}else{
+if(_24.identity){
+_26=[];
+var _2c;
+for(var key in _25){
+_2c=_25[key];
+if(_2c[_22._keyAttribute]==_24.identity){
+_26.push(_2c);
+break;
+}
+}
+}else{
+if(_25.length>0){
+_26=_25.slice(0,_25.length);
+}
+}
+}
+_20(_26,_24);
+};
+if(this._loadFinished){
+_23(_1f,this._arrayOfAllItems);
+}else{
+if(this.url!==""){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_1f,filter:_23});
+}else{
+this._loadInProgress=true;
+var _2d={url:_22.url,handleAs:"json-comment-filtered",preventCache:this.urlPreventCache};
+var _2e=dojo.xhrGet(_2d);
+_2e.addCallback(function(_2f){
+_22._processData(_2f);
+_23(_1f,_22._arrayOfAllItems);
+_22._handleQueuedFetches();
+});
+_2e.addErrback(function(_30){
+_22._loadInProgress=false;
+throw _30;
+});
+}
+}else{
+if(this._keyValueString){
+this._processData(eval(this._keyValueString));
+this._keyValueString=null;
+_23(_1f,this._arrayOfAllItems);
+}else{
+if(this._keyValueVar){
+this._processData(this._keyValueVar);
+this._keyValueVar=null;
+_23(_1f,this._arrayOfAllItems);
+}else{
+throw new Error("dojox.data.KeyValueStore: No source data was provided as either URL, String, or Javascript variable data input.");
+}
+}
+}
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _31=this._queuedFetches[i];
+var _32=_31.filter;
+var _33=_31.args;
+if(_32){
+_32(_33,this._arrayOfAllItems);
+}else{
+this.fetchItemByIdentity(_31.args);
+}
+}
+this._queuedFetches=[];
+}
+},_processData:function(_34){
+this._arrayOfAllItems=[];
+for(var i=0;i<_34.length;i++){
+this._arrayOfAllItems.push(this._createItem(_34[i]));
+}
+this._loadFinished=true;
+this._loadInProgress=false;
+},_createItem:function(_35){
+var _36={};
+_36[this._storeProp]=this;
+for(var i in _35){
+_36[this._keyAttribute]=i;
+_36[this._valueAttribute]=_35[i];
+break;
+}
+return _36;
+},getIdentity:function(_37){
+if(this.isItem(_37)){
+return _37[this._keyAttribute];
+}
+return null;
+},getIdentityAttributes:function(_38){
+return [this._keyAttribute];
+},fetchItemByIdentity:function(_39){
+_39.oldOnItem=_39.onItem;
+_39.onItem=null;
+_39.onComplete=this._finishFetchItemByIdentity;
+this.fetch(_39);
+},_finishFetchItemByIdentity:function(_3a,_3b){
+var _3c=_3b.scope||dojo.global;
+if(_3a.length){
+_3b.oldOnItem.call(_3c,_3a[0]);
+}else{
+_3b.oldOnItem.call(_3c,null);
+}
+}});
+dojo.extend(dojox.data.KeyValueStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/OpenSearchStore.js b/js/dojo/dojox/data/OpenSearchStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/OpenSearchStore.js
@@ -0,0 +1,219 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.OpenSearchStore"]){
+dojo._hasResource["dojox.data.OpenSearchStore"]=true;
+dojo.provide("dojox.data.OpenSearchStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.xml.parser");
+dojo.experimental("dojox.data.OpenSearchStore");
+dojo.declare("dojox.data.OpenSearchStore",null,{constructor:function(_1){
+if(_1){
+this.label=_1.label;
+this.url=_1.url;
+this.itemPath=_1.itemPath;
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+var _2=dojo.xhrGet({url:this.url,handleAs:"xml",sync:true,preventCache:this.urlPreventCache});
+_2.addCallback(this,"_processOsdd");
+_2.addErrback(function(){
+throw new Error("Unable to load OpenSearch Description document from ".args.url);
+});
+},url:"",itemPath:"",_storeRef:"_S",urlElement:null,iframeElement:null,urlPreventCache:true,ATOM_CONTENT_TYPE:3,ATOM_CONTENT_TYPE_STRING:"atom",RSS_CONTENT_TYPE:2,RSS_CONTENT_TYPE_STRING:"rss",XML_CONTENT_TYPE:1,XML_CONTENT_TYPE_STRING:"xml",_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojox.data.OpenSearchStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojox.data.OpenSearchStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+if(_8){
+return _8[0];
+}
+return _7;
+},getAttributes:function(_9){
+return ["content"];
+},hasAttribute:function(_a,_b){
+if(this.getValue(_a,_b)){
+return true;
+}
+return false;
+},isItemLoaded:function(_c){
+return this.isItem(_c);
+},loadItem:function(_d){
+},getLabel:function(_e){
+return undefined;
+},getLabelAttributes:function(_f){
+return null;
+},containsValue:function(_10,_11,_12){
+var _13=this.getValues(_10,_11);
+for(var i=0;i<_13.length;i++){
+if(_13[i]===_12){
+return true;
+}
+}
+return false;
+},getValues:function(_14,_15){
+this._assertIsItem(_14);
+this._assertIsAttribute(_15);
+var _16=this.processItem(_14,_15);
+if(_16){
+return [_16];
+}
+return undefined;
+},isItem:function(_17){
+if(_17&&_17[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_18){
+},process:function(_19){
+return this["_processOSD"+this.contentType](_19);
+},processItem:function(_1a,_1b){
+return this["_processItem"+this.contentType](_1a.node,_1b);
+},_createSearchUrl:function(_1c){
+var _1d=this.urlElement.attributes.getNamedItem("template").nodeValue;
+var _1e=this.urlElement.attributes;
+var _1f=_1d.indexOf("{searchTerms}");
+_1d=_1d.substring(0,_1f)+_1c.query.searchTerms+_1d.substring(_1f+13);
+dojo.forEach([{"name":"count","test":_1c.count,"def":"10"},{"name":"startIndex","test":_1c.start,"def":this.urlElement.attributes.getNamedItem("indexOffset")?this.urlElement.attributes.getNamedItem("indexOffset").nodeValue:0},{"name":"startPage","test":_1c.startPage,"def":this.urlElement.attributes.getNamedItem("pageOffset")?this.urlElement.attributes.getNamedItem("pageOffset").nodeValue:0},{"name":"language","test":_1c.language,"def":"*"},{"name":"inputEncoding","test":_1c.inputEncoding,"def":"UTF-8"},{"name":"outputEncoding","test":_1c.outputEncoding,"def":"UTF-8"}],function(_20){
+_1d=_1d.replace("{"+_20.name+"}",_20.test||_20.def);
+_1d=_1d.replace("{"+_20.name+"?}",_20.test||_20.def);
+});
+return _1d;
+},_fetchItems:function(_21,_22,_23){
+if(!_21.query){
+_21.query={};
+}
+var _24=this;
+var url=this._createSearchUrl(_21);
+var _25={url:url,preventCache:this.urlPreventCache};
+var xhr=dojo.xhrGet(_25);
+xhr.addErrback(function(_26){
+_23(_26,_21);
+});
+xhr.addCallback(function(_27){
+var _28=[];
+if(_27){
+_28=_24.process(_27);
+for(var i=0;i<_28.length;i++){
+_28[i]={node:_28[i]};
+_28[i][_24._storeRef]=_24;
+}
+}
+_22(_28,_21);
+});
+},_processOSDxml:function(_29){
+var div=dojo.doc.createElement("div");
+div.innerHTML=_29;
+return dojo.query(this.itemPath,div);
+},_processItemxml:function(_2a,_2b){
+if(_2b==="content"){
+return _2a.innerHTML;
+}
+return undefined;
+},_processOSDatom:function(_2c){
+return this._processOSDfeed(_2c,"entry");
+},_processItematom:function(_2d,_2e){
+return this._processItemfeed(_2d,_2e,"content");
+},_processOSDrss:function(_2f){
+return this._processOSDfeed(_2f,"item");
+},_processItemrss:function(_30,_31){
+return this._processItemfeed(_30,_31,"description");
+},_processOSDfeed:function(_32,_33){
+_32=dojox.xml.parser.parse(_32);
+var _34=[];
+var _35=_32.getElementsByTagName(_33);
+for(var i=0;i<_35.length;i++){
+_34.push(_35.item(i));
+}
+return _34;
+},_processItemfeed:function(_36,_37,_38){
+if(_37==="content"){
+var _39=_36.getElementsByTagName(_38).item(0);
+return this._getNodeXml(_39,true);
+}
+return undefined;
+},_getNodeXml:function(_3a,_3b){
+var i;
+switch(_3a.nodeType){
+case 1:
+var xml=[];
+if(!_3b){
+xml.push("<"+_3a.tagName);
+var _3c;
+for(i=0;i<_3a.attributes.length;i++){
+_3c=_3a.attributes.item(i);
+xml.push(" "+_3c.nodeName+"=\""+_3c.nodeValue+"\"");
+}
+xml.push(">");
+}
+for(i=0;i<_3a.childNodes.length;i++){
+xml.push(this._getNodeXml(_3a.childNodes.item(i)));
+}
+if(!_3b){
+xml.push("</"+_3a.tagName+">\n");
+}
+return xml.join("");
+case 3:
+case 4:
+return _3a.nodeValue;
+}
+return undefined;
+},_processOsdd:function(doc){
+var _3d=doc.getElementsByTagName("Url");
+var _3e=[];
+var _3f;
+var i;
+for(i=0;i<_3d.length;i++){
+_3f=_3d[i].attributes.getNamedItem("type").nodeValue;
+switch(_3f){
+case "application/rss+xml":
+_3e[i]=this.RSS_CONTENT_TYPE;
+break;
+case "application/atom+xml":
+_3e[i]=this.ATOM_CONTENT_TYPE;
+break;
+default:
+_3e[i]=this.XML_CONTENT_TYPE;
+break;
+}
+}
+var _40=0;
+var _41=_3e[0];
+for(i=1;i<_3d.length;i++){
+if(_3e[i]>_41){
+_40=i;
+_41=_3e[i];
+}
+}
+var _42=_3d[_40].nodeName.toLowerCase();
+if(_42=="url"){
+var _43=_3d[_40].attributes;
+this.urlElement=_3d[_40];
+switch(_3e[_40]){
+case this.ATOM_CONTENT_TYPE:
+this.contentType=this.ATOM_CONTENT_TYPE_STRING;
+break;
+case this.RSS_CONTENT_TYPE:
+this.contentType=this.RSS_CONTENT_TYPE_STRING;
+break;
+case this.XML_CONTENT_TYPE:
+this.contentType=this.XML_CONTENT_TYPE_STRING;
+break;
+}
+}
+}});
+dojo.extend(dojox.data.OpenSearchStore,dojo.data.util.simpleFetch);
+}
diff --git a/js/dojo/dojox/data/PersevereStore.js b/js/dojo/dojox/data/PersevereStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/PersevereStore.js
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.PersevereStore"]){
+dojo._hasResource["dojox.data.PersevereStore"]=true;
+dojo.provide("dojox.data.PersevereStore");
+dojo.require("dojox.data.JsonQueryRestStore");
+dojo.require("dojox.rpc.Client");
+dojox.json.ref.serializeFunctions=true;
+dojo.declare("dojox.data.PersevereStore",dojox.data.JsonQueryRestStore,{useFullIdInQueries:true,jsonQueryPagination:false});
+dojox.data.PersevereStore.getStores=function(_1,_2){
+_1=(_1&&(_1.match(/\/$/)?_1:(_1+"/")))||"/";
+if(_1.match(/^\w*:\/\//)){
+dojo.require("dojox.io.xhrScriptPlugin");
+dojox.io.xhrScriptPlugin(_1,"callback",dojox.io.xhrPlugins.fullHttpAdapter);
+}
+var _3=dojo.xhr;
+dojo.xhr=function(_4,_5){
+(_5.headers=_5.headers||{})["Server-Methods"]=false;
+return _3.apply(dojo,arguments);
+};
+var _6=dojox.rpc.Rest(_1,true);
+dojox.rpc._sync=_2;
+var _7=_6("Class/");
+var _8;
+var _9={};
+var _a=0;
+_7.addCallback(function(_b){
+dojox.json.ref.resolveJson(_b,{index:dojox.rpc.Rest._index,idPrefix:"/Class/",assignAbsoluteIds:true});
+function _c(_d){
+if(_d["extends"]&&_d["extends"].prototype){
+if(!_d.prototype||!_d.prototype.isPrototypeOf(_d["extends"].prototype)){
+_c(_d["extends"]);
+dojox.rpc.Rest._index[_d.prototype.__id]=_d.prototype=dojo.mixin(dojo.delegate(_d["extends"].prototype),_d.prototype);
+}
+}
+};
+function _e(_f,_10){
+if(_f&&_10){
+for(var j in _f){
+var _11=_f[j];
+if(_11.runAt!="client"&&!_10[j]){
+_10[j]=(function(_12){
+return function(){
+var _13=dojo.rawXhrPost({url:this.__id,postData:dojo.toJson({method:_12,id:_a++,params:dojo._toArray(arguments)}),handleAs:"json"});
+_13.addCallback(function(_14){
+return _14.error?new Error(_14.error):_14.result;
+});
+return _13;
+};
+})(j);
+}
+}
+}
+};
+for(var i in _b){
+if(typeof _b[i]=="object"){
+var _15=_b[i];
+_c(_15);
+_e(_15.methods,_15.prototype=_15.prototype||{});
+_e(_15.staticMethods,_15);
+_9[_b[i].id]=new dojox.data.PersevereStore({target:new dojo._Url(_1,_b[i].id)+"/",schema:_15});
+}
+}
+return (_8=_9);
+});
+dojo.xhr=_3;
+return _2?_8:_7;
+};
+dojox.data.PersevereStore.addProxy=function(){
+dojo.require("dojox.io.xhrPlugins");
+dojox.io.xhrPlugins.addProxy("/proxy/");
+};
+}
diff --git a/js/dojo/dojox/data/RailsStore.js b/js/dojo/dojox/data/RailsStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/RailsStore.js
@@ -0,0 +1,119 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.RailsStore"]){
+dojo._hasResource["dojox.data.RailsStore"]=true;
+dojo.provide("dojox.data.RailsStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.RailsStore",dojox.data.JsonRestStore,{constructor:function(){
+},preamble:function(_1){
+if(typeof _1.target=="string"&&!_1.service){
+var _2=_1.target.replace(/\/$/g,"");
+var _3=function(id,_4){
+_4=_4||{};
+var _5=_2;
+var _6;
+var _7;
+if(dojo.isObject(id)){
+_7="";
+_6="?"+dojo.objectToQuery(id);
+}else{
+if(_4.queryStr&&_4.queryStr.indexOf("?")!=-1){
+_7=_4.queryStr.replace(/\?.*/,"");
+_6=_4.queryStr.replace(/[^?]*\?/g,"?");
+}else{
+if(dojo.isString(_4.query)&&_4.query.indexOf("?")!=-1){
+_7=_4.query.replace(/\?.*/,"");
+_6=_4.query.replace(/[^?]*\?/g,"?");
+}else{
+_7=id?id.toString():"";
+_6="";
+}
+}
+}
+if(_7.indexOf("=")!=-1){
+_6=_7;
+_7="";
+}
+if(_7){
+_5=_5+"/"+_7+".json"+_6;
+}else{
+_5=_5+".json"+_6;
+}
+var _8=dojox.rpc._sync;
+dojox.rpc._sync=false;
+return {url:_5,handleAs:"json",contentType:"application/json",sync:_8,headers:{Accept:"application/json,application/javascript",Range:_4&&(_4.start>=0||_4.count>=0)?"items="+(_4.start||"0")+"-"+((_4.count&&(_4.count+(_4.start||0)-1))||""):undefined}};
+};
+_1.service=dojox.rpc.Rest(this.target,true,null,_3);
+}
+},fetch:function(_9){
+_9=_9||{};
+function _a(_b){
+function _c(){
+if(_9.queryStr==null){
+_9.queryStr="";
+}
+if(dojo.isObject(_9.query)){
+_9.queryStr="?"+dojo.objectToQuery(_9.query);
+}else{
+if(dojo.isString(_9.query)){
+_9.queryStr=_9.query;
+}
+}
+};
+function _d(){
+if(_9.queryStr.indexOf("?")==-1){
+return "?";
+}else{
+return "&";
+}
+};
+if(_9.queryStr==null){
+_c();
+}
+_9.queryStr=_9.queryStr+_d()+dojo.objectToQuery(_b);
+};
+if(_9.start||_9.count){
+if((_9.start||0)%_9.count){
+throw new Error("The start parameter must be a multiple of the count parameter");
+}
+_a({page:((_9.start||0)/_9.count)+1,per_page:_9.count});
+}
+if(_9.sort){
+var _e={sortBy:[],sortDir:[]};
+dojo.forEach(_9.sort,function(_f){
+_e.sortBy.push(_f.attribute);
+_e.sortDir.push(!!_f.descending?"DESC":"ASC");
+});
+_a(_e);
+delete _9.sort;
+}
+return this.inherited(arguments);
+},_processResults:function(_10,_11){
+var _12;
+if((typeof this.rootAttribute=="undefined")&&_10[0]){
+if(_10[0][this.idAttribute]){
+this.rootAttribute=false;
+}else{
+for(var _13 in _10[0]){
+if(_10[0][_13][this.idAttribute]){
+this.rootAttribute=_13;
+}
+}
+}
+}
+if(this.rootAttribute){
+_12=dojo.map(_10,function(_14){
+return _14[this.rootAttribute];
+},this);
+}else{
+_12=_10;
+}
+var _15=_10.length;
+return {totalCount:_11.fullLength||(_11.request.count==_15?(_11.request.start||0)+_15*2:_15),items:_12};
+}});
+}
diff --git a/js/dojo/dojox/data/S3Store.js b/js/dojo/dojox/data/S3Store.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/S3Store.js
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.S3Store"]){
+dojo._hasResource["dojox.data.S3Store"]=true;
+dojo.provide("dojox.data.S3Store");
+dojo.require("dojox.rpc.ProxiedPath");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.S3Store",dojox.data.JsonRestStore,{_processResults:function(_1){
+var _2=_1.getElementsByTagName("Key");
+var _3=[];
+var _4=this;
+for(var i=0;i<_2.length;i++){
+var _5=_2[i];
+var _6={_loadObject:(function(_7,_8){
+return function(_9){
+delete this._loadObject;
+_4.service(_7).addCallback(_9);
+};
+})(_5.firstChild.nodeValue,_6)};
+_3.push(_6);
+}
+return {totalCount:_3.length,items:_3};
+}});
+}
diff --git a/js/dojo/dojox/data/ServiceStore.js b/js/dojo/dojox/data/ServiceStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/ServiceStore.js
@@ -0,0 +1,154 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ServiceStore"]){
+dojo._hasResource["dojox.data.ServiceStore"]=true;
+dojo.provide("dojox.data.ServiceStore");
+dojo.declare("dojox.data.ServiceStore",dojox.data.ClientFilter,{service:null,constructor:function(_1){
+this.byId=this.fetchItemByIdentity;
+this._index={};
+if(_1){
+dojo.mixin(this,_1);
+}
+this.idAttribute=(_1&&_1.idAttribute)||(this.schema&&this.schema._idAttr);
+this.labelAttribute=this.labelAttribute||"label";
+},schema:null,idAttribute:"id",syncMode:false,estimateCountFactor:1,getSchema:function(){
+return this.schema;
+},loadLazyValues:true,getValue:function(_2,_3,_4){
+var _5=_2[_3];
+return _5||(_3 in _2?_5:_2._loadObject?(dojox.rpc._sync=true)&&arguments.callee.call(this,dojox.data.ServiceStore.prototype.loadItem({item:_2})||{},_3,_4):_4);
+},getValues:function(_6,_7){
+var _8=this.getValue(_6,_7);
+return _8 instanceof Array?_8:_8===undefined?[]:[_8];
+},getAttributes:function(_9){
+var _a=[];
+for(var i in _9){
+if(_9.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")){
+_a.push(i);
+}
+}
+return _a;
+},hasAttribute:function(_b,_c){
+return _c in _b;
+},containsValue:function(_d,_e,_f){
+return dojo.indexOf(this.getValues(_d,_e),_f)>-1;
+},isItem:function(_10){
+return (typeof _10=="object")&&_10&&!(_10 instanceof Date);
+},isItemLoaded:function(_11){
+return _11&&!_11._loadObject;
+},loadItem:function(_12){
+var _13;
+if(_12.item._loadObject){
+_12.item._loadObject(function(_14){
+_13=_14;
+delete _13._loadObject;
+var _15=_14 instanceof Error?_12.onError:_12.onItem;
+if(_15){
+_15.call(_12.scope,_14);
+}
+});
+}else{
+if(_12.onItem){
+_12.onItem.call(_12.scope,_12.item);
+}
+}
+return _13;
+},_currentId:0,_processResults:function(_16,_17){
+if(_16&&typeof _16=="object"){
+var id=_16.__id;
+if(!id){
+if(this.idAttribute){
+id=_16[this.idAttribute];
+}else{
+id=this._currentId++;
+}
+if(id!==undefined){
+var _18=this._index[id];
+if(_18){
+for(var j in _18){
+delete _18[j];
+}
+_16=dojo.mixin(_18,_16);
+}
+_16.__id=id;
+this._index[id]=_16;
+}
+}
+for(var i in _16){
+_16[i]=this._processResults(_16[i],_17).items;
+}
+var _19=_16.length;
+}
+return {totalCount:_17.request.count==_19?(_17.request.start||0)+_19*this.estimateCountFactor:_19,items:_16};
+},close:function(_1a){
+return _1a&&_1a.abort&&_1a.abort();
+},fetch:function(_1b){
+_1b=_1b||{};
+if("syncMode" in _1b?_1b.syncMode:this.syncMode){
+dojox.rpc._sync=true;
+}
+var _1c=this;
+var _1d=_1b.scope||_1c;
+var _1e=this.cachingFetch?this.cachingFetch(_1b):this._doQuery(_1b);
+_1e.request=_1b;
+_1e.addCallback(function(_1f){
+if(_1b.clientFetch){
+_1f=_1c.clientSideFetch({query:_1b.clientFetch,sort:_1b.sort,start:_1b.start,count:_1b.count},_1f);
+}
+var _20=_1c._processResults(_1f,_1e);
+_1f=_1b.results=_20.items;
+if(_1b.onBegin){
+_1b.onBegin.call(_1d,_20.totalCount,_1b);
+}
+if(_1b.onItem){
+for(var i=0;i<_1f.length;i++){
+_1b.onItem.call(_1d,_1f[i],_1b);
+}
+}
+if(_1b.onComplete){
+_1b.onComplete.call(_1d,_1b.onItem?null:_1f,_1b);
+}
+return _1f;
+});
+_1e.addErrback(_1b.onError&&function(err){
+return _1b.onError.call(_1d,err,_1b);
+});
+_1b.abort=function(){
+_1e.cancel();
+};
+_1b.store=this;
+return _1b;
+},_doQuery:function(_21){
+var _22=typeof _21.queryStr=="string"?_21.queryStr:_21.query;
+return this.service(_22);
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true,"dojo.data.api.Schema":this.schema};
+},getLabel:function(_23){
+return this.getValue(_23,this.labelAttribute);
+},getLabelAttributes:function(_24){
+return [this.labelAttribute];
+},getIdentity:function(_25){
+return _25.__id;
+},getIdentityAttributes:function(_26){
+return [this.idAttribute];
+},fetchItemByIdentity:function(_27){
+var _28=this._index[(_27._prefix||"")+_27.identity];
+if(_28){
+if(_28._loadObject){
+_27.item=_28;
+return this.loadItem(_27);
+}else{
+if(_27.onItem){
+_27.onItem.call(_27.scope,_28);
+}
+}
+}else{
+return this.fetch({query:_27.identity,onComplete:_27.onItem,onError:_27.onError,scope:_27.scope}).results;
+}
+return _28;
+}});
+}
diff --git a/js/dojo/dojox/data/SnapLogicStore.js b/js/dojo/dojox/data/SnapLogicStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/SnapLogicStore.js
@@ -0,0 +1,183 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.SnapLogicStore"]){
+dojo._hasResource["dojox.data.SnapLogicStore"]=true;
+dojo.provide("dojox.data.SnapLogicStore");
+dojo.require("dojo.io.script");
+dojo.require("dojo.data.util.sorter");
+dojo.declare("dojox.data.SnapLogicStore",null,{Parts:{DATA:"data",COUNT:"count"},url:"",constructor:function(_1){
+if(_1.url){
+this.url=_1.url;
+}
+this._parameters=_1.parameters;
+},_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.SnapLogicStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.SnapLogicStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+this._assertIsItem(_4);
+this._assertIsAttribute(_5);
+var i=dojo.indexOf(_4.attributes,_5);
+if(i!==-1){
+return _4.values[i];
+}
+return _6;
+},getAttributes:function(_7){
+this._assertIsItem(_7);
+return _7.attributes;
+},hasAttribute:function(_8,_9){
+this._assertIsItem(_8);
+this._assertIsAttribute(_9);
+for(var i=0;i<_8.attributes.length;++i){
+if(_9==_8.attributes[i]){
+return true;
+}
+}
+return false;
+},isItemLoaded:function(_a){
+return this.isItem(_a);
+},loadItem:function(_b){
+},getLabel:function(_c){
+return undefined;
+},getLabelAttributes:function(_d){
+return null;
+},containsValue:function(_e,_f,_10){
+return this.getValue(_e,_f)===_10;
+},getValues:function(_11,_12){
+this._assertIsItem(_11);
+this._assertIsAttribute(_12);
+var i=dojo.indexOf(_11.attributes,_12);
+if(i!==-1){
+return [_11.values[i]];
+}
+return [];
+},isItem:function(_13){
+if(_13&&_13._store===this){
+return true;
+}
+return false;
+},close:function(_14){
+},_fetchHandler:function(_15){
+var _16=_15.scope||dojo.global;
+if(_15.onBegin){
+_15.onBegin.call(_16,_15._countResponse[0],_15);
+}
+if(_15.onItem||_15.onComplete){
+var _17=_15._dataResponse;
+if(!_17.length){
+_15.onError.call(_16,new Error("dojox.data.SnapLogicStore: invalid response of length 0"),_15);
+return;
+}else{
+if(_15.query!="record count"){
+var _18=_17.shift();
+var _19=[];
+for(var i=0;i<_17.length;++i){
+if(_15._aborted){
+break;
+}
+_19.push({attributes:_18,values:_17[i],_store:this});
+}
+if(_15.sort&&!_15._aborted){
+_19.sort(dojo.data.util.sorter.createSortFunction(_15.sort,self));
+}
+}else{
+_19=[({attributes:["count"],values:_17,_store:this})];
+}
+}
+if(_15.onItem){
+for(var i=0;i<_19.length;++i){
+if(_15._aborted){
+break;
+}
+_15.onItem.call(_16,_19[i],_15);
+}
+_19=null;
+}
+if(_15.onComplete&&!_15._aborted){
+_15.onComplete.call(_16,_19,_15);
+}
+}
+},_partHandler:function(_1a,_1b,_1c){
+if(_1c instanceof Error){
+if(_1b==this.Parts.DATA){
+_1a._dataHandle=null;
+}else{
+_1a._countHandle=null;
+}
+_1a._aborted=true;
+if(_1a.onError){
+_1a.onError.call(_1a.scope,_1c,_1a);
+}
+}else{
+if(_1a._aborted){
+return;
+}
+if(_1b==this.Parts.DATA){
+_1a._dataResponse=_1c;
+}else{
+_1a._countResponse=_1c;
+}
+if((!_1a._dataHandle||_1a._dataResponse!==null)&&(!_1a._countHandle||_1a._countResponse!==null)){
+this._fetchHandler(_1a);
+}
+}
+},fetch:function(_1d){
+_1d._countResponse=null;
+_1d._dataResponse=null;
+_1d._aborted=false;
+_1d.abort=function(){
+if(!_1d._aborted){
+_1d._aborted=true;
+if(_1d._dataHandle&&_1d._dataHandle.cancel){
+_1d._dataHandle.cancel();
+}
+if(_1d._countHandle&&_1d._countHandle.cancel){
+_1d._countHandle.cancel();
+}
+}
+};
+if(_1d.onItem||_1d.onComplete){
+var _1e=this._parameters||{};
+if(_1d.start){
+if(_1d.start<0){
+throw new Error("dojox.data.SnapLogicStore: request start value must be 0 or greater");
+}
+_1e["sn.start"]=_1d.start+1;
+}
+if(_1d.count){
+if(_1d.count<0){
+throw new Error("dojox.data.SnapLogicStore: request count value 0 or greater");
+}
+_1e["sn.limit"]=_1d.count;
+}
+_1e["sn.content_type"]="application/javascript";
+var _1f=this;
+var _20=function(_21,_22){
+if(_21 instanceof Error){
+_1f._fetchHandler(_21,_1d);
+}
+};
+var _23={url:this.url,content:_1e,timeout:60000,callbackParamName:"sn.stream_header",handle:dojo.hitch(this,"_partHandler",_1d,this.Parts.DATA)};
+_1d._dataHandle=dojo.io.script.get(_23);
+}
+if(_1d.onBegin){
+var _1e={};
+_1e["sn.count"]="records";
+_1e["sn.content_type"]="application/javascript";
+var _23={url:this.url,content:_1e,timeout:60000,callbackParamName:"sn.stream_header",handle:dojo.hitch(this,"_partHandler",_1d,this.Parts.COUNT)};
+_1d._countHandle=dojo.io.script.get(_23);
+}
+return _1d;
+}});
+}
diff --git a/js/dojo/dojox/data/StoreExplorer.js b/js/dojo/dojox/data/StoreExplorer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/StoreExplorer.js
@@ -0,0 +1,150 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.StoreExplorer"]){
+dojo._hasResource["dojox.data.StoreExplorer"]=true;
+dojo.provide("dojox.data.StoreExplorer");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.data.ItemExplorer");
+dojo.require("dijit.layout.BorderContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.declare("dojox.data.StoreExplorer",dijit.layout.BorderContainer,{constructor:function(_1){
+dojo.mixin(this,_1);
+},store:null,stringQueries:false,postCreate:function(){
+var _2=this;
+this.inherited(arguments);
+var _3=new dijit.layout.ContentPane({region:"top"}).placeAt(this);
+function _4(_5,_6){
+var _7=new dijit.form.Button({label:_5});
+_3.containerNode.appendChild(_7.domNode);
+_7.onClick=_6;
+return _7;
+};
+var _8=_3.containerNode.appendChild(document.createElement("span"));
+_8.innerHTML="Enter query: &nbsp;";
+_8.id="queryText";
+var _9=_3.containerNode.appendChild(document.createElement("input"));
+_9.type="text";
+_9.id="queryTextBox";
+_4("Query",function(){
+var _a=_9.value;
+_2.setQuery(_2.stringQueries?_a:dojo.fromJson(_a));
+});
+_3.containerNode.appendChild(document.createElement("span")).innerHTML="&nbsp;&nbsp;&nbsp;";
+var _b=_4("Create New",dojo.hitch(this,"createNew"));
+var _c=_4("Delete",function(){
+var _d=_e.selection.getSelected();
+for(var i=0;i<_d.length;i++){
+_2.store.deleteItem(_d[i]);
+}
+});
+this.setItemName=function(_f){
+_b.attr("label","<img style='width:12px; height:12px' src='"+dojo.moduleUrl("dijit.themes.tundra.images","dndCopy.png")+"' /> Create New "+_f);
+_c.attr("label","Delete "+_f);
+};
+_4("Save",function(){
+_2.store.save({onError:function(_10){
+alert(_10);
+}});
+_2.tree.refreshItem();
+});
+_4("Revert",function(){
+_2.store.revert();
+});
+_4("Add Column",function(){
+var _11=prompt("Enter column name:","property");
+if(_11){
+_2.gridLayout.push({field:_11,name:_11,formatter:dojo.hitch(_2,"_formatCell"),editable:true});
+_2.grid.attr("structure",_2.gridLayout);
+}
+});
+var _12=new dijit.layout.ContentPane({region:"center"}).placeAt(this);
+var _e=this.grid=new dojox.grid.DataGrid({store:this.store});
+_12.attr("content",_e);
+_e.canEdit=function(_13,_14){
+var _15=this._copyAttr(_14,_13.field);
+return !(_15&&typeof _15=="object")||_15 instanceof Date;
+};
+var _16=new dijit.layout.ContentPane({region:"trailing",splitter:true,style:"width: 300px"}).placeAt(this);
+var _17=this.tree=new dojox.data.ItemExplorer({store:this.store});
+_16.attr("content",_17);
+dojo.connect(_e,"onCellClick",function(){
+var _18=_e.selection.getSelected()[0];
+_17.setItem(_18);
+});
+this.gridOnFetchComplete=_e._onFetchComplete;
+this.setStore(this.store);
+},setQuery:function(_19){
+this.grid.setQuery(_19);
+},_formatCell:function(_1a){
+if(this.store.isItem(_1a)){
+return this.store.getLabel(_1a)||this.store.getIdentity(_1a);
+}
+return _1a;
+},setStore:function(_1b){
+this.store=_1b;
+var _1c=this;
+var _1d=this.grid;
+_1d._pending_requests[0]=false;
+function _1e(_1f){
+return _1c._formatCell(_1f);
+};
+var _20=this.gridOnFetchComplete;
+_1d._onFetchComplete=function(_21,req){
+var _22=_1c.gridLayout=[];
+var _23,key,_24,i,j,k,_25=_1b.getIdentityAttributes();
+for(i=0;i<_25.length;i++){
+key=_25[i];
+_22.push({field:key,name:key,_score:100,formatter:_1e,editable:false});
+}
+for(i=0;_24=_21[i++];){
+var _26=_1b.getAttributes(_24);
+for(k=0;key=_26[k++];){
+var _27=false;
+for(j=0;_23=_22[j++];){
+if(_23.field==key){
+_23._score++;
+_27=true;
+break;
+}
+}
+if(!_27){
+_22.push({field:key,name:key,_score:1,formatter:_1e,styles:"white-space:nowrap; ",editable:true});
+}
+}
+}
+_22=_22.sort(function(a,b){
+return a._score>b._score?-1:1;
+});
+for(j=0;_23=_22[j];j++){
+if(_23._score<_21.length/40*j){
+_22.splice(j,_22.length-j);
+break;
+}
+}
+for(j=0;_23=_22[j++];){
+_23.width=Math.round(100/_22.length)+"%";
+}
+_1d._onFetchComplete=_20;
+_1d.attr("structure",_22);
+var _28=_20.apply(this,arguments);
+};
+_1d.setStore(_1b);
+this.queryOptions={cache:true};
+this.tree.setStore(_1b);
+},createNew:function(){
+var _29=prompt("Enter any properties (in JSON literal form) to put in the new item (passed to the newItem constructor):","{ }");
+if(_29){
+try{
+this.store.newItem(dojo.fromJson(_29));
+}
+catch(e){
+alert(e);
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/data/WikipediaStore.js b/js/dojo/dojox/data/WikipediaStore.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/WikipediaStore.js
@@ -0,0 +1,63 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.WikipediaStore"]){
+dojo._hasResource["dojox.data.WikipediaStore"]=true;
+dojo.provide("dojox.data.WikipediaStore");
+dojo.require("dojo.io.script");
+dojo.require("dojox.rpc.Service");
+dojo.require("dojox.data.ServiceStore");
+dojo.experimental("dojox.data.WikipediaStore");
+dojo.declare("dojox.data.WikipediaStore",dojox.data.ServiceStore,{constructor:function(_1){
+if(_1&&_1.service){
+this.service=_1.service;
+}else{
+var _2=new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc.SMDLibrary","wikipedia.smd"));
+this.service=_2.query;
+}
+this.idAttribute=this.labelAttribute="title";
+},fetch:function(_3){
+var rq=dojo.mixin({},_3.query);
+if(rq&&(!rq.action||rq.action==="parse")){
+rq.action="parse";
+rq.page=rq.title;
+delete rq.title;
+}else{
+if(rq.action==="query"){
+rq.list="search";
+rq.srwhat="text";
+rq.srsearch=rq.text;
+if(_3.start){
+rq.sroffset=_3.start-1;
+}
+if(_3.count){
+rq.srlimit=_3.count>=500?500:_3.count;
+}
+delete rq.text;
+}
+}
+_3.query=rq;
+return this.inherited(arguments);
+},_processResults:function(_4,_5){
+if(_4.parse){
+_4.parse.title=dojo.queryToObject(_5.ioArgs.url.split("?")[1]).page;
+_4=[_4.parse];
+}else{
+if(_4.query&&_4.query.search){
+_4=_4.query.search;
+var _6=this;
+for(var i in _4){
+_4[i]._loadObject=function(_7){
+_6.fetch({query:{action:"parse",title:this.title},onItem:_7});
+delete this._loadObject;
+};
+}
+}
+}
+return this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/data/css.js b/js/dojo/dojox/data/css.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/css.js
@@ -0,0 +1,91 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.css"]){
+dojo._hasResource["dojox.data.css"]=true;
+dojo.provide("dojox.data.css");
+dojo.provide("dojox.data.css.rules");
+dojox.data.css.rules.forEach=function(fn,_1,_2){
+if(_2){
+var _3=function(_4){
+dojo.forEach(_4[_4.cssRules?"cssRules":"rules"],function(_5){
+if(!_5.type||_5.type!==3){
+var _6="";
+if(_4&&_4.href){
+_6=_4.href;
+}
+fn.call(_1?_1:this,_5,_4,_6);
+}
+});
+};
+dojo.forEach(_2,_3);
+}
+};
+dojox.data.css.findStyleSheets=function(_7){
+var _8=[];
+var _9=function(_a){
+var s=dojox.data.css.findStyleSheet(_a);
+if(s){
+dojo.forEach(s,function(_b){
+if(dojo.indexOf(_8,_b)===-1){
+_8.push(_b);
+}
+});
+}
+};
+dojo.forEach(_7,_9);
+return _8;
+};
+dojox.data.css.findStyleSheet=function(_c){
+var _d=[];
+if(_c.charAt(0)==="."){
+_c=_c.substring(1);
+}
+var _e=function(_f){
+if(_f.href&&_f.href.match(_c)){
+_d.push(_f);
+return true;
+}
+if(_f.imports){
+return dojo.some(_f.imports,function(_10){
+return _e(_10);
+});
+}
+return dojo.some(_f[_f.cssRules?"cssRules":"rules"],function(_11){
+if(_11.type&&_11.type===3&&_e(_11.styleSheet)){
+return true;
+}
+return false;
+});
+};
+dojo.some(document.styleSheets,_e);
+return _d;
+};
+dojox.data.css.determineContext=function(_12){
+var ret=[];
+if(_12&&_12.length>0){
+_12=dojox.data.css.findStyleSheets(_12);
+}else{
+_12=document.styleSheets;
+}
+var _13=function(_14){
+ret.push(_14);
+if(_14.imports){
+dojo.forEach(_14.imports,function(_15){
+_13(_15);
+});
+}
+dojo.forEach(_14[_14.cssRules?"cssRules":"rules"],function(_16){
+if(_16.type&&_16.type===3){
+_13(_16.styleSheet);
+}
+});
+};
+dojo.forEach(_12,_13);
+return ret;
+};
+}
diff --git a/js/dojo/dojox/data/restListener.js b/js/dojo/dojox/data/restListener.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/restListener.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.restListener"]){
+dojo._hasResource["dojox.data.restListener"]=true;
+dojo.provide("dojox.data.restListener");
+dojox.data.restListener=function(_1){
+var _2=_1.channel;
+var jr=dojox.rpc.JsonRest;
+var _3=jr.getServiceAndId(_2).service;
+var _4=dojox.json.ref.resolveJson(_1.result,{defaultId:_1.event=="put"&&_2,index:dojox.rpc.Rest._index,idPrefix:_3.servicePath.replace(/[^\/]*$/,""),idAttribute:jr.getIdAttribute(_3),schemas:jr.schemas,loader:jr._loader,assignAbsoluteIds:true});
+var _5=dojox.rpc.Rest._index&&dojox.rpc.Rest._index[_2];
+var _6="on"+_1.event.toLowerCase();
+var _7=_3&&_3._store;
+if(_5){
+if(_5[_6]){
+_5[_6](_4);
+return;
+}
+}
+if(_7){
+switch(_6){
+case "onpost":
+_7.onNew(_4);
+break;
+case "ondelete":
+_7.onDelete(_5);
+break;
+}
+}
+};
+}
diff --git a/js/dojo/dojox/data/s3/README b/js/dojo/dojox/data/s3/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/s3/README
@@ -0,0 +1,41 @@
+Using Amazon S3 with Dojo has the following prerequisites:
+ * You must be signed up to use Amazon S3. You can sign up for Amazon S3 at http://aws.amazon.com/s3.
+ * Use the provided proxy (/dojox/rpc/s3/proxy.php) with PHP 5.
+ * proxy.php requires the following modules:
+ o Crypt_HMAC
+ o HTTP_Request
+
+
+To use S3 from Dojo, you need a proxy. You can use the provided proxy example file by renaming
+proxy.example-php to proxy.php and then you must enter your Amazon access key and secret access key
+into the proxy.php file on line 3 and 4:
+
+$accessKey = "access key";
+$secretAccessKey = "secret access key";
+
+You then use the Dojo RPC service with the "PROXIED-PATH" envelope:
+
+dojo.require("dojox.rpc.Service");
+dojo.require("dojox.rpc.ProxiedPath");
+var s3Buckets = new dojox.rpc.Service({
+ target:"http://s3.amazonaws.com/",
+ proxyUrl:"../s3/proxy.php", // the path to the proxy
+ transport:"REST",
+ envelope:"PROXIED-PATH",
+ contentType:"application/json",
+ services:{
+ myBucket:{
+ target:"myBucket",
+ parameters:[{type:"string"}]
+ }
+ }
+});
+
+
+To use the S3 as a Dojo data store you can use the S3JsonRestStore module. First setup an RPC service
+as shown above and then pass the RPC service to the S3JsonRestStore:
+
+dojo.require("dojox.data.S3JsonRestStore");
+s3Store = new dojox.data.S3JsonRestStore({service:s3Buckets.myBucket}); // and create a store for it
+
+You can then use the s3Store as a normal Read/Write Dojo Data store.
diff --git a/js/dojo/dojox/data/s3/proxy.example-php b/js/dojo/dojox/data/s3/proxy.example-php
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/s3/proxy.example-php
@@ -0,0 +1,74 @@
+<?php
+// enter your Amazon S3 secret key and access key here:
+$accessKey = "access key";
+$secretAccessKey = "secret access key";
+
+
+
+$TARGET_WS = "http://s3.amazonaws.com";
+
+ob_start();
+
+require_once 'Crypt/HMAC.php';
+require_once 'HTTP/Request.php';
+
+$method = $_SERVER["REQUEST_METHOD"];
+if ($method == "PUT") {
+ $contentType = $_SERVER['CONTENT_TYPE'];
+}
+else {
+ $contentType ='';
+}
+$resource = str_replace($TARGET_WS, '', $_REQUEST['url']);
+$queryIndex = strpos($resource,'?'); // remove the query string
+if ($queryIndex) {
+ $resource = substr($resource,0,$queryIndex);
+}
+
+if (substr($resource,strlen($resource)-1,strlen($resource)) == '/') {
+ // remove the last slash
+ $resource = substr($resource,0,strlen($resource)-1);
+}
+$content = file_get_contents('php://input');
+
+$httpDate = gmdate("D, d M Y H:i:s T");
+$acl = "private";
+$stringToSign = "$method\n\n$contentType\n$httpDate\nx-amz-acl:$acl\n$resource";
+$hashObj =& new Crypt_HMAC($secretAccessKey, "sha1");
+$signature = hexTob64($hashObj->hash($stringToSign));
+
+$req =& new HTTP_Request($TARGET_WS . $resource);
+$req->setMethod($method);
+$req->addHeader("content-type", $contentType);
+$req->addHeader("Date", $httpDate);
+$req->addHeader("x-amz-acl", $acl);
+$req->addHeader("Authorization", "AWS " . $accessKey . ":" . $signature);
+if ($content != "") {
+ $req->setBody($content);
+}
+
+$req->sendRequest();
+
+$contentType = $req->getResponseHeader("content-type");
+header("content-type: $contentType");
+header('HTTP/1.1 ' . $req->getResponseCode() . ' Ok');
+
+ob_end_flush();
+
+$content = $req->getResponseBody();
+if ($content) {
+ print($content);
+}
+else {
+ print("\"success\"");
+}
+
+function hexTob64($str) {
+ $raw = '';
+ for ($i=0; $i < strlen($str); $i+=2) {
+ $raw .= chr(hexdec(substr($str, $i, 2)));
+ }
+ return base64_encode($raw);
+}
+
+?>
\ No newline at end of file
diff --git a/js/dojo/dojox/data/util/JsonQuery.js b/js/dojo/dojox/data/util/JsonQuery.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/data/util/JsonQuery.js
@@ -0,0 +1,89 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.util.JsonQuery"]){
+dojo._hasResource["dojox.data.util.JsonQuery"]=true;
+dojo.provide("dojox.data.util.JsonQuery");
+dojo.declare("dojox.data.util.JsonQuery",null,{useFullIdInQueries:false,_toJsonQuery:function(_1,_2){
+var _3=true;
+var _4=this;
+function _5(_6,_7){
+var _8=_7.__id;
+if(_8){
+var _9={};
+_9[_4.idAttribute]=_4.useFullIdInQueries?_7.__id:_7[_4.idAttribute];
+_7=_9;
+}
+for(var i in _7){
+var _a=_7[i];
+var _b=_6+(/^[a-zA-Z_][\w_]*$/.test(i)?"."+i:"["+dojo._escapeString(i)+"]");
+if(_a&&typeof _a=="object"){
+_5(_b,_a);
+}else{
+if(_a!="*"){
+_c+=(_3?"":"&")+_b+((!_8&&typeof _a=="string"&&_1.queryOptions&&_1.queryOptions.ignoreCase)?"~":"=")+(_4.simplifiedQuery?encodeURIComponent(_a):dojo.toJson(_a));
+_3=false;
+}
+}
+}
+};
+if(_1.query&&typeof _1.query=="object"){
+var _c="[?(";
+_5("@",_1.query);
+if(!_3){
+_c+=")]";
+}else{
+_c="";
+}
+_1.queryStr=_c.replace(/\\"|"/g,function(t){
+return t=="\""?"'":t;
+});
+}else{
+if(!_1.query||_1.query=="*"){
+_1.query="";
+}
+}
+var _d=_1.sort;
+if(_d){
+_1.queryStr=_1.queryStr||(typeof _1.query=="string"?_1.query:"");
+_3=true;
+for(i=0;i<_d.length;i++){
+_1.queryStr+=(_3?"[":",")+(_d[i].descending?"\\":"/")+"@["+dojo._escapeString(_d[i].attribute)+"]";
+_3=false;
+}
+if(!_3){
+_1.queryStr+="]";
+}
+}
+if(_2&&(_1.start||_1.count)){
+_1.queryStr=(_1.queryStr||(typeof _1.query=="string"?_1.query:""))+"["+(_1.start||"")+":"+(_1.count?(_1.start||0)+_1.count:"")+"]";
+}
+if(typeof _1.queryStr=="string"){
+_1.queryStr=_1.queryStr.replace(/\\"|"/g,function(t){
+return t=="\""?"'":t;
+});
+return _1.queryStr;
+}
+return _1.query;
+},jsonQueryPagination:true,fetch:function(_e){
+this._toJsonQuery(_e,this.jsonQueryPagination);
+return this.inherited(arguments);
+},isUpdateable:function(){
+return true;
+},matchesQuery:function(_f,_10){
+_10._jsonQuery=_10._jsonQuery||dojox.json.query(this._toJsonQuery(_10));
+return _10._jsonQuery([_f]).length;
+},clientSideFetch:function(_11,_12){
+_11._jsonQuery=_11._jsonQuery||dojox.json.query(this._toJsonQuery(_11));
+return this.clientSidePaging(_11,_11._jsonQuery(_12));
+},querySuperSet:function(_13,_14){
+if(!_13.query){
+return _14.query;
+}
+return this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/date/buddhist.js b/js/dojo/dojox/date/buddhist.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/buddhist.js
@@ -0,0 +1,182 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist"]){
+dojo._hasResource["dojox.date.buddhist"]=true;
+dojo.provide("dojox.date.buddhist");
+dojo.experimental("dojox.date.buddhist");
+dojo.require("dojox.date.buddhist.Date");
+dojo.require("dojo.date");
+dojox.date.buddhist.getDaysInMonth=function(_1){
+return dojo.date.getDaysInMonth(_1.toGregorian());
+};
+dojox.date.buddhist.isLeapYear=function(_2){
+return dojo.date.isLeapYear(_2.toGregorian());
+};
+dojox.date.buddhist.compare=function(_3,_4,_5){
+return dojo.date.compare(_3,_4,_5);
+};
+dojox.date.buddhist.add=function(_6,_7,_8){
+var _9=new dojox.date.buddhist.Date(_6);
+switch(_7){
+case "day":
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "weekday":
+var _a,_b;
+var _c=_8%5;
+if(!_c){
+_a=(_8>0)?5:-5;
+_b=(_8>0)?((_8-5)/5):((_8+5)/5);
+}else{
+_a=_c;
+_b=parseInt(_8/5);
+}
+var _d=_6.getDay();
+var _e=0;
+if(_d==6&&_8>0){
+_e=1;
+}else{
+if(_d==0&&_8<0){
+_e=-1;
+}
+}
+var _f=_d+_a;
+if(_f==0||_f==6){
+_e=(_8>0)?2:-2;
+}
+_8=(7*_b)+_a+_e;
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "year":
+_9.setFullYear(_6.getFullYear()+_8);
+break;
+case "week":
+_8*=7;
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "month":
+_9.setMonth(_6.getMonth()+_8);
+break;
+case "hour":
+_9.setHours(_6.getHours()+_8);
+break;
+case "minute":
+_9.setMinutes(_6.getMinutes()+_8);
+break;
+case "second":
+_9.setSeconds(_6.getSeconds()+_8);
+break;
+case "millisecond":
+_9.setMilliseconds(_6.getMilliseconds()+_8);
+break;
+}
+return _9;
+};
+dojox.date.buddhist.difference=function(_10,_11,_12){
+_11=_11||new dojox.date.buddhist.Date();
+_12=_12||"day";
+var _13=_10.getFullYear()-_11.getFullYear();
+var _14=1;
+switch(_12){
+case "weekday":
+var _15=Math.round(dojox.date.buddhist.difference(_10,_11,"day"));
+var _16=parseInt(dojox.date.buddhist.difference(_10,_11,"week"));
+var mod=_15%7;
+if(mod==0){
+_15=_16*5;
+}else{
+var adj=0;
+var _17=_11.getDay();
+var _18=_10.getDay();
+_16=parseInt(_15/7);
+mod=_15%7;
+var _19=new dojox.date.buddhist.Date(_10);
+_19.setDate(_19.getDate(true)+(_16*7));
+var _1a=_19.getDay();
+if(_15>0){
+switch(true){
+case _17==5:
+adj=-1;
+break;
+case _17==6:
+adj=0;
+break;
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=-2;
+break;
+case (_1a+mod)>5:
+adj=-2;
+}
+}else{
+if(_15<0){
+switch(true){
+case _17==5:
+adj=0;
+break;
+case _17==6:
+adj=1;
+break;
+case _18==5:
+adj=2;
+break;
+case _18==6:
+adj=1;
+break;
+case (_1a+mod)<0:
+adj=2;
+}
+}
+}
+_15+=adj;
+_15-=(_16*2);
+}
+_14=_15;
+break;
+case "year":
+_14=_13;
+break;
+case "month":
+var _1b=(_10.toGregorian()>_11.toGregorian())?_10:_11;
+var _1c=(_10.toGregorian()>_11.toGregorian())?_11:_10;
+var _1d=_1b.getMonth();
+var _1e=_1c.getMonth();
+if(_13==0){
+_14=_1b.getMonth()-_1c.getMonth();
+}else{
+_14=12-_1e;
+_14+=_1d;
+var i=_1c.getFullYear()+1;
+var e=_1b.getFullYear();
+for(i;i<e;i++){
+_14+=12;
+}
+}
+if(_10.toGregorian()<_11.toGregorian()){
+_14=-_14;
+}
+break;
+case "week":
+_14=parseInt(dojox.date.buddhist.difference(_10,_11,"day")/7);
+break;
+case "day":
+_14/=24;
+case "hour":
+_14/=60;
+case "minute":
+_14/=60;
+case "second":
+_14/=1000;
+case "millisecond":
+_14*=_10.toGregorian().getTime()-_11.toGregorian().getTime();
+}
+return Math.round(_14);
+};
+}
diff --git a/js/dojo/dojox/date/buddhist/Date.js b/js/dojo/dojox/date/buddhist/Date.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/buddhist/Date.js
@@ -0,0 +1,223 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist.Date"]){
+dojo._hasResource["dojox.date.buddhist.Date"]=true;
+dojo.provide("dojox.date.buddhist.Date");
+dojo.experimental("dojox.date.buddhist.Date");
+dojo.declare("dojox.date.buddhist.Date",null,{_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+if(this._month>11){
+console.warn("the month is incorrect , set 0");
+this._month=0;
+}
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+},getDate:function(_3){
+return parseInt(this._date);
+},getMonth:function(){
+return parseInt(this._month);
+},getFullYear:function(){
+return parseInt(this._year);
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_4){
+_4=parseInt(_4);
+if(_4>0&&_4<=this._getDaysInMonth(this._month,this._year)){
+this._date=_4;
+}else{
+var _5;
+if(_4>0){
+for(_5=this._getDaysInMonth(this._month,this._year);_4>_5;_4-=_5,_5=this._getDaysInMonth(this._month,this._year)){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+}
+this._date=_4;
+}else{
+for(_5=this._getDaysInMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1);_4<=0;_5=this._getDaysInMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1)){
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=12;
+}
+_4+=_5;
+}
+this._date=_4;
+}
+}
+return this;
+},setFullYear:function(_6,_7,_8){
+this._year=parseInt(_6);
+},setMonth:function(_9){
+this._year+=Math.floor(_9/12);
+this._month=Math.floor(_9%12);
+for(;this._month<0;this._month=this._month+12){
+}
+},setHours:function(){
+var _a=arguments.length;
+var _b=0;
+if(_a>=1){
+_b=parseInt(arguments[0]);
+}
+if(_a>=2){
+this._minutes=parseInt(arguments[1]);
+}
+if(_a>=3){
+this._seconds=parseInt(arguments[2]);
+}
+if(_a==4){
+this._milliseconds=parseInt(arguments[3]);
+}
+while(_b>=24){
+this._date++;
+var _c=this._getDaysInMonth(this._month,this._year);
+if(this._date>_c){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_c;
+}
+_b-=24;
+}
+this._hours=_b;
+},setMinutes:function(_d){
+while(_d>=60){
+this._hours++;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _e=this._getDaysInMonth(this._month,this._year);
+if(this._date>_e){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_e;
+}
+}
+_d-=60;
+}
+this._minutes=_d;
+},setSeconds:function(_f){
+while(_f>=60){
+this._minutes++;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _10=this._getDaysInMonth(this._month,this._year);
+if(this._date>_10){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_10;
+}
+}
+}
+_f-=60;
+}
+this._seconds=_f;
+},setMilliseconds:function(_11){
+while(_11>=1000){
+this.setSeconds++;
+if(this.setSeconds>=60){
+this._minutes++;
+this.setSeconds-=60;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _12=this._getDaysInMonth(this._month,this._year);
+if(this._date>_12){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_12;
+}
+}
+}
+}
+_11-=1000;
+}
+this._milliseconds=_11;
+},toString:function(){
+return this._date+", "+this._month+", "+this._year+" "+this._hours+":"+this._minutes+":"+this._seconds;
+},_getDaysInMonth:function(_13,_14){
+return dojo.date.getDaysInMonth(new Date(_14-543,_13));
+},fromGregorian:function(_15){
+var _16=new Date(_15);
+this._date=_16.getDate();
+this._month=_16.getMonth();
+this._year=_16.getFullYear()+543;
+this._hours=_16.getHours();
+this._minutes=_16.getMinutes();
+this._seconds=_16.getSeconds();
+this._milliseconds=_16.getMilliseconds();
+this._day=_16.getDay();
+return this;
+},toGregorian:function(){
+return new Date(this._year-543,this._month,this._date,this._hours,this._minutes,this._seconds,this._milliseconds);
+},getDay:function(){
+return this.toGregorian().getDay();
+}});
+dojox.date.buddhist.Date.prototype.valueOf=function(){
+return this.toGregorian().valueOf();
+};
+}
diff --git a/js/dojo/dojox/date/buddhist/locale.js b/js/dojo/dojox/date/buddhist/locale.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/buddhist/locale.js
@@ -0,0 +1,372 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist.locale"]){
+dojo._hasResource["dojox.date.buddhist.locale"]=true;
+dojo.provide("dojox.date.buddhist.locale");
+dojo.experimental("dojox.date.buddhist.locale");
+dojo.require("dojox.date.buddhist.Date");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","buddhist",null,"th");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "G":
+s=_3["eraAbbr"][0];
+break;
+case "y":
+s=String(_2.getFullYear());
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+s=m+1;
+_8=true;
+}else{
+var _a=["months","format",_9[l-3]].join("-");
+s=_3[_a][m];
+}
+break;
+case "d":
+s=_2.getDate(true);
+_8=true;
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3[_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+default:
+throw new Error("dojox.date.buddhist.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.buddhist.locale.format=function(_d,_e){
+_e=_e||{};
+var _f=dojo.i18n.normalizeLocale(_e.locale);
+var _10=_e.formatLength||"short";
+var _11=dojox.date.buddhist.locale._getBuddhistBundle(_f);
+var str=[];
+var _12=dojo.hitch(this,_1,_d,_11,_f,_e.fullYear);
+if(_e.selector=="year"){
+var _13=_d.getFullYear();
+return _13;
+}
+if(_e.selector!="time"){
+var _14=_e.datePattern||_11["dateFormat-"+_10];
+if(_14){
+str.push(_15(_14,_12));
+}
+}
+if(_e.selector!="date"){
+var _16=_e.timePattern||_11["timeFormat-"+_10];
+if(_16){
+str.push(_15(_16,_12));
+}
+}
+var _17=str.join(" ");
+return _17;
+};
+dojox.date.buddhist.locale.regexp=function(_18){
+return dojox.date.buddhist.locale._parseInfo(_18).regexp;
+};
+dojox.date.buddhist.locale._parseInfo=function(_19){
+_19=_19||{};
+var _1a=dojo.i18n.normalizeLocale(_19.locale);
+var _1b=dojox.date.buddhist.locale._getBuddhistBundle(_1a);
+var _1c=_19.formatLength||"short";
+var _1d=_19.datePattern||_1b["dateFormat-"+_1c];
+var _1e=_19.timePattern||_1b["timeFormat-"+_1c];
+var _1f;
+if(_19.selector=="date"){
+_1f=_1d;
+}else{
+if(_19.selector=="time"){
+_1f=_1e;
+}else{
+_1f=(typeof (_1e)=="undefined")?_1d:_1d+" "+_1e;
+}
+}
+var _20=[];
+var re=_15(_1f,dojo.hitch(this,_21,_20,_1b,_19));
+return {regexp:re,tokens:_20,bundle:_1b};
+};
+dojox.date.buddhist.locale.parse=function(_22,_23){
+_22=_22.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+if(!_23){
+_23={};
+}
+var _24=dojox.date.buddhist.locale._parseInfo(_23);
+var _25=_24.tokens,_26=_24.bundle;
+var re=new RegExp("^"+_24.regexp+"$");
+var _27=re.exec(_22);
+var _28=dojo.i18n.normalizeLocale(_23.locale);
+if(!_27){
+return null;
+}
+var _29,_2a;
+var _2b=[2513,0,1,0,0,0,0];
+var _2c="";
+var _2d=0;
+var _2e=["abbr","wide","narrow"];
+var _2f=dojo.every(_27,function(v,i){
+if(!i){
+return true;
+}
+var _30=_25[i-1];
+var l=_30.length;
+switch(_30.charAt(0)){
+case "y":
+_2b[0]=Number(v);
+break;
+case "M":
+if(l>2){
+var _31=_26["months-format-"+_2e[l-3]].concat();
+if(!_23.strict){
+v=v.replace(".","").toLowerCase();
+_31=dojo.map(_31,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+v=dojo.indexOf(_31,v);
+if(v==-1){
+return false;
+}
+_2d=l;
+}else{
+v--;
+}
+_2b[1]=Number(v);
+break;
+case "D":
+_2b[1]=0;
+case "d":
+_2b[2]=Number(v);
+break;
+case "a":
+var am=_23.am||_26.am;
+var pm=_23.pm||_26.pm;
+if(!_23.strict){
+var _32=/\./g;
+v=v.replace(_32,"").toLowerCase();
+am=am.replace(_32,"").toLowerCase();
+pm=pm.replace(_32,"").toLowerCase();
+}
+if(_23.strict&&v!=am&&v!=pm){
+return false;
+}
+_2c=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2b[3]=Number(v);
+break;
+case "m":
+_2b[4]=Number(v);
+break;
+case "s":
+_2b[5]=Number(v);
+break;
+case "S":
+_2b[6]=Number(v);
+}
+return true;
+});
+var _33=+_2b[3];
+if(_2c==="p"&&_33<12){
+_2b[3]=_33+12;
+}else{
+if(_2c==="a"&&_33==12){
+_2b[3]=0;
+}
+}
+var _34=new dojox.date.buddhist.Date(_2b[0],_2b[1],_2b[2],_2b[3],_2b[4],_2b[5],_2b[6]);
+return _34;
+};
+function _15(_35,_36,_37,_38){
+var _39=function(x){
+return x;
+};
+_36=_36||_39;
+_37=_37||_39;
+_38=_38||_39;
+var _3a=_35.match(/(''|[^'])+/g);
+var _3b=_35.charAt(0)=="'";
+dojo.forEach(_3a,function(_3c,i){
+if(!_3c){
+_3a[i]="";
+}else{
+_3a[i]=(_3b?_37:_36)(_3c);
+_3b=!_3b;
+}
+});
+return _38(_3a.join(""));
+};
+function _21(_3d,_3e,_3f,_40){
+_40=dojo.regexp.escapeString(_40);
+var _41=dojo.i18n.normalizeLocale(_3f.locale);
+return _40.replace(/([a-z])\1*/ig,function(_42){
+var s;
+var c=_42.charAt(0);
+var l=_42.length;
+var p2="",p3="";
+if(_3f.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\d+";
+break;
+case "M":
+s=(l>2)?"\\S+":p2+"[1-9]|1[0-2]";
+break;
+case "d":
+s="[12]\\d|"+p2+"[1-9]|3[01]";
+break;
+case "E":
+s="\\S+";
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_3f.am||_3e.am||"AM";
+var pm=_3f.pm||_3e.pm||"PM";
+if(_3f.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3d){
+_3d.push(_42);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _43=[];
+dojox.date.buddhist.locale.addCustomFormats=function(_44,_45){
+_43.push({pkg:_44,name:_45});
+};
+dojox.date.buddhist.locale._getBuddhistBundle=function(_46){
+var _47={};
+dojo.forEach(_43,function(_48){
+var _49=dojo.i18n.getLocalization(_48.pkg,_48.name,_46);
+_47=dojo.mixin(_47,_49);
+},this);
+return _47;
+};
+})();
+dojox.date.buddhist.locale.addCustomFormats("dojo.cldr","buddhist");
+dojox.date.buddhist.locale.getNames=function(_4a,_4b,_4c,_4d,_4e){
+var _4f;
+var _50=dojox.date.buddhist.locale._getBuddhistBundle;
+var _51=[_4a,_4c,_4b];
+if(_4c=="standAlone"){
+var key=_51.join("-");
+_4f=_50(_4d)[key];
+if(_4f===_50("ROOT")[key]){
+_4f=undefined;
+}
+}
+_51[1]="format";
+return (_4f||_50(_4d)[_51.join("-")]).concat();
+};
+}
diff --git a/js/dojo/dojox/date/hebrew.js b/js/dojo/dojox/date/hebrew.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/hebrew.js
@@ -0,0 +1,191 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew"]){
+dojo._hasResource["dojox.date.hebrew"]=true;
+dojo.provide("dojox.date.hebrew");
+dojo.require("dojox.date.hebrew.Date");
+dojo.require("dojo.date");
+dojox.date.hebrew.getDaysInMonth=function(_1){
+return _1.getDaysInHebrewMonth(_1.getMonth(),_1.getFullYear());
+};
+dojox.date.hebrew.compare=function(_2,_3,_4){
+if(_2 instanceof dojox.date.hebrew.Date){
+_2=_2.toGregorian();
+}
+if(_3 instanceof dojox.date.hebrew.Date){
+_3=_3.toGregorian();
+}
+return dojo.date.compare.apply(null,arguments);
+};
+dojox.date.hebrew.add=function(_5,_6,_7){
+var _8=new dojox.date.hebrew.Date(_5);
+switch(_6){
+case "day":
+_8.setDate(_5.getDate()+_7);
+break;
+case "weekday":
+var _9=_5.getDay();
+var _a=0;
+if(_7<0&&_9==6){
+_9=5;
+_a=-1;
+}
+if((_9+_7)<5&&(_9+_7)>=0){
+_8.setDate(_5.getDate()+_7+_a);
+}else{
+var _b=(_7>0)?5:-1;
+var _c=(_7>0)?2:-2;
+if(_7>0&&(_9==5||_9==6)){
+_a=4-_9;
+_9=4;
+}
+var _d=_9+_7-_b;
+var _e=parseInt(_d/5);
+var _f=_d%5;
+_8.setDate(_5.getDate()-_9+_c+_e*7+_a+_f+_b);
+}
+break;
+case "year":
+_8.setFullYear(_5.getFullYear()+_7);
+break;
+case "week":
+_7*=7;
+_8.setDate(_5.getDate()+_7);
+break;
+case "month":
+var _10=_5.getMonth();
+var _b=_10+_7;
+if(!_5.isLeapYear(_5.getFullYear())){
+if(_10<5&&_b>=5){
+_b++;
+}else{
+if(_10>5&&_b<=5){
+_b--;
+}
+}
+}
+_8.setMonth(_b);
+break;
+case "hour":
+_8.setHours(_5.getHours()+_7);
+break;
+case "minute":
+_8.setMinutes(_5.getMinutes()+_7);
+break;
+case "second":
+_8.setSeconds(_5.getSeconds()+_7);
+break;
+case "millisecond":
+_8.setMilliseconds(_5.getMilliseconds()+_7);
+break;
+}
+return _8;
+};
+dojox.date.hebrew.difference=function(_11,_12,_13){
+_12=_12||new dojox.date.hebrew.Date();
+_13=_13||"day";
+var _14=_11.getFullYear()-_12.getFullYear();
+var _15=1;
+switch(_13){
+case "weekday":
+var _16=Math.round(dojox.date.hebrew.difference(_11,_12,"day"));
+var _17=parseInt(dojox.date.hebrew.difference(_11,_12,"week"));
+var mod=_16%7;
+if(mod==0){
+_16=_17*5;
+}else{
+var adj=0;
+var _18=_12.getDay();
+var _19=_11.getDay();
+_17=parseInt(_16/7);
+mod=_16%7;
+var _1a=new dojox.date.hebrew.Date(_12);
+_1a.setDate(_1a.getDate()+(_17*7));
+var _1b=_1a.getDay();
+if(_16>0){
+switch(true){
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=0;
+break;
+case _19==5:
+adj=-1;
+break;
+case _19==6:
+adj=-2;
+break;
+case (_1b+mod)>5:
+adj=-2;
+}
+}else{
+if(_16<0){
+switch(true){
+case _18==5:
+adj=0;
+break;
+case _18==6:
+adj=1;
+break;
+case _19==5:
+adj=2;
+break;
+case _19==6:
+adj=1;
+break;
+case (_1b+mod)<0:
+adj=2;
+}
+}
+}
+_16+=adj;
+_16-=(_17*2);
+}
+_15=_16;
+break;
+case "year":
+_15=_14;
+break;
+case "month":
+var _1c=(_11.toGregorian()>_12.toGregorian())?_11:_12;
+var _1d=(_11.toGregorian()>_12.toGregorian())?_12:_11;
+var _1e=_1c.getMonth();
+var _1f=_1d.getMonth();
+if(_14==0){
+_15=(!_11.isLeapYear(_11.getFullYear())&&_1c.getMonth()>5&&_1d.getMonth()<=5)?(_1c.getMonth()-_1d.getMonth()-1):(_1c.getMonth()-_1d.getMonth());
+}else{
+_15=(!_1d.isLeapYear(_1d.getFullYear())&&_1f<6)?(13-_1f-1):(13-_1f);
+_15+=(!_1c.isLeapYear(_1c.getFullYear())&&_1e>5)?(_1e-1):_1e;
+var i=_1d.getFullYear()+1;
+var e=_1c.getFullYear();
+for(i;i<e;i++){
+_15+=_1d.isLeapYear(i)?13:12;
+}
+}
+if(_11.toGregorian()<_12.toGregorian()){
+_15=-_15;
+}
+break;
+case "week":
+_15=parseInt(dojox.date.hebrew.difference(_11,_12,"day")/7);
+break;
+case "day":
+_15/=24;
+case "hour":
+_15/=60;
+case "minute":
+_15/=60;
+case "second":
+_15/=1000;
+case "millisecond":
+_15*=_11.toGregorian().getTime()-_12.toGregorian().getTime();
+}
+return Math.round(_15);
+};
+}
diff --git a/js/dojo/dojox/date/hebrew/Date.js b/js/dojo/dojox/date/hebrew/Date.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/hebrew/Date.js
@@ -0,0 +1,306 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.Date"]){
+dojo._hasResource["dojox.date.hebrew.Date"]=true;
+dojo.provide("dojox.date.hebrew.Date");
+dojo.require("dojox.date.hebrew.numerals");
+dojo.declare("dojox.date.hebrew.Date",null,{_MONTH_LENGTH:[[30,30,30],[29,29,30],[29,30,30],[29,29,29],[30,30,30],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29]],_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[147,148,149],[176,177,178],[206,207,208],[235,236,237],[265,266,267],[294,295,296],[324,325,326],[353,354,355]],_LEAP_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[177,178,179],[206,207,208],[236,237,238],[265,266,267],[295,296,297],[324,325,326],[354,355,356],[383,384,385]],_GREGORIAN_MONTH_COUNT:[[31,31,0,0],[28,29,31,31],[31,31,59,60],[30,30,90,91],[31,31,120,121],[30,30,151,152],[31,31,181,182],[31,31,212,213],[30,30,243,244],[31,31,273,274],[30,30,304,305],[31,31,334,335]],_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+if(this._month>12){
+console.warn("the month is incorrect , set 0 "+this._month+" "+this._year);
+this._month=0;
+}
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+this._setDay();
+},getDate:function(){
+return this._date;
+},getDateLocalized:function(_3){
+return (_3||dojo.locale).match(/^he(?:-.+)?$/)?dojox.date.hebrew.numerals.getDayHebrewLetters(this._date):this.getDate();
+},getMonth:function(){
+return this._month;
+},getFullYear:function(){
+return this._year;
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_4){
+_4=+_4;
+var _5;
+if(_4>0){
+while(_4>(_5=this.getDaysInHebrewMonth(this._month,this._year))){
+_4-=_5;
+this._month++;
+if(this._month>=13){
+this._year++;
+this._month-=13;
+}
+}
+}else{
+while(_4<=0){
+_5=this.getDaysInHebrewMonth((this._month-1)>=0?(this._month-1):12,((this._month-1)>=0)?this._year:this._year-1);
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=13;
+}
+_4+=_5;
+}
+}
+this._date=_4;
+this._setDay();
+return this;
+},setFullYear:function(_6,_7,_8){
+this._year=_6=+_6;
+if(!this.isLeapYear(_6)&&this._month==5){
+this._month++;
+}
+if(_7!==undefined){
+this.setMonth(_7);
+}
+if(_8!==undefined){
+this.setDate(_8);
+}
+var _9=this.getDaysInHebrewMonth(this._month,this._year);
+if(_9<this._date){
+this._date=_9;
+}
+this._setDay();
+return this;
+},setMonth:function(_a){
+_a=+_a;
+if(!this.isLeapYear(this._year)&&_a==5){
+_a++;
+}
+if(_a>=0){
+while(_a>12){
+this._year++;
+_a-=13;
+if(!this.isLeapYear(this._year)&&_a>=5){
+_a++;
+}
+}
+}else{
+while(_a<0){
+this._year--;
+_a+=(!this.isLeapYear(this._year)&&_a<-7)?12:13;
+}
+}
+this._month=_a;
+var _b=this.getDaysInHebrewMonth(this._month,this._year);
+if(_b<this._date){
+this._date=_b;
+}
+this._setDay();
+return this;
+},setHours:function(){
+var _c=arguments.length;
+var _d=0;
+if(_c>=1){
+_d+=+arguments[0];
+}
+if(_c>=2){
+this._minutes+=+arguments[1];
+}
+if(_c>=3){
+this._seconds+=+arguments[2];
+}
+if(_c==4){
+this._milliseconds+=+arguments[3];
+}
+while(_d>=24){
+this._date++;
+var _e=this.getDaysInHebrewMonth(this._month,this._year);
+if(this._date>_e){
+this._month++;
+if(!this.isLeapYear(this._year)&&this._month==5){
+this._month++;
+}
+if(this._month>=13){
+this._year++;
+this._month-=13;
+}
+this._date-=_e;
+}
+_d-=24;
+}
+this._hours=_d;
+this._setDay();
+return this;
+},setMinutes:function(_f){
+_f=+_f;
+this._minutes=_f%60;
+this.setHours(parseInt(_f/60));
+this._setDay();
+return this;
+},setSeconds:function(_10){
+_10=+_10;
+this._seconds=_10%60;
+this.setMinutes(parseInt(_10/60));
+this._setDay();
+return this;
+},setMilliseconds:function(_11){
+_11=+_11;
+this._milliseconds=_11%1000;
+this.setSeconds(parseInt(_11/1000));
+this._setDay();
+return this;
+},_setDay:function(){
+var day=this._startOfYear(this._year);
+if(this._month!=0){
+day+=(this.isLeapYear(this._year)?this._LEAP_MONTH_START:this._MONTH_START)[this._month][this._yearType(this._year)];
+}
+day+=this._date-1;
+this._day=(day+1)%7;
+},toString:function(){
+return this._date+", "+this._month+", "+this._year+" "+this._hours+":"+this._minutes+":"+this._seconds;
+},getDaysInHebrewMonth:function(_12,_13){
+var _14=(_12==1||_12==2)?this._yearType(_13):0;
+return (!this.isLeapYear(this._year)&&_12==5)?0:this._MONTH_LENGTH[_12][_14];
+},_yearType:function(_15){
+var _16=this._handleGetYearLength(Number(_15));
+if(_16>380){
+_16-=30;
+}
+var _17=_16-353;
+if(_17<0||_17>2){
+throw new Error("Illegal year length "+_16+" in year "+_15);
+}
+return _17;
+},_handleGetYearLength:function(_18){
+return this._startOfYear(_18+1)-this._startOfYear(_18);
+},_startOfYear:function(_19){
+var _1a=Math.floor((235*_19-234)/19),_1b=_1a*(12*1080+793)+11*1080+204,day=_1a*29+Math.floor(_1b/(24*1080));
+_1b%=24*1080;
+var wd=day%7;
+if(wd==2||wd==4||wd==6){
+day+=1;
+wd=day%7;
+}
+if(wd==1&&_1b>15*1080+204&&!this.isLeapYear(_19)){
+day+=2;
+}else{
+if(wd==0&&_1b>21*1080+589&&this.isLeapYear(_19-1)){
+day+=1;
+}
+}
+return day;
+},isLeapYear:function(_1c){
+var x=(_1c*12+17)%19;
+return x>=((x<0)?-7:12);
+},fromGregorian:function(_1d){
+var _1e=this._computeHebrewFields(_1d);
+this._year=_1e[0];
+this._month=_1e[1];
+this._date=_1e[2];
+this._hours=_1d.getHours();
+this._milliseconds=_1d.getMilliseconds();
+this._minutes=_1d.getMinutes();
+this._seconds=_1d.getSeconds();
+this._setDay();
+return this;
+},_computeHebrewFields:function(_1f){
+var _20=this._getJulianDayFromGregorianDate(_1f),d=_20-347997,m=Math.floor((d*24*1080)/(29*24*1080+12*1080+793)),_21=Math.floor((19*m+234)/235)+1,ys=this._startOfYear(_21),_22=(d-ys);
+while(_22<1){
+_21--;
+ys=this._startOfYear(_21);
+_22=d-ys;
+}
+var _23=this._yearType(_21),_24=this.isLeapYear(_21)?this._LEAP_MONTH_START:this._MONTH_START,_25=0;
+while(_22>_24[_25][_23]){
+_25++;
+}
+_25--;
+var _26=_22-_24[_25][_23];
+return [_21,_25,_26];
+},toGregorian:function(){
+var _27=this._year,_28=this._month,_29=this._date,day=this._startOfYear(_27);
+if(_28!=0){
+day+=(this.isLeapYear(_27)?this._LEAP_MONTH_START:this._MONTH_START)[_28][this._yearType(_27)];
+}
+var _2a=(_29+day+347997),_2b=_2a-1721426;
+var rem=[];
+var _2c=this._floorDivide(_2b,146097,rem),_2d=this._floorDivide(rem[0],36524,rem),n4=this._floorDivide(rem[0],1461,rem),n1=this._floorDivide(rem[0],365,rem),_2e=400*_2c+100*_2d+4*n4+n1,_2f=rem[0];
+if(_2d==4||n1==4){
+_2f=365;
+}else{
+++_2e;
+}
+var _30=!(_2e%4)&&(_2e%100||!(_2e%400)),_31=0,_32=_30?60:59;
+if(_2f>=_32){
+_31=_30?1:2;
+}
+var _33=Math.floor((12*(_2f+_31)+6)/367);
+var _34=_2f-this._GREGORIAN_MONTH_COUNT[_33][_30?3:2]+1;
+return new Date(_2e,_33,_34,this._hours,this._minutes,this._seconds,this._milliseconds);
+},_floorDivide:function(_35,_36,_37){
+if(_35>=0){
+_37[0]=(_35%_36);
+return Math.floor(_35/_36);
+}
+var _38=Math.floor(_35/_36);
+_37[0]=_35-(_38*_36);
+return _38;
+},getDay:function(){
+var _39=this._year,_3a=this._month,_3b=this._date,day=this._startOfYear(_39);
+if(_3a!=0){
+day+=(this.isLeapYear(_39)?this._LEAP_MONTH_START:this._MONTH_START)[_3a][this._yearType(_39)];
+}
+day+=_3b-1;
+return (day+1)%7;
+},_getJulianDayFromGregorianDate:function(_3c){
+var _3d=_3c.getFullYear(),_3e=_3c.getMonth(),d=_3c.getDate(),_3f=!(_3d%4)&&(_3d%100||!(_3d%400)),y=_3d-1;
+var _40=365*y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)+1721426-1;
+if(_3e!=0){
+_40+=this._GREGORIAN_MONTH_COUNT[_3e][_3f?3:2];
+}
+_40+=d;
+return _40;
+}});
+dojox.date.hebrew.Date.prototype.valueOf=function(){
+return this.toGregorian().valueOf();
+};
+}
diff --git a/js/dojo/dojox/date/hebrew/locale.js b/js/dojo/dojox/date/hebrew/locale.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/hebrew/locale.js
@@ -0,0 +1,414 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.locale"]){
+dojo._hasResource["dojox.date.hebrew.locale"]=true;
+dojo.provide("dojox.date.hebrew.locale");
+dojo.require("dojox.date.hebrew.Date");
+dojo.require("dojox.date.hebrew.numerals");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","hebrew",null,"ROOT,ar,he");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "y":
+if(_4.match(/^he(?:-.+)?$/)){
+s=dojox.date.hebrew.numerals.getYearHebrewLetters(_2.getFullYear());
+}else{
+s=String(_2.getFullYear());
+}
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+if(!_2.isLeapYear(_2.getFullYear())&&m>5){
+m--;
+}
+if(_4.match(/^he(?:-.+)?$/)){
+s=dojox.date.hebrew.numerals.getMonthHebrewLetters(m);
+}else{
+s=m+1;
+_8=true;
+}
+}else{
+var _a=["months","format",_9[l-3]].join("-");
+s=_3[_a][m];
+}
+break;
+case "d":
+if(_4.match(/^he(?:-.+)?$/)){
+s=_2.getDateLocalized(_4);
+}else{
+s=_2.getDate();
+_8=true;
+}
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3[_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+case "z":
+s="";
+break;
+default:
+throw new Error("dojox.date.hebrew.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.hebrew.locale.format=function(_d,_e){
+_e=_e||{};
+var _f=dojo.i18n.normalizeLocale(_e.locale);
+var _10=_e.formatLength||"short";
+var _11=dojox.date.hebrew.locale._getHebrewBundle(_f);
+var str=[];
+var _12=dojo.hitch(this,_1,_d,_11,_f,_e.fullYear);
+if(_e.selector=="year"){
+var _13=_d.getFullYear();
+return _f.match(/^he(?:-.+)?$/)?dojox.date.hebrew.numerals.getYearHebrewLetters(_13):_13;
+}
+if(_e.selector!="time"){
+var _14=_e.datePattern||_11["dateFormat-"+_10];
+if(_14){
+str.push(_15(_14,_12));
+}
+}
+if(_e.selector!="date"){
+var _16=_e.timePattern||_11["timeFormat-"+_10];
+if(_16){
+str.push(_15(_16,_12));
+}
+}
+var _17=str.join(" ");
+return _17;
+};
+dojox.date.hebrew.locale.regexp=function(_18){
+return dojox.date.hebrew.locale._parseInfo(_18).regexp;
+};
+dojox.date.hebrew.locale._parseInfo=function(_19){
+_19=_19||{};
+var _1a=dojo.i18n.normalizeLocale(_19.locale);
+var _1b=dojox.date.hebrew.locale._getHebrewBundle(_1a);
+var _1c=_19.formatLength||"short";
+var _1d=_19.datePattern||_1b["dateFormat-"+_1c];
+var _1e=_19.timePattern||_1b["timeFormat-"+_1c];
+var _1f;
+if(_19.selector=="date"){
+_1f=_1d;
+}else{
+if(_19.selector=="time"){
+_1f=_1e;
+}else{
+_1f=(_1e===undefined)?_1d:_1d+" "+_1e;
+}
+}
+var _20=[];
+var re=_15(_1f,dojo.hitch(this,_21,_20,_1b,_19));
+return {regexp:re,tokens:_20,bundle:_1b};
+};
+dojox.date.hebrew.locale.parse=function(_22,_23){
+_22=_22.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+if(!_23){
+_23={};
+}
+var _24=dojox.date.hebrew.locale._parseInfo(_23);
+var _25=_24.tokens,_26=_24.bundle;
+var re=new RegExp("^"+_24.regexp+"$");
+var _27=re.exec(_22);
+var _28=dojo.i18n.normalizeLocale(_23.locale);
+if(!_27){
+return null;
+}
+var _29,_2a;
+var _2b=[5730,3,23,0,0,0,0];
+var _2c="";
+var _2d=0;
+var _2e=["abbr","wide","narrow"];
+var _2f=dojo.every(_27,function(v,i){
+if(!i){
+return true;
+}
+var _30=_25[i-1];
+var l=_30.length;
+switch(_30.charAt(0)){
+case "y":
+if(_28.match(/^he(?:-.+)?$/)){
+_2b[0]=dojox.date.hebrew.numerals.parseYearHebrewLetters(v);
+}else{
+_2b[0]=Number(v);
+}
+break;
+case "M":
+if(l>2){
+var _31=_26["months-format-"+_2e[l-3]].concat();
+if(!_23.strict){
+v=v.replace(".","").toLowerCase();
+_31=dojo.map(_31,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+v=dojo.indexOf(_31,v);
+if(v==-1){
+return false;
+}
+_2d=l;
+}else{
+if(_28.match(/^he(?:-.+)?$/)){
+v=dojox.date.hebrew.numerals.parseMonthHebrewLetters(v);
+}else{
+v--;
+}
+}
+_2b[1]=Number(v);
+break;
+case "D":
+_2b[1]=0;
+case "d":
+if(_28.match(/^he(?:-.+)?$/)){
+_2b[2]=dojox.date.hebrew.numerals.parseDayHebrewLetters(v);
+}else{
+_2b[2]=Number(v);
+}
+break;
+case "a":
+var am=_23.am||_26.am;
+var pm=_23.pm||_26.pm;
+if(!_23.strict){
+var _32=/\./g;
+v=v.replace(_32,"").toLowerCase();
+am=am.replace(_32,"").toLowerCase();
+pm=pm.replace(_32,"").toLowerCase();
+}
+if(_23.strict&&v!=am&&v!=pm){
+return false;
+}
+_2c=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2b[3]=Number(v);
+break;
+case "m":
+_2b[4]=Number(v);
+break;
+case "s":
+_2b[5]=Number(v);
+break;
+case "S":
+_2b[6]=Number(v);
+}
+return true;
+});
+var _33=+_2b[3];
+if(_2c==="p"&&_33<12){
+_2b[3]=_33+12;
+}else{
+if(_2c==="a"&&_33==12){
+_2b[3]=0;
+}
+}
+var _34=new dojox.date.hebrew.Date(_2b[0],_2b[1],_2b[2],_2b[3],_2b[4],_2b[5],_2b[6]);
+if(_2d<3&&_2b[1]>=5&&!_34.isLeapYear(_34.getFullYear())){
+_34.setMonth(_2b[1]+1);
+}
+return _34;
+};
+function _15(_35,_36,_37,_38){
+var _39=function(x){
+return x;
+};
+_36=_36||_39;
+_37=_37||_39;
+_38=_38||_39;
+var _3a=_35.match(/(''|[^'])+/g);
+var _3b=_35.charAt(0)=="'";
+dojo.forEach(_3a,function(_3c,i){
+if(!_3c){
+_3a[i]="";
+}else{
+_3a[i]=(_3b?_37:_36)(_3c);
+_3b=!_3b;
+}
+});
+return _38(_3a.join(""));
+};
+function _21(_3d,_3e,_3f,_40){
+_40=dojo.regexp.escapeString(_40);
+var _41=dojo.i18n.normalizeLocale(_3f.locale);
+return _40.replace(/([a-z])\1*/ig,function(_42){
+var s;
+var c=_42.charAt(0);
+var l=_42.length;
+var p2="",p3="";
+if(_3f.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\S+";
+break;
+case "M":
+if(_41.match("^he(?:-.+)?$")){
+s=(l>2)?"\\S+ ?\\S+":"\\S{1,4}";
+}else{
+s=(l>2)?"\\S+ ?\\S+":p2+"[1-9]|1[0-2]";
+}
+break;
+case "d":
+if(_41.match("^he(?:-.+)?$")){
+s="\\S['\"'׳]{1,2}\\S?";
+}else{
+s="[12]\\d|"+p2+"[1-9]|30";
+}
+break;
+case "E":
+if(_41.match("^he(?:-.+)?$")){
+s=(l>3)?"\\S+ ?\\S+":"\\S";
+}else{
+s="\\S+";
+}
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_3f.am||_3e.am||"AM";
+var pm=_3f.pm||_3e.pm||"PM";
+if(_3f.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3d){
+_3d.push(_42);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _43=[];
+dojox.date.hebrew.locale.addCustomFormats=function(_44,_45){
+_43.push({pkg:_44,name:_45});
+};
+dojox.date.hebrew.locale._getHebrewBundle=function(_46){
+var _47={};
+dojo.forEach(_43,function(_48){
+var _49=dojo.i18n.getLocalization(_48.pkg,_48.name,_46);
+_47=dojo.mixin(_47,_49);
+},this);
+return _47;
+};
+})();
+dojox.date.hebrew.locale.addCustomFormats("dojo.cldr","hebrew");
+dojox.date.hebrew.locale.getNames=function(_4a,_4b,_4c,_4d,_4e){
+var _4f;
+var _50=dojox.date.hebrew.locale._getHebrewBundle;
+var _51=[_4a,_4c,_4b];
+if(_4c=="standAlone"){
+var key=_51.join("-");
+_4f=_50(_4d)[key];
+if(_4f===_50("ROOT")[key]){
+_4f=undefined;
+}
+}
+_51[1]="format";
+return (_4f||_50(_4d)[_51.join("-")]).concat();
+};
+}
diff --git a/js/dojo/dojox/date/hebrew/numerals.js b/js/dojo/dojox/date/hebrew/numerals.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/hebrew/numerals.js
@@ -0,0 +1,103 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.numerals"]){
+dojo._hasResource["dojox.date.hebrew.numerals"]=true;
+dojo.provide("dojox.date.hebrew.numerals");
+(function(){
+var _1="אבגדהוזחט";
+var _2="יכלמנסעפצ";
+var _3="קרשת";
+var _4=function(_5,_6){
+_5=_5.replace("יה","טו").replace("יו","טז");
+if(!_6){
+var _7=_5.length;
+if(_7>1){
+_5=_5.substr(0,_7-1)+"\""+_5.charAt(_7-1);
+}else{
+_5+="׳";
+}
+}
+return _5;
+};
+var _8=function(_9){
+var _a=0;
+dojo.forEach(_9,function(ch){
+var i;
+if((i=_1.indexOf(ch))!=-1){
+_a+=++i;
+}else{
+if((i=_2.indexOf(ch))!=-1){
+_a+=10*++i;
+}else{
+if((i=_3.indexOf(ch))!=-1){
+_a+=100*++i;
+}
+}
+}
+});
+return _a;
+};
+var _b=function(_c){
+var _d="",n=4,j=9;
+while(_c){
+if(_c>=n*100){
+_d+=_3.charAt(n-1);
+_c-=n*100;
+continue;
+}else{
+if(n>1){
+n--;
+continue;
+}else{
+if(_c>=j*10){
+_d+=_2.charAt(j-1);
+_c-=j*10;
+}else{
+if(j>1){
+j--;
+continue;
+}else{
+if(_c>0){
+_d+=_1.charAt(_c-1);
+_c=0;
+}
+}
+}
+}
+}
+}
+return _d;
+};
+dojox.date.hebrew.numerals.getYearHebrewLetters=function(_e){
+var y=_e%1000;
+if(!y){
+throw new Error("Hebrew year "+_e+" is not in range 5001-5999");
+}
+return _4(_b(y));
+};
+dojox.date.hebrew.numerals.parseYearHebrewLetters=function(_f){
+return _8(_f)+5000;
+};
+dojox.date.hebrew.numerals.getDayHebrewLetters=function(day,_10){
+return _4(_b(day),_10);
+};
+dojox.date.hebrew.numerals.parseDayHebrewLetters=function(day){
+return _8(day);
+};
+dojox.date.hebrew.numerals.getMonthHebrewLetters=function(_11){
+return _4(_b(_11+1));
+};
+dojox.date.hebrew.numerals.parseMonthHebrewLetters=function(_12){
+var _13=dojox.date.hebrew.numerals.parseDayHebrewLetters(_12)-1;
+if(_13==-1||_13>12){
+throw new Error("The month name is incorrect , month = "+_13);
+}
+return _13;
+};
+})();
+}
diff --git a/js/dojo/dojox/date/islamic.js b/js/dojo/dojox/date/islamic.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/islamic.js
@@ -0,0 +1,185 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic"]){
+dojo._hasResource["dojox.date.islamic"]=true;
+dojo.provide("dojox.date.islamic");
+dojo.experimental("dojox.date.islamic");
+dojo.require("dojox.date.islamic.Date");
+dojo.require("dojo.date");
+dojox.date.islamic.getDaysInMonth=function(_1){
+return _1.getDaysInIslamicMonth(_1.getMonth(),_1.getFullYear());
+};
+dojox.date.islamic.compare=function(_2,_3,_4){
+if(_2 instanceof dojox.date.islamic.Date){
+_2=_2.toGregorian();
+}
+if(_3 instanceof dojox.date.islamic.Date){
+_3=_3.toGregorian();
+}
+return dojo.date.compare.apply(null,arguments);
+};
+dojox.date.islamic.add=function(_5,_6,_7){
+var _8=new dojox.date.islamic.Date(_5);
+switch(_6){
+case "day":
+_8.setDate(_5.getDate()+_7);
+break;
+case "weekday":
+var _9=_5.getDay();
+if(((_9+_7)<5)&&((_9+_7)>0)){
+_8.setDate(_5.getDate()+_7);
+}else{
+var _a=0,_b=0;
+if(_9==5){
+_9=4;
+_b=(_7>0)?-1:1;
+}else{
+if(_9==6){
+_9=4;
+_b=(_7>0)?-2:2;
+}
+}
+var _c=(_7>0)?(5-_9-1):-_9;
+var _d=_7-_c;
+var _e=parseInt(_d/5);
+if(_d%5!=0){
+_a=(_7>0)?2:-2;
+}
+_a=_a+_e*7+_d%5+_c;
+_8.setDate(_5.getDate()+_a+_b);
+}
+break;
+case "year":
+_8.setFullYear(_5.getFullYear()+_7);
+break;
+case "week":
+_7*=7;
+_8.setDate(_5.getDate()+_7);
+break;
+case "month":
+var _f=_5.getMonth();
+_8.setMonth(_f+_7);
+break;
+case "hour":
+_8.setHours(_5.getHours()+_7);
+break;
+case "minute":
+_8.setMinutes(_5.getMinutes()+_7);
+break;
+case "second":
+_8.setSeconds(_5.getSeconds()+_7);
+break;
+case "millisecond":
+_8.setMilliseconds(_5.getMilliseconds()+_7);
+break;
+}
+return _8;
+};
+dojox.date.islamic.difference=function(_10,_11,_12){
+_11=_11||new dojox.date.islamic.Date();
+_12=_12||"day";
+var _13=_10.getFullYear()-_11.getFullYear();
+var _14=1;
+switch(_12){
+case "weekday":
+var _15=Math.round(dojox.date.islamic.difference(_10,_11,"day"));
+var _16=parseInt(dojox.date.islamic.difference(_10,_11,"week"));
+var mod=_15%7;
+if(mod==0){
+_15=_16*5;
+}else{
+var adj=0;
+var _17=_11.getDay();
+var _18=_10.getDay();
+_16=parseInt(_15/7);
+mod=_15%7;
+var _19=new dojox.date.islamic.Date(_11);
+_19.setDate(_19.getDate()+(_16*7));
+var _1a=_19.getDay();
+if(_15>0){
+switch(true){
+case _17==5:
+adj=-1;
+break;
+case _17==6:
+adj=0;
+break;
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=-2;
+break;
+case (_1a+mod)>5:
+adj=-2;
+}
+}else{
+if(_15<0){
+switch(true){
+case _17==5:
+adj=0;
+break;
+case _17==6:
+adj=1;
+break;
+case _18==5:
+adj=2;
+break;
+case _18==6:
+adj=1;
+break;
+case (_1a+mod)<0:
+adj=2;
+}
+}
+}
+_15+=adj;
+_15-=(_16*2);
+}
+_14=_15;
+break;
+case "year":
+_14=_13;
+break;
+case "month":
+var _1b=(_10.toGregorian()>_11.toGregorian())?_10:_11;
+var _1c=(_10.toGregorian()>_11.toGregorian())?_11:_10;
+var _1d=_1b.getMonth();
+var _1e=_1c.getMonth();
+if(_13==0){
+_14=_1b.getMonth()-_1c.getMonth();
+}else{
+_14=12-_1e;
+_14+=_1d;
+var i=_1c.getFullYear()+1;
+var e=_1b.getFullYear();
+for(i;i<e;i++){
+_14+=12;
+}
+}
+if(_10.toGregorian()<_11.toGregorian()){
+_14=-_14;
+}
+break;
+case "week":
+_14=parseInt(dojox.date.islamic.difference(_10,_11,"day")/7);
+break;
+case "day":
+_14/=24;
+case "hour":
+_14/=60;
+case "minute":
+_14/=60;
+case "second":
+_14/=1000;
+case "millisecond":
+_14*=_10.toGregorian().getTime()-_11.toGregorian().getTime();
+}
+return Math.round(_14);
+};
+}
diff --git a/js/dojo/dojox/date/islamic/Date.js b/js/dojo/dojox/date/islamic/Date.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/islamic/Date.js
@@ -0,0 +1,267 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic.Date"]){
+dojo._hasResource["dojox.date.islamic.Date"]=true;
+dojo.provide("dojox.date.islamic.Date");
+dojo.experimental("dojox.date.islamic.Date");
+dojo.require("dojo.date");
+dojo.requireLocalization("dojo.cldr","islamic",null,"ROOT,ar,he");
+dojo.declare("dojox.date.islamic.Date",null,{_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,_GREGORIAN_EPOCH:1721425.5,_ISLAMIC_EPOCH:1948439.5,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+},getDate:function(){
+return this._date;
+},getMonth:function(){
+return this._month;
+},getFullYear:function(){
+return this._year;
+},getDay:function(){
+return this.toGregorian().getDay();
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_3){
+_3=parseInt(_3);
+if(_3>0&&_3<=this.getDaysInIslamicMonth(this._month,this._year)){
+this._date=_3;
+}else{
+var _4;
+if(_3>0){
+for(_4=this.getDaysInIslamicMonth(this._month,this._year);_3>_4;_3-=_4,_4=this.getDaysInIslamicMonth(this._month,this._year)){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+}
+this._date=_3;
+}else{
+for(_4=this.getDaysInIslamicMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1);_3<=0;_4=this.getDaysInIslamicMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1)){
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=12;
+}
+_3+=_4;
+}
+this._date=_3;
+}
+}
+return this;
+},setFullYear:function(_5){
+this._year=+_5;
+},setMonth:function(_6){
+this._year+=Math.floor(_6/12);
+this._month=Math.floor(_6%12);
+},setHours:function(){
+var _7=arguments.length;
+var _8=0;
+if(_7>=1){
+_8=parseInt(arguments[0]);
+}
+if(_7>=2){
+this._minutes=parseInt(arguments[1]);
+}
+if(_7>=3){
+this._seconds=parseInt(arguments[2]);
+}
+if(_7==4){
+this._milliseconds=parseInt(arguments[3]);
+}
+while(_8>=24){
+this._date++;
+var _9=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_9){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_9;
+}
+_8-=24;
+}
+this._hours=_8;
+},setMinutes:function(_a){
+while(_a>=60){
+this._hours++;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _b=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_b){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_b;
+}
+}
+_a-=60;
+}
+this._minutes=_a;
+},setSeconds:function(_c){
+while(_c>=60){
+this._minutes++;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _d=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_d){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_d;
+}
+}
+}
+_c-=60;
+}
+this._seconds=_c;
+},setMilliseconds:function(_e){
+while(_e>=1000){
+this.setSeconds++;
+if(this.setSeconds>=60){
+this._minutes++;
+this.setSeconds-=60;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _f=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_f){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_f;
+}
+}
+}
+}
+_e-=1000;
+}
+this._milliseconds=_e;
+},toString:function(){
+var x=new Date();
+x.setHours(this._hours);
+x.setMinutes(this._minutes);
+x.setSeconds(this._seconds);
+x.setMilliseconds(this._milliseconds);
+return (this._month+" "+this._date+" "+this._year+" "+x.toTimeString());
+},toGregorian:function(){
+var _10=this._year;
+var _11=this._month;
+var _12=this._date;
+var _13=_12+Math.ceil(29.5*_11)+(_10-1)*354+Math.floor((3+(11*_10))/30)+this._ISLAMIC_EPOCH-1;
+var wjd=Math.floor(_13-0.5)+0.5,_14=wjd-this._GREGORIAN_EPOCH,_15=Math.floor(_14/146097),dqc=this._mod(_14,146097),_16=Math.floor(dqc/36524),_17=this._mod(dqc,36524),_18=Math.floor(_17/1461),_19=this._mod(_17,1461),_1a=Math.floor(_19/365),_1b=(_15*400)+(_16*100)+(_18*4)+_1a;
+if(!(_16==4||_1a==4)){
+_1b++;
+}
+var _1c=this._GREGORIAN_EPOCH+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400);
+var _1d=wjd-_1c;
+var tjd=(this._GREGORIAN_EPOCH-1)+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400)+Math.floor((739/12)+((dojo.date.isLeapYear(new Date(_1b,3,1))?-1:-2))+1);
+var _1e=((wjd<tjd)?0:(dojo.date.isLeapYear(new Date(_1b,3,1))?1:2));
+var _1f=Math.floor((((_1d+_1e)*12)+373)/367);
+var _20=(this._GREGORIAN_EPOCH-1)+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400)+Math.floor((((367*_1f)-362)/12)+((_1f<=2)?0:(dojo.date.isLeapYear(new Date(_1b,_1f,1))?-1:-2))+1);
+var day=(wjd-_20);
+var _21=new Date(_1b,_1f-1,day);
+_21.setHours(this._hours);
+_21.setMilliseconds(this._milliseconds);
+_21.setMinutes(this._minutes);
+_21.setSeconds(this._seconds);
+return _21;
+},fromGregorian:function(_22){
+var _23=new Date(_22);
+var _24=_23.getFullYear(),_25=_23.getMonth(),_26=_23.getDate();
+var _27=(this._GREGORIAN_EPOCH-1)+(365*(_24-1))+Math.floor((_24-1)/4)+(-Math.floor((_24-1)/100))+Math.floor((_24-1)/400)+Math.floor((((367*(_25+1))-362)/12)+(((_25+1)<=2)?0:(dojo.date.isLeapYear(_23)?-1:-2))+_26)+(Math.floor(_23.getSeconds()+60*(_23.getMinutes()+60*_23.getHours())+0.5)/86400);
+_27=Math.floor(_27)+0.5;
+var _28=_27-1948440;
+var _29=Math.floor((30*_28+10646)/10631);
+var _2a=Math.ceil((_28-29-this._yearStart(_29))/29.5);
+_2a=Math.min(_2a,11);
+var _2b=Math.ceil(_28-this._monthStart(_29,_2a))+1;
+this._date=_2b;
+this._month=_2a;
+this._year=_29;
+this._hours=_23.getHours();
+this._minutes=_23.getMinutes();
+this._seconds=_23.getSeconds();
+this._milliseconds=_23.getMilliseconds();
+this._day=_23.getDay();
+return this;
+},valueOf:function(){
+return this.toGregorian().valueOf();
+},_yearStart:function(_2c){
+return (_2c-1)*354+Math.floor((3+11*_2c)/30);
+},_monthStart:function(_2d,_2e){
+return Math.ceil(29.5*_2e)+(_2d-1)*354+Math.floor((3+11*_2d)/30);
+},_civilLeapYear:function(_2f){
+return (14+11*_2f)%30<11;
+},getDaysInIslamicMonth:function(_30,_31){
+var _32=0;
+_32=29+((_30+1)%2);
+if(_30==11&&this._civilLeapYear(_31)){
+_32++;
+}
+return _32;
+},_mod:function(a,b){
+return a-(b*Math.floor(a/b));
+}});
+dojox.date.islamic.Date.getDaysInIslamicMonth=function(_33){
+return new dojox.date.islamic.Date().getDaysInIslamicMonth(_33.getMonth(),_33.getFullYear());
+};
+}
diff --git a/js/dojo/dojox/date/islamic/locale.js b/js/dojo/dojox/date/islamic/locale.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/islamic/locale.js
@@ -0,0 +1,374 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic.locale"]){
+dojo._hasResource["dojox.date.islamic.locale"]=true;
+dojo.provide("dojox.date.islamic.locale");
+dojo.experimental("dojox.date.islamic.locale");
+dojo.require("dojox.date.islamic.Date");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","islamic",null,"ROOT,ar,he");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "G":
+s=_3["eraAbbr"][0];
+break;
+case "y":
+s=String(_2.getFullYear());
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+s=m+1;
+_8=true;
+}else{
+var _a=["months","format",_9[l-3]].join("-");
+s=_3[_a][m];
+}
+break;
+case "d":
+s=_2.getDate(true);
+_8=true;
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3[_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+default:
+throw new Error("dojox.date.islamic.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.islamic.locale.format=function(_d,_e){
+_e=_e||{};
+var _f=dojo.i18n.normalizeLocale(_e.locale);
+var _10=_e.formatLength||"short";
+var _11=dojox.date.islamic.locale._getIslamicBundle(_f);
+var str=[];
+var _12=dojo.hitch(this,_1,_d,_11,_f,_e.fullYear);
+if(_e.selector=="year"){
+var _13=_d.getFullYear();
+return _13;
+}
+if(_e.selector!="time"){
+var _14=_e.datePattern||_11["dateFormat-"+_10];
+if(_14){
+str.push(_15(_14,_12));
+}
+}
+if(_e.selector!="date"){
+var _16=_e.timePattern||_11["timeFormat-"+_10];
+if(_16){
+str.push(_15(_16,_12));
+}
+}
+var _17=str.join(" ");
+return _17;
+};
+dojox.date.islamic.locale.regexp=function(_18){
+return dojox.date.islamic.locale._parseInfo(_18).regexp;
+};
+dojox.date.islamic.locale._parseInfo=function(_19){
+_19=_19||{};
+var _1a=dojo.i18n.normalizeLocale(_19.locale);
+var _1b=dojox.date.islamic.locale._getIslamicBundle(_1a);
+var _1c=_19.formatLength||"short";
+var _1d=_19.datePattern||_1b["dateFormat-"+_1c];
+var _1e=_19.timePattern||_1b["timeFormat-"+_1c];
+var _1f;
+if(_19.selector=="date"){
+_1f=_1d;
+}else{
+if(_19.selector=="time"){
+_1f=_1e;
+}else{
+_1f=(typeof (_1e)=="undefined")?_1d:_1d+" "+_1e;
+}
+}
+var _20=[];
+var re=_15(_1f,dojo.hitch(this,_21,_20,_1b,_19));
+return {regexp:re,tokens:_20,bundle:_1b};
+};
+dojox.date.islamic.locale.parse=function(_22,_23){
+_22=_22.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+if(!_23){
+_23={};
+}
+var _24=dojox.date.islamic.locale._parseInfo(_23);
+var _25=_24.tokens,_26=_24.bundle;
+var re=new RegExp("^"+_24.regexp+"$");
+var _27=re.exec(_22);
+var _28=dojo.i18n.normalizeLocale(_23.locale);
+if(!_27){
+return null;
+}
+var _29,_2a;
+var _2b=[1389,0,1,0,0,0,0];
+var _2c="";
+var _2d=0;
+var _2e=["abbr","wide","narrow"];
+var _2f=dojo.every(_27,function(v,i){
+if(!i){
+return true;
+}
+var _30=_25[i-1];
+var l=_30.length;
+switch(_30.charAt(0)){
+case "y":
+_2b[0]=Number(v);
+break;
+case "M":
+if(l>2){
+var _31=_26["months-format-"+_2e[l-3]].concat();
+if(!_23.strict){
+v=v.replace(".","").toLowerCase();
+_31=dojo.map(_31,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+v=dojo.indexOf(_31,v);
+if(v==-1){
+return false;
+}
+_2d=l;
+}else{
+v--;
+}
+_2b[1]=Number(v);
+break;
+case "D":
+_2b[1]=0;
+case "d":
+_2b[2]=Number(v);
+break;
+case "a":
+var am=_23.am||_26.am;
+var pm=_23.pm||_26.pm;
+if(!_23.strict){
+var _32=/\./g;
+v=v.replace(_32,"").toLowerCase();
+am=am.replace(_32,"").toLowerCase();
+pm=pm.replace(_32,"").toLowerCase();
+}
+if(_23.strict&&v!=am&&v!=pm){
+return false;
+}
+_2c=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2b[3]=Number(v);
+break;
+case "m":
+_2b[4]=Number(v);
+break;
+case "s":
+_2b[5]=Number(v);
+break;
+case "S":
+_2b[6]=Number(v);
+}
+return true;
+});
+var _33=+_2b[3];
+if(_2c==="p"&&_33<12){
+_2b[3]=_33+12;
+}else{
+if(_2c==="a"&&_33==12){
+_2b[3]=0;
+}
+}
+var _34=new dojox.date.islamic.Date(_2b[0],_2b[1],_2b[2],_2b[3],_2b[4],_2b[5],_2b[6]);
+return _34;
+};
+function _15(_35,_36,_37,_38){
+var _39=function(x){
+return x;
+};
+_36=_36||_39;
+_37=_37||_39;
+_38=_38||_39;
+var _3a=_35.match(/(''|[^'])+/g);
+var _3b=_35.charAt(0)=="'";
+dojo.forEach(_3a,function(_3c,i){
+if(!_3c){
+_3a[i]="";
+}else{
+_3a[i]=(_3b?_37:_36)(_3c);
+_3b=!_3b;
+}
+});
+return _38(_3a.join(""));
+};
+function _21(_3d,_3e,_3f,_40){
+_40=dojo.regexp.escapeString(_40);
+var _41=dojo.i18n.normalizeLocale(_3f.locale);
+return _40.replace(/([a-z])\1*/ig,function(_42){
+var s;
+var c=_42.charAt(0);
+var l=_42.length;
+var p2="",p3="";
+if(_3f.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\d+";
+break;
+case "M":
+s=(l>2)?"\\S+":p2+"[1-9]|1[0-2]";
+break;
+case "d":
+s="[12]\\d|"+p2+"[1-9]|3[01]";
+break;
+case "E":
+s="\\S+";
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_3f.am||_3e.am||"AM";
+var pm=_3f.pm||_3e.pm||"PM";
+if(_3f.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3d){
+_3d.push(_42);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _43=[];
+dojox.date.islamic.locale.addCustomFormats=function(_44,_45){
+_43.push({pkg:_44,name:_45});
+};
+dojox.date.islamic.locale._getIslamicBundle=function(_46){
+var _47={};
+dojo.forEach(_43,function(_48){
+var _49=dojo.i18n.getLocalization(_48.pkg,_48.name,_46);
+_47=dojo.mixin(_47,_49);
+},this);
+return _47;
+};
+})();
+dojox.date.islamic.locale.addCustomFormats("dojo.cldr","islamic");
+dojox.date.islamic.locale.getNames=function(_4a,_4b,_4c,_4d,_4e){
+var _4f;
+var _50=dojox.date.islamic.locale._getIslamicBundle;
+var _51=[_4a,_4c,_4b];
+if(_4c=="standAlone"){
+var key=_51.join("-");
+_4f=_50(_4d)[key];
+if(_4f===_50("ROOT")[key]){
+_4f=undefined;
+}
+}
+_51[1]="format";
+return (_4f||_50(_4d)[_51.join("-")]).concat();
+};
+dojox.date.islamic.locale.weekDays=dojox.date.islamic.locale.getNames("days","wide","format");
+dojox.date.islamic.locale.months=dojox.date.islamic.locale.getNames("months","wide","format");
+}
diff --git a/js/dojo/dojox/date/relative.js b/js/dojo/dojox/date/relative.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/relative.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.relative"]){
+dojo._hasResource["dojox.date.relative"]=true;
+dojo.provide("dojox.date.relative");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+(function(d){
+var _1=1000*60*60*24;
+var _2=6*_1;
+var _3=d.delegate;
+var _4=d.date.locale;
+var _5=_4._getGregorianBundle;
+var _6=_4.format;
+function _7(_8){
+_8=dojo.clone(_8);
+_8.setHours(0);
+_8.setMinutes(0);
+_8.setSeconds(0);
+_8.setMilliseconds(0);
+return _8;
+};
+dojox.date.relative.format=function(_9,_a){
+_a=_a||{};
+var _b=_7(_a.relativeDate||new Date());
+var _c=_b.getTime()-_7(_9).getTime();
+var _d={locale:_a.locale};
+if(_c===0){
+return _6(_9,_3(_d,{selector:"time"}));
+}else{
+if(_c<=_2&&_c>0&&_a.weekCheck!==false){
+return _6(_9,_3(_d,{selector:"date",datePattern:"EEE"}))+" "+_6(_9,_3(_d,{selector:"time",formatLength:"short"}));
+}else{
+if(_9.getFullYear()==_b.getFullYear()){
+var _e=_5(dojo.i18n.normalizeLocale(_a.locale));
+return _6(_9,_3(_d,{selector:"date",datePattern:_e["dateFormatItem-MMMd"]}));
+}else{
+return _6(_9,_3(_d,{selector:"date",formatLength:"medium",locale:_a.locale}));
+}
+}
+}
+};
+})(dojo);
+}
diff --git a/js/dojo/dojox/date/timezone.js b/js/dojo/dojox/date/timezone.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/timezone.js
@@ -0,0 +1,445 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.timezone"]){
+dojo._hasResource["dojox.date.timezone"]=true;
+dojo.experimental("dojox.date.timezone");
+dojo.provide("dojox.date.timezone");
+dojo.require("dojo.date.locale");
+(function(_1){
+var _2=_1.config;
+var _3=["africa","antarctica","asia","australasia","backward","etcetera","europe","northamerica","pacificnew","southamerica"];
+var _4=1835;
+var _5=2038;
+var _6={};
+var _7={};
+var _8={};
+var _9={};
+var _a=_2.timezoneFileBasePath||_1.moduleUrl("dojox.date","zoneinfo");
+var _b=_2.timezoneLoadingScheme||"preloadAll";
+var _c=_2.defaultZoneFile||((_b=="preloadAll")?_3:"northamerica");
+_1._contentHandlers["olson-zoneinfo"]=function(_d){
+var _e=_1._contentHandlers["text"](_d);
+var s="";
+var _f=_e.split("\n");
+var arr=[];
+var _10="";
+var _11=null;
+var _12=null;
+var ret={zones:{},rules:{}};
+for(var i=0;i<_f.length;i++){
+var l=_f[i];
+if(l.match(/^\s/)){
+l="Zone "+_11+l;
+}
+l=l.split("#")[0];
+if(l.length>3){
+arr=l.split(/\s+/);
+_10=arr.shift();
+switch(_10){
+case "Zone":
+_11=arr.shift();
+if(arr[0]){
+if(!ret.zones[_11]){
+ret.zones[_11]=[];
+}
+ret.zones[_11].push(arr);
+}
+break;
+case "Rule":
+_12=arr.shift();
+if(!ret.rules[_12]){
+ret.rules[_12]=[];
+}
+ret.rules[_12].push(arr);
+break;
+case "Link":
+if(ret.zones[arr[1]]){
+throw new Error("Error with Link "+arr[1]);
+}
+ret.zones[arr[1]]=arr[0];
+break;
+case "Leap":
+break;
+default:
+break;
+}
+}
+}
+return ret;
+};
+function _13(_14){
+_14=_14||{};
+_7=_1.mixin(_7,_14.zones||{});
+_9=_1.mixin(_9,_14.rules||{});
+};
+function _15(e){
+console.error("Error loading zone file:",e);
+throw e;
+};
+function _16(_17){
+_6[_17]=true;
+_1.xhrGet({url:_a+"/"+_17,sync:true,handleAs:"olson-zoneinfo",load:_13,error:_15});
+};
+var _18={"jan":0,"feb":1,"mar":2,"apr":3,"may":4,"jun":5,"jul":6,"aug":7,"sep":8,"oct":9,"nov":10,"dec":11};
+var _19={"sun":0,"mon":1,"tue":2,"wed":3,"thu":4,"fri":5,"sat":6};
+var _1a={"EST":"northamerica","MST":"northamerica","HST":"northamerica","EST5EDT":"northamerica","CST6CDT":"northamerica","MST7MDT":"northamerica","PST8PDT":"northamerica","America":"northamerica","Pacific":"australasia","Atlantic":"europe","Africa":"africa","Indian":"africa","Antarctica":"antarctica","Asia":"asia","Australia":"australasia","Europe":"europe","WET":"europe","CET":"europe","MET":"europe","EET":"europe"};
+var _1b={"Pacific/Honolulu":"northamerica","Atlantic/Bermuda":"northamerica","Atlantic/Cape_Verde":"africa","Atlantic/St_Helena":"africa","Indian/Kerguelen":"antarctica","Indian/Chagos":"asia","Indian/Maldives":"asia","Indian/Christmas":"australasia","Indian/Cocos":"australasia","America/Danmarkshavn":"europe","America/Scoresbysund":"europe","America/Godthab":"europe","America/Thule":"europe","Asia/Yekaterinburg":"europe","Asia/Omsk":"europe","Asia/Novosibirsk":"europe","Asia/Krasnoyarsk":"europe","Asia/Irkutsk":"europe","Asia/Yakutsk":"europe","Asia/Vladivostok":"europe","Asia/Sakhalin":"europe","Asia/Magadan":"europe","Asia/Kamchatka":"europe","Asia/Anadyr":"europe","Africa/Ceuta":"europe","America/Argentina/Buenos_Aires":"southamerica","America/Argentina/Cordoba":"southamerica","America/Argentina/Tucuman":"southamerica","America/Argentina/La_Rioja":"southamerica","America/Argentina/San_Juan":"southamerica","America/Argentina/Jujuy":"southamerica","America/Argentina/Catamarca":"southamerica","America/Argentina/Mendoza":"southamerica","America/Argentina/Rio_Gallegos":"southamerica","America/Argentina/Ushuaia":"southamerica","America/Aruba":"southamerica","America/La_Paz":"southamerica","America/Noronha":"southamerica","America/Belem":"southamerica","America/Fortaleza":"southamerica","America/Recife":"southamerica","America/Araguaina":"southamerica","America/Maceio":"southamerica","America/Bahia":"southamerica","America/Sao_Paulo":"southamerica","America/Campo_Grande":"southamerica","America/Cuiaba":"southamerica","America/Porto_Velho":"southamerica","America/Boa_Vista":"southamerica","America/Manaus":"southamerica","America/Eirunepe":"southamerica","America/Rio_Branco":"southamerica","America/Santiago":"southamerica","Pacific/Easter":"southamerica","America/Bogota":"southamerica","America/Curacao":"southamerica","America/Guayaquil":"southamerica","Pacific/Galapagos":"southamerica","Atlantic/Stanley":"southamerica","America/Cayenne":"southamerica","America/Guyana":"southamerica","America/Asuncion":"southamerica","America/Lima":"southamerica","Atlantic/South_Georgia":"southamerica","America/Paramaribo":"southamerica","America/Port_of_Spain":"southamerica","America/Montevideo":"southamerica","America/Caracas":"southamerica"};
+var _1c={"US":"S","Chatham":"S","NZ":"S","NT_YK":"S","Edm":"S","Salv":"S","Canada":"S","StJohns":"S","TC":"S","Guat":"S","Mexico":"S","Haiti":"S","Barb":"S","Belize":"S","CR":"S","Moncton":"S","Swift":"S","Hond":"S","Thule":"S","NZAQ":"S","Zion":"S","ROK":"S","PRC":"S","Taiwan":"S","Ghana":"GMT","SL":"WAT","Chicago":"S","Detroit":"S","Vanc":"S","Denver":"S","Halifax":"S","Cuba":"S","Indianapolis":"S","Starke":"S","Marengo":"S","Pike":"S","Perry":"S","Vincennes":"S","Pulaski":"S","Louisville":"S","CA":"S","Nic":"S","Menominee":"S","Mont":"S","Bahamas":"S","NYC":"S","Regina":"S","Resolute":"ES","DR":"S","Toronto":"S","Winn":"S"};
+function _1d(t){
+throw new Error("Timezone \""+t+"\" is either incorrect, or not loaded in the timezone registry.");
+};
+function _1e(tz){
+var ret=_1b[tz];
+if(!ret){
+var reg=tz.split("/")[0];
+ret=_1a[reg];
+if(!ret){
+var _1f=_7[tz];
+if(typeof _1f=="string"){
+return _1e(_1f);
+}else{
+if(!_6.backward){
+_16("backward");
+return _1e(tz);
+}else{
+_1d(tz);
+}
+}
+}
+}
+return ret;
+};
+function _20(str){
+var pat=/(\d+)(?::0*(\d*))?(?::0*(\d*))?([su])?$/;
+var hms=str.match(pat);
+if(!hms){
+return null;
+}
+hms[1]=parseInt(hms[1],10);
+hms[2]=hms[2]?parseInt(hms[2],10):0;
+hms[3]=hms[3]?parseInt(hms[3],10):0;
+return hms;
+};
+function _21(y,m,d,h,mn,s,off){
+return Date.UTC(y,m,d,h,mn,s)+((off||0)*60*1000);
+};
+function _22(m){
+return _18[m.substr(0,3).toLowerCase()];
+};
+function _23(str){
+var off=_20(str);
+if(off===null){
+return 0;
+}
+var adj=str.indexOf("-")===0?-1:1;
+off=adj*(((off[1]*60+off[2])*60+off[3])*1000);
+return -off/60/1000;
+};
+function _24(_25,_26,off){
+var _27=_22(_25[3]),day=_25[4],_28=_20(_25[5]);
+if(_28[4]=="u"){
+off=0;
+}
+var d,_29,_2a;
+if(isNaN(day)){
+if(day.substr(0,4)=="last"){
+day=_19[day.substr(4,3).toLowerCase()];
+d=new Date(_21(_26,_27+1,1,_28[1]-24,_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day>_29)?(day-_29-7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}else{
+day=_19[day.substr(0,3).toLowerCase()];
+if(day!="undefined"){
+if(_25[4].substr(3,2)==">="){
+d=new Date(_21(_26,_27,parseInt(_25[4].substr(5),10),_28[1],_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day<_29)?(day-_29+7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}else{
+if(day.substr(3,2)=="<="){
+d=new Date(_21(_26,_27,parseInt(_25[4].substr(5),10),_28[1],_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day>_29)?(day-_29-7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}
+}
+}
+}
+}else{
+d=new Date(_21(_26,_27,parseInt(day,10),_28[1],_28[2],_28[3],off));
+return d;
+}
+return null;
+};
+function _2b(_2c,_2d){
+var _2e=[];
+_1.forEach(_9[_2c[1]]||[],function(r){
+for(var i=0;i<2;i++){
+switch(r[i]){
+case "min":
+r[i]=_4;
+break;
+case "max":
+r[i]=_5;
+break;
+case "only":
+break;
+default:
+r[i]=parseInt(r[i],10);
+if(isNaN(r[i])){
+throw new Error("Invalid year found on rule");
+}
+break;
+}
+}
+if(typeof r[6]=="string"){
+r[6]=_23(r[6]);
+}
+if((r[0]<=_2d&&r[1]>=_2d)||(r[0]==_2d&&r[1]=="only")){
+_2e.push({r:r,d:_24(r,_2d,_2c[0])});
+}
+});
+return _2e;
+};
+function _2f(tz,_30){
+var zr=_8[tz]=[];
+for(var i=0;i<_30.length;i++){
+var z=_30[i];
+var r=zr[i]=[];
+var _31=null;
+var _32=null;
+var _33=[];
+if(typeof z[0]=="string"){
+z[0]=_23(z[0]);
+}
+if(i===0){
+r[0]=Date.UTC(_4,0,1,0,0,0,0);
+}else{
+r[0]=zr[i-1][1];
+_31=_30[i-1];
+_32=zr[i-1];
+_33=_32[2];
+}
+var _34=new Date(r[0]).getUTCFullYear();
+var _35=z[3]?parseInt(z[3],10):_5;
+var rlz=[];
+var j;
+for(j=_34;j<=_35;j++){
+rlz=rlz.concat(_2b(z,j));
+}
+rlz.sort(function(a,b){
+return _1.date.compare(a.d,b.d);
+});
+var rl;
+for(j=0,rl;(rl=rlz[j]);j++){
+var _36=j>0?rlz[j-1]:null;
+if(rl.r[5].indexOf("u")<0&&rl.r[5].indexOf("s")<0){
+if(j===0&&i>0){
+if(_33.length){
+rl.d=_1.date.add(rl.d,"minute",_33[_33.length-1].r[6]);
+}else{
+if(_1.date.compare(new Date(_32[1]),rl.d,"date")===0){
+rl.d=new Date(_32[1]);
+}else{
+rl.d=_1.date.add(rl.d,"minute",_23(_31[1]));
+}
+}
+}else{
+if(j>0){
+rl.d=_1.date.add(rl.d,"minute",_36.r[6]);
+}
+}
+}
+}
+r[2]=rlz;
+if(!z[3]){
+r[1]=Date.UTC(_5,11,31,23,59,59,999);
+}else{
+var _37=parseInt(z[3],10),_38=_22(z[4]||"Jan"),day=parseInt(z[5]||"1",10),_39=_20(z[6]||"0");
+var _3a=r[1]=_21(_37,_38,day,_39[1],_39[2],_39[3],((_39[4]=="u")?0:z[0]));
+if(isNaN(_3a)){
+_3a=r[1]=_24([0,0,0,z[4],z[5],z[6]||"0"],_37,((_39[4]=="u")?0:z[0])).getTime();
+}
+var _3b=_1.filter(rlz,function(rl,idx){
+var o=idx>0?rlz[idx-1].r[6]*60*1000:0;
+return (rl.d.getTime()<_3a+o);
+});
+if(_39[4]!="u"&&_39[4]!="s"){
+if(_3b.length){
+r[1]+=_3b[_3b.length-1].r[6]*60*1000;
+}else{
+r[1]+=_23(z[1])*60*1000;
+}
+}
+}
+}
+};
+function _3c(dt,tz){
+var t=tz;
+var _3d=_7[t];
+while(typeof _3d=="string"){
+t=_3d;
+_3d=_7[t];
+}
+if(!_3d){
+if(!_6.backward){
+var _3e=_16("backward",true);
+return _3c(dt,tz);
+}
+_1d(t);
+}
+if(!_8[tz]){
+_2f(tz,_3d);
+}
+var _3f=_8[tz];
+var tm=dt.getTime();
+for(var i=0,r;(r=_3f[i]);i++){
+if(tm>=r[0]&&tm<r[1]){
+return {zone:_3d[i],range:_3f[i],idx:i};
+}
+}
+throw new Error("No Zone found for \""+tz+"\" on "+dt);
+};
+function _40(dt,_41){
+var _42=-1;
+var _43=_41.range[2]||[];
+var tsp=dt.getTime();
+var zr=_41.range;
+for(var i=0,r;(r=_43[i]);i++){
+if(tsp>=r.d.getTime()){
+_42=i;
+}
+}
+if(_42>=0){
+return _43[_42].r;
+}
+return null;
+};
+function _44(tz,_45,_46){
+var res;
+var _47=_45.zone;
+var _48=_47[2];
+if(_48.indexOf("%s")>-1){
+var _49;
+if(_46){
+_49=_46[7];
+if(_49=="-"){
+_49="";
+}
+}else{
+if(_47[1] in _1c){
+_49=_1c[_47[1]];
+}else{
+if(_45.idx>0){
+var pz=_7[tz][_45.idx-1];
+var pb=pz[2];
+if(pb.indexOf("%s")<0){
+if(_48.replace("%s","S")==pb){
+_49="S";
+}else{
+_49="";
+}
+}else{
+_49="";
+}
+}else{
+_49="";
+}
+}
+}
+res=_48.replace("%s",_49);
+}else{
+if(_48.indexOf("/")>-1){
+var bs=_48.split("/");
+if(_46){
+res=bs[_46[6]===0?0:1];
+}else{
+res=bs[0];
+}
+}else{
+res=_48;
+}
+}
+return res;
+};
+_1.setObject("dojox.date.timezone",{getTzInfo:function(dt,tz){
+if(_b=="lazyLoad"){
+var _4a=_1e(tz);
+if(!_4a){
+throw new Error("Not a valid timezone ID.");
+}else{
+if(!_6[_4a]){
+_16(_4a);
+}
+}
+}
+var _4b=_3c(dt,tz);
+var off=_4b.zone[0];
+var _4c=_40(dt,_4b);
+if(_4c){
+off+=_4c[6];
+}else{
+if(_9[_4b.zone[1]]&&_4b.idx>0){
+off+=_23(_7[tz][_4b.idx-1][1]);
+}else{
+off+=_23(_4b.zone[1]);
+}
+}
+var _4d=_44(tz,_4b,_4c);
+return {tzOffset:off,tzAbbr:_4d};
+},getAllZones:function(){
+var arr=[];
+for(var z in _7){
+arr.push(z);
+}
+arr.sort();
+return arr;
+}});
+if(typeof _c=="string"&&_c){
+_c=[_c];
+}
+if(_1.isArray(_c)){
+_1.forEach(_c,function(f){
+_16(f);
+});
+}
+var _4e=_1.date.locale.format;
+var _4f=_1.date.locale._getZone;
+_1.date.locale.format=function(_50,_51){
+_51=_51||{};
+if(_51.timezone&&!_51._tzInfo){
+_51._tzInfo=dojox.date.timezone.getTzInfo(_50,_51.timezone);
+}
+if(_51._tzInfo){
+var _52=_50.getTimezoneOffset()-_51._tzInfo.tzOffset;
+_50=new Date(_50.getTime()+(_52*60*1000));
+}
+return _4e.call(this,_50,_51);
+};
+_1.date.locale._getZone=function(_53,_54,_55){
+if(_55._tzInfo){
+if(_54){
+return _55._tzInfo.tzAbbr;
+}else{
+return _55._tzInfo.tzOffset;
+}
+}
+return _4f.call(this,_53,_54,_55);
+};
+})(dojo);
+}
diff --git a/js/dojo/dojox/date/zoneinfo/LICENSE b/js/dojo/dojox/date/zoneinfo/LICENSE
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/LICENSE
@@ -0,0 +1,10 @@
+"Olson Database", available for download from ftp://elsie.nci.nih.gov/pub/
+
+These comments were included in each file.
+
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+
+# This data is by no means authoritative; if you think you know better,
+# go ahead and edit the file (and please send any changes to
+# tz@elsie.nci.nih.gov for general use in the future).
diff --git a/js/dojo/dojox/date/zoneinfo/africa b/js/dojo/dojox/date/zoneinfo/africa
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/africa
@@ -0,0 +1,310 @@
+Rule Algeria 1916 only - Jun 14 23:00s 1:00 S
+Rule Algeria 1916 1919 - Oct Sun>=1 23:00s 0 -
+Rule Algeria 1917 only - Mar 24 23:00s 1:00 S
+Rule Algeria 1918 only - Mar 9 23:00s 1:00 S
+Rule Algeria 1919 only - Mar 1 23:00s 1:00 S
+Rule Algeria 1920 only - Feb 14 23:00s 1:00 S
+Rule Algeria 1920 only - Oct 23 23:00s 0 -
+Rule Algeria 1921 only - Mar 14 23:00s 1:00 S
+Rule Algeria 1921 only - Jun 21 23:00s 0 -
+Rule Algeria 1939 only - Sep 11 23:00s 1:00 S
+Rule Algeria 1939 only - Nov 19 1:00 0 -
+Rule Algeria 1944 1945 - Apr Mon>=1 2:00 1:00 S
+Rule Algeria 1944 only - Oct 8 2:00 0 -
+Rule Algeria 1945 only - Sep 16 1:00 0 -
+Rule Algeria 1971 only - Apr 25 23:00s 1:00 S
+Rule Algeria 1971 only - Sep 26 23:00s 0 -
+Rule Algeria 1977 only - May 6 0:00 1:00 S
+Rule Algeria 1977 only - Oct 21 0:00 0 -
+Rule Algeria 1978 only - Mar 24 1:00 1:00 S
+Rule Algeria 1978 only - Sep 22 3:00 0 -
+Rule Algeria 1980 only - Apr 25 0:00 1:00 S
+Rule Algeria 1980 only - Oct 31 2:00 0 -
+Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 Algeria WE%sT 1940 Feb 25 2:00
+ 1:00 Algeria CE%sT 1946 Oct 7
+ 0:00 - WET 1956 Jan 29
+ 1:00 - CET 1963 Apr 14
+ 0:00 Algeria WE%sT 1977 Oct 21
+ 1:00 Algeria CE%sT 1979 Oct 26
+ 0:00 Algeria WE%sT 1981 May
+ 1:00 - CET
+Zone Africa/Luanda 0:52:56 - LMT 1892
+ 0:52:04 - AOT 1911 May 26 # Angola Time
+ 1:00 - WAT
+Zone Africa/Porto-Novo 0:10:28 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ 1:00 - WAT
+Zone Africa/Gaborone 1:43:40 - LMT 1885
+ 2:00 - CAT 1943 Sep 19 2:00
+ 2:00 1:00 CAST 1944 Mar 19 2:00
+ 2:00 - CAT
+Zone Africa/Ouagadougou -0:06:04 - LMT 1912
+ 0:00 - GMT
+Zone Africa/Bujumbura 1:57:28 - LMT 1890
+ 2:00 - CAT
+Zone Africa/Douala 0:38:48 - LMT 1912
+ 1:00 - WAT
+Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia
+ -2:00 - CVT 1942 Sep
+ -2:00 1:00 CVST 1945 Oct 15
+ -2:00 - CVT 1975 Nov 25 2:00
+ -1:00 - CVT
+Zone Africa/Bangui 1:14:20 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Ndjamena 1:00:12 - LMT 1912
+ 1:00 - WAT 1979 Oct 14
+ 1:00 1:00 WAST 1980 Mar 8
+ 1:00 - WAT
+Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
+ 3:00 - EAT
+Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
+ 1:00 - WAT
+Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
+ 2:00 - CAT
+Zone Africa/Brazzaville 1:01:08 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Abidjan -0:16:08 - LMT 1912
+ 0:00 - GMT
+Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
+ 3:00 - EAT
+Rule Egypt 1940 only - Jul 15 0:00 1:00 S
+Rule Egypt 1940 only - Oct 1 0:00 0 -
+Rule Egypt 1941 only - Apr 15 0:00 1:00 S
+Rule Egypt 1941 only - Sep 16 0:00 0 -
+Rule Egypt 1942 1944 - Apr 1 0:00 1:00 S
+Rule Egypt 1942 only - Oct 27 0:00 0 -
+Rule Egypt 1943 1945 - Nov 1 0:00 0 -
+Rule Egypt 1945 only - Apr 16 0:00 1:00 S
+Rule Egypt 1957 only - May 10 0:00 1:00 S
+Rule Egypt 1957 1958 - Oct 1 0:00 0 -
+Rule Egypt 1958 only - May 1 0:00 1:00 S
+Rule Egypt 1959 1981 - May 1 1:00 1:00 S
+Rule Egypt 1959 1965 - Sep 30 3:00 0 -
+Rule Egypt 1966 1994 - Oct 1 3:00 0 -
+Rule Egypt 1982 only - Jul 25 1:00 1:00 S
+Rule Egypt 1983 only - Jul 12 1:00 1:00 S
+Rule Egypt 1984 1988 - May 1 1:00 1:00 S
+Rule Egypt 1989 only - May 6 1:00 1:00 S
+Rule Egypt 1990 1994 - May 1 1:00 1:00 S
+Rule Egypt 1995 max - Apr lastFri 0:00s 1:00 S
+Rule Egypt 1995 2005 - Sep lastThu 23:00s 0 -
+Rule Egypt 2006 only - Sep 21 23:00s 0 -
+Rule Egypt 2007 only - Sep Thu>=1 23:00s 0 -
+Rule Egypt 2008 only - Aug lastThu 23:00s 0 -
+Rule Egypt 2009 max - Sep lastThu 23:00s 0 -
+Zone Africa/Cairo 2:05:00 - LMT 1900 Oct
+ 2:00 Egypt EE%sT
+Zone Africa/Malabo 0:35:08 - LMT 1912
+ 0:00 - GMT 1963 Dec 15
+ 1:00 - WAT
+Zone Africa/Asmara 2:35:32 - LMT 1870
+ 2:35:32 - AMT 1890 # Asmara Mean Time
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+Zone Africa/Libreville 0:37:48 - LMT 1912
+ 1:00 - WAT
+Zone Africa/Banjul -1:06:36 - LMT 1912
+ -1:06:36 - BMT 1935 # Banjul Mean Time
+ -1:00 - WAT 1964
+ 0:00 - GMT
+Rule Ghana 1936 1942 - Sep 1 0:00 0:20 GHST
+Rule Ghana 1936 1942 - Dec 31 0:00 0 GMT
+Zone Africa/Accra -0:00:52 - LMT 1918
+ 0:00 Ghana %s
+Zone Africa/Conakry -0:54:52 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960
+ 0:00 - GMT
+Zone Africa/Bissau -1:02:20 - LMT 1911 May 26
+ -1:00 - WAT 1975
+ 0:00 - GMT
+Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1940
+ 2:44:45 - BEAUT 1960
+ 3:00 - EAT
+Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
+ 2:00 - SAST 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAST
+Zone Africa/Monrovia -0:43:08 - LMT 1882
+ -0:43:08 - MMT 1919 Mar # Monrovia Mean Time
+ -0:44:30 - LRT 1972 May # Liberia Time
+ 0:00 - GMT
+Rule Libya 1951 only - Oct 14 2:00 1:00 S
+Rule Libya 1952 only - Jan 1 0:00 0 -
+Rule Libya 1953 only - Oct 9 2:00 1:00 S
+Rule Libya 1954 only - Jan 1 0:00 0 -
+Rule Libya 1955 only - Sep 30 0:00 1:00 S
+Rule Libya 1956 only - Jan 1 0:00 0 -
+Rule Libya 1982 1984 - Apr 1 0:00 1:00 S
+Rule Libya 1982 1985 - Oct 1 0:00 0 -
+Rule Libya 1985 only - Apr 6 0:00 1:00 S
+Rule Libya 1986 only - Apr 4 0:00 1:00 S
+Rule Libya 1986 only - Oct 3 0:00 0 -
+Rule Libya 1987 1989 - Apr 1 0:00 1:00 S
+Rule Libya 1987 1989 - Oct 1 0:00 0 -
+Zone Africa/Tripoli 0:52:44 - LMT 1920
+ 1:00 Libya CE%sT 1959
+ 2:00 - EET 1982
+ 1:00 Libya CE%sT 1990 May 4
+ 2:00 - EET 1996 Sep 30
+ 1:00 - CET 1997 Apr 4
+ 1:00 1:00 CEST 1997 Oct 4
+ 2:00 - EET
+Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
+ 3:00 - EAT 1954 Feb 27 23:00s
+ 3:00 1:00 EAST 1954 May 29 23:00s
+ 3:00 - EAT
+Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
+ 2:00 - CAT
+Zone Africa/Bamako -0:32:00 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Jun 20
+ 0:00 - GMT
+Zone Africa/Nouakchott -1:03:48 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Nov 28
+ 0:00 - GMT
+Rule Mauritius 1982 only - Oct 10 0:00 1:00 S
+Rule Mauritius 1983 only - Mar 21 0:00 0 -
+Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S
+Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
+Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
+ 4:00 Mauritius MU%sT # Mauritius Time
+Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
+ 3:00 - EAT
+Rule Morocco 1939 only - Sep 12 0:00 1:00 S
+Rule Morocco 1939 only - Nov 19 0:00 0 -
+Rule Morocco 1940 only - Feb 25 0:00 1:00 S
+Rule Morocco 1945 only - Nov 18 0:00 0 -
+Rule Morocco 1950 only - Jun 11 0:00 1:00 S
+Rule Morocco 1950 only - Oct 29 0:00 0 -
+Rule Morocco 1967 only - Jun 3 12:00 1:00 S
+Rule Morocco 1967 only - Oct 1 0:00 0 -
+Rule Morocco 1974 only - Jun 24 0:00 1:00 S
+Rule Morocco 1974 only - Sep 1 0:00 0 -
+Rule Morocco 1976 1977 - May 1 0:00 1:00 S
+Rule Morocco 1976 only - Aug 1 0:00 0 -
+Rule Morocco 1977 only - Sep 28 0:00 0 -
+Rule Morocco 1978 only - Jun 1 0:00 1:00 S
+Rule Morocco 1978 only - Aug 4 0:00 0 -
+Rule Morocco 2008 only - Jun 1 0:00 1:00 S
+Rule Morocco 2008 only - Sep 1 0:00 0 -
+Rule Morocco 2009 only - Jun 1 0:00 1:00 S
+Rule Morocco 2009 only - Aug 21 0:00 0 -
+Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
+ 0:00 Morocco WE%sT 1984 Mar 16
+ 1:00 - CET 1986
+ 0:00 Morocco WE%sT
+Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan
+ -1:00 - WAT 1976 Apr 14
+ 0:00 - WET
+Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
+ 2:00 - CAT
+Rule Namibia 1994 max - Sep Sun>=1 2:00 1:00 S
+Rule Namibia 1995 max - Apr Sun>=1 2:00 0 -
+Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
+ 1:30 - SWAT 1903 Mar # SW Africa Time
+ 2:00 - SAST 1942 Sep 20 2:00
+ 2:00 1:00 SAST 1943 Mar 21 2:00
+ 2:00 - SAST 1990 Mar 21 # independence
+ 2:00 - CAT 1994 Apr 3
+ 1:00 Namibia WA%sT
+Zone Africa/Niamey 0:08:28 - LMT 1912
+ -1:00 - WAT 1934 Feb 26
+ 0:00 - GMT 1960
+ 1:00 - WAT
+Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
+ 1:00 - WAT
+Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
+ 4:00 - RET # Reunion Time
+Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
+ 2:00 - CAT
+Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
+ -0:22:48 - JMT 1951 # Jamestown Mean Time
+ 0:00 - GMT
+Zone Africa/Sao_Tome 0:26:56 - LMT 1884
+ -0:36:32 - LMT 1912 # Lisbon Mean Time
+ 0:00 - GMT
+Zone Africa/Dakar -1:09:44 - LMT 1912
+ -1:00 - WAT 1941 Jun
+ 0:00 - GMT
+Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
+ 4:00 - SCT # Seychelles Time
+Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
+Rule SL 1935 1942 - Oct 1 0:00 0 WAT
+Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
+Rule SL 1957 1962 - Sep 1 0:00 0 GMT
+Zone Africa/Freetown -0:53:00 - LMT 1882
+ -0:53:00 - FMT 1913 Jun # Freetown Mean Time
+ -1:00 SL %s 1957
+ 0:00 SL %s
+Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
+ 3:00 - EAT 1931
+ 2:30 - BEAT 1957
+ 3:00 - EAT
+Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
+Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
+Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
+ 1:30 - SAST 1903 Mar
+ 2:00 SA SAST
+Rule Sudan 1970 only - May 1 0:00 1:00 S
+Rule Sudan 1970 1985 - Oct 15 0:00 0 -
+Rule Sudan 1971 only - Apr 30 0:00 1:00 S
+Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S
+Zone Africa/Khartoum 2:10:08 - LMT 1931
+ 2:00 Sudan CA%sT 2000 Jan 15 12:00
+ 3:00 - EAT
+Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
+ 2:00 - SAST
+Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
+ 3:00 - EAT 1948
+ 2:44:45 - BEAUT 1961
+ 3:00 - EAT
+Zone Africa/Lome 0:04:52 - LMT 1893
+ 0:00 - GMT
+Rule Tunisia 1939 only - Apr 15 23:00s 1:00 S
+Rule Tunisia 1939 only - Nov 18 23:00s 0 -
+Rule Tunisia 1940 only - Feb 25 23:00s 1:00 S
+Rule Tunisia 1941 only - Oct 6 0:00 0 -
+Rule Tunisia 1942 only - Mar 9 0:00 1:00 S
+Rule Tunisia 1942 only - Nov 2 3:00 0 -
+Rule Tunisia 1943 only - Mar 29 2:00 1:00 S
+Rule Tunisia 1943 only - Apr 17 2:00 0 -
+Rule Tunisia 1943 only - Apr 25 2:00 1:00 S
+Rule Tunisia 1943 only - Oct 4 2:00 0 -
+Rule Tunisia 1944 1945 - Apr Mon>=1 2:00 1:00 S
+Rule Tunisia 1944 only - Oct 8 0:00 0 -
+Rule Tunisia 1945 only - Sep 16 0:00 0 -
+Rule Tunisia 1977 only - Apr 30 0:00s 1:00 S
+Rule Tunisia 1977 only - Sep 24 0:00s 0 -
+Rule Tunisia 1978 only - May 1 0:00s 1:00 S
+Rule Tunisia 1978 only - Oct 1 0:00s 0 -
+Rule Tunisia 1988 only - Jun 1 0:00s 1:00 S
+Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
+Rule Tunisia 1989 only - Mar 26 0:00s 1:00 S
+Rule Tunisia 1990 only - May 1 0:00s 1:00 S
+Rule Tunisia 2005 only - May 1 0:00s 1:00 S
+Rule Tunisia 2005 only - Sep 30 1:00s 0 -
+Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
+Rule Tunisia 2010 max - Mar lastSun 2:00s 1:00 S
+Rule Tunisia 2010 max - Oct lastSun 2:00s 0 -
+Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 1:00 Tunisia CE%sT
+Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1948
+ 2:44:45 - BEAUT 1957
+ 3:00 - EAT
+Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
+ 2:00 - CAT
+Zone Africa/Harare 2:04:12 - LMT 1903 Mar
+ 2:00 - CAT
diff --git a/js/dojo/dojox/date/zoneinfo/antarctica b/js/dojo/dojox/date/zoneinfo/antarctica
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/antarctica
@@ -0,0 +1,68 @@
+Rule RussAQ 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussAQ 1981 1983 - Oct 1 0:00 0 -
+Rule RussAQ 1984 1991 - Sep lastSun 2:00s 0 -
+Rule RussAQ 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule RussAQ 1992 only - Mar lastSat 23:00 1:00 S
+Rule RussAQ 1992 only - Sep lastSat 23:00 0 -
+Rule RussAQ 1993 max - Mar lastSun 2:00s 1:00 S
+Rule RussAQ 1993 1995 - Sep lastSun 2:00s 0 -
+Rule RussAQ 1996 max - Oct lastSun 2:00s 0 -
+Rule ArgAQ 1964 1966 - Mar 1 0:00 0 -
+Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S
+Rule ArgAQ 1967 only - Apr 2 0:00 0 -
+Rule ArgAQ 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule ArgAQ 1968 1969 - Apr Sun>=1 0:00 0 -
+Rule ArgAQ 1974 only - Jan 23 0:00 1:00 S
+Rule ArgAQ 1974 only - May 1 0:00 0 -
+Rule ChileAQ 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1987 only - Apr 12 3:00u 0 -
+Rule ChileAQ 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule ChileAQ 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1990 only - Mar 18 3:00u 0 -
+Rule ChileAQ 1990 only - Sep 16 4:00u 1:00 S
+Rule ChileAQ 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
+Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
+Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
+Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
+Zone Antarctica/Casey 0 - zzz 1969
+ 8:00 - WST # Western (Aus) Standard Time
+Zone Antarctica/Davis 0 - zzz 1957 Jan 13
+ 7:00 - DAVT 1964 Nov # Davis Time
+ 0 - zzz 1969 Feb
+ 7:00 - DAVT
+Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
+ 6:00 - MAWT # Mawson Time
+Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Francais
+ 5:00 - TFT # ISO code TF Time
+Zone Antarctica/DumontDUrville 0 - zzz 1947
+ 10:00 - PMT 1952 Jan 14 # Port-Martin Time
+ 0 - zzz 1956 Nov
+ 10:00 - DDUT # Dumont-d'Urville Time
+Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
+ 3:00 - SYOT # Syowa Time
+Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D
+Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D
+Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D
+Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
+Rule NZAQ 1975 only - Feb 23 2:00s 0 S
+Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S
+Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S
+Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D
+Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S
+Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
+ 6:00 - VOST # Vostok time
+Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
+ -3:00 - ROTT # Rothera time
+Zone Antarctica/Palmer 0 - zzz 1965
+ -4:00 ArgAQ AR%sT 1969 Oct 5
+ -3:00 ArgAQ AR%sT 1982 May
+ -4:00 ChileAQ CL%sT
+Zone Antarctica/McMurdo 0 - zzz 1956
+ 12:00 NZAQ NZ%sT
+Link Antarctica/McMurdo Antarctica/South_Pole
diff --git a/js/dojo/dojox/date/zoneinfo/asia b/js/dojo/dojox/date/zoneinfo/asia
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/asia
@@ -0,0 +1,720 @@
+Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
+Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
+Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
+Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
+Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
+Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S
+Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 -
+Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 -
+Zone Asia/Kabul 4:36:48 - LMT 1890
+ 4:00 - AFT 1945
+ 4:30 - AFT
+Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
+ 3:00 - YERT 1957 Mar # Yerevan Time
+ 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
+ 3:00 1:00 YERST 1991 Sep 23 # independence
+ 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
+ 4:00 - AMT 1997
+ 4:00 RussiaAsia AM%sT
+Rule Azer 1997 max - Mar lastSun 4:00 1:00 S
+Rule Azer 1997 max - Oct lastSun 5:00 0 -
+Zone Asia/Baku 3:19:24 - LMT 1924 May 2
+ 3:00 - BAKT 1957 Mar # Baku Time
+ 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
+ 3:00 1:00 BAKST 1991 Aug 30 # independence
+ 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
+ 4:00 - AZT 1996 # Azerbaijan time
+ 4:00 EUAsia AZ%sT 1997
+ 4:00 Azer AZ%sT
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+Zone Asia/Dhaka 6:01:40 - LMT 1890
+ 5:53:20 - HMT 1941 Oct # Howrah Mean Time?
+ 6:30 - BURT 1942 May 15 # Burma Time
+ 5:30 - IST 1942 Sep
+ 6:30 - BURT 1951 Sep 30
+ 6:00 - DACT 1971 Mar 26 # Dacca Time
+ 6:00 - BDT 2009 Jun 19 23:00 # Bangladesh Time
+ 6:00 1:00 BDST 2010
+ 6:00 - BDT
+Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
+ 5:30 - IST 1987 Oct
+ 6:00 - BTT # Bhutan Time
+Zone Indian/Chagos 4:49:40 - LMT 1907
+ 5:00 - IOT 1996 # BIOT Time
+ 6:00 - IOT
+Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
+ 7:30 - BNT 1933
+ 8:00 - BNT
+Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+ 6:24:36 - RMT 1920 # Rangoon Mean Time?
+ 6:30 - BURT 1942 May # Burma Time
+ 9:00 - JST 1945 May 3
+ 6:30 - MMT # Myanmar Time
+Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jun 9
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Rule Shang 1940 only - Jun 3 0:00 1:00 D
+Rule Shang 1940 1941 - Oct 1 0:00 0 S
+Rule Shang 1941 only - Mar 16 0:00 1:00 D
+Rule PRC 1986 only - May 4 0:00 1:00 D
+Rule PRC 1986 1991 - Sep Sun>=11 0:00 0 S
+Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
+Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
+ 8:30 - CHAT 1932 Mar # Changbai Time
+ 8:00 - CST 1940
+ 9:00 - CHAT 1966 May
+ 8:30 - CHAT 1980 May
+ 8:00 PRC C%sT
+Zone Asia/Shanghai 8:05:52 - LMT 1928
+ 8:00 Shang C%sT 1949
+ 8:00 PRC C%sT
+Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
+ 7:00 - LONT 1980 May # Long-shu Time
+ 8:00 PRC C%sT
+Zone Asia/Urumqi 5:50:20 - LMT 1928 # or Urumchi
+ 6:00 - URUT 1980 May # Urumqi Time
+ 8:00 PRC C%sT
+Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
+ 5:30 - KAST 1940 # Kashgar Time
+ 5:00 - KAST 1980 May
+ 8:00 PRC C%sT
+Rule HK 1946 only - Apr 20 3:30 1:00 S
+Rule HK 1946 only - Dec 1 3:30 0 -
+Rule HK 1947 only - Apr 13 3:30 1:00 S
+Rule HK 1947 only - Dec 30 3:30 0 -
+Rule HK 1948 only - May 2 3:30 1:00 S
+Rule HK 1948 1952 - Oct lastSun 3:30 0 -
+Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
+Rule HK 1953 only - Nov 1 3:30 0 -
+Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
+Rule HK 1954 only - Oct 31 3:30 0 -
+Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
+Rule HK 1965 1977 - Apr Sun>=16 3:30 1:00 S
+Rule HK 1965 1977 - Oct Sun>=16 3:30 0 -
+Rule HK 1979 1980 - May Sun>=8 3:30 1:00 S
+Rule HK 1979 1980 - Oct Sun>=16 3:30 0 -
+Zone Asia/Hong_Kong 7:36:36 - LMT 1904 Oct 30
+ 8:00 HK HK%sT
+Rule Taiwan 1945 1951 - May 1 0:00 1:00 D
+Rule Taiwan 1945 1951 - Oct 1 0:00 0 S
+Rule Taiwan 1952 only - Mar 1 0:00 1:00 D
+Rule Taiwan 1952 1954 - Nov 1 0:00 0 S
+Rule Taiwan 1953 1959 - Apr 1 0:00 1:00 D
+Rule Taiwan 1955 1961 - Oct 1 0:00 0 S
+Rule Taiwan 1960 1961 - Jun 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Apr 1 0:00 1:00 D
+Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
+Rule Taiwan 1980 only - Jun 30 0:00 1:00 D
+Rule Taiwan 1980 only - Sep 30 0:00 0 S
+Zone Asia/Taipei 8:06:00 - LMT 1896 # or Taibei or T'ai-pei
+ 8:00 Taiwan C%sT
+Rule Macau 1961 1962 - Mar Sun>=16 3:30 1:00 S
+Rule Macau 1961 1964 - Nov Sun>=1 3:30 0 -
+Rule Macau 1963 only - Mar Sun>=16 0:00 1:00 S
+Rule Macau 1964 only - Mar Sun>=16 3:30 1:00 S
+Rule Macau 1965 only - Mar Sun>=16 0:00 1:00 S
+Rule Macau 1965 only - Oct 31 0:00 0 -
+Rule Macau 1966 1971 - Apr Sun>=16 3:30 1:00 S
+Rule Macau 1966 1971 - Oct Sun>=16 3:30 0 -
+Rule Macau 1972 1974 - Apr Sun>=15 0:00 1:00 S
+Rule Macau 1972 1973 - Oct Sun>=15 0:00 0 -
+Rule Macau 1974 1977 - Oct Sun>=15 3:30 0 -
+Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 S
+Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 S
+Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 -
+Zone Asia/Macau 7:34:20 - LMT 1912
+ 8:00 Macau MO%sT 1999 Dec 20 # return to China
+ 8:00 PRC C%sT
+Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
+Rule Cyprus 1975 only - Oct 12 0:00 0 -
+Rule Cyprus 1976 only - May 15 0:00 1:00 S
+Rule Cyprus 1976 only - Oct 11 0:00 0 -
+Rule Cyprus 1977 1980 - Apr Sun>=1 0:00 1:00 S
+Rule Cyprus 1977 only - Sep 25 0:00 0 -
+Rule Cyprus 1978 only - Oct 2 0:00 0 -
+Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 -
+Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
+Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
+ 2:00 Cyprus EE%sT 1998 Sep
+ 2:00 EUAsia EE%sT
+Link Asia/Nicosia Europe/Nicosia
+Zone Asia/Tbilisi 2:59:16 - LMT 1880
+ 2:59:16 - TBMT 1924 May 2 # Tbilisi Mean Time
+ 3:00 - TBIT 1957 Mar # Tbilisi Time
+ 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
+ 3:00 1:00 TBIST 1991 Apr 9 # independence
+ 3:00 RussiaAsia GE%sT 1992 # Georgia Time
+ 3:00 E-EurAsia GE%sT 1994 Sep lastSun
+ 4:00 E-EurAsia GE%sT 1996 Oct lastSun
+ 4:00 1:00 GEST 1997 Mar lastSun
+ 4:00 E-EurAsia GE%sT 2004 Jun 27
+ 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
+ 4:00 - GET
+Zone Asia/Dili 8:22:20 - LMT 1912
+ 8:00 - TLT 1942 Feb 21 23:00 # E Timor Time
+ 9:00 - JST 1945 Sep 23
+ 9:00 - TLT 1976 May 3
+ 8:00 - CIT 2000 Sep 17 00:00
+ 9:00 - TLT
+Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
+ 5:53:20 - HMT 1941 Oct # Howrah Mean Time?
+ 6:30 - BURT 1942 May 15 # Burma Time
+ 5:30 - IST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 15
+ 5:30 - IST
+Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
+ 7:07:12 - JMT 1923 Dec 31 23:47:12 # Jakarta
+ 7:20 - JAVT 1932 Nov # Java Time
+ 7:30 - WIT 1942 Mar 23
+ 9:00 - JST 1945 Sep 23
+ 7:30 - WIT 1948 May
+ 8:00 - WIT 1950 May
+ 7:30 - WIT 1964
+ 7:00 - WIT
+Zone Asia/Pontianak 7:17:20 - LMT 1908 May
+ 7:17:20 - PMT 1932 Nov # Pontianak MT
+ 7:30 - WIT 1942 Jan 29
+ 9:00 - JST 1945 Sep 23
+ 7:30 - WIT 1948 May
+ 8:00 - WIT 1950 May
+ 7:30 - WIT 1964
+ 8:00 - CIT 1988 Jan 1
+ 7:00 - WIT
+Zone Asia/Makassar 7:57:36 - LMT 1920
+ 7:57:36 - MMT 1932 Nov # Macassar MT
+ 8:00 - CIT 1942 Feb 9
+ 9:00 - JST 1945 Sep 23
+ 8:00 - CIT
+Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
+ 9:00 - EIT 1944 Sep 1
+ 9:30 - CST 1964
+ 9:00 - EIT
+Rule Iran 1978 1980 - Mar 21 0:00 1:00 D
+Rule Iran 1978 only - Oct 21 0:00 0 S
+Rule Iran 1979 only - Sep 19 0:00 0 S
+Rule Iran 1980 only - Sep 23 0:00 0 S
+Rule Iran 1991 only - May 3 0:00 1:00 D
+Rule Iran 1992 1995 - Mar 22 0:00 1:00 D
+Rule Iran 1991 1995 - Sep 22 0:00 0 S
+Rule Iran 1996 only - Mar 21 0:00 1:00 D
+Rule Iran 1996 only - Sep 21 0:00 0 S
+Rule Iran 1997 1999 - Mar 22 0:00 1:00 D
+Rule Iran 1997 1999 - Sep 22 0:00 0 S
+Rule Iran 2000 only - Mar 21 0:00 1:00 D
+Rule Iran 2000 only - Sep 21 0:00 0 S
+Rule Iran 2001 2003 - Mar 22 0:00 1:00 D
+Rule Iran 2001 2003 - Sep 22 0:00 0 S
+Rule Iran 2004 only - Mar 21 0:00 1:00 D
+Rule Iran 2004 only - Sep 21 0:00 0 S
+Rule Iran 2005 only - Mar 22 0:00 1:00 D
+Rule Iran 2005 only - Sep 22 0:00 0 S
+Rule Iran 2008 only - Mar 21 0:00 1:00 D
+Rule Iran 2008 only - Sep 21 0:00 0 S
+Rule Iran 2009 2011 - Mar 22 0:00 1:00 D
+Rule Iran 2009 2011 - Sep 22 0:00 0 S
+Rule Iran 2012 only - Mar 21 0:00 1:00 D
+Rule Iran 2012 only - Sep 21 0:00 0 S
+Rule Iran 2013 2015 - Mar 22 0:00 1:00 D
+Rule Iran 2013 2015 - Sep 22 0:00 0 S
+Rule Iran 2016 only - Mar 21 0:00 1:00 D
+Rule Iran 2016 only - Sep 21 0:00 0 S
+Rule Iran 2017 2019 - Mar 22 0:00 1:00 D
+Rule Iran 2017 2019 - Sep 22 0:00 0 S
+Rule Iran 2020 only - Mar 21 0:00 1:00 D
+Rule Iran 2020 only - Sep 21 0:00 0 S
+Rule Iran 2021 2023 - Mar 22 0:00 1:00 D
+Rule Iran 2021 2023 - Sep 22 0:00 0 S
+Rule Iran 2024 only - Mar 21 0:00 1:00 D
+Rule Iran 2024 only - Sep 21 0:00 0 S
+Rule Iran 2025 2027 - Mar 22 0:00 1:00 D
+Rule Iran 2025 2027 - Sep 22 0:00 0 S
+Rule Iran 2028 2029 - Mar 21 0:00 1:00 D
+Rule Iran 2028 2029 - Sep 21 0:00 0 S
+Rule Iran 2030 2031 - Mar 22 0:00 1:00 D
+Rule Iran 2030 2031 - Sep 22 0:00 0 S
+Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
+Rule Iran 2032 2033 - Sep 21 0:00 0 S
+Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
+Rule Iran 2034 2035 - Sep 22 0:00 0 S
+Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
+Rule Iran 2036 2037 - Sep 21 0:00 0 S
+Zone Asia/Tehran 3:25:44 - LMT 1916
+ 3:25:44 - TMT 1946 # Tehran Mean Time
+ 3:30 - IRST 1977 Nov
+ 4:00 Iran IR%sT 1979
+ 3:30 Iran IR%sT
+Rule Iraq 1982 only - May 1 0:00 1:00 D
+Rule Iraq 1982 1984 - Oct 1 0:00 0 S
+Rule Iraq 1983 only - Mar 31 0:00 1:00 D
+Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D
+Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S
+Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D
+Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D
+Rule Iraq 1991 2007 - Oct 1 3:00s 0 S
+Zone Asia/Baghdad 2:57:40 - LMT 1890
+ 2:57:36 - BMT 1918 # Baghdad Mean Time?
+ 3:00 - AST 1982 May
+ 3:00 Iraq A%sT
+Rule Zion 1940 only - Jun 1 0:00 1:00 D
+Rule Zion 1942 1944 - Nov 1 0:00 0 S
+Rule Zion 1943 only - Apr 1 2:00 1:00 D
+Rule Zion 1944 only - Apr 1 0:00 1:00 D
+Rule Zion 1945 only - Apr 16 0:00 1:00 D
+Rule Zion 1945 only - Nov 1 2:00 0 S
+Rule Zion 1946 only - Apr 16 2:00 1:00 D
+Rule Zion 1946 only - Nov 1 0:00 0 S
+Rule Zion 1948 only - May 23 0:00 2:00 DD
+Rule Zion 1948 only - Sep 1 0:00 1:00 D
+Rule Zion 1948 1949 - Nov 1 2:00 0 S
+Rule Zion 1949 only - May 1 0:00 1:00 D
+Rule Zion 1950 only - Apr 16 0:00 1:00 D
+Rule Zion 1950 only - Sep 15 3:00 0 S
+Rule Zion 1951 only - Apr 1 0:00 1:00 D
+Rule Zion 1951 only - Nov 11 3:00 0 S
+Rule Zion 1952 only - Apr 20 2:00 1:00 D
+Rule Zion 1952 only - Oct 19 3:00 0 S
+Rule Zion 1953 only - Apr 12 2:00 1:00 D
+Rule Zion 1953 only - Sep 13 3:00 0 S
+Rule Zion 1954 only - Jun 13 0:00 1:00 D
+Rule Zion 1954 only - Sep 12 0:00 0 S
+Rule Zion 1955 only - Jun 11 2:00 1:00 D
+Rule Zion 1955 only - Sep 11 0:00 0 S
+Rule Zion 1956 only - Jun 3 0:00 1:00 D
+Rule Zion 1956 only - Sep 30 3:00 0 S
+Rule Zion 1957 only - Apr 29 2:00 1:00 D
+Rule Zion 1957 only - Sep 22 0:00 0 S
+Rule Zion 1974 only - Jul 7 0:00 1:00 D
+Rule Zion 1974 only - Oct 13 0:00 0 S
+Rule Zion 1975 only - Apr 20 0:00 1:00 D
+Rule Zion 1975 only - Aug 31 0:00 0 S
+Rule Zion 1985 only - Apr 14 0:00 1:00 D
+Rule Zion 1985 only - Sep 15 0:00 0 S
+Rule Zion 1986 only - May 18 0:00 1:00 D
+Rule Zion 1986 only - Sep 7 0:00 0 S
+Rule Zion 1987 only - Apr 15 0:00 1:00 D
+Rule Zion 1987 only - Sep 13 0:00 0 S
+Rule Zion 1988 only - Apr 9 0:00 1:00 D
+Rule Zion 1988 only - Sep 3 0:00 0 S
+Rule Zion 1989 only - Apr 30 0:00 1:00 D
+Rule Zion 1989 only - Sep 3 0:00 0 S
+Rule Zion 1990 only - Mar 25 0:00 1:00 D
+Rule Zion 1990 only - Aug 26 0:00 0 S
+Rule Zion 1991 only - Mar 24 0:00 1:00 D
+Rule Zion 1991 only - Sep 1 0:00 0 S
+Rule Zion 1992 only - Mar 29 0:00 1:00 D
+Rule Zion 1992 only - Sep 6 0:00 0 S
+Rule Zion 1993 only - Apr 2 0:00 1:00 D
+Rule Zion 1993 only - Sep 5 0:00 0 S
+Rule Zion 1994 only - Apr 1 0:00 1:00 D
+Rule Zion 1994 only - Aug 28 0:00 0 S
+Rule Zion 1995 only - Mar 31 0:00 1:00 D
+Rule Zion 1995 only - Sep 3 0:00 0 S
+Rule Zion 1996 only - Mar 15 0:00 1:00 D
+Rule Zion 1996 only - Sep 16 0:00 0 S
+Rule Zion 1997 only - Mar 21 0:00 1:00 D
+Rule Zion 1997 only - Sep 14 0:00 0 S
+Rule Zion 1998 only - Mar 20 0:00 1:00 D
+Rule Zion 1998 only - Sep 6 0:00 0 S
+Rule Zion 1999 only - Apr 2 2:00 1:00 D
+Rule Zion 1999 only - Sep 3 2:00 0 S
+Rule Zion 2000 only - Apr 14 2:00 1:00 D
+Rule Zion 2000 only - Oct 6 1:00 0 S
+Rule Zion 2001 only - Apr 9 1:00 1:00 D
+Rule Zion 2001 only - Sep 24 1:00 0 S
+Rule Zion 2002 only - Mar 29 1:00 1:00 D
+Rule Zion 2002 only - Oct 7 1:00 0 S
+Rule Zion 2003 only - Mar 28 1:00 1:00 D
+Rule Zion 2003 only - Oct 3 1:00 0 S
+Rule Zion 2004 only - Apr 7 1:00 1:00 D
+Rule Zion 2004 only - Sep 22 1:00 0 S
+Rule Zion 2005 only - Apr 1 2:00 1:00 D
+Rule Zion 2005 only - Oct 9 2:00 0 S
+Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2006 only - Oct 1 2:00 0 S
+Rule Zion 2007 only - Sep 16 2:00 0 S
+Rule Zion 2008 only - Oct 5 2:00 0 S
+Rule Zion 2009 only - Sep 27 2:00 0 S
+Rule Zion 2010 only - Sep 12 2:00 0 S
+Rule Zion 2011 only - Apr 1 2:00 1:00 D
+Rule Zion 2011 only - Oct 2 2:00 0 S
+Rule Zion 2012 2015 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2012 only - Sep 23 2:00 0 S
+Rule Zion 2013 only - Sep 8 2:00 0 S
+Rule Zion 2014 only - Sep 28 2:00 0 S
+Rule Zion 2015 only - Sep 20 2:00 0 S
+Rule Zion 2016 only - Apr 1 2:00 1:00 D
+Rule Zion 2016 only - Oct 9 2:00 0 S
+Rule Zion 2017 2021 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2017 only - Sep 24 2:00 0 S
+Rule Zion 2018 only - Sep 16 2:00 0 S
+Rule Zion 2019 only - Oct 6 2:00 0 S
+Rule Zion 2020 only - Sep 27 2:00 0 S
+Rule Zion 2021 only - Sep 12 2:00 0 S
+Rule Zion 2022 only - Apr 1 2:00 1:00 D
+Rule Zion 2022 only - Oct 2 2:00 0 S
+Rule Zion 2023 2032 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2023 only - Sep 24 2:00 0 S
+Rule Zion 2024 only - Oct 6 2:00 0 S
+Rule Zion 2025 only - Sep 28 2:00 0 S
+Rule Zion 2026 only - Sep 20 2:00 0 S
+Rule Zion 2027 only - Oct 10 2:00 0 S
+Rule Zion 2028 only - Sep 24 2:00 0 S
+Rule Zion 2029 only - Sep 16 2:00 0 S
+Rule Zion 2030 only - Oct 6 2:00 0 S
+Rule Zion 2031 only - Sep 21 2:00 0 S
+Rule Zion 2032 only - Sep 12 2:00 0 S
+Rule Zion 2033 only - Apr 1 2:00 1:00 D
+Rule Zion 2033 only - Oct 2 2:00 0 S
+Rule Zion 2034 2037 - Mar Fri>=26 2:00 1:00 D
+Rule Zion 2034 only - Sep 17 2:00 0 S
+Rule Zion 2035 only - Oct 7 2:00 0 S
+Rule Zion 2036 only - Sep 28 2:00 0 S
+Rule Zion 2037 only - Sep 13 2:00 0 S
+Zone Asia/Jerusalem 2:20:56 - LMT 1880
+ 2:20:40 - JMT 1918 # Jerusalem Mean Time?
+ 2:00 Zion I%sT
+Rule Japan 1948 only - May Sun>=1 2:00 1:00 D
+Rule Japan 1948 1951 - Sep Sat>=8 2:00 0 S
+Rule Japan 1949 only - Apr Sun>=1 2:00 1:00 D
+Rule Japan 1950 1951 - May Sun>=1 2:00 1:00 D
+Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
+ 9:00 - JST 1896
+ 9:00 - CJT 1938
+ 9:00 Japan J%sT
+Rule Jordan 1973 only - Jun 6 0:00 1:00 S
+Rule Jordan 1973 1975 - Oct 1 0:00 0 -
+Rule Jordan 1974 1977 - May 1 0:00 1:00 S
+Rule Jordan 1976 only - Nov 1 0:00 0 -
+Rule Jordan 1977 only - Oct 1 0:00 0 -
+Rule Jordan 1978 only - Apr 30 0:00 1:00 S
+Rule Jordan 1978 only - Sep 30 0:00 0 -
+Rule Jordan 1985 only - Apr 1 0:00 1:00 S
+Rule Jordan 1985 only - Oct 1 0:00 0 -
+Rule Jordan 1986 1988 - Apr Fri>=1 0:00 1:00 S
+Rule Jordan 1986 1990 - Oct Fri>=1 0:00 0 -
+Rule Jordan 1989 only - May 8 0:00 1:00 S
+Rule Jordan 1990 only - Apr 27 0:00 1:00 S
+Rule Jordan 1991 only - Apr 17 0:00 1:00 S
+Rule Jordan 1991 only - Sep 27 0:00 0 -
+Rule Jordan 1992 only - Apr 10 0:00 1:00 S
+Rule Jordan 1992 1993 - Oct Fri>=1 0:00 0 -
+Rule Jordan 1993 1998 - Apr Fri>=1 0:00 1:00 S
+Rule Jordan 1994 only - Sep Fri>=15 0:00 0 -
+Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
+Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
+Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
+Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
+Rule Jordan 2002 max - Mar lastThu 24:00 1:00 S
+Rule Jordan 2003 only - Oct 24 0:00s 0 -
+Rule Jordan 2004 only - Oct 15 0:00s 0 -
+Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
+Rule Jordan 2006 max - Oct lastFri 0:00s 0 -
+Zone Asia/Amman 2:23:44 - LMT 1931
+ 2:00 Jordan EE%sT
+Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
+ 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time
+ 6:00 RussiaAsia ALM%sT 1991
+ 6:00 - ALMT 1992
+ 6:00 RussiaAsia ALM%sT 2005 Mar 15
+ 6:00 - ALMT
+Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
+ 4:00 - KIZT 1930 Jun 21 # Kizilorda Time
+ 5:00 - KIZT 1981 Apr 1
+ 5:00 1:00 KIZST 1981 Oct 1
+ 6:00 - KIZT 1982 Apr 1
+ 5:00 RussiaAsia KIZ%sT 1991
+ 5:00 - KIZT 1991 Dec 16 # independence
+ 5:00 - QYZT 1992 Jan 19 2:00
+ 6:00 RussiaAsia QYZ%sT 2005 Mar 15
+ 6:00 - QYZT
+Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
+ 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
+ 5:00 - AKTT 1981 Apr 1
+ 5:00 1:00 AKTST 1981 Oct 1
+ 6:00 - AKTT 1982 Apr 1
+ 5:00 RussiaAsia AKT%sT 1991
+ 5:00 - AKTT 1991 Dec 16 # independence
+ 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time
+ 5:00 - AQTT
+Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
+ 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T
+ 5:00 - FORT 1963
+ 5:00 - SHET 1981 Oct 1 # Shevchenko Time
+ 6:00 - SHET 1982 Apr 1
+ 5:00 RussiaAsia SHE%sT 1991
+ 5:00 - SHET 1991 Dec 16 # independence
+ 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
+ 4:00 RussiaAsia AQT%sT 2005 Mar 15
+ 5:00 - AQTT
+Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
+ 4:00 - URAT 1930 Jun 21 # Ural'sk time
+ 5:00 - URAT 1981 Apr 1
+ 5:00 1:00 URAST 1981 Oct 1
+ 6:00 - URAT 1982 Apr 1
+ 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
+ 4:00 RussiaAsia URA%sT 1991
+ 4:00 - URAT 1991 Dec 16 # independence
+ 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
+ 5:00 - ORAT
+Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S
+Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
+Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S
+Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
+Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
+ 5:00 - FRUT 1930 Jun 21 # Frunze Time
+ 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
+ 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
+ 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
+ 6:00 - KGT
+Rule ROK 1960 only - May 15 0:00 1:00 D
+Rule ROK 1960 only - Sep 13 0:00 0 S
+Rule ROK 1987 1988 - May Sun>=8 0:00 1:00 D
+Rule ROK 1987 1988 - Oct Sun>=8 0:00 0 S
+Zone Asia/Seoul 8:27:52 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 ROK K%sT 1961 Aug 10
+ 8:30 - KST 1968 Oct
+ 9:00 ROK K%sT
+Zone Asia/Pyongyang 8:23:00 - LMT 1890
+ 8:30 - KST 1904 Dec
+ 9:00 - KST 1928
+ 8:30 - KST 1932
+ 9:00 - KST 1954 Mar 21
+ 8:00 - KST 1961 Aug 10
+ 9:00 - KST
+Zone Asia/Kuwait 3:11:56 - LMT 1950
+ 3:00 - AST
+Zone Asia/Vientiane 6:50:24 - LMT 1906 Jun 9 # or Viangchan
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Rule Lebanon 1920 only - Mar 28 0:00 1:00 S
+Rule Lebanon 1920 only - Oct 25 0:00 0 -
+Rule Lebanon 1921 only - Apr 3 0:00 1:00 S
+Rule Lebanon 1921 only - Oct 3 0:00 0 -
+Rule Lebanon 1922 only - Mar 26 0:00 1:00 S
+Rule Lebanon 1922 only - Oct 8 0:00 0 -
+Rule Lebanon 1923 only - Apr 22 0:00 1:00 S
+Rule Lebanon 1923 only - Sep 16 0:00 0 -
+Rule Lebanon 1957 1961 - May 1 0:00 1:00 S
+Rule Lebanon 1957 1961 - Oct 1 0:00 0 -
+Rule Lebanon 1972 only - Jun 22 0:00 1:00 S
+Rule Lebanon 1972 1977 - Oct 1 0:00 0 -
+Rule Lebanon 1973 1977 - May 1 0:00 1:00 S
+Rule Lebanon 1978 only - Apr 30 0:00 1:00 S
+Rule Lebanon 1978 only - Sep 30 0:00 0 -
+Rule Lebanon 1984 1987 - May 1 0:00 1:00 S
+Rule Lebanon 1984 1991 - Oct 16 0:00 0 -
+Rule Lebanon 1988 only - Jun 1 0:00 1:00 S
+Rule Lebanon 1989 only - May 10 0:00 1:00 S
+Rule Lebanon 1990 1992 - May 1 0:00 1:00 S
+Rule Lebanon 1992 only - Oct 4 0:00 0 -
+Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
+Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
+Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
+Zone Asia/Beirut 2:22:00 - LMT 1880
+ 2:00 Lebanon EE%sT
+Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer
+Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
+Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
+ 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
+ 7:00 - MALT 1933 Jan 1 # Malaya Time
+ 7:00 0:20 MALST 1936 Jan 1
+ 7:20 - MALT 1941 Sep 1
+ 7:30 - MALT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 7:30 - MALT 1982 Jan 1
+ 8:00 - MYT # Malaysia Time
+Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
+ 7:30 - BORT 1933 # Borneo Time
+ 8:00 NBorneo BOR%sT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 8:00 - BORT 1982 Jan 1
+ 8:00 - MYT
+Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
+ 4:54:00 - MMT 1960 # Male Mean Time
+ 5:00 - MVT # Maldives Time
+Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S
+Rule Mongol 1983 only - Oct 1 0:00 0 -
+Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S
+Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
+Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S
+Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
+Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S
+Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
+ 6:00 - HOVT 1978 # Hovd Time
+ 7:00 Mongol HOV%sT
+Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
+ 7:00 - ULAT 1978 # Ulaanbaatar Time
+ 8:00 Mongol ULA%sT
+Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
+ 7:00 - ULAT 1978
+ 8:00 - ULAT 1983 Apr
+ 9:00 Mongol CHO%sT 2008 Mar 31 # Choibalsan Time
+ 8:00 Mongol CHO%sT
+Zone Asia/Kathmandu 5:41:16 - LMT 1920
+ 5:30 - IST 1986
+ 5:45 - NPT # Nepal Time
+Zone Asia/Muscat 3:54:20 - LMT 1920
+ 4:00 - GST
+Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
+Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
+Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
+Rule Pakistan 2008 only - Nov 1 0:00 0 -
+Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
+Rule Pakistan 2009 only - Nov 1 0:00 0 -
+Zone Asia/Karachi 4:28:12 - LMT 1907
+ 5:30 - IST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 15
+ 5:30 - IST 1951 Sep 30
+ 5:00 - KART 1971 Mar 26 # Karachi Time
+ 5:00 Pakistan PK%sT # Pakistan Time
+Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
+Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
+Rule EgyptAsia 1958 only - May 1 0:00 1:00 S
+Rule EgyptAsia 1959 1967 - May 1 1:00 1:00 S
+Rule EgyptAsia 1959 1965 - Sep 30 3:00 0 -
+Rule EgyptAsia 1966 only - Oct 1 3:00 0 -
+Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S
+Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
+Rule Palestine 2004 only - Oct 1 1:00 0 -
+Rule Palestine 2005 only - Oct 4 2:00 0 -
+Rule Palestine 2006 2008 - Apr 1 0:00 1:00 S
+Rule Palestine 2006 only - Sep 22 0:00 0 -
+Rule Palestine 2007 only - Sep Thu>=8 2:00 0 -
+Rule Palestine 2008 only - Aug lastFri 2:00 0 -
+Rule Palestine 2009 max - Mar lastFri 0:00 1:00 S
+Rule Palestine 2009 max - Sep lastMon 2:00 0 -
+Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
+ 2:00 Zion EET 1948 May 15
+ 2:00 EgyptAsia EE%sT 1967 Jun 5
+ 2:00 Zion I%sT 1996
+ 2:00 Jordan EE%sT 1999
+ 2:00 Palestine EE%sT
+Rule Phil 1936 only - Nov 1 0:00 1:00 S
+Rule Phil 1937 only - Feb 1 0:00 0 -
+Rule Phil 1954 only - Apr 12 0:00 1:00 S
+Rule Phil 1954 only - Jul 1 0:00 0 -
+Rule Phil 1978 only - Mar 22 0:00 1:00 S
+Rule Phil 1978 only - Sep 21 0:00 0 -
+Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
+ 8:04:00 - LMT 1899 May 11
+ 8:00 Phil PH%sT 1942 May
+ 9:00 - JST 1944 Nov
+ 8:00 Phil PH%sT
+Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+Zone Asia/Riyadh 3:06:52 - LMT 1950
+ 3:00 - AST
+Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
+ 6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
+ 7:00 - MALT 1933 Jan 1 # Malaya Time
+ 7:00 0:20 MALST 1936 Jan 1
+ 7:20 - MALT 1941 Sep 1
+ 7:30 - MALT 1942 Feb 16
+ 9:00 - JST 1945 Sep 12
+ 7:30 - MALT 1965 Aug 9 # independence
+ 7:30 - SGT 1982 Jan 1 # Singapore Time
+ 8:00 - SGT
+Zone Asia/Colombo 5:19:24 - LMT 1880
+ 5:19:32 - MMT 1906 # Moratuwa Mean Time
+ 5:30 - IST 1942 Jan 5
+ 5:30 0:30 IHST 1942 Sep
+ 5:30 1:00 IST 1945 Oct 16 2:00
+ 5:30 - IST 1996 May 25 0:00
+ 6:30 - LKT 1996 Oct 26 0:30
+ 6:00 - LKT 2006 Apr 15 0:30
+ 5:30 - IST
+Rule Syria 1920 1923 - Apr Sun>=15 2:00 1:00 S
+Rule Syria 1920 1923 - Oct Sun>=1 2:00 0 -
+Rule Syria 1962 only - Apr 29 2:00 1:00 S
+Rule Syria 1962 only - Oct 1 2:00 0 -
+Rule Syria 1963 1965 - May 1 2:00 1:00 S
+Rule Syria 1963 only - Sep 30 2:00 0 -
+Rule Syria 1964 only - Oct 1 2:00 0 -
+Rule Syria 1965 only - Sep 30 2:00 0 -
+Rule Syria 1966 only - Apr 24 2:00 1:00 S
+Rule Syria 1966 1976 - Oct 1 2:00 0 -
+Rule Syria 1967 1978 - May 1 2:00 1:00 S
+Rule Syria 1977 1978 - Sep 1 2:00 0 -
+Rule Syria 1983 1984 - Apr 9 2:00 1:00 S
+Rule Syria 1983 1984 - Oct 1 2:00 0 -
+Rule Syria 1986 only - Feb 16 2:00 1:00 S
+Rule Syria 1986 only - Oct 9 2:00 0 -
+Rule Syria 1987 only - Mar 1 2:00 1:00 S
+Rule Syria 1987 1988 - Oct 31 2:00 0 -
+Rule Syria 1988 only - Mar 15 2:00 1:00 S
+Rule Syria 1989 only - Mar 31 2:00 1:00 S
+Rule Syria 1989 only - Oct 1 2:00 0 -
+Rule Syria 1990 only - Apr 1 2:00 1:00 S
+Rule Syria 1990 only - Sep 30 2:00 0 -
+Rule Syria 1991 only - Apr 1 0:00 1:00 S
+Rule Syria 1991 1992 - Oct 1 0:00 0 -
+Rule Syria 1992 only - Apr 8 0:00 1:00 S
+Rule Syria 1993 only - Mar 26 0:00 1:00 S
+Rule Syria 1993 only - Sep 25 0:00 0 -
+Rule Syria 1994 1996 - Apr 1 0:00 1:00 S
+Rule Syria 1994 2005 - Oct 1 0:00 0 -
+Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
+Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
+Rule Syria 2006 only - Sep 22 0:00 0 -
+Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
+Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
+Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
+Rule Syria 2008 max - Nov 1 0:00 0 -
+Rule Syria 2009 max - Mar lastFri 0:00 1:00 S
+Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
+ 2:00 Syria EE%sT
+Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
+ 5:00 - DUST 1930 Jun 21 # Dushanbe Time
+ 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
+ 5:00 1:00 DUSST 1991 Sep 9 2:00s
+ 5:00 - TJT # Tajikistan Time
+Zone Asia/Bangkok 6:42:04 - LMT 1880
+ 6:42:04 - BMT 1920 Apr # Bangkok Mean Time
+ 7:00 - ICT
+Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
+ 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
+ 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
+ 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
+ 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
+ 5:00 - TMT
+Zone Asia/Dubai 3:41:12 - LMT 1920
+ 4:00 - GST
+Zone Asia/Samarkand 4:27:12 - LMT 1924 May 2
+ 4:00 - SAMT 1930 Jun 21 # Samarkand Time
+ 5:00 - SAMT 1981 Apr 1
+ 5:00 1:00 SAMST 1981 Oct 1
+ 6:00 - TAST 1982 Apr 1 # Tashkent Time
+ 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
+ 5:00 RussiaAsia UZ%sT 1992
+ 5:00 - UZT
+Zone Asia/Tashkent 4:37:12 - LMT 1924 May 2
+ 5:00 - TAST 1930 Jun 21 # Tashkent Time
+ 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
+ 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
+ 5:00 RussiaAsia UZ%sT 1992
+ 5:00 - UZT
+Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jun 9
+ 7:06:20 - SMT 1911 Mar 11 0:01 # Saigon MT?
+ 7:00 - ICT 1912 May
+ 8:00 - ICT 1931 May
+ 7:00 - ICT
+Zone Asia/Aden 3:00:48 - LMT 1950
+ 3:00 - AST
diff --git a/js/dojo/dojox/date/zoneinfo/australasia b/js/dojo/dojox/date/zoneinfo/australasia
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/australasia
@@ -0,0 +1,299 @@
+Rule Aus 1917 only - Jan 1 0:01 1:00 -
+Rule Aus 1917 only - Mar 25 2:00 0 -
+Rule Aus 1942 only - Jan 1 2:00 1:00 -
+Rule Aus 1942 only - Mar 29 2:00 0 -
+Rule Aus 1942 only - Sep 27 2:00 1:00 -
+Rule Aus 1943 1944 - Mar lastSun 2:00 0 -
+Rule Aus 1943 only - Oct 3 2:00 1:00 -
+Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
+ 9:00 - CST 1899 May
+ 9:30 Aus CST
+Rule AW 1974 only - Oct lastSun 2:00s 1:00 -
+Rule AW 1975 only - Mar Sun>=1 2:00s 0 -
+Rule AW 1983 only - Oct lastSun 2:00s 1:00 -
+Rule AW 1984 only - Mar Sun>=1 2:00s 0 -
+Rule AW 1991 only - Nov 17 2:00s 1:00 -
+Rule AW 1992 only - Mar Sun>=1 2:00s 0 -
+Rule AW 2006 only - Dec 3 2:00s 1:00 -
+Rule AW 2007 2009 - Mar lastSun 2:00s 0 -
+Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 -
+Zone Australia/Perth 7:43:24 - LMT 1895 Dec
+ 8:00 Aus WST 1943 Jul
+ 8:00 AW WST
+Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
+ 8:45 Aus CWST 1943 Jul
+ 8:45 AW CWST
+Rule AQ 1971 only - Oct lastSun 2:00s 1:00 -
+Rule AQ 1972 only - Feb lastSun 2:00s 0 -
+Rule AQ 1989 1991 - Oct lastSun 2:00s 1:00 -
+Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 -
+Rule Holiday 1992 1993 - Oct lastSun 2:00s 1:00 -
+Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 -
+Zone Australia/Brisbane 10:12:08 - LMT 1895
+ 10:00 Aus EST 1971
+ 10:00 AQ EST
+Zone Australia/Lindeman 9:55:56 - LMT 1895
+ 10:00 Aus EST 1971
+ 10:00 AQ EST 1992 Jul
+ 10:00 Holiday EST
+Rule AS 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AS 1986 only - Oct 19 2:00s 1:00 -
+Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 -
+Rule AS 1972 only - Feb 27 2:00s 0 -
+Rule AS 1973 1985 - Mar Sun>=1 2:00s 0 -
+Rule AS 1986 1989 - Mar Sun>=15 2:00s 0 -
+Rule AS 1990 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1991 only - Mar Sun>=1 2:00s 0 -
+Rule AS 1992 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1993 only - Mar Sun>=1 2:00s 0 -
+Rule AS 1994 only - Mar Sun>=18 2:00s 0 -
+Rule AS 1995 2005 - Mar lastSun 2:00s 0 -
+Rule AS 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AS 2007 only - Mar lastSun 2:00s 0 -
+Rule AS 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
+ 9:00 - CST 1899 May
+ 9:30 Aus CST 1971
+ 9:30 AS CST
+Rule AT 1967 only - Oct Sun>=1 2:00s 1:00 -
+Rule AT 1968 only - Mar lastSun 2:00s 0 -
+Rule AT 1968 1985 - Oct lastSun 2:00s 1:00 -
+Rule AT 1969 1971 - Mar Sun>=8 2:00s 0 -
+Rule AT 1972 only - Feb lastSun 2:00s 0 -
+Rule AT 1973 1981 - Mar Sun>=1 2:00s 0 -
+Rule AT 1982 1983 - Mar lastSun 2:00s 0 -
+Rule AT 1984 1986 - Mar Sun>=1 2:00s 0 -
+Rule AT 1986 only - Oct Sun>=15 2:00s 1:00 -
+Rule AT 1987 1990 - Mar Sun>=15 2:00s 0 -
+Rule AT 1987 only - Oct Sun>=22 2:00s 1:00 -
+Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 -
+Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 -
+Rule AT 1991 2005 - Mar lastSun 2:00s 0 -
+Rule AT 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 -
+Rule AT 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AT 2007 only - Mar lastSun 2:00s 0 -
+Rule AT 2008 max - Apr Sun>=1 2:00s 0 -
+Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
+ 10:00 - EST 1916 Oct 1 2:00
+ 10:00 1:00 EST 1917 Feb
+ 10:00 Aus EST 1967
+ 10:00 AT EST
+Zone Australia/Currie 9:35:28 - LMT 1895 Sep
+ 10:00 - EST 1916 Oct 1 2:00
+ 10:00 1:00 EST 1917 Feb
+ 10:00 Aus EST 1971 Jul
+ 10:00 AT EST
+Rule AV 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AV 1972 only - Feb lastSun 2:00s 0 -
+Rule AV 1973 1985 - Mar Sun>=1 2:00s 0 -
+Rule AV 1986 1990 - Mar Sun>=15 2:00s 0 -
+Rule AV 1986 1987 - Oct Sun>=15 2:00s 1:00 -
+Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 -
+Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 -
+Rule AV 1995 2005 - Mar lastSun 2:00s 0 -
+Rule AV 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 -
+Rule AV 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AV 2007 only - Mar lastSun 2:00s 0 -
+Rule AV 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
+ 10:00 Aus EST 1971
+ 10:00 AV EST
+Rule AN 1971 1985 - Oct lastSun 2:00s 1:00 -
+Rule AN 1972 only - Feb 27 2:00s 0 -
+Rule AN 1973 1981 - Mar Sun>=1 2:00s 0 -
+Rule AN 1982 only - Apr Sun>=1 2:00s 0 -
+Rule AN 1983 1985 - Mar Sun>=1 2:00s 0 -
+Rule AN 1986 1989 - Mar Sun>=15 2:00s 0 -
+Rule AN 1986 only - Oct 19 2:00s 1:00 -
+Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 -
+Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 -
+Rule AN 1996 2005 - Mar lastSun 2:00s 0 -
+Rule AN 2000 only - Aug lastSun 2:00s 1:00 -
+Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 -
+Rule AN 2006 only - Apr Sun>=1 2:00s 0 -
+Rule AN 2007 only - Mar lastSun 2:00s 0 -
+Rule AN 2008 max - Apr Sun>=1 2:00s 0 -
+Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 -
+Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
+ 10:00 Aus EST 1971
+ 10:00 AN EST
+Zone Australia/Broken_Hill 9:25:48 - LMT 1895 Feb
+ 10:00 - EST 1896 Aug 23
+ 9:00 - CST 1899 May
+ 9:30 Aus CST 1971
+ 9:30 AN CST 2000
+ 9:30 AS CST
+Rule LH 1981 1984 - Oct lastSun 2:00 1:00 -
+Rule LH 1982 1985 - Mar Sun>=1 2:00 0 -
+Rule LH 1985 only - Oct lastSun 2:00 0:30 -
+Rule LH 1986 1989 - Mar Sun>=15 2:00 0 -
+Rule LH 1986 only - Oct 19 2:00 0:30 -
+Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
+Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
+Rule LH 1996 2005 - Mar lastSun 2:00 0 -
+Rule LH 2000 only - Aug lastSun 2:00 0:30 -
+Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
+Rule LH 2006 only - Apr Sun>=1 2:00 0 -
+Rule LH 2007 only - Mar lastSun 2:00 0 -
+Rule LH 2008 max - Apr Sun>=1 2:00 0 -
+Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
+Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
+ 10:00 - EST 1981 Mar
+ 10:30 LH LHST
+Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
+ 7:00 - CXT # Christmas Island Time
+Rule Cook 1978 only - Nov 12 0:00 0:30 HS
+Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
+Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS
+Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
+ -10:30 - CKT 1978 Nov 12 # Cook Is Time
+ -10:00 Cook CK%sT
+Zone Indian/Cocos 6:27:40 - LMT 1900
+ 6:30 - CCT # Cocos Islands Time
+Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
+Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
+Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
+ 12:00 Fiji FJ%sT # Fiji Time
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+ -9:00 - GAMT # Gambier Time
+Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
+ -9:30 - MART # Marquesas Time
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+ -10:00 - TAHT # Tahiti Time
+Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
+ 9:39:00 - LMT 1901 # Agana
+ 10:00 - GST 2000 Dec 23 # Guam
+ 10:00 - ChST # Chamorro Standard Time
+Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
+ 12:00 - GILT # Gilbert Is Time
+Zone Pacific/Enderbury -11:24:20 - LMT 1901
+ -12:00 - PHOT 1979 Oct # Phoenix Is Time
+ -11:00 - PHOT 1995
+ 13:00 - PHOT
+Zone Pacific/Kiritimati -10:29:20 - LMT 1901
+ -10:40 - LINT 1979 Oct # Line Is Time
+ -10:00 - LINT 1995
+ 14:00 - LINT
+Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
+ 9:43:00 - LMT 1901
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
+ 10:00 - MPT 2000 Dec 23
+ 10:00 - ChST # Chamorro Standard Time
+Zone Pacific/Majuro 11:24:48 - LMT 1901
+ 11:00 - MHT 1969 Oct # Marshall Islands Time
+ 12:00 - MHT
+Zone Pacific/Kwajalein 11:09:20 - LMT 1901
+ 11:00 - MHT 1969 Oct
+ -12:00 - KWAT 1993 Aug 20 # Kwajalein Time
+ 12:00 - MHT
+Zone Pacific/Truk 10:07:08 - LMT 1901
+ 10:00 - TRUT # Truk Time
+Zone Pacific/Ponape 10:32:52 - LMT 1901 # Kolonia
+ 11:00 - PONT # Ponape Time
+Zone Pacific/Kosrae 10:51:56 - LMT 1901
+ 11:00 - KOST 1969 Oct # Kosrae Time
+ 12:00 - KOST 1999
+ 11:00 - KOST
+Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
+ 11:30 - NRT 1942 Mar 15 # Nauru Time
+ 9:00 - JST 1944 Aug 15
+ 11:30 - NRT 1979 May
+ 12:00 - NRT
+Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S
+Rule NC 1978 1979 - Feb 27 0:00 0 -
+Rule NC 1996 only - Dec 1 2:00s 1:00 S
+Rule NC 1997 only - Mar 2 2:00s 0 -
+Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13
+ 11:00 NC NC%sT
+Rule NZ 1927 only - Nov 6 2:00 1:00 S
+Rule NZ 1928 only - Mar 4 2:00 0 M
+Rule NZ 1928 1933 - Oct Sun>=8 2:00 0:30 S
+Rule NZ 1929 1933 - Mar Sun>=15 2:00 0 M
+Rule NZ 1934 1940 - Apr lastSun 2:00 0 M
+Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S
+Rule NZ 1946 only - Jan 1 0:00 0 S
+Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D
+Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D
+Rule NZ 1975 only - Feb lastSun 2:00s 0 S
+Rule Chatham 1975 only - Feb lastSun 2:45s 0 S
+Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D
+Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D
+Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S
+Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S
+Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
+Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D
+Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
+Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D
+Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
+Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S
+Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
+Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D
+Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
+Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S
+Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
+ 11:30 NZ NZ%sT 1946 Jan 1
+ 12:00 NZ NZ%sT
+Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1
+ 12:45 Chatham CHA%sT
+Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
+ -11:20 - NUT 1951 # Niue Time
+ -11:30 - NUT 1978 Oct 1
+ -11:00 - NUT
+Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
+ 11:12 - NMT 1951 # Norfolk Mean Time
+ 11:30 - NFT # Norfolk Time
+Zone Pacific/Palau 8:57:56 - LMT 1901 # Koror
+ 9:00 - PWT # Palau Time
+Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
+ 9:48:32 - PMMT 1895 # Port Moresby Mean Time
+ 10:00 - PGT # Papua New Guinea Time
+Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
+ -8:30 - PNT 1998 Apr 27 00:00
+ -8:00 - PST # Pitcairn Standard Time
+Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
+ -11:22:48 - LMT 1911
+ -11:30 - SAMT 1950 # Samoa Time
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
+ -11:26:56 - LMT 1911
+ -11:30 - SAMT 1950 # Samoa Time
+ -11:00 - WST # Samoa Time
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
+ 11:00 - SBT # Solomon Is Time
+Zone Pacific/Fakaofo -11:24:56 - LMT 1901
+ -10:00 - TKT # Tokelau Time
+Rule Tonga 1999 only - Oct 7 2:00s 1:00 S
+Rule Tonga 2000 only - Mar 19 2:00s 0 -
+Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
+Zone Pacific/Tongatapu 12:19:20 - LMT 1901
+ 12:20 - TOT 1941 # Tonga Time
+ 13:00 - TOT 1999
+ 13:00 Tonga TO%sT
+Zone Pacific/Funafuti 11:56:52 - LMT 1901
+ 12:00 - TVT # Tuvalu Time
+Zone Pacific/Johnston -10:00 - HST
+Zone Pacific/Midway -11:49:28 - LMT 1901
+ -11:00 - NST 1956 Jun 3
+ -11:00 1:00 NDT 1956 Sep 2
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+Zone Pacific/Wake 11:06:28 - LMT 1901
+ 12:00 - WAKT # Wake Time
+Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S
+Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 -
+Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S
+Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S
+Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
+Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S
+Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
+ 11:00 Vanuatu VU%sT # Vanuatu Time
+Zone Pacific/Wallis 12:15:20 - LMT 1901
+ 12:00 - WFT # Wallis & Futuna Time
diff --git a/js/dojo/dojox/date/zoneinfo/backward b/js/dojo/dojox/date/zoneinfo/backward
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/backward
@@ -0,0 +1,108 @@
+Link Africa/Asmara Africa/Asmera
+Link Africa/Bamako Africa/Timbuktu
+Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
+Link America/Adak America/Atka
+Link America/Argentina/Buenos_Aires America/Buenos_Aires
+Link America/Argentina/Catamarca America/Catamarca
+Link America/Atikokan America/Coral_Harbour
+Link America/Argentina/Cordoba America/Cordoba
+Link America/Tijuana America/Ensenada
+Link America/Indiana/Indianapolis America/Fort_Wayne
+Link America/Indiana/Indianapolis America/Indianapolis
+Link America/Argentina/Jujuy America/Jujuy
+Link America/Indiana/Knox America/Knox_IN
+Link America/Kentucky/Louisville America/Louisville
+Link America/Argentina/Mendoza America/Mendoza
+Link America/Rio_Branco America/Porto_Acre
+Link America/Argentina/Cordoba America/Rosario
+Link America/St_Thomas America/Virgin
+Link Asia/Ashgabat Asia/Ashkhabad
+Link Asia/Chongqing Asia/Chungking
+Link Asia/Dhaka Asia/Dacca
+Link Asia/Kathmandu Asia/Katmandu
+Link Asia/Kolkata Asia/Calcutta
+Link Asia/Macau Asia/Macao
+Link Asia/Jerusalem Asia/Tel_Aviv
+Link Asia/Ho_Chi_Minh Asia/Saigon
+Link Asia/Thimphu Asia/Thimbu
+Link Asia/Makassar Asia/Ujung_Pandang
+Link Asia/Ulaanbaatar Asia/Ulan_Bator
+Link Atlantic/Faroe Atlantic/Faeroe
+Link Europe/Oslo Atlantic/Jan_Mayen
+Link Australia/Sydney Australia/ACT
+Link Australia/Sydney Australia/Canberra
+Link Australia/Lord_Howe Australia/LHI
+Link Australia/Sydney Australia/NSW
+Link Australia/Darwin Australia/North
+Link Australia/Brisbane Australia/Queensland
+Link Australia/Adelaide Australia/South
+Link Australia/Hobart Australia/Tasmania
+Link Australia/Melbourne Australia/Victoria
+Link Australia/Perth Australia/West
+Link Australia/Broken_Hill Australia/Yancowinna
+Link America/Rio_Branco Brazil/Acre
+Link America/Noronha Brazil/DeNoronha
+Link America/Sao_Paulo Brazil/East
+Link America/Manaus Brazil/West
+Link America/Halifax Canada/Atlantic
+Link America/Winnipeg Canada/Central
+Link America/Regina Canada/East-Saskatchewan
+Link America/Toronto Canada/Eastern
+Link America/Edmonton Canada/Mountain
+Link America/St_Johns Canada/Newfoundland
+Link America/Vancouver Canada/Pacific
+Link America/Regina Canada/Saskatchewan
+Link America/Whitehorse Canada/Yukon
+Link America/Santiago Chile/Continental
+Link Pacific/Easter Chile/EasterIsland
+Link America/Havana Cuba
+Link Africa/Cairo Egypt
+Link Europe/Dublin Eire
+Link Europe/London Europe/Belfast
+Link Europe/Chisinau Europe/Tiraspol
+Link Europe/London GB
+Link Europe/London GB-Eire
+Link Etc/GMT GMT+0
+Link Etc/GMT GMT-0
+Link Etc/GMT GMT0
+Link Etc/GMT Greenwich
+Link Asia/Hong_Kong Hongkong
+Link Atlantic/Reykjavik Iceland
+Link Asia/Tehran Iran
+Link Asia/Jerusalem Israel
+Link America/Jamaica Jamaica
+Link Asia/Tokyo Japan
+Link Pacific/Kwajalein Kwajalein
+Link Africa/Tripoli Libya
+Link America/Tijuana Mexico/BajaNorte
+Link America/Mazatlan Mexico/BajaSur
+Link America/Mexico_City Mexico/General
+Link Pacific/Auckland NZ
+Link Pacific/Chatham NZ-CHAT
+Link America/Denver Navajo
+Link Asia/Shanghai PRC
+Link Pacific/Pago_Pago Pacific/Samoa
+Link Pacific/Truk Pacific/Yap
+Link Europe/Warsaw Poland
+Link Europe/Lisbon Portugal
+Link Asia/Taipei ROC
+Link Asia/Seoul ROK
+Link Asia/Singapore Singapore
+Link Europe/Istanbul Turkey
+Link Etc/UCT UCT
+Link America/Anchorage US/Alaska
+Link America/Adak US/Aleutian
+Link America/Phoenix US/Arizona
+Link America/Chicago US/Central
+Link America/Indiana/Indianapolis US/East-Indiana
+Link America/New_York US/Eastern
+Link Pacific/Honolulu US/Hawaii
+Link America/Indiana/Knox US/Indiana-Starke
+Link America/Detroit US/Michigan
+Link America/Denver US/Mountain
+Link America/Los_Angeles US/Pacific
+Link Pacific/Pago_Pago US/Samoa
+Link Etc/UTC UTC
+Link Etc/UTC Universal
+Link Europe/Moscow W-SU
+Link Etc/UTC Zulu
diff --git a/js/dojo/dojox/date/zoneinfo/etcetera b/js/dojo/dojox/date/zoneinfo/etcetera
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/etcetera
@@ -0,0 +1,36 @@
+Zone Etc/GMT 0 - GMT
+Zone Etc/UTC 0 - UTC
+Zone Etc/UCT 0 - UCT
+Link Etc/GMT GMT
+Link Etc/UTC Etc/Universal
+Link Etc/UTC Etc/Zulu
+Link Etc/GMT Etc/Greenwich
+Link Etc/GMT Etc/GMT-0
+Link Etc/GMT Etc/GMT+0
+Link Etc/GMT Etc/GMT0
+Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
+Zone Etc/GMT-13 13 - GMT-13
+Zone Etc/GMT-12 12 - GMT-12
+Zone Etc/GMT-11 11 - GMT-11
+Zone Etc/GMT-10 10 - GMT-10
+Zone Etc/GMT-9 9 - GMT-9
+Zone Etc/GMT-8 8 - GMT-8
+Zone Etc/GMT-7 7 - GMT-7
+Zone Etc/GMT-6 6 - GMT-6
+Zone Etc/GMT-5 5 - GMT-5
+Zone Etc/GMT-4 4 - GMT-4
+Zone Etc/GMT-3 3 - GMT-3
+Zone Etc/GMT-2 2 - GMT-2
+Zone Etc/GMT-1 1 - GMT-1
+Zone Etc/GMT+1 -1 - GMT+1
+Zone Etc/GMT+2 -2 - GMT+2
+Zone Etc/GMT+3 -3 - GMT+3
+Zone Etc/GMT+4 -4 - GMT+4
+Zone Etc/GMT+5 -5 - GMT+5
+Zone Etc/GMT+6 -6 - GMT+6
+Zone Etc/GMT+7 -7 - GMT+7
+Zone Etc/GMT+8 -8 - GMT+8
+Zone Etc/GMT+9 -9 - GMT+9
+Zone Etc/GMT+10 -10 - GMT+10
+Zone Etc/GMT+11 -11 - GMT+11
+Zone Etc/GMT+12 -12 - GMT+12
diff --git a/js/dojo/dojox/date/zoneinfo/europe b/js/dojo/dojox/date/zoneinfo/europe
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/europe
@@ -0,0 +1,1045 @@
+Rule GB-Eire 1916 only - May 21 2:00s 1:00 BST
+Rule GB-Eire 1916 only - Oct 1 2:00s 0 GMT
+Rule GB-Eire 1917 only - Apr 8 2:00s 1:00 BST
+Rule GB-Eire 1917 only - Sep 17 2:00s 0 GMT
+Rule GB-Eire 1918 only - Mar 24 2:00s 1:00 BST
+Rule GB-Eire 1918 only - Sep 30 2:00s 0 GMT
+Rule GB-Eire 1919 only - Mar 30 2:00s 1:00 BST
+Rule GB-Eire 1919 only - Sep 29 2:00s 0 GMT
+Rule GB-Eire 1920 only - Mar 28 2:00s 1:00 BST
+Rule GB-Eire 1920 only - Oct 25 2:00s 0 GMT
+Rule GB-Eire 1921 only - Apr 3 2:00s 1:00 BST
+Rule GB-Eire 1921 only - Oct 3 2:00s 0 GMT
+Rule GB-Eire 1922 only - Mar 26 2:00s 1:00 BST
+Rule GB-Eire 1922 only - Oct 8 2:00s 0 GMT
+Rule GB-Eire 1923 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1923 1924 - Sep Sun>=16 2:00s 0 GMT
+Rule GB-Eire 1924 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1925 1926 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1925 1938 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1927 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1928 1929 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1930 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1931 1932 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1933 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1934 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1935 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1936 1937 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1938 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1939 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1939 only - Nov Sun>=16 2:00s 0 GMT
+Rule GB-Eire 1940 only - Feb Sun>=23 2:00s 1:00 BST
+Rule GB-Eire 1941 only - May Sun>=2 1:00s 2:00 BDST
+Rule GB-Eire 1941 1943 - Aug Sun>=9 1:00s 1:00 BST
+Rule GB-Eire 1942 1944 - Apr Sun>=2 1:00s 2:00 BDST
+Rule GB-Eire 1944 only - Sep Sun>=16 1:00s 1:00 BST
+Rule GB-Eire 1945 only - Apr Mon>=2 1:00s 2:00 BDST
+Rule GB-Eire 1945 only - Jul Sun>=9 1:00s 1:00 BST
+Rule GB-Eire 1945 1946 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1946 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1947 only - Mar 16 2:00s 1:00 BST
+Rule GB-Eire 1947 only - Apr 13 1:00s 2:00 BDST
+Rule GB-Eire 1947 only - Aug 10 1:00s 1:00 BST
+Rule GB-Eire 1947 only - Nov 2 2:00s 0 GMT
+Rule GB-Eire 1948 only - Mar 14 2:00s 1:00 BST
+Rule GB-Eire 1948 only - Oct 31 2:00s 0 GMT
+Rule GB-Eire 1949 only - Apr 3 2:00s 1:00 BST
+Rule GB-Eire 1949 only - Oct 30 2:00s 0 GMT
+Rule GB-Eire 1950 1952 - Apr Sun>=14 2:00s 1:00 BST
+Rule GB-Eire 1950 1952 - Oct Sun>=21 2:00s 0 GMT
+Rule GB-Eire 1953 only - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1953 1960 - Oct Sun>=2 2:00s 0 GMT
+Rule GB-Eire 1954 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1955 1956 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1957 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1958 1959 - Apr Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1960 only - Apr Sun>=9 2:00s 1:00 BST
+Rule GB-Eire 1961 1963 - Mar lastSun 2:00s 1:00 BST
+Rule GB-Eire 1961 1968 - Oct Sun>=23 2:00s 0 GMT
+Rule GB-Eire 1964 1967 - Mar Sun>=19 2:00s 1:00 BST
+Rule GB-Eire 1968 only - Feb 18 2:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Mar Sun>=16 2:00s 1:00 BST
+Rule GB-Eire 1972 1980 - Oct Sun>=23 2:00s 0 GMT
+Rule GB-Eire 1981 1995 - Mar lastSun 1:00u 1:00 BST
+Rule GB-Eire 1981 1989 - Oct Sun>=23 1:00u 0 GMT
+Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
+Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+Link Europe/London Europe/Jersey
+Link Europe/London Europe/Guernsey
+Link Europe/London Europe/Isle_of_Man
+Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
+ -0:25:21 - DMT 1916 May 21 2:00
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ 0:00 GB-Eire %s 1921 Dec 6 # independence
+ 0:00 GB-Eire GMT/IST 1940 Feb 25 2:00
+ 0:00 1:00 IST 1946 Oct 6 2:00
+ 0:00 - GMT 1947 Mar 16 2:00
+ 0:00 1:00 IST 1947 Nov 2 2:00
+ 0:00 - GMT 1948 Apr 18 2:00
+ 0:00 GB-Eire GMT/IST 1968 Oct 27
+ 1:00 - IST 1971 Oct 31 2:00u
+ 0:00 GB-Eire GMT/IST 1996
+ 0:00 EU GMT/IST
+Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
+Rule EU 1977 only - Sep lastSun 1:00u 0 -
+Rule EU 1978 only - Oct 1 1:00u 0 -
+Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
+Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
+Rule EU 1996 max - Oct lastSun 1:00u 0 -
+Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
+Rule W-Eur 1977 only - Sep lastSun 1:00s 0 -
+Rule W-Eur 1978 only - Oct 1 1:00s 0 -
+Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 -
+Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S
+Rule W-Eur 1996 max - Oct lastSun 1:00s 0 -
+Rule C-Eur 1916 only - Apr 30 23:00 1:00 S
+Rule C-Eur 1916 only - Oct 1 1:00 0 -
+Rule C-Eur 1917 1918 - Apr Mon>=15 2:00s 1:00 S
+Rule C-Eur 1917 1918 - Sep Mon>=15 2:00s 0 -
+Rule C-Eur 1940 only - Apr 1 2:00s 1:00 S
+Rule C-Eur 1942 only - Nov 2 2:00s 0 -
+Rule C-Eur 1943 only - Mar 29 2:00s 1:00 S
+Rule C-Eur 1943 only - Oct 4 2:00s 0 -
+Rule C-Eur 1944 1945 - Apr Mon>=1 2:00s 1:00 S
+Rule C-Eur 1944 only - Oct 2 2:00s 0 -
+Rule C-Eur 1945 only - Sep 16 2:00s 0 -
+Rule C-Eur 1977 1980 - Apr Sun>=1 2:00s 1:00 S
+Rule C-Eur 1977 only - Sep lastSun 2:00s 0 -
+Rule C-Eur 1978 only - Oct 1 2:00s 0 -
+Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
+Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
+Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
+Rule E-Eur 1977 1980 - Apr Sun>=1 0:00 1:00 S
+Rule E-Eur 1977 only - Sep lastSun 0:00 0 -
+Rule E-Eur 1978 only - Oct 1 0:00 0 -
+Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
+Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
+Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
+Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
+Rule Russia 1918 only - Sep 16 1:00 1:00 MST
+Rule Russia 1919 only - May 31 23:00 2:00 MDST
+Rule Russia 1919 only - Jul 1 2:00 1:00 S
+Rule Russia 1919 only - Aug 16 0:00 0 -
+Rule Russia 1921 only - Feb 14 23:00 1:00 S
+Rule Russia 1921 only - Mar 20 23:00 2:00 M # Midsummer
+Rule Russia 1921 only - Sep 1 0:00 1:00 S
+Rule Russia 1921 only - Oct 1 0:00 0 -
+Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
+Rule Russia 1981 1983 - Oct 1 0:00 0 -
+Rule Russia 1984 1991 - Sep lastSun 2:00s 0 -
+Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule Russia 1992 only - Mar lastSat 23:00 1:00 S
+Rule Russia 1992 only - Sep lastSat 23:00 0 -
+Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S
+Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
+Rule Russia 1996 max - Oct lastSun 2:00s 0 -
+Zone WET 0:00 EU WE%sT
+Zone CET 1:00 C-Eur CE%sT
+Zone MET 1:00 C-Eur ME%sT
+Zone EET 2:00 EU EE%sT
+Rule Albania 1940 only - Jun 16 0:00 1:00 S
+Rule Albania 1942 only - Nov 2 3:00 0 -
+Rule Albania 1943 only - Mar 29 2:00 1:00 S
+Rule Albania 1943 only - Apr 10 3:00 0 -
+Rule Albania 1974 only - May 4 0:00 1:00 S
+Rule Albania 1974 only - Oct 2 0:00 0 -
+Rule Albania 1975 only - May 1 0:00 1:00 S
+Rule Albania 1975 only - Oct 2 0:00 0 -
+Rule Albania 1976 only - May 2 0:00 1:00 S
+Rule Albania 1976 only - Oct 3 0:00 0 -
+Rule Albania 1977 only - May 8 0:00 1:00 S
+Rule Albania 1977 only - Oct 2 0:00 0 -
+Rule Albania 1978 only - May 6 0:00 1:00 S
+Rule Albania 1978 only - Oct 1 0:00 0 -
+Rule Albania 1979 only - May 5 0:00 1:00 S
+Rule Albania 1979 only - Sep 30 0:00 0 -
+Rule Albania 1980 only - May 3 0:00 1:00 S
+Rule Albania 1980 only - Oct 4 0:00 0 -
+Rule Albania 1981 only - Apr 26 0:00 1:00 S
+Rule Albania 1981 only - Sep 27 0:00 0 -
+Rule Albania 1982 only - May 2 0:00 1:00 S
+Rule Albania 1982 only - Oct 3 0:00 0 -
+Rule Albania 1983 only - Apr 18 0:00 1:00 S
+Rule Albania 1983 only - Oct 1 0:00 0 -
+Rule Albania 1984 only - Apr 1 0:00 1:00 S
+Zone Europe/Tirane 1:19:20 - LMT 1914
+ 1:00 - CET 1940 Jun 16
+ 1:00 Albania CE%sT 1984 Jul
+ 1:00 EU CE%sT
+Zone Europe/Andorra 0:06:04 - LMT 1901
+ 0:00 - WET 1946 Sep 30
+ 1:00 - CET 1985 Mar 31 2:00
+ 1:00 EU CE%sT
+Rule Austria 1920 only - Apr 5 2:00s 1:00 S
+Rule Austria 1920 only - Sep 13 2:00s 0 -
+Rule Austria 1946 only - Apr 14 2:00s 1:00 S
+Rule Austria 1946 1948 - Oct Sun>=1 2:00s 0 -
+Rule Austria 1947 only - Apr 6 2:00s 1:00 S
+Rule Austria 1948 only - Apr 18 2:00s 1:00 S
+Rule Austria 1980 only - Apr 6 0:00 1:00 S
+Rule Austria 1980 only - Sep 28 0:00 0 -
+Zone Europe/Vienna 1:05:20 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1920
+ 1:00 Austria CE%sT 1940 Apr 1 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 1:00 CEST 1945 Apr 12 2:00s
+ 1:00 - CET 1946
+ 1:00 Austria CE%sT 1981
+ 1:00 EU CE%sT
+Zone Europe/Minsk 1:50:16 - LMT 1880
+ 1:50 - MMT 1924 May 2 # Minsk Mean Time
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Jun 28
+ 1:00 C-Eur CE%sT 1944 Jul 3
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 - EET 1992 Mar 29 0:00s
+ 2:00 1:00 EEST 1992 Sep 27 0:00s
+ 2:00 Russia EE%sT
+Rule Belgium 1918 only - Mar 9 0:00s 1:00 S
+Rule Belgium 1918 1919 - Oct Sat>=1 23:00s 0 -
+Rule Belgium 1919 only - Mar 1 23:00s 1:00 S
+Rule Belgium 1920 only - Feb 14 23:00s 1:00 S
+Rule Belgium 1920 only - Oct 23 23:00s 0 -
+Rule Belgium 1921 only - Mar 14 23:00s 1:00 S
+Rule Belgium 1921 only - Oct 25 23:00s 0 -
+Rule Belgium 1922 only - Mar 25 23:00s 1:00 S
+Rule Belgium 1922 1927 - Oct Sat>=1 23:00s 0 -
+Rule Belgium 1923 only - Apr 21 23:00s 1:00 S
+Rule Belgium 1924 only - Mar 29 23:00s 1:00 S
+Rule Belgium 1925 only - Apr 4 23:00s 1:00 S
+Rule Belgium 1926 only - Apr 17 23:00s 1:00 S
+Rule Belgium 1927 only - Apr 9 23:00s 1:00 S
+Rule Belgium 1928 only - Apr 14 23:00s 1:00 S
+Rule Belgium 1928 1938 - Oct Sun>=2 2:00s 0 -
+Rule Belgium 1929 only - Apr 21 2:00s 1:00 S
+Rule Belgium 1930 only - Apr 13 2:00s 1:00 S
+Rule Belgium 1931 only - Apr 19 2:00s 1:00 S
+Rule Belgium 1932 only - Apr 3 2:00s 1:00 S
+Rule Belgium 1933 only - Mar 26 2:00s 1:00 S
+Rule Belgium 1934 only - Apr 8 2:00s 1:00 S
+Rule Belgium 1935 only - Mar 31 2:00s 1:00 S
+Rule Belgium 1936 only - Apr 19 2:00s 1:00 S
+Rule Belgium 1937 only - Apr 4 2:00s 1:00 S
+Rule Belgium 1938 only - Mar 27 2:00s 1:00 S
+Rule Belgium 1939 only - Apr 16 2:00s 1:00 S
+Rule Belgium 1939 only - Nov 19 2:00s 0 -
+Rule Belgium 1940 only - Feb 25 2:00s 1:00 S
+Rule Belgium 1944 only - Sep 17 2:00s 0 -
+Rule Belgium 1945 only - Apr 2 2:00s 1:00 S
+Rule Belgium 1945 only - Sep 16 2:00s 0 -
+Rule Belgium 1946 only - May 19 2:00s 1:00 S
+Rule Belgium 1946 only - Oct 7 2:00s 0 -
+Zone Europe/Brussels 0:17:30 - LMT 1880
+ 0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
+ 0:00 - WET 1914 Nov 8
+ 1:00 - CET 1916 May 1 0:00
+ 1:00 C-Eur CE%sT 1918 Nov 11 11:00u
+ 0:00 Belgium WE%sT 1940 May 20 2:00s
+ 1:00 C-Eur CE%sT 1944 Sep 3
+ 1:00 Belgium CE%sT 1977
+ 1:00 EU CE%sT
+Rule Bulg 1979 only - Mar 31 23:00 1:00 S
+Rule Bulg 1979 only - Oct 1 1:00 0 -
+Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
+Rule Bulg 1980 only - Sep 29 1:00 0 -
+Rule Bulg 1981 only - Sep 27 2:00 0 -
+Zone Europe/Sofia 1:33:16 - LMT 1880
+ 1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
+ 2:00 - EET 1942 Nov 2 3:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 - CET 1945 Apr 2 3:00
+ 2:00 - EET 1979 Mar 31 23:00
+ 2:00 Bulg EE%sT 1982 Sep 26 2:00
+ 2:00 C-Eur EE%sT 1991
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Rule Czech 1945 only - Apr 8 2:00s 1:00 S
+Rule Czech 1945 only - Nov 18 2:00s 0 -
+Rule Czech 1946 only - May 6 2:00s 1:00 S
+Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 -
+Rule Czech 1947 only - Apr 20 2:00s 1:00 S
+Rule Czech 1948 only - Apr 18 2:00s 1:00 S
+Rule Czech 1949 only - Apr 9 2:00s 1:00 S
+Zone Europe/Prague 0:57:44 - LMT 1850
+ 0:57:44 - PMT 1891 Oct # Prague Mean Time
+ 1:00 C-Eur CE%sT 1944 Sep 17 2:00s
+ 1:00 Czech CE%sT 1979
+ 1:00 EU CE%sT
+Rule Denmark 1916 only - May 14 23:00 1:00 S
+Rule Denmark 1916 only - Sep 30 23:00 0 -
+Rule Denmark 1940 only - May 15 0:00 1:00 S
+Rule Denmark 1945 only - Apr 2 2:00s 1:00 S
+Rule Denmark 1945 only - Aug 15 2:00s 0 -
+Rule Denmark 1946 only - May 1 2:00s 1:00 S
+Rule Denmark 1946 only - Sep 1 2:00s 0 -
+Rule Denmark 1947 only - May 4 2:00s 1:00 S
+Rule Denmark 1947 only - Aug 10 2:00s 0 -
+Rule Denmark 1948 only - May 9 2:00s 1:00 S
+Rule Denmark 1948 only - Aug 8 2:00s 0 -
+Zone Europe/Copenhagen 0:50:20 - LMT 1890
+ 0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
+ 1:00 Denmark CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Denmark CE%sT 1980
+ 1:00 EU CE%sT
+Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Torshavn
+ 0:00 - WET 1981
+ 0:00 EU WE%sT
+Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
+Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
+Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
+Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
+Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
+ -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 EU WG%sT 1996
+ 0:00 - GMT
+Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
+ -2:00 - CGT 1980 Apr 6 2:00
+ -2:00 C-Eur CG%sT 1981 Mar 29
+ -1:00 EU EG%sT
+Zone America/Godthab -3:26:56 - LMT 1916 Jul 28 # Nuuk
+ -3:00 - WGT 1980 Apr 6 2:00
+ -3:00 EU WG%sT
+Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
+ -4:00 Thule A%sT
+Zone Europe/Tallinn 1:39:00 - LMT 1880
+ 1:39:00 - TMT 1918 Feb # Tallinn Mean Time
+ 1:00 C-Eur CE%sT 1919 Jul
+ 1:39:00 - TMT 1921 May
+ 2:00 - EET 1940 Aug 6
+ 3:00 - MSK 1941 Sep 15
+ 1:00 C-Eur CE%sT 1944 Sep 22
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
+ 2:00 1:00 EEST 1989 Sep 24 2:00s
+ 2:00 C-Eur EE%sT 1998 Sep 22
+ 2:00 EU EE%sT 1999 Nov 1
+ 2:00 - EET 2002 Feb 21
+ 2:00 EU EE%sT
+Rule Finland 1942 only - Apr 3 0:00 1:00 S
+Rule Finland 1942 only - Oct 3 0:00 0 -
+Zone Europe/Helsinki 1:39:52 - LMT 1878 May 31
+ 1:39:52 - HMT 1921 May # Helsinki Mean Time
+ 2:00 Finland EE%sT 1981 Mar 29 2:00
+ 2:00 EU EE%sT
+Link Europe/Helsinki Europe/Mariehamn
+Rule France 1916 only - Jun 14 23:00s 1:00 S
+Rule France 1916 1919 - Oct Sun>=1 23:00s 0 -
+Rule France 1917 only - Mar 24 23:00s 1:00 S
+Rule France 1918 only - Mar 9 23:00s 1:00 S
+Rule France 1919 only - Mar 1 23:00s 1:00 S
+Rule France 1920 only - Feb 14 23:00s 1:00 S
+Rule France 1920 only - Oct 23 23:00s 0 -
+Rule France 1921 only - Mar 14 23:00s 1:00 S
+Rule France 1921 only - Oct 25 23:00s 0 -
+Rule France 1922 only - Mar 25 23:00s 1:00 S
+Rule France 1922 1938 - Oct Sat>=1 23:00s 0 -
+Rule France 1923 only - May 26 23:00s 1:00 S
+Rule France 1924 only - Mar 29 23:00s 1:00 S
+Rule France 1925 only - Apr 4 23:00s 1:00 S
+Rule France 1926 only - Apr 17 23:00s 1:00 S
+Rule France 1927 only - Apr 9 23:00s 1:00 S
+Rule France 1928 only - Apr 14 23:00s 1:00 S
+Rule France 1929 only - Apr 20 23:00s 1:00 S
+Rule France 1930 only - Apr 12 23:00s 1:00 S
+Rule France 1931 only - Apr 18 23:00s 1:00 S
+Rule France 1932 only - Apr 2 23:00s 1:00 S
+Rule France 1933 only - Mar 25 23:00s 1:00 S
+Rule France 1934 only - Apr 7 23:00s 1:00 S
+Rule France 1935 only - Mar 30 23:00s 1:00 S
+Rule France 1936 only - Apr 18 23:00s 1:00 S
+Rule France 1937 only - Apr 3 23:00s 1:00 S
+Rule France 1938 only - Mar 26 23:00s 1:00 S
+Rule France 1939 only - Apr 15 23:00s 1:00 S
+Rule France 1939 only - Nov 18 23:00s 0 -
+Rule France 1940 only - Feb 25 2:00 1:00 S
+Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
+Rule France 1941 only - Oct 6 0:00 1:00 S
+Rule France 1942 only - Mar 9 0:00 2:00 M
+Rule France 1942 only - Nov 2 3:00 1:00 S
+Rule France 1943 only - Mar 29 2:00 2:00 M
+Rule France 1943 only - Oct 4 3:00 1:00 S
+Rule France 1944 only - Apr 3 2:00 2:00 M
+Rule France 1944 only - Oct 8 1:00 1:00 S
+Rule France 1945 only - Apr 2 2:00 2:00 M
+Rule France 1945 only - Sep 16 3:00 0 -
+Rule France 1976 only - Mar 28 1:00 1:00 S
+Rule France 1976 only - Sep 26 1:00 0 -
+Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
+ 0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
+ 0:00 France WE%sT 1940 Jun 14 23:00
+ 1:00 C-Eur CE%sT 1944 Aug 25
+ 0:00 France WE%sT 1945 Sep 16 3:00
+ 1:00 France CE%sT 1977
+ 1:00 EU CE%sT
+Rule Germany 1946 only - Apr 14 2:00s 1:00 S
+Rule Germany 1946 only - Oct 7 2:00s 0 -
+Rule Germany 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Germany 1947 only - Apr 6 3:00s 1:00 S
+Rule Germany 1947 only - May 11 2:00s 2:00 M
+Rule Germany 1947 only - Jun 29 3:00 1:00 S
+Rule Germany 1948 only - Apr 18 2:00s 1:00 S
+Rule Germany 1949 only - Apr 10 2:00s 1:00 S
+Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer
+Rule SovietZone 1945 only - Sep 24 3:00 1:00 S
+Rule SovietZone 1945 only - Nov 18 2:00s 0 -
+Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1945 May 24 2:00
+ 1:00 SovietZone CE%sT 1946
+ 1:00 Germany CE%sT 1980
+ 1:00 EU CE%sT
+Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
+ 0:00 GB-Eire %s 1957 Apr 14 2:00
+ 1:00 - CET 1982
+ 1:00 EU CE%sT
+Rule Greece 1932 only - Jul 7 0:00 1:00 S
+Rule Greece 1932 only - Sep 1 0:00 0 -
+Rule Greece 1941 only - Apr 7 0:00 1:00 S
+Rule Greece 1942 only - Nov 2 3:00 0 -
+Rule Greece 1943 only - Mar 30 0:00 1:00 S
+Rule Greece 1943 only - Oct 4 0:00 0 -
+Rule Greece 1952 only - Jul 1 0:00 1:00 S
+Rule Greece 1952 only - Nov 2 0:00 0 -
+Rule Greece 1975 only - Apr 12 0:00s 1:00 S
+Rule Greece 1975 only - Nov 26 0:00s 0 -
+Rule Greece 1976 only - Apr 11 2:00s 1:00 S
+Rule Greece 1976 only - Oct 10 2:00s 0 -
+Rule Greece 1977 1978 - Apr Sun>=1 2:00s 1:00 S
+Rule Greece 1977 only - Sep 26 2:00s 0 -
+Rule Greece 1978 only - Sep 24 4:00 0 -
+Rule Greece 1979 only - Apr 1 9:00 1:00 S
+Rule Greece 1979 only - Sep 29 2:00 0 -
+Rule Greece 1980 only - Apr 1 0:00 1:00 S
+Rule Greece 1980 only - Sep 28 0:00 0 -
+Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
+ 1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
+ 2:00 Greece EE%sT 1941 Apr 30
+ 1:00 Greece CE%sT 1944 Apr 4
+ 2:00 Greece EE%sT 1981
+ # Shanks & Pottenger say it switched to C-Eur in 1981;
+ # go with EU instead, since Greece joined it on Jan 1.
+ 2:00 EU EE%sT
+Rule Hungary 1918 only - Apr 1 3:00 1:00 S
+Rule Hungary 1918 only - Sep 29 3:00 0 -
+Rule Hungary 1919 only - Apr 15 3:00 1:00 S
+Rule Hungary 1919 only - Sep 15 3:00 0 -
+Rule Hungary 1920 only - Apr 5 3:00 1:00 S
+Rule Hungary 1920 only - Sep 30 3:00 0 -
+Rule Hungary 1945 only - May 1 23:00 1:00 S
+Rule Hungary 1945 only - Nov 3 0:00 0 -
+Rule Hungary 1946 only - Mar 31 2:00s 1:00 S
+Rule Hungary 1946 1949 - Oct Sun>=1 2:00s 0 -
+Rule Hungary 1947 1949 - Apr Sun>=4 2:00s 1:00 S
+Rule Hungary 1950 only - Apr 17 2:00s 1:00 S
+Rule Hungary 1950 only - Oct 23 2:00s 0 -
+Rule Hungary 1954 1955 - May 23 0:00 1:00 S
+Rule Hungary 1954 1955 - Oct 3 0:00 0 -
+Rule Hungary 1956 only - Jun Sun>=1 0:00 1:00 S
+Rule Hungary 1956 only - Sep lastSun 0:00 0 -
+Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S
+Rule Hungary 1957 only - Sep lastSun 3:00 0 -
+Rule Hungary 1980 only - Apr 6 1:00 1:00 S
+Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
+ 1:00 C-Eur CE%sT 1918
+ 1:00 Hungary CE%sT 1941 Apr 6 2:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 Hungary CE%sT 1980 Sep 28 2:00s
+ 1:00 EU CE%sT
+Rule Iceland 1917 1918 - Feb 19 23:00 1:00 S
+Rule Iceland 1917 only - Oct 21 1:00 0 -
+Rule Iceland 1918 only - Nov 16 1:00 0 -
+Rule Iceland 1939 only - Apr 29 23:00 1:00 S
+Rule Iceland 1939 only - Nov 29 2:00 0 -
+Rule Iceland 1940 only - Feb 25 2:00 1:00 S
+Rule Iceland 1940 only - Nov 3 2:00 0 -
+Rule Iceland 1941 only - Mar 2 1:00s 1:00 S
+Rule Iceland 1941 only - Nov 2 1:00s 0 -
+Rule Iceland 1942 only - Mar 8 1:00s 1:00 S
+Rule Iceland 1942 only - Oct 25 1:00s 0 -
+Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S
+Rule Iceland 1943 1948 - Oct Sun>=22 1:00s 0 -
+Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S
+Rule Iceland 1949 only - Oct 30 1:00s 0 -
+Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
+Rule Iceland 1967 only - Oct 29 1:00s 0 -
+Zone Atlantic/Reykjavik -1:27:24 - LMT 1837
+ -1:27:48 - RMT 1908 # Reykjavik Mean Time?
+ -1:00 Iceland IS%sT 1968 Apr 7 1:00s
+ 0:00 - GMT
+Rule Italy 1916 only - Jun 3 0:00s 1:00 S
+Rule Italy 1916 only - Oct 1 0:00s 0 -
+Rule Italy 1917 only - Apr 1 0:00s 1:00 S
+Rule Italy 1917 only - Sep 30 0:00s 0 -
+Rule Italy 1918 only - Mar 10 0:00s 1:00 S
+Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 -
+Rule Italy 1919 only - Mar 2 0:00s 1:00 S
+Rule Italy 1920 only - Mar 21 0:00s 1:00 S
+Rule Italy 1920 only - Sep 19 0:00s 0 -
+Rule Italy 1940 only - Jun 15 0:00s 1:00 S
+Rule Italy 1944 only - Sep 17 0:00s 0 -
+Rule Italy 1945 only - Apr 2 2:00 1:00 S
+Rule Italy 1945 only - Sep 15 0:00s 0 -
+Rule Italy 1946 only - Mar 17 2:00s 1:00 S
+Rule Italy 1946 only - Oct 6 2:00s 0 -
+Rule Italy 1947 only - Mar 16 0:00s 1:00 S
+Rule Italy 1947 only - Oct 5 0:00s 0 -
+Rule Italy 1948 only - Feb 29 2:00s 1:00 S
+Rule Italy 1948 only - Oct 3 2:00s 0 -
+Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S
+Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 -
+Rule Italy 1969 only - Jun 1 0:00 1:00 S
+Rule Italy 1970 only - May 31 0:00 1:00 S
+Rule Italy 1970 only - Sep lastSun 0:00 0 -
+Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S
+Rule Italy 1971 only - Sep lastSun 1:00 0 -
+Rule Italy 1972 only - Oct 1 0:00 0 -
+Rule Italy 1973 only - Jun 3 0:00 1:00 S
+Rule Italy 1973 1974 - Sep lastSun 0:00 0 -
+Rule Italy 1974 only - May 26 0:00 1:00 S
+Rule Italy 1975 only - Jun 1 0:00s 1:00 S
+Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
+Rule Italy 1976 only - May 30 0:00s 1:00 S
+Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1978 only - Oct 1 0:00s 0 -
+Rule Italy 1979 only - Sep 30 0:00s 0 -
+Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
+ 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1944 Jul
+ 1:00 Italy CE%sT 1980
+ 1:00 EU CE%sT
+Link Europe/Rome Europe/Vatican
+Link Europe/Rome Europe/San_Marino
+Rule Latvia 1989 1996 - Mar lastSun 2:00s 1:00 S
+Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
+Zone Europe/Riga 1:36:24 - LMT 1880
+ 1:36:24 - RMT 1918 Apr 15 2:00 #Riga Mean Time
+ 1:36:24 1:00 LST 1918 Sep 16 3:00 #Latvian Summer
+ 1:36:24 - RMT 1919 Apr 1 2:00
+ 1:36:24 1:00 LST 1919 May 22 3:00
+ 1:36:24 - RMT 1926 May 11
+ 2:00 - EET 1940 Aug 5
+ 3:00 - MSK 1941 Jul
+ 1:00 C-Eur CE%sT 1944 Oct 13
+ 3:00 Russia MSK/MSD 1989 Mar lastSun 2:00s
+ 2:00 1:00 EEST 1989 Sep lastSun 2:00s
+ 2:00 Latvia EE%sT 1997 Jan 21
+ 2:00 EU EE%sT 2000 Feb 29
+ 2:00 - EET 2001 Jan 2
+ 2:00 EU EE%sT
+Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
+ 1:00 - CET 1981
+ 1:00 EU CE%sT
+Zone Europe/Vilnius 1:41:16 - LMT 1880
+ 1:24:00 - WMT 1917 # Warsaw Mean Time
+ 1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
+ 1:00 - CET 1920 Jul 12
+ 2:00 - EET 1920 Oct 9
+ 1:00 - CET 1940 Aug 3
+ 3:00 - MSK 1941 Jun 24
+ 1:00 C-Eur CE%sT 1944 Aug
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 2:00 C-Eur EE%sT 1998
+ 2:00 - EET 1998 Mar 29 1:00u
+ 1:00 EU CE%sT 1999 Oct 31 1:00u
+ 2:00 - EET 2003 Jan 1
+ 2:00 EU EE%sT
+Rule Lux 1916 only - May 14 23:00 1:00 S
+Rule Lux 1916 only - Oct 1 1:00 0 -
+Rule Lux 1917 only - Apr 28 23:00 1:00 S
+Rule Lux 1917 only - Sep 17 1:00 0 -
+Rule Lux 1918 only - Apr Mon>=15 2:00s 1:00 S
+Rule Lux 1918 only - Sep Mon>=15 2:00s 0 -
+Rule Lux 1919 only - Mar 1 23:00 1:00 S
+Rule Lux 1919 only - Oct 5 3:00 0 -
+Rule Lux 1920 only - Feb 14 23:00 1:00 S
+Rule Lux 1920 only - Oct 24 2:00 0 -
+Rule Lux 1921 only - Mar 14 23:00 1:00 S
+Rule Lux 1921 only - Oct 26 2:00 0 -
+Rule Lux 1922 only - Mar 25 23:00 1:00 S
+Rule Lux 1922 only - Oct Sun>=2 1:00 0 -
+Rule Lux 1923 only - Apr 21 23:00 1:00 S
+Rule Lux 1923 only - Oct Sun>=2 2:00 0 -
+Rule Lux 1924 only - Mar 29 23:00 1:00 S
+Rule Lux 1924 1928 - Oct Sun>=2 1:00 0 -
+Rule Lux 1925 only - Apr 5 23:00 1:00 S
+Rule Lux 1926 only - Apr 17 23:00 1:00 S
+Rule Lux 1927 only - Apr 9 23:00 1:00 S
+Rule Lux 1928 only - Apr 14 23:00 1:00 S
+Rule Lux 1929 only - Apr 20 23:00 1:00 S
+Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
+ 1:00 Lux CE%sT 1918 Nov 25
+ 0:00 Lux WE%sT 1929 Oct 6 2:00s
+ 0:00 Belgium WE%sT 1940 May 14 3:00
+ 1:00 C-Eur WE%sT 1944 Sep 18 3:00
+ 1:00 Belgium CE%sT 1977
+ 1:00 EU CE%sT
+Rule Malta 1973 only - Mar 31 0:00s 1:00 S
+Rule Malta 1973 only - Sep 29 0:00s 0 -
+Rule Malta 1974 only - Apr 21 0:00s 1:00 S
+Rule Malta 1974 only - Sep 16 0:00s 0 -
+Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
+Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
+Rule Malta 1980 only - Mar 31 2:00 1:00 S
+Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
+ 1:00 Italy CE%sT 1942 Nov 2 2:00s
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
+ 1:00 Italy CE%sT 1973 Mar 31
+ 1:00 Malta CE%sT 1981
+ 1:00 EU CE%sT
+Zone Europe/Chisinau 1:55:20 - LMT 1880
+ 1:55 - CMT 1918 Feb 15 # Chisinau MT
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1940 Aug 15
+ 2:00 1:00 EEST 1941 Jul 17
+ 1:00 C-Eur CE%sT 1944 Aug 24
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 May 6
+ 2:00 - EET 1991
+ 2:00 Russia EE%sT 1992
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
+ 0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
+ 0:00 France WE%sT 1945 Sep 16 3:00
+ 1:00 France CE%sT 1977
+ 1:00 EU CE%sT
+Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
+Rule Neth 1916 only - Oct 1 0:00 0 AMT # Amsterdam Mean Time
+Rule Neth 1917 only - Apr 16 2:00s 1:00 NST
+Rule Neth 1917 only - Sep 17 2:00s 0 AMT
+Rule Neth 1918 1921 - Apr Mon>=1 2:00s 1:00 NST
+Rule Neth 1918 1921 - Sep lastMon 2:00s 0 AMT
+Rule Neth 1922 only - Mar lastSun 2:00s 1:00 NST
+Rule Neth 1922 1936 - Oct Sun>=2 2:00s 0 AMT
+Rule Neth 1923 only - Jun Fri>=1 2:00s 1:00 NST
+Rule Neth 1924 only - Mar lastSun 2:00s 1:00 NST
+Rule Neth 1925 only - Jun Fri>=1 2:00s 1:00 NST
+Rule Neth 1926 1931 - May 15 2:00s 1:00 NST
+Rule Neth 1932 only - May 22 2:00s 1:00 NST
+Rule Neth 1933 1936 - May 15 2:00s 1:00 NST
+Rule Neth 1937 only - May 22 2:00s 1:00 NST
+Rule Neth 1937 only - Jul 1 0:00 1:00 S
+Rule Neth 1937 1939 - Oct Sun>=2 2:00s 0 -
+Rule Neth 1938 1939 - May 15 2:00s 1:00 S
+Rule Neth 1945 only - Apr 2 2:00s 1:00 S
+Rule Neth 1945 only - Sep 16 2:00s 0 -
+Zone Europe/Amsterdam 0:19:32 - LMT 1835
+ 0:19:32 Neth %s 1937 Jul 1
+ 0:20 Neth NE%sT 1940 May 16 0:00 # Dutch Time
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Neth CE%sT 1977
+ 1:00 EU CE%sT
+Rule Norway 1916 only - May 22 1:00 1:00 S
+Rule Norway 1916 only - Sep 30 0:00 0 -
+Rule Norway 1945 only - Apr 2 2:00s 1:00 S
+Rule Norway 1945 only - Oct 1 2:00s 0 -
+Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
+Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
+Rule Norway 1965 only - Apr 25 2:00s 1:00 S
+Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
+ 1:00 Norway CE%sT 1940 Aug 10 23:00
+ 1:00 C-Eur CE%sT 1945 Apr 2 2:00
+ 1:00 Norway CE%sT 1980
+ 1:00 EU CE%sT
+Link Europe/Oslo Arctic/Longyearbyen
+Rule Poland 1918 1919 - Sep 16 2:00s 0 -
+Rule Poland 1919 only - Apr 15 2:00s 1:00 S
+Rule Poland 1944 only - Apr 3 2:00s 1:00 S
+Rule Poland 1944 only - Oct 4 2:00 0 -
+Rule Poland 1945 only - Apr 29 0:00 1:00 S
+Rule Poland 1945 only - Nov 1 0:00 0 -
+Rule Poland 1946 only - Apr 14 0:00s 1:00 S
+Rule Poland 1946 only - Oct 7 2:00s 0 -
+Rule Poland 1947 only - May 4 2:00s 1:00 S
+Rule Poland 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Poland 1948 only - Apr 18 2:00s 1:00 S
+Rule Poland 1949 only - Apr 10 2:00s 1:00 S
+Rule Poland 1957 only - Jun 2 1:00s 1:00 S
+Rule Poland 1957 1958 - Sep lastSun 1:00s 0 -
+Rule Poland 1958 only - Mar 30 1:00s 1:00 S
+Rule Poland 1959 only - May 31 1:00s 1:00 S
+Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 -
+Rule Poland 1960 only - Apr 3 1:00s 1:00 S
+Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S
+Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
+Zone Europe/Warsaw 1:24:00 - LMT 1880
+ 1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
+ 1:00 C-Eur CE%sT 1918 Sep 16 3:00
+ 2:00 Poland EE%sT 1922 Jun
+ 1:00 Poland CE%sT 1940 Jun 23 2:00
+ 1:00 C-Eur CE%sT 1944 Oct
+ 1:00 Poland CE%sT 1977
+ 1:00 W-Eur CE%sT 1988
+ 1:00 EU CE%sT
+Rule Port 1916 only - Jun 17 23:00 1:00 S
+Rule Port 1916 only - Nov 1 1:00 0 -
+Rule Port 1917 only - Feb 28 23:00s 1:00 S
+Rule Port 1917 1921 - Oct 14 23:00s 0 -
+Rule Port 1918 only - Mar 1 23:00s 1:00 S
+Rule Port 1919 only - Feb 28 23:00s 1:00 S
+Rule Port 1920 only - Feb 29 23:00s 1:00 S
+Rule Port 1921 only - Feb 28 23:00s 1:00 S
+Rule Port 1924 only - Apr 16 23:00s 1:00 S
+Rule Port 1924 only - Oct 14 23:00s 0 -
+Rule Port 1926 only - Apr 17 23:00s 1:00 S
+Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 -
+Rule Port 1927 only - Apr 9 23:00s 1:00 S
+Rule Port 1928 only - Apr 14 23:00s 1:00 S
+Rule Port 1929 only - Apr 20 23:00s 1:00 S
+Rule Port 1931 only - Apr 18 23:00s 1:00 S
+Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
+Rule Port 1932 only - Apr 2 23:00s 1:00 S
+Rule Port 1934 only - Apr 7 23:00s 1:00 S
+Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
+Rule Port 1935 only - Mar 30 23:00s 1:00 S
+Rule Port 1936 only - Apr 18 23:00s 1:00 S
+Rule Port 1937 only - Apr 3 23:00s 1:00 S
+Rule Port 1938 only - Mar 26 23:00s 1:00 S
+Rule Port 1939 only - Apr 15 23:00s 1:00 S
+Rule Port 1939 only - Nov 18 23:00s 0 -
+Rule Port 1940 only - Feb 24 23:00s 1:00 S
+Rule Port 1940 1941 - Oct 5 23:00s 0 -
+Rule Port 1941 only - Apr 5 23:00s 1:00 S
+Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
+Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer
+Rule Port 1942 only - Aug 15 22:00s 1:00 S
+Rule Port 1942 1945 - Oct Sat>=24 23:00s 0 -
+Rule Port 1943 only - Apr 17 22:00s 2:00 M
+Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S
+Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M
+Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
+Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
+Rule Port 1947 1949 - Apr Sun>=1 2:00s 1:00 S
+Rule Port 1947 1949 - Oct Sun>=1 2:00s 0 -
+Rule Port 1951 1965 - Apr Sun>=1 2:00s 1:00 S
+Rule Port 1951 1965 - Oct Sun>=1 2:00s 0 -
+Rule Port 1977 only - Mar 27 0:00s 1:00 S
+Rule Port 1977 only - Sep 25 0:00s 0 -
+Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
+Rule Port 1978 only - Oct 1 0:00s 0 -
+Rule Port 1979 1982 - Sep lastSun 1:00s 0 -
+Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
+Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
+Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
+Zone Europe/Lisbon -0:36:32 - LMT 1884
+ -0:36:32 - LMT 1912 Jan 1 # Lisbon Mean Time
+ 0:00 Port WE%sT 1966 Apr 3 2:00
+ 1:00 - CET 1976 Sep 26 1:00
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
+ 0:00 W-Eur WE%sT 1992 Sep 27 1:00s
+ 1:00 EU CE%sT 1996 Mar 31 1:00u
+ 0:00 EU WE%sT
+Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
+ -1:54:32 - HMT 1911 May 24 # Horta Mean Time
+ -2:00 Port AZO%sT 1966 Apr 3 2:00 # Azores Time
+ -1:00 Port AZO%sT 1983 Sep 25 1:00s
+ -1:00 W-Eur AZO%sT 1992 Sep 27 1:00s
+ 0:00 EU WE%sT 1993 Mar 28 1:00u
+ -1:00 EU AZO%sT
+Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
+ -1:07:36 - FMT 1911 May 24 # Funchal Mean Time
+ -1:00 Port MAD%sT 1966 Apr 3 2:00 # Madeira Time
+ 0:00 Port WE%sT 1983 Sep 25 1:00s
+ 0:00 EU WE%sT
+Rule Romania 1932 only - May 21 0:00s 1:00 S
+Rule Romania 1932 1939 - Oct Sun>=1 0:00s 0 -
+Rule Romania 1933 1939 - Apr Sun>=2 0:00s 1:00 S
+Rule Romania 1979 only - May 27 0:00 1:00 S
+Rule Romania 1979 only - Sep lastSun 0:00 0 -
+Rule Romania 1980 only - Apr 5 23:00 1:00 S
+Rule Romania 1980 only - Sep lastSun 1:00 0 -
+Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S
+Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
+Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1981 Mar 29 2:00s
+ 2:00 C-Eur EE%sT 1991
+ 2:00 Romania EE%sT 1994
+ 2:00 E-Eur EE%sT 1997
+ 2:00 EU EE%sT
+Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
+ 1:00 C-Eur CE%sT 1945
+ 2:00 Poland CE%sT 1946
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT
+Zone Europe/Moscow 2:30:20 - LMT 1880
+ 2:30 - MMT 1916 Jul 3 # Moscow Mean Time
+ 2:30:48 Russia %s 1919 Jul 1 2:00
+ 3:00 Russia MSK/MSD 1922 Oct
+ 2:00 - EET 1930 Jun 21
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 2:00 Russia EE%sT 1992 Jan 19 2:00s
+ 3:00 Russia MSK/MSD
+Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
+ 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
+ 3:00 - STAT 1930 Jun 21 # Stalingrad Time
+ 4:00 - STAT 1961 Nov 11
+ 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
+ 3:00 Russia VOL%sT 1991 Mar 31 2:00s
+ 4:00 - VOLT 1992 Mar 29 2:00s
+ 3:00 Russia VOL%sT
+Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
+ 3:00 - SAMT 1930 Jun 21
+ 4:00 - SAMT 1935 Jan 27
+ 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
+ 3:00 Russia KUY%sT 1991 Mar 31 2:00s
+ 2:00 Russia KUY%sT 1991 Sep 29 2:00s
+ 3:00 - KUYT 1991 Oct 20 3:00
+ 4:00 Russia SAM%sT # Samara Time
+Zone Asia/Yekaterinburg 4:02:24 - LMT 1919 Jul 15 4:00
+ 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
+ 5:00 Russia SVE%sT 1991 Mar 31 2:00s
+ 4:00 Russia SVE%sT 1992 Jan 19 2:00s
+ 5:00 Russia YEK%sT # Yekaterinburg Time
+Zone Asia/Omsk 4:53:36 - LMT 1919 Nov 14
+ 5:00 - OMST 1930 Jun 21 # Omsk TIme
+ 6:00 Russia OMS%sT 1991 Mar 31 2:00s
+ 5:00 Russia OMS%sT 1992 Jan 19 2:00s
+ 6:00 Russia OMS%sT
+Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
+ 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
+ 7:00 Russia NOV%sT 1991 Mar 31 2:00s
+ 6:00 Russia NOV%sT 1992 Jan 19 2:00s
+ 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
+ 6:00 Russia NOV%sT
+Zone Asia/Krasnoyarsk 6:11:20 - LMT 1920 Jan 6
+ 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
+ 7:00 Russia KRA%sT 1991 Mar 31 2:00s
+ 6:00 Russia KRA%sT 1992 Jan 19 2:00s
+ 7:00 Russia KRA%sT
+Zone Asia/Irkutsk 6:57:20 - LMT 1880
+ 6:57:20 - IMT 1920 Jan 25 # Irkutsk Mean Time
+ 7:00 - IRKT 1930 Jun 21 # Irkutsk Time
+ 8:00 Russia IRK%sT 1991 Mar 31 2:00s
+ 7:00 Russia IRK%sT 1992 Jan 19 2:00s
+ 8:00 Russia IRK%sT
+Zone Asia/Yakutsk 8:38:40 - LMT 1919 Dec 15
+ 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
+ 9:00 Russia YAK%sT 1991 Mar 31 2:00s
+ 8:00 Russia YAK%sT 1992 Jan 19 2:00s
+ 9:00 Russia YAK%sT
+Zone Asia/Vladivostok 8:47:44 - LMT 1922 Nov 15
+ 9:00 - VLAT 1930 Jun 21 # Vladivostok Time
+ 10:00 Russia VLA%sT 1991 Mar 31 2:00s
+ 9:00 Russia VLA%sST 1992 Jan 19 2:00s
+ 10:00 Russia VLA%sT
+Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
+ 9:00 - CJT 1938
+ 9:00 - JST 1945 Aug 25
+ 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T.
+ 10:00 Russia SAK%sT 1992 Jan 19 2:00s
+ 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
+ 10:00 Russia SAK%sT
+Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
+ 10:00 - MAGT 1930 Jun 21 # Magadan Time
+ 11:00 Russia MAG%sT 1991 Mar 31 2:00s
+ 10:00 Russia MAG%sT 1992 Jan 19 2:00s
+ 11:00 Russia MAG%sT
+Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
+ 11:00 - PETT 1930 Jun 21 # P-K Time
+ 12:00 Russia PET%sT 1991 Mar 31 2:00s
+ 11:00 Russia PET%sT 1992 Jan 19 2:00s
+ 12:00 Russia PET%sT
+Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
+ 12:00 - ANAT 1930 Jun 21 # Anadyr Time
+ 13:00 Russia ANA%sT 1982 Apr 1 0:00s
+ 12:00 Russia ANA%sT 1991 Mar 31 2:00s
+ 11:00 Russia ANA%sT 1992 Jan 19 2:00s
+ 12:00 Russia ANA%sT
+Zone Europe/Belgrade 1:22:00 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945
+ 1:00 - CET 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+Link Europe/Belgrade Europe/Ljubljana # Slovenia
+Link Europe/Belgrade Europe/Podgorica # Montenegro
+Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
+Link Europe/Belgrade Europe/Skopje # Macedonia
+Link Europe/Belgrade Europe/Zagreb # Croatia
+Link Europe/Prague Europe/Bratislava
+Rule Spain 1917 only - May 5 23:00s 1:00 S
+Rule Spain 1917 1919 - Oct 6 23:00s 0 -
+Rule Spain 1918 only - Apr 15 23:00s 1:00 S
+Rule Spain 1919 only - Apr 5 23:00s 1:00 S
+Rule Spain 1924 only - Apr 16 23:00s 1:00 S
+Rule Spain 1924 only - Oct 4 23:00s 0 -
+Rule Spain 1926 only - Apr 17 23:00s 1:00 S
+Rule Spain 1926 1929 - Oct Sat>=1 23:00s 0 -
+Rule Spain 1927 only - Apr 9 23:00s 1:00 S
+Rule Spain 1928 only - Apr 14 23:00s 1:00 S
+Rule Spain 1929 only - Apr 20 23:00s 1:00 S
+Rule Spain 1937 only - May 22 23:00s 1:00 S
+Rule Spain 1937 1939 - Oct Sat>=1 23:00s 0 -
+Rule Spain 1938 only - Mar 22 23:00s 1:00 S
+Rule Spain 1939 only - Apr 15 23:00s 1:00 S
+Rule Spain 1940 only - Mar 16 23:00s 1:00 S
+Rule Spain 1942 only - May 2 22:00s 2:00 M # Midsummer
+Rule Spain 1942 only - Sep 1 22:00s 1:00 S
+Rule Spain 1943 1946 - Apr Sat>=13 22:00s 2:00 M
+Rule Spain 1943 only - Oct 3 22:00s 1:00 S
+Rule Spain 1944 only - Oct 10 22:00s 1:00 S
+Rule Spain 1945 only - Sep 30 1:00 1:00 S
+Rule Spain 1946 only - Sep 30 0:00 0 -
+Rule Spain 1949 only - Apr 30 23:00 1:00 S
+Rule Spain 1949 only - Sep 30 1:00 0 -
+Rule Spain 1974 1975 - Apr Sat>=13 23:00 1:00 S
+Rule Spain 1974 1975 - Oct Sun>=1 1:00 0 -
+Rule Spain 1976 only - Mar 27 23:00 1:00 S
+Rule Spain 1976 1977 - Sep lastSun 1:00 0 -
+Rule Spain 1977 1978 - Apr 2 23:00 1:00 S
+Rule Spain 1978 only - Oct 1 1:00 0 -
+Rule SpainAfrica 1967 only - Jun 3 12:00 1:00 S
+Rule SpainAfrica 1967 only - Oct 1 0:00 0 -
+Rule SpainAfrica 1974 only - Jun 24 0:00 1:00 S
+Rule SpainAfrica 1974 only - Sep 1 0:00 0 -
+Rule SpainAfrica 1976 1977 - May 1 0:00 1:00 S
+Rule SpainAfrica 1976 only - Aug 1 0:00 0 -
+Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
+Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
+Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
+Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00s
+ 0:00 Spain WE%sT 1946 Sep 30
+ 1:00 Spain CE%sT 1979
+ 1:00 EU CE%sT
+Zone Africa/Ceuta -0:21:16 - LMT 1901
+ 0:00 - WET 1918 May 6 23:00
+ 0:00 1:00 WEST 1918 Oct 7 23:00
+ 0:00 - WET 1924
+ 0:00 Spain WE%sT 1929
+ 0:00 SpainAfrica WE%sT 1984 Mar 16
+ 1:00 - CET 1986
+ 1:00 EU CE%sT
+Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
+ -1:00 - CANT 1946 Sep 30 1:00 # Canaries Time
+ 0:00 - WET 1980 Apr 6 0:00s
+ 0:00 1:00 WEST 1980 Sep 28 0:00s
+ 0:00 EU WE%sT
+Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
+ 1:00:14 - SET 1900 Jan 1 # Swedish Time
+ 1:00 - CET 1916 May 14 23:00
+ 1:00 1:00 CEST 1916 Oct 1 01:00
+ 1:00 - CET 1980
+ 1:00 EU CE%sT
+Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
+Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
+Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
+ 0:29:44 - BMT 1894 Jun # Bern Mean Time
+ 1:00 Swiss CE%sT 1981
+ 1:00 EU CE%sT
+Rule Turkey 1916 only - May 1 0:00 1:00 S
+Rule Turkey 1916 only - Oct 1 0:00 0 -
+Rule Turkey 1920 only - Mar 28 0:00 1:00 S
+Rule Turkey 1920 only - Oct 25 0:00 0 -
+Rule Turkey 1921 only - Apr 3 0:00 1:00 S
+Rule Turkey 1921 only - Oct 3 0:00 0 -
+Rule Turkey 1922 only - Mar 26 0:00 1:00 S
+Rule Turkey 1922 only - Oct 8 0:00 0 -
+Rule Turkey 1924 only - May 13 0:00 1:00 S
+Rule Turkey 1924 1925 - Oct 1 0:00 0 -
+Rule Turkey 1925 only - May 1 0:00 1:00 S
+Rule Turkey 1940 only - Jun 30 0:00 1:00 S
+Rule Turkey 1940 only - Oct 5 0:00 0 -
+Rule Turkey 1940 only - Dec 1 0:00 1:00 S
+Rule Turkey 1941 only - Sep 21 0:00 0 -
+Rule Turkey 1942 only - Apr 1 0:00 1:00 S
+Rule Turkey 1942 only - Nov 1 0:00 0 -
+Rule Turkey 1945 only - Apr 2 0:00 1:00 S
+Rule Turkey 1945 only - Oct 8 0:00 0 -
+Rule Turkey 1946 only - Jun 1 0:00 1:00 S
+Rule Turkey 1946 only - Oct 1 0:00 0 -
+Rule Turkey 1947 1948 - Apr Sun>=16 0:00 1:00 S
+Rule Turkey 1947 1950 - Oct Sun>=2 0:00 0 -
+Rule Turkey 1949 only - Apr 10 0:00 1:00 S
+Rule Turkey 1950 only - Apr 19 0:00 1:00 S
+Rule Turkey 1951 only - Apr 22 0:00 1:00 S
+Rule Turkey 1951 only - Oct 8 0:00 0 -
+Rule Turkey 1962 only - Jul 15 0:00 1:00 S
+Rule Turkey 1962 only - Oct 8 0:00 0 -
+Rule Turkey 1964 only - May 15 0:00 1:00 S
+Rule Turkey 1964 only - Oct 1 0:00 0 -
+Rule Turkey 1970 1972 - May Sun>=2 0:00 1:00 S
+Rule Turkey 1970 1972 - Oct Sun>=2 0:00 0 -
+Rule Turkey 1973 only - Jun 3 1:00 1:00 S
+Rule Turkey 1973 only - Nov 4 3:00 0 -
+Rule Turkey 1974 only - Mar 31 2:00 1:00 S
+Rule Turkey 1974 only - Nov 3 5:00 0 -
+Rule Turkey 1975 only - Mar 30 0:00 1:00 S
+Rule Turkey 1975 1976 - Oct lastSun 0:00 0 -
+Rule Turkey 1976 only - Jun 1 0:00 1:00 S
+Rule Turkey 1977 1978 - Apr Sun>=1 0:00 1:00 S
+Rule Turkey 1977 only - Oct 16 0:00 0 -
+Rule Turkey 1979 1980 - Apr Sun>=1 3:00 1:00 S
+Rule Turkey 1979 1982 - Oct Mon>=11 0:00 0 -
+Rule Turkey 1981 1982 - Mar lastSun 3:00 1:00 S
+Rule Turkey 1983 only - Jul 31 0:00 1:00 S
+Rule Turkey 1983 only - Oct 2 0:00 0 -
+Rule Turkey 1985 only - Apr 20 0:00 1:00 S
+Rule Turkey 1985 only - Sep 28 0:00 0 -
+Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S
+Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 -
+Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S
+Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
+Zone Europe/Istanbul 1:55:52 - LMT 1880
+ 1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
+ 2:00 Turkey EE%sT 1978 Oct 15
+ 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
+ 2:00 Turkey EE%sT 2007
+ 2:00 EU EE%sT
+Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
+Zone Europe/Kiev 2:02:04 - LMT 1880
+ 2:02:04 - KMT 1924 May 2 # Kiev Mean Time
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Sep 20
+ 1:00 C-Eur CE%sT 1943 Nov 6
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
+ 1:00 - CET 1940
+ 1:00 C-Eur CE%sT 1944 Oct
+ 1:00 1:00 CEST 1944 Oct 26
+ 1:00 - CET 1945 Jun 29
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 1:00 - CET 1991 Mar 31 3:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Zaporozhye 2:20:40 - LMT 1880
+ 2:20 - CUT 1924 May 2 # Central Ukraine T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Aug 25
+ 1:00 C-Eur CE%sT 1943 Oct 25
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 2:00 E-Eur EE%sT 1995
+ 2:00 EU EE%sT
+Zone Europe/Simferopol 2:16:24 - LMT 1880
+ 2:16 - SMT 1924 May 2 # Simferopol Mean T
+ 2:00 - EET 1930 Jun 21
+ 3:00 - MSK 1941 Nov
+ 1:00 C-Eur CE%sT 1944 Apr 13
+ 3:00 Russia MSK/MSD 1990
+ 3:00 - MSK 1990 Jul 1 2:00
+ 2:00 - EET 1992
+ 2:00 E-Eur EE%sT 1994 May
+ 3:00 E-Eur MSK/MSD 1996 Mar 31 3:00s
+ 3:00 1:00 MSD 1996 Oct 27 3:00s
+ 3:00 Russia MSK/MSD 1997
+ 3:00 - MSK 1997 Mar lastSun 1:00u
+ 2:00 EU EE%sT
diff --git a/js/dojo/dojox/date/zoneinfo/northamerica b/js/dojo/dojox/date/zoneinfo/northamerica
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/northamerica
@@ -0,0 +1,895 @@
+Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
+Rule US 1918 1919 - Oct lastSun 2:00 0 S
+Rule US 1942 only - Feb 9 2:00 1:00 W # War
+Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule US 1945 only - Sep 30 2:00 0 S
+Rule US 1967 2006 - Oct lastSun 2:00 0 S
+Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
+Rule US 1974 only - Jan 6 2:00 1:00 D
+Rule US 1975 only - Feb 23 2:00 1:00 D
+Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
+Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule US 2007 max - Nov Sun>=1 2:00 0 S
+Zone EST -5:00 - EST
+Zone MST -7:00 - MST
+Zone HST -10:00 - HST
+Zone EST5EDT -5:00 US E%sT
+Zone CST6CDT -6:00 US C%sT
+Zone MST7MDT -7:00 US M%sT
+Zone PST8PDT -8:00 US P%sT
+Rule NYC 1920 only - Mar lastSun 2:00 1:00 D
+Rule NYC 1920 only - Oct lastSun 2:00 0 S
+Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
+Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
+Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
+Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
+ -5:00 US E%sT 1920
+ -5:00 NYC E%sT 1942
+ -5:00 US E%sT 1946
+ -5:00 NYC E%sT 1967
+ -5:00 US E%sT
+Rule Chicago 1920 only - Jun 13 2:00 1:00 D
+Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
+Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D
+Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
+Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
+Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
+Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
+ -6:00 US C%sT 1920
+ -6:00 Chicago C%sT 1936 Mar 1 2:00
+ -5:00 - EST 1936 Nov 15 2:00
+ -6:00 Chicago C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Chicago C%sT 1967
+ -6:00 US C%sT
+Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
+ -7:00 US M%sT 1992 Oct 25 02:00
+ -6:00 US C%sT
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+ -7:00 US M%sT 2003 Oct 26 02:00
+ -6:00 US C%sT
+Rule Denver 1920 1921 - Mar lastSun 2:00 1:00 D
+Rule Denver 1920 only - Oct lastSun 2:00 0 S
+Rule Denver 1921 only - May 22 2:00 0 S
+Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
+Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
+Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
+ -7:00 US M%sT 1920
+ -7:00 Denver M%sT 1942
+ -7:00 US M%sT 1946
+ -7:00 Denver M%sT 1967
+ -7:00 US M%sT
+Rule CA 1948 only - Mar 14 2:00 1:00 D
+Rule CA 1949 only - Jan 1 2:00 0 S
+Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D
+Rule CA 1950 1961 - Sep lastSun 2:00 0 S
+Rule CA 1962 1966 - Oct lastSun 2:00 0 S
+Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
+ -8:00 US P%sT 1946
+ -8:00 CA P%sT 1967
+ -8:00 US P%sT
+Zone America/Juneau 15:02:19 - LMT 1867 Oct 18
+ -8:57:41 - LMT 1900 Aug 20 12:00
+ -8:00 - PST 1942
+ -8:00 US P%sT 1946
+ -8:00 - PST 1969
+ -8:00 US P%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
+ -9:18:55 - LMT 1900 Aug 20 12:00
+ -9:00 - YST 1942
+ -9:00 US Y%sT 1946
+ -9:00 - YST 1969
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Anchorage 14:00:24 - LMT 1867 Oct 18
+ -9:59:36 - LMT 1900 Aug 20 12:00
+ -10:00 - CAT 1942
+ -10:00 US CAT/CAWT 1945 Aug 14 23:00u
+ -10:00 US CAT/CAPT 1946 # Peace
+ -10:00 - CAT 1967 Apr
+ -10:00 - AHST 1969
+ -10:00 US AH%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Nome 12:58:21 - LMT 1867 Oct 18
+ -11:01:38 - LMT 1900 Aug 20 12:00
+ -11:00 - NST 1942
+ -11:00 US N%sT 1946
+ -11:00 - NST 1967 Apr
+ -11:00 - BST 1969
+ -11:00 US B%sT 1983 Oct 30 2:00
+ -9:00 US Y%sT 1983 Nov 30
+ -9:00 US AK%sT
+Zone America/Adak 12:13:21 - LMT 1867 Oct 18
+ -11:46:38 - LMT 1900 Aug 20 12:00
+ -11:00 - NST 1942
+ -11:00 US N%sT 1946
+ -11:00 - NST 1967 Apr
+ -11:00 - BST 1969
+ -11:00 US B%sT 1983 Oct 30 2:00
+ -10:00 US AH%sT 1983 Nov 30
+ -10:00 US HA%sT
+Zone Pacific/Honolulu -10:31:26 - LMT 1900 Jan 1 12:00
+ -10:30 - HST 1933 Apr 30 2:00
+ -10:30 1:00 HDT 1933 May 21 2:00
+ -10:30 US H%sT 1947 Jun 8 2:00
+ -10:00 - HST
+Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
+ -7:00 US M%sT 1944 Jan 1 00:01
+ -7:00 - MST 1944 Apr 1 00:01
+ -7:00 US M%sT 1944 Oct 1 00:01
+ -7:00 - MST 1967
+ -7:00 US M%sT 1968 Mar 21
+ -7:00 - MST
+Link America/Denver America/Shiprock
+Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
+ -8:00 US P%sT 1923 May 13 2:00
+ -7:00 US M%sT 1974
+ -7:00 - MST 1974 Feb 3 2:00
+ -7:00 US M%sT
+Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
+Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
+Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+ -6:00 US C%sT 1920
+ -6:00 Indianapolis C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Indianapolis C%sT 1955 Apr 24 2:00
+ -5:00 - EST 1957 Sep 29 2:00
+ -6:00 - CST 1958 Apr 27 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
+Rule Marengo 1951 only - Sep lastSun 2:00 0 S
+Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
+Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
+Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
+ -6:00 US C%sT 1951
+ -6:00 Marengo C%sT 1961 Apr 30 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT 1976
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Vincennes 1946 only - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1946 only - Sep lastSun 2:00 0 S
+Rule Vincennes 1953 1954 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1953 1959 - Sep lastSun 2:00 0 S
+Rule Vincennes 1955 only - May 1 0:00 1:00 D
+Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
+Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
+Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
+Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
+ -6:00 US C%sT 1946
+ -6:00 Vincennes C%sT 1964 Apr 26 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 US E%sT
+Rule Perry 1946 only - Apr lastSun 2:00 1:00 D
+Rule Perry 1946 only - Sep lastSun 2:00 0 S
+Rule Perry 1953 1954 - Apr lastSun 2:00 1:00 D
+Rule Perry 1953 1959 - Sep lastSun 2:00 0 S
+Rule Perry 1955 only - May 1 0:00 1:00 D
+Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D
+Rule Perry 1960 only - Oct lastSun 2:00 0 S
+Rule Perry 1961 only - Sep lastSun 2:00 0 S
+Rule Perry 1962 1963 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
+ -6:00 US C%sT 1946
+ -6:00 Perry C%sT 1964 Apr 26 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
+Rule Pike 1955 only - May 1 0:00 1:00 D
+Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
+Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
+Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
+ -6:00 US C%sT 1955
+ -6:00 Pike C%sT 1965 Apr 25 2:00
+ -5:00 - EST 1966 Oct 30 2:00
+ -6:00 US C%sT 1977 Oct 30 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Nov 4 2:00
+ -5:00 US E%sT
+Rule Starke 1947 1961 - Apr lastSun 2:00 1:00 D
+Rule Starke 1947 1954 - Sep lastSun 2:00 0 S
+Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
+Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
+Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
+Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
+ -6:00 US C%sT 1947
+ -6:00 Starke C%sT 1962 Apr 29 2:00
+ -5:00 - EST 1963 Oct 27 2:00
+ -6:00 US C%sT 1991 Oct 27 2:00
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT
+Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D
+Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S
+Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S
+Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S
+Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
+ -6:00 US C%sT 1946
+ -6:00 Pulaski C%sT 1961 Apr 30 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1971
+ -5:00 - EST 2006 Apr 2 2:00
+ -6:00 US C%sT 2007 Mar 11 2:00
+ -5:00 US E%sT
+Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
+ -6:00 US C%sT 1954 Apr 25 2:00
+ -5:00 - EST 1969
+ -5:00 US E%sT 1973
+ -5:00 - EST 2006
+ -5:00 US E%sT
+Rule Louisville 1921 only - May 1 2:00 1:00 D
+Rule Louisville 1921 only - Sep 1 2:00 0 S
+Rule Louisville 1941 1961 - Apr lastSun 2:00 1:00 D
+Rule Louisville 1941 only - Sep lastSun 2:00 0 S
+Rule Louisville 1946 only - Jun 2 2:00 0 S
+Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
+Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S
+Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
+ -6:00 US C%sT 1921
+ -6:00 Louisville C%sT 1942
+ -6:00 US C%sT 1946
+ -6:00 Louisville C%sT 1961 Jul 23 2:00
+ -5:00 - EST 1968
+ -5:00 US E%sT 1974 Jan 6 2:00
+ -6:00 1:00 CDT 1974 Oct 27 2:00
+ -5:00 US E%sT
+Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
+ -6:00 US C%sT 1946
+ -6:00 - CST 1968
+ -6:00 US C%sT 2000 Oct 29 2:00
+ -5:00 US E%sT
+Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D
+Rule Detroit 1948 only - Sep lastSun 2:00 0 S
+Rule Detroit 1967 only - Jun 14 2:00 1:00 D
+Rule Detroit 1967 only - Oct lastSun 2:00 0 S
+Zone America/Detroit -5:32:11 - LMT 1905
+ -6:00 - CST 1915 May 15 2:00
+ -5:00 - EST 1942
+ -5:00 US E%sT 1946
+ -5:00 Detroit E%sT 1973
+ -5:00 US E%sT 1975
+ -5:00 - EST 1975 Apr 27 2:00
+ -5:00 US E%sT
+Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
+Rule Menominee 1946 only - Sep lastSun 2:00 0 S
+Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D
+Rule Menominee 1966 only - Oct lastSun 2:00 0 S
+Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
+ -6:00 US C%sT 1946
+ -6:00 Menominee C%sT 1969 Apr 27 2:00
+ -5:00 - EST 1973 Apr 29 2:00
+ -6:00 US C%sT
+Rule Canada 1918 only - Apr 14 2:00 1:00 D
+Rule Canada 1918 only - Oct 31 2:00 0 S
+Rule Canada 1942 only - Feb 9 2:00 1:00 W # War
+Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Canada 1945 only - Sep 30 2:00 0 S
+Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
+Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
+Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
+Rule StJohns 1917 only - Apr 8 2:00 1:00 D
+Rule StJohns 1917 only - Sep 17 2:00 0 S
+Rule StJohns 1919 only - May 5 23:00 1:00 D
+Rule StJohns 1919 only - Aug 12 23:00 0 S
+Rule StJohns 1920 1935 - May Sun>=1 23:00 1:00 D
+Rule StJohns 1920 1935 - Oct lastSun 23:00 0 S
+Rule StJohns 1936 1941 - May Mon>=9 0:00 1:00 D
+Rule StJohns 1936 1941 - Oct Mon>=2 0:00 0 S
+Rule StJohns 1946 1950 - May Sun>=8 2:00 1:00 D
+Rule StJohns 1946 1950 - Oct Sun>=2 2:00 0 S
+Rule StJohns 1951 1986 - Apr lastSun 2:00 1:00 D
+Rule StJohns 1951 1959 - Sep lastSun 2:00 0 S
+Rule StJohns 1960 1986 - Oct lastSun 2:00 0 S
+Rule StJohns 1987 only - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
+Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
+Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
+Rule StJohns 2007 max - Mar Sun>=8 0:01 1:00 D
+Rule StJohns 2007 max - Nov Sun>=1 0:01 0 S
+Zone America/St_Johns -3:30:52 - LMT 1884
+ -3:30:52 StJohns N%sT 1918
+ -3:30:52 Canada N%sT 1919
+ -3:30:52 StJohns N%sT 1935 Mar 30
+ -3:30 StJohns N%sT 1942 May 11
+ -3:30 Canada N%sT 1946
+ -3:30 StJohns N%sT
+Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
+ -3:30:52 - NST 1918
+ -3:30:52 Canada N%sT 1919
+ -3:30:52 - NST 1935 Mar 30
+ -3:30 - NST 1936
+ -3:30 StJohns N%sT 1942 May 11
+ -3:30 Canada N%sT 1946
+ -3:30 StJohns N%sT 1966 Mar 15 2:00
+ -4:00 StJohns A%sT
+Rule Halifax 1916 only - Apr 1 0:00 1:00 D
+Rule Halifax 1916 only - Oct 1 0:00 0 S
+Rule Halifax 1920 only - May 9 0:00 1:00 D
+Rule Halifax 1920 only - Aug 29 0:00 0 S
+Rule Halifax 1921 only - May 6 0:00 1:00 D
+Rule Halifax 1921 1922 - Sep 5 0:00 0 S
+Rule Halifax 1922 only - Apr 30 0:00 1:00 D
+Rule Halifax 1923 1925 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1923 only - Sep 4 0:00 0 S
+Rule Halifax 1924 only - Sep 15 0:00 0 S
+Rule Halifax 1925 only - Sep 28 0:00 0 S
+Rule Halifax 1926 only - May 16 0:00 1:00 D
+Rule Halifax 1926 only - Sep 13 0:00 0 S
+Rule Halifax 1927 only - May 1 0:00 1:00 D
+Rule Halifax 1927 only - Sep 26 0:00 0 S
+Rule Halifax 1928 1931 - May Sun>=8 0:00 1:00 D
+Rule Halifax 1928 only - Sep 9 0:00 0 S
+Rule Halifax 1929 only - Sep 3 0:00 0 S
+Rule Halifax 1930 only - Sep 15 0:00 0 S
+Rule Halifax 1931 1932 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1932 only - May 1 0:00 1:00 D
+Rule Halifax 1933 only - Apr 30 0:00 1:00 D
+Rule Halifax 1933 only - Oct 2 0:00 0 S
+Rule Halifax 1934 only - May 20 0:00 1:00 D
+Rule Halifax 1934 only - Sep 16 0:00 0 S
+Rule Halifax 1935 only - Jun 2 0:00 1:00 D
+Rule Halifax 1935 only - Sep 30 0:00 0 S
+Rule Halifax 1936 only - Jun 1 0:00 1:00 D
+Rule Halifax 1936 only - Sep 14 0:00 0 S
+Rule Halifax 1937 1938 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1937 1941 - Sep Mon>=24 0:00 0 S
+Rule Halifax 1939 only - May 28 0:00 1:00 D
+Rule Halifax 1940 1941 - May Sun>=1 0:00 1:00 D
+Rule Halifax 1946 1949 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1946 1949 - Sep lastSun 2:00 0 S
+Rule Halifax 1951 1954 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1951 1954 - Sep lastSun 2:00 0 S
+Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
+Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
+Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
+Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
+ -4:00 Halifax A%sT 1918
+ -4:00 Canada A%sT 1919
+ -4:00 Halifax A%sT 1942 Feb 9 2:00s
+ -4:00 Canada A%sT 1946
+ -4:00 Halifax A%sT 1974
+ -4:00 Canada A%sT
+Zone America/Glace_Bay -3:59:48 - LMT 1902 Jun 15
+ -4:00 Canada A%sT 1953
+ -4:00 Halifax A%sT 1954
+ -4:00 - AST 1972
+ -4:00 Halifax A%sT 1974
+ -4:00 Canada A%sT
+Rule Moncton 1933 1935 - Jun Sun>=8 1:00 1:00 D
+Rule Moncton 1933 1935 - Sep Sun>=8 1:00 0 S
+Rule Moncton 1936 1938 - Jun Sun>=1 1:00 1:00 D
+Rule Moncton 1936 1938 - Sep Sun>=1 1:00 0 S
+Rule Moncton 1939 only - May 27 1:00 1:00 D
+Rule Moncton 1939 1941 - Sep Sat>=21 1:00 0 S
+Rule Moncton 1940 only - May 19 1:00 1:00 D
+Rule Moncton 1941 only - May 4 1:00 1:00 D
+Rule Moncton 1946 1972 - Apr lastSun 2:00 1:00 D
+Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
+Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
+Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
+Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
+Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
+ -5:00 - EST 1902 Jun 15
+ -4:00 Canada A%sT 1933
+ -4:00 Moncton A%sT 1942
+ -4:00 Canada A%sT 1946
+ -4:00 Moncton A%sT 1973
+ -4:00 Canada A%sT 1993
+ -4:00 Moncton A%sT 2007
+ -4:00 Canada A%sT
+Rule Mont 1917 only - Mar 25 2:00 1:00 D
+Rule Mont 1917 only - Apr 24 0:00 0 S
+Rule Mont 1919 only - Mar 31 2:30 1:00 D
+Rule Mont 1919 only - Oct 25 2:30 0 S
+Rule Mont 1920 only - May 2 2:30 1:00 D
+Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
+Rule Mont 1921 only - May 1 2:00 1:00 D
+Rule Mont 1922 only - Apr 30 2:00 1:00 D
+Rule Mont 1924 only - May 17 2:00 1:00 D
+Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
+Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
+Rule Mont 1927 only - May 1 0:00 1:00 D
+Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
+Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
+Rule Mont 1932 only - May 1 0:00 1:00 D
+Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1933 only - Oct 1 0:00 0 S
+Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
+Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
+Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
+Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
+Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
+Zone America/Blanc-Sablon -3:48:28 - LMT 1884
+ -4:00 Canada A%sT 1970
+ -4:00 - AST
+Zone America/Montreal -4:54:16 - LMT 1884
+ -5:00 Mont E%sT 1918
+ -5:00 Canada E%sT 1919
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Mont E%sT 1974
+ -5:00 Canada E%sT
+Rule Toronto 1919 only - Mar 30 23:30 1:00 D
+Rule Toronto 1919 only - Oct 26 0:00 0 S
+Rule Toronto 1920 only - May 2 2:00 1:00 D
+Rule Toronto 1920 only - Sep 26 0:00 0 S
+Rule Toronto 1921 only - May 15 2:00 1:00 D
+Rule Toronto 1921 only - Sep 15 2:00 0 S
+Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
+Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
+Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
+Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S
+Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1932 only - May 1 2:00 1:00 D
+Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1933 only - Oct 1 2:00 0 S
+Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S
+Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S
+Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D
+Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D
+Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S
+Rule Toronto 1949 only - Nov lastSun 0:00 0 S
+Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1950 only - Nov lastSun 2:00 0 S
+Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
+Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
+Zone America/Toronto -5:17:32 - LMT 1895
+ -5:00 Canada E%sT 1919
+ -5:00 Toronto E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Toronto E%sT 1974
+ -5:00 Canada E%sT
+Zone America/Thunder_Bay -5:57:00 - LMT 1895
+ -6:00 - CST 1910
+ -5:00 - EST 1942
+ -5:00 Canada E%sT 1970
+ -5:00 Mont E%sT 1973
+ -5:00 - EST 1974
+ -5:00 Canada E%sT
+Zone America/Nipigon -5:53:04 - LMT 1895
+ -5:00 Canada E%sT 1940 Sep 29
+ -5:00 1:00 EDT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT
+Zone America/Rainy_River -6:18:16 - LMT 1895
+ -6:00 Canada C%sT 1940 Sep 29
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT
+Zone America/Atikokan -6:06:28 - LMT 1895
+ -6:00 Canada C%sT 1940 Sep 29
+ -6:00 1:00 CDT 1942 Feb 9 2:00s
+ -6:00 Canada C%sT 1945 Sep 30 2:00
+ -5:00 - EST
+Rule Winn 1916 only - Apr 23 0:00 1:00 D
+Rule Winn 1916 only - Sep 17 0:00 0 S
+Rule Winn 1918 only - Apr 14 2:00 1:00 D
+Rule Winn 1918 only - Oct 31 2:00 0 S
+Rule Winn 1937 only - May 16 2:00 1:00 D
+Rule Winn 1937 only - Sep 26 2:00 0 S
+Rule Winn 1942 only - Feb 9 2:00 1:00 W # War
+Rule Winn 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Winn 1945 only - Sep lastSun 2:00 0 S
+Rule Winn 1946 only - May 12 2:00 1:00 D
+Rule Winn 1946 only - Oct 13 2:00 0 S
+Rule Winn 1947 1949 - Apr lastSun 2:00 1:00 D
+Rule Winn 1947 1949 - Sep lastSun 2:00 0 S
+Rule Winn 1950 only - May 1 2:00 1:00 D
+Rule Winn 1950 only - Sep 30 2:00 0 S
+Rule Winn 1951 1960 - Apr lastSun 2:00 1:00 D
+Rule Winn 1951 1958 - Sep lastSun 2:00 0 S
+Rule Winn 1959 only - Oct lastSun 2:00 0 S
+Rule Winn 1960 only - Sep lastSun 2:00 0 S
+Rule Winn 1963 only - Apr lastSun 2:00 1:00 D
+Rule Winn 1963 only - Sep 22 2:00 0 S
+Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
+Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
+Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
+Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
+ -6:00 Winn C%sT 2006
+ -6:00 Canada C%sT
+Rule Regina 1918 only - Apr 14 2:00 1:00 D
+Rule Regina 1918 only - Oct 31 2:00 0 S
+Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D
+Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S
+Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D
+Rule Regina 1937 only - Oct Sun>=8 0:00 0 S
+Rule Regina 1938 only - Oct Sun>=1 0:00 0 S
+Rule Regina 1939 1941 - Oct Sun>=8 0:00 0 S
+Rule Regina 1942 only - Feb 9 2:00 1:00 W # War
+Rule Regina 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Regina 1945 only - Sep lastSun 2:00 0 S
+Rule Regina 1946 only - Apr Sun>=8 2:00 1:00 D
+Rule Regina 1946 only - Oct Sun>=8 2:00 0 S
+Rule Regina 1947 1957 - Apr lastSun 2:00 1:00 D
+Rule Regina 1947 1957 - Sep lastSun 2:00 0 S
+Rule Regina 1959 only - Apr lastSun 2:00 1:00 D
+Rule Regina 1959 only - Oct lastSun 2:00 0 S
+Rule Swift 1957 only - Apr lastSun 2:00 1:00 D
+Rule Swift 1957 only - Oct lastSun 2:00 0 S
+Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D
+Rule Swift 1959 only - Oct lastSun 2:00 0 S
+Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
+Zone America/Regina -6:58:36 - LMT 1905 Sep
+ -7:00 Regina M%sT 1960 Apr lastSun 2:00
+ -6:00 - CST
+Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
+ -7:00 Canada M%sT 1946 Apr lastSun 2:00
+ -7:00 Regina M%sT 1950
+ -7:00 Swift M%sT 1972 Apr lastSun 2:00
+ -6:00 - CST
+Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
+Rule Edm 1918 only - Oct 31 2:00 0 S
+Rule Edm 1919 only - May 27 2:00 0 S
+Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D
+Rule Edm 1920 only - Oct lastSun 2:00 0 S
+Rule Edm 1921 1923 - Sep lastSun 2:00 0 S
+Rule Edm 1942 only - Feb 9 2:00 1:00 W # War
+Rule Edm 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Edm 1945 only - Sep lastSun 2:00 0 S
+Rule Edm 1947 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1947 only - Sep lastSun 2:00 0 S
+Rule Edm 1967 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1967 only - Oct lastSun 2:00 0 S
+Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
+Rule Edm 1969 only - Oct lastSun 2:00 0 S
+Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
+Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
+Zone America/Edmonton -7:33:52 - LMT 1906 Sep
+ -7:00 Edm M%sT 1987
+ -7:00 Canada M%sT
+Rule Vanc 1918 only - Apr 14 2:00 1:00 D
+Rule Vanc 1918 only - Oct 31 2:00 0 S
+Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War
+Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule Vanc 1945 only - Sep 30 2:00 0 S
+Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
+Rule Vanc 1946 only - Oct 13 2:00 0 S
+Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
+Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
+Zone America/Vancouver -8:12:28 - LMT 1884
+ -8:00 Vanc P%sT 1987
+ -8:00 Canada P%sT
+Zone America/Dawson_Creek -8:00:56 - LMT 1884
+ -8:00 Canada P%sT 1947
+ -8:00 Vanc P%sT 1972 Aug 30 2:00
+ -7:00 - MST
+Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
+Rule NT_YK 1918 only - Oct 27 2:00 0 S
+Rule NT_YK 1919 only - May 25 2:00 1:00 D
+Rule NT_YK 1919 only - Nov 1 0:00 0 S
+Rule NT_YK 1942 only - Feb 9 2:00 1:00 W # War
+Rule NT_YK 1945 only - Aug 14 23:00u 1:00 P # Peace
+Rule NT_YK 1945 only - Sep 30 2:00 0 S
+Rule NT_YK 1965 only - Apr lastSun 0:00 2:00 DD
+Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
+Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
+Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
+Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
+ -4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
+ -5:00 Canada E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 Canada E%sT
+Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
+ -5:00 NT_YK E%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 Canada E%sT
+Rule Resolute 2006 max - Nov Sun>=1 2:00 0 ES
+Rule Resolute 2007 max - Mar Sun>=8 2:00 0 CD
+Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT 2006 Oct 29 2:00
+ -5:00 Resolute %sT
+Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
+ -6:00 NT_YK C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2001 Apr 1 3:00
+ -6:00 Canada C%sT
+Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
+ -7:00 NT_YK M%sT 1999 Oct 31 2:00
+ -6:00 Canada C%sT 2000 Oct 29 2:00
+ -5:00 - EST 2000 Nov 5 0:00
+ -6:00 - CST 2001 Apr 1 3:00
+ -7:00 Canada M%sT
+Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
+Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
+ -8:00 NT_YK P%sT 1979 Apr lastSun 2:00
+ -7:00 NT_YK M%sT 1980
+ -7:00 Canada M%sT
+Zone America/Whitehorse -9:00:12 - LMT 1900 Aug 20
+ -9:00 NT_YK Y%sT 1966 Jul 1 2:00
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
+Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
+ -9:00 NT_YK Y%sT 1973 Oct 28 0:00
+ -8:00 NT_YK P%sT 1980
+ -8:00 Canada P%sT
+Rule Mexico 1939 only - Feb 5 0:00 1:00 D
+Rule Mexico 1939 only - Jun 25 0:00 0 S
+Rule Mexico 1940 only - Dec 9 0:00 1:00 D
+Rule Mexico 1941 only - Apr 1 0:00 0 S
+Rule Mexico 1943 only - Dec 16 0:00 1:00 W # War
+Rule Mexico 1944 only - May 1 0:00 0 S
+Rule Mexico 1950 only - Feb 12 0:00 1:00 D
+Rule Mexico 1950 only - Jul 30 0:00 0 S
+Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
+Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
+Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
+Rule Mexico 2001 only - Sep lastSun 2:00 0 S
+Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
+Rule Mexico 2002 max - Oct lastSun 2:00 0 S
+Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
+ -6:00 - CST 1981 Dec 23
+ -5:00 Mexico E%sT 1998 Aug 2 2:00
+ -6:00 Mexico C%sT
+Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
+ -6:00 - CST 1981 Dec 23
+ -5:00 - EST 1982 Dec 2
+ -6:00 Mexico C%sT
+Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
+ -6:00 - CST 1988
+ -6:00 US C%sT 1989
+ -6:00 Mexico C%sT
+Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 Mexico C%sT 2001 Sep 30 02:00
+ -6:00 - CST 2002 Feb 20
+ -6:00 Mexico C%sT
+Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1996
+ -6:00 Mexico C%sT 1998
+ -6:00 - CST 1998 Apr Sun>=1 3:00
+ -7:00 Mexico M%sT
+Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1942 Apr 24
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1970
+ -7:00 Mexico M%sT 1999
+ -7:00 - MST
+Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
+ -7:00 - MST 1927 Jun 10 23:00
+ -6:00 - CST 1930 Nov 15
+ -7:00 - MST 1931 May 1 23:00
+ -6:00 - CST 1931 Oct
+ -7:00 - MST 1932 Apr 1
+ -6:00 - CST 1942 Apr 24
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1970
+ -7:00 Mexico M%sT
+Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
+ -7:00 - MST 1924
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 15
+ -8:00 - PST 1931 Apr 1
+ -8:00 1:00 PDT 1931 Sep 30
+ -8:00 - PST 1942 Apr 24
+ -8:00 1:00 PWT 1945 Aug 14 23:00u
+ -8:00 1:00 PPT 1945 Nov 12 # Peace
+ -8:00 - PST 1948 Apr 5
+ -8:00 1:00 PDT 1949 Jan 14
+ -8:00 - PST 1954
+ -8:00 CA P%sT 1961
+ -8:00 - PST 1976
+ -8:00 US P%sT 1996
+ -8:00 Mexico P%sT 2001
+ -8:00 US P%sT 2002 Feb 20
+ -8:00 Mexico P%sT
+Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
+ -4:00 - AST
+Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
+ -5:00 - EST 1951
+ -4:00 - AST
+Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
+Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
+Zone America/Nassau -5:09:24 - LMT 1912 Mar 2
+ -5:00 Bahamas E%sT 1976
+ -5:00 US E%sT
+Rule Barb 1977 only - Jun 12 2:00 1:00 D
+Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
+Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
+Rule Barb 1979 only - Sep 30 2:00 0 S
+Rule Barb 1980 only - Sep 25 2:00 0 S
+Zone America/Barbados -3:58:28 - LMT 1924 # Bridgetown
+ -3:58:28 - BMT 1932 # Bridgetown Mean Time
+ -4:00 Barb A%sT
+Rule Belize 1918 1942 - Oct Sun>=2 0:00 0:30 HD
+Rule Belize 1919 1943 - Feb Sun>=9 0:00 0 S
+Rule Belize 1973 only - Dec 5 0:00 1:00 D
+Rule Belize 1974 only - Feb 9 0:00 0 S
+Rule Belize 1982 only - Dec 18 0:00 1:00 D
+Rule Belize 1983 only - Feb 12 0:00 0 S
+Zone America/Belize -5:52:48 - LMT 1912 Apr
+ -6:00 Belize C%sT
+Zone Atlantic/Bermuda -4:19:04 - LMT 1930 Jan 1 2:00 # Hamilton
+ -4:00 - AST 1974 Apr 28 2:00
+ -4:00 Bahamas A%sT 1976
+ -4:00 US A%sT
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST
+Rule CR 1979 1980 - Feb lastSun 0:00 1:00 D
+Rule CR 1979 1980 - Jun Sun>=1 0:00 0 S
+Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
+Rule CR 1991 only - Jul 1 0:00 0 S
+Rule CR 1992 only - Mar 15 0:00 0 S
+Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
+ -5:36:20 - SJMT 1921 Jan 15 # San Jose Mean Time
+ -6:00 CR C%sT
+Rule Cuba 1928 only - Jun 10 0:00 1:00 D
+Rule Cuba 1928 only - Oct 10 0:00 0 S
+Rule Cuba 1940 1942 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1940 1942 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1945 1946 - Jun Sun>=1 0:00 1:00 D
+Rule Cuba 1945 1946 - Sep Sun>=1 0:00 0 S
+Rule Cuba 1965 only - Jun 1 0:00 1:00 D
+Rule Cuba 1965 only - Sep 30 0:00 0 S
+Rule Cuba 1966 only - May 29 0:00 1:00 D
+Rule Cuba 1966 only - Oct 2 0:00 0 S
+Rule Cuba 1967 only - Apr 8 0:00 1:00 D
+Rule Cuba 1967 1968 - Sep Sun>=8 0:00 0 S
+Rule Cuba 1968 only - Apr 14 0:00 1:00 D
+Rule Cuba 1969 1977 - Apr lastSun 0:00 1:00 D
+Rule Cuba 1969 1971 - Oct lastSun 0:00 0 S
+Rule Cuba 1972 1974 - Oct 8 0:00 0 S
+Rule Cuba 1975 1977 - Oct lastSun 0:00 0 S
+Rule Cuba 1978 only - May 7 0:00 1:00 D
+Rule Cuba 1978 1990 - Oct Sun>=8 0:00 0 S
+Rule Cuba 1979 1980 - Mar Sun>=15 0:00 1:00 D
+Rule Cuba 1981 1985 - May Sun>=5 0:00 1:00 D
+Rule Cuba 1986 1989 - Mar Sun>=14 0:00 1:00 D
+Rule Cuba 1990 1997 - Apr Sun>=1 0:00 1:00 D
+Rule Cuba 1991 1995 - Oct Sun>=8 0:00s 0 S
+Rule Cuba 1996 only - Oct 6 0:00s 0 S
+Rule Cuba 1997 only - Oct 12 0:00s 0 S
+Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
+Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
+Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
+Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
+Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
+Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
+Rule Cuba 2009 max - Mar Sun>=8 0:00s 1:00 D
+Zone America/Havana -5:29:28 - LMT 1890
+ -5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT
+ -5:00 Cuba C%sT
+Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
+ -4:00 - AST
+Rule DR 1966 only - Oct 30 0:00 1:00 D
+Rule DR 1967 only - Feb 28 0:00 0 S
+Rule DR 1969 1973 - Oct lastSun 0:00 0:30 HD
+Rule DR 1970 only - Feb 21 0:00 0 S
+Rule DR 1971 only - Jan 20 0:00 0 S
+Rule DR 1972 1974 - Jan 21 0:00 0 S
+Zone America/Santo_Domingo -4:39:36 - LMT 1890
+ -4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
+ -5:00 DR E%sT 1974 Oct 27
+ -4:00 - AST 2000 Oct 29 02:00
+ -5:00 US E%sT 2000 Dec 3 01:00
+ -4:00 - AST
+Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
+Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
+ -6:00 Salv C%sT
+Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's
+ -4:00 - AST
+Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
+ -4:00 - AST
+Link America/Guadeloupe America/St_Barthelemy
+Link America/Guadeloupe America/Marigot
+Rule Guat 1973 only - Nov 25 0:00 1:00 D
+Rule Guat 1974 only - Feb 24 0:00 0 S
+Rule Guat 1983 only - May 21 0:00 1:00 D
+Rule Guat 1983 only - Sep 22 0:00 0 S
+Rule Guat 1991 only - Mar 23 0:00 1:00 D
+Rule Guat 1991 only - Sep 7 0:00 0 S
+Rule Guat 2006 only - Apr 30 0:00 1:00 D
+Rule Guat 2006 only - Oct 1 0:00 0 S
+Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
+ -6:00 Guat C%sT
+Rule Haiti 1983 only - May 8 0:00 1:00 D
+Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
+Rule Haiti 1983 1987 - Oct lastSun 0:00 0 S
+Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
+Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
+Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
+Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
+Zone America/Port-au-Prince -4:49:20 - LMT 1890
+ -4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
+ -5:00 Haiti E%sT
+Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D
+Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
+Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
+Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
+Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
+ -6:00 Hond C%sT
+Zone America/Jamaica -5:07:12 - LMT 1890 # Kingston
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST 1974 Apr 28 2:00
+ -5:00 US E%sT 1984
+ -5:00 - EST
+Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
+ -4:04:20 - FFMT 1911 May # Fort-de-France MT
+ -4:00 - AST 1980 Apr 6
+ -4:00 1:00 ADT 1980 Sep 28
+ -4:00 - AST
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
+ -4:00 - AST
+Rule Nic 1979 1980 - Mar Sun>=16 0:00 1:00 D
+Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
+Rule Nic 2005 only - Apr 10 0:00 1:00 D
+Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
+Rule Nic 2006 only - Apr 30 2:00 1:00 D
+Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
+Zone America/Managua -5:45:08 - LMT 1890
+ -5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
+ -6:00 - CST 1973 May
+ -5:00 - EST 1975 Feb 16
+ -6:00 Nic C%sT 1992 Jan 1 4:00
+ -5:00 - EST 1992 Sep 24
+ -6:00 - CST 1993
+ -5:00 - EST 1997
+ -6:00 Nic C%sT
+Zone America/Panama -5:18:08 - LMT 1890
+ -5:19:36 - CMT 1908 Apr 22 # Colon Mean Time
+ -5:00 - EST
+Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
+ -4:00 - AST 1942 May 3
+ -4:00 US A%sT 1946
+ -4:00 - AST
+Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
+ -4:00 - AST
+Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
+ -4:04:00 - CMT 1912 # Castries Mean Time
+ -4:00 - AST
+Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
+ -4:00 - AST 1980 May
+ -3:00 - PMST 1987 # Pierre & Miquelon Time
+ -3:00 Canada PM%sT
+Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
+ -4:04:56 - KMT 1912 # Kingstown Mean Time
+ -4:00 - AST
+Rule TC 1979 1986 - Apr lastSun 2:00 1:00 D
+Rule TC 1979 2006 - Oct lastSun 2:00 0 S
+Rule TC 1987 2006 - Apr Sun>=1 2:00 1:00 D
+Rule TC 2007 max - Mar Sun>=8 2:00 1:00 D
+Rule TC 2007 max - Nov Sun>=1 2:00 0 S
+Zone America/Grand_Turk -4:44:32 - LMT 1890
+ -5:07:12 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 TC E%sT
+Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
+ -4:00 - AST
+Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie
+ -4:00 - AST
diff --git a/js/dojo/dojox/date/zoneinfo/pacificnew b/js/dojo/dojox/date/zoneinfo/pacificnew
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/pacificnew
@@ -0,0 +1,1 @@
+Link America/Los_Angeles US/Pacific-New ##
diff --git a/js/dojo/dojox/date/zoneinfo/southamerica b/js/dojo/dojox/date/zoneinfo/southamerica
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/date/zoneinfo/southamerica
@@ -0,0 +1,501 @@
+Rule Arg 1930 only - Dec 1 0:00 1:00 S
+Rule Arg 1931 only - Apr 1 0:00 0 -
+Rule Arg 1931 only - Oct 15 0:00 1:00 S
+Rule Arg 1932 1940 - Mar 1 0:00 0 -
+Rule Arg 1932 1939 - Nov 1 0:00 1:00 S
+Rule Arg 1940 only - Jul 1 0:00 1:00 S
+Rule Arg 1941 only - Jun 15 0:00 0 -
+Rule Arg 1941 only - Oct 15 0:00 1:00 S
+Rule Arg 1943 only - Aug 1 0:00 0 -
+Rule Arg 1943 only - Oct 15 0:00 1:00 S
+Rule Arg 1946 only - Mar 1 0:00 0 -
+Rule Arg 1946 only - Oct 1 0:00 1:00 S
+Rule Arg 1963 only - Oct 1 0:00 0 -
+Rule Arg 1963 only - Dec 15 0:00 1:00 S
+Rule Arg 1964 1966 - Mar 1 0:00 0 -
+Rule Arg 1964 1966 - Oct 15 0:00 1:00 S
+Rule Arg 1967 only - Apr 2 0:00 0 -
+Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S
+Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 -
+Rule Arg 1974 only - Jan 23 0:00 1:00 S
+Rule Arg 1974 only - May 1 0:00 0 -
+Rule Arg 1988 only - Dec 1 0:00 1:00 S
+Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
+Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S
+Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S
+Rule Arg 2000 only - Mar 3 0:00 0 -
+Rule Arg 2007 only - Dec 30 0:00 1:00 S
+Rule Arg 2008 max - Mar Sun>=15 0:00 0 -
+Rule Arg 2008 max - Oct Sun>=15 0:00 1:00 S
+
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT
+Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT
+Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 13
+ -3:00 Arg AR%sT
+Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 1
+ -4:00 - WART 1991 May 7
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 1
+ -4:00 - WART 1991 May 7
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 31
+ -4:00 - WART 2004 Jul 25
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Mar 4
+ -4:00 - WART 1990 Oct 28
+ -4:00 1:00 WARST 1991 Mar 17
+ -4:00 - WART 1991 Oct 6
+ -3:00 1:00 ARST 1992
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990 Mar 4
+ -4:00 - WART 1990 Oct 15
+ -4:00 1:00 WARST 1991 Mar 1
+ -4:00 - WART 1991 Oct 15
+ -4:00 1:00 WARST 1992 Mar 1
+ -4:00 - WART 1992 Oct 18
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 23
+ -4:00 - WART 2004 Sep 26
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1990
+ -3:00 1:00 ARST 1990 Mar 14
+ -4:00 - WART 1990 Oct 15
+ -4:00 1:00 WARST 1991 Mar 1
+ -4:00 - WART 1991 Jun 1
+ -3:00 - ART 1999 Oct 3
+ -4:00 1:00 WARST 2000 Mar 3
+ -3:00 - ART 2004 May 31
+ -4:00 - WART 2004 Jul 25
+ -3:00 Arg AR%sT 2008 Jan 21
+ -3:00 - ART 2009 Mar 15
+ -4:00 Arg WAR%sT
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May # Cordoba Mean Time
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 May 30
+ -4:00 - WART 2004 Jun 20
+ -3:00 Arg AR%sT 2008 Oct 18
+ -3:00 - ART
+Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+Zone America/La_Paz -4:32:36 - LMT 1890
+ -4:32:36 - CMT 1931 Oct 15 # Calamarca MT
+ -4:32:36 1:00 BOST 1932 Mar 21 # Bolivia ST
+ -4:00 - BOT # Bolivia Time
+Rule Brazil 1931 only - Oct 3 11:00 1:00 S
+Rule Brazil 1932 1933 - Apr 1 0:00 0 -
+Rule Brazil 1932 only - Oct 3 0:00 1:00 S
+Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S
+Rule Brazil 1950 only - Apr 16 1:00 0 -
+Rule Brazil 1951 1952 - Apr 1 0:00 0 -
+Rule Brazil 1953 only - Mar 1 0:00 0 -
+Rule Brazil 1963 only - Dec 9 0:00 1:00 S
+Rule Brazil 1964 only - Mar 1 0:00 0 -
+Rule Brazil 1965 only - Jan 31 0:00 1:00 S
+Rule Brazil 1965 only - Mar 31 0:00 0 -
+Rule Brazil 1965 only - Dec 1 0:00 1:00 S
+Rule Brazil 1966 1968 - Mar 1 0:00 0 -
+Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S
+Rule Brazil 1985 only - Nov 2 0:00 1:00 S
+Rule Brazil 1986 only - Mar 15 0:00 0 -
+Rule Brazil 1986 only - Oct 25 0:00 1:00 S
+Rule Brazil 1987 only - Feb 14 0:00 0 -
+Rule Brazil 1987 only - Oct 25 0:00 1:00 S
+Rule Brazil 1988 only - Feb 7 0:00 0 -
+Rule Brazil 1988 only - Oct 16 0:00 1:00 S
+Rule Brazil 1989 only - Jan 29 0:00 0 -
+Rule Brazil 1989 only - Oct 15 0:00 1:00 S
+Rule Brazil 1990 only - Feb 11 0:00 0 -
+Rule Brazil 1990 only - Oct 21 0:00 1:00 S
+Rule Brazil 1991 only - Feb 17 0:00 0 -
+Rule Brazil 1991 only - Oct 20 0:00 1:00 S
+Rule Brazil 1992 only - Feb 9 0:00 0 -
+Rule Brazil 1992 only - Oct 25 0:00 1:00 S
+Rule Brazil 1993 only - Jan 31 0:00 0 -
+Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S
+Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 -
+Rule Brazil 1996 only - Feb 11 0:00 0 -
+Rule Brazil 1996 only - Oct 6 0:00 1:00 S
+Rule Brazil 1997 only - Feb 16 0:00 0 -
+Rule Brazil 1997 only - Oct 6 0:00 1:00 S
+Rule Brazil 1998 only - Mar 1 0:00 0 -
+Rule Brazil 1998 only - Oct 11 0:00 1:00 S
+Rule Brazil 1999 only - Feb 21 0:00 0 -
+Rule Brazil 1999 only - Oct 3 0:00 1:00 S
+Rule Brazil 2000 only - Feb 27 0:00 0 -
+Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2002 only - Nov 3 0:00 1:00 S
+Rule Brazil 2003 only - Oct 19 0:00 1:00 S
+Rule Brazil 2004 only - Nov 2 0:00 1:00 S
+Rule Brazil 2005 only - Oct 16 0:00 1:00 S
+Rule Brazil 2006 only - Nov 5 0:00 1:00 S
+Rule Brazil 2007 only - Feb 25 0:00 0 -
+Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S
+Rule Brazil 2008 max - Oct Sun>=15 0:00 1:00 S
+Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2027 2033 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2034 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2035 2036 - Feb Sun>=15 0:00 0 -
+Rule Brazil 2037 only - Feb Sun>=22 0:00 0 -
+Rule Brazil 2038 max - Feb Sun>=15 0:00 0 -
+Zone America/Noronha -2:09:40 - LMT 1914
+ -2:00 Brazil FN%sT 1990 Sep 17
+ -2:00 - FNT 1999 Sep 30
+ -2:00 Brazil FN%sT 2000 Oct 15
+ -2:00 - FNT 2001 Sep 13
+ -2:00 Brazil FN%sT 2002 Oct 1
+ -2:00 - FNT
+Zone America/Belem -3:13:56 - LMT 1914
+ -3:00 Brazil BR%sT 1988 Sep 12
+ -3:00 - BRT
+Zone America/Santarem -3:38:48 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 2008 Jun 24 00:00
+ -3:00 - BRT
+Zone America/Fortaleza -2:34:00 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 22
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Recife -2:19:36 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 15
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Araguaina -3:12:48 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1995 Sep 14
+ -3:00 Brazil BR%sT 2003 Sep 24
+ -3:00 - BRT
+Zone America/Maceio -2:22:52 - LMT 1914
+ -3:00 Brazil BR%sT 1990 Sep 17
+ -3:00 - BRT 1995 Oct 13
+ -3:00 Brazil BR%sT 1996 Sep 4
+ -3:00 - BRT 1999 Sep 30
+ -3:00 Brazil BR%sT 2000 Oct 22
+ -3:00 - BRT 2001 Sep 13
+ -3:00 Brazil BR%sT 2002 Oct 1
+ -3:00 - BRT
+Zone America/Bahia -2:34:04 - LMT 1914
+ -3:00 Brazil BR%sT 2003 Sep 24
+ -3:00 - BRT
+Zone America/Sao_Paulo -3:06:28 - LMT 1914
+ -3:00 Brazil BR%sT 1963 Oct 23 00:00
+ -3:00 1:00 BRST 1964
+ -3:00 Brazil BR%sT
+Zone America/Campo_Grande -3:38:28 - LMT 1914
+ -4:00 Brazil AM%sT
+Zone America/Cuiaba -3:44:20 - LMT 1914
+ -4:00 Brazil AM%sT 2003 Sep 24
+ -4:00 - AMT 2004 Oct 1
+ -4:00 Brazil AM%sT
+Zone America/Porto_Velho -4:15:36 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT
+Zone America/Boa_Vista -4:02:40 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 1999 Sep 30
+ -4:00 Brazil AM%sT 2000 Oct 15
+ -4:00 - AMT
+Zone America/Manaus -4:00:04 - LMT 1914
+ -4:00 Brazil AM%sT 1988 Sep 12
+ -4:00 - AMT 1993 Sep 28
+ -4:00 Brazil AM%sT 1994 Sep 22
+ -4:00 - AMT
+Zone America/Eirunepe -4:39:28 - LMT 1914
+ -5:00 Brazil AC%sT 1988 Sep 12
+ -5:00 - ACT 1993 Sep 28
+ -5:00 Brazil AC%sT 1994 Sep 22
+ -5:00 - ACT 2008 Jun 24 00:00
+ -4:00 - AMT
+Zone America/Rio_Branco -4:31:12 - LMT 1914
+ -5:00 Brazil AC%sT 1988 Sep 12
+ -5:00 - ACT 2008 Jun 24 00:00
+ -4:00 - AMT
+Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
+Rule Chile 1928 1932 - Apr 1 0:00 0 -
+Rule Chile 1942 only - Jun 1 4:00u 0 -
+Rule Chile 1942 only - Aug 1 5:00u 1:00 S
+Rule Chile 1946 only - Jul 15 4:00u 1:00 S
+Rule Chile 1946 only - Sep 1 3:00u 0:00 -
+Rule Chile 1947 only - Apr 1 4:00u 0 -
+Rule Chile 1968 only - Nov 3 4:00u 1:00 S
+Rule Chile 1969 only - Mar 30 3:00u 0 -
+Rule Chile 1969 only - Nov 23 4:00u 1:00 S
+Rule Chile 1970 only - Mar 29 3:00u 0 -
+Rule Chile 1971 only - Mar 14 3:00u 0 -
+Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1973 only - Sep 30 4:00u 1:00 S
+Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1987 only - Apr 12 3:00u 0 -
+Rule Chile 1988 1989 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1988 only - Oct Sun>=1 4:00u 1:00 S
+Rule Chile 1989 only - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1990 only - Mar 18 3:00u 0 -
+Rule Chile 1990 only - Sep 16 4:00u 1:00 S
+Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 -
+Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 1997 only - Mar 30 3:00u 0 -
+Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
+Rule Chile 1998 only - Sep 27 4:00u 1:00 S
+Rule Chile 1999 only - Apr 4 3:00u 0 -
+Rule Chile 1999 max - Oct Sun>=9 4:00u 1:00 S
+Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
+Rule Chile 2008 only - Mar 30 3:00u 0 -
+Rule Chile 2009 max - Mar Sun>=9 3:00u 0 -
+Zone America/Santiago -4:42:46 - LMT 1890
+ -4:42:46 - SMT 1910 # Santiago Mean Time
+ -5:00 - CLT 1916 Jul 1 # Chile Time
+ -4:42:46 - SMT 1918 Sep 1 # Santiago Mean Time
+ -4:00 - CLT 1919 Jul 1 # Chile Time
+ -4:42:46 - SMT 1927 Sep 1 # Santiago Mean Time
+ -5:00 Chile CL%sT 1947 May 22 # Chile Time
+ -4:00 Chile CL%sT
+Zone Pacific/Easter -7:17:44 - LMT 1890
+ -7:17:28 - EMT 1932 Sep # Easter Mean Time
+ -7:00 Chile EAS%sT 1982 Mar 13 21:00 # Easter I Time
+ -6:00 Chile EAS%sT
+Rule CO 1992 only - May 3 0:00 1:00 S
+Rule CO 1993 only - Apr 4 0:00 0 -
+Zone America/Bogota -4:56:20 - LMT 1884 Mar 13
+ -4:56:20 - BMT 1914 Nov 23 # Bogota Mean Time
+ -5:00 CO CO%sT # Colombia Time
+Zone America/Curacao -4:35:44 - LMT 1912 Feb 12 # Willemstad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+Zone America/Guayaquil -5:19:20 - LMT 1890
+ -5:14:00 - QMT 1931 # Quito Mean Time
+ -5:00 - ECT # Ecuador Time
+Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
+ -5:00 - ECT 1986
+ -6:00 - GALT # Galapagos Time
+Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S
+Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 -
+Rule Falk 1939 only - Oct 1 0:00 1:00 S
+Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S
+Rule Falk 1943 only - Jan 1 0:00 0 -
+Rule Falk 1983 only - Sep lastSun 0:00 1:00 S
+Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
+Rule Falk 1984 only - Sep 16 0:00 1:00 S
+Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
+Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
+Rule Falk 2001 max - Apr Sun>=15 2:00 0 -
+Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S
+Zone Atlantic/Stanley -3:51:24 - LMT 1890
+ -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
+ -4:00 Falk FK%sT 1983 May # Falkland Is Time
+ -3:00 Falk FK%sT 1985 Sep 15
+ -4:00 Falk FK%sT
+Zone America/Cayenne -3:29:20 - LMT 1911 Jul
+ -4:00 - GFT 1967 Oct # French Guiana Time
+ -3:00 - GFT
+Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
+ -3:45 - GBGT 1966 May 26 # Br Guiana Time
+ -3:45 - GYT 1975 Jul 31 # Guyana Time
+ -3:00 - GYT 1991
+ -4:00 - GYT
+Rule Para 1975 1988 - Oct 1 0:00 1:00 S
+Rule Para 1975 1978 - Mar 1 0:00 0 -
+Rule Para 1979 1991 - Apr 1 0:00 0 -
+Rule Para 1989 only - Oct 22 0:00 1:00 S
+Rule Para 1990 only - Oct 1 0:00 1:00 S
+Rule Para 1991 only - Oct 6 0:00 1:00 S
+Rule Para 1992 only - Mar 1 0:00 0 -
+Rule Para 1992 only - Oct 5 0:00 1:00 S
+Rule Para 1993 only - Mar 31 0:00 0 -
+Rule Para 1993 1995 - Oct 1 0:00 1:00 S
+Rule Para 1994 1995 - Feb lastSun 0:00 0 -
+Rule Para 1996 only - Mar 1 0:00 0 -
+Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S
+Rule Para 1997 only - Feb lastSun 0:00 0 -
+Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
+Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
+Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
+Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S
+Rule Para 2005 max - Mar Sun>=8 0:00 0 -
+Zone America/Asuncion -3:50:40 - LMT 1890
+ -3:50:40 - AMT 1931 Oct 10 # Asuncion Mean Time
+ -4:00 - PYT 1972 Oct # Paraguay Time
+ -3:00 - PYT 1974 Apr
+ -4:00 Para PY%sT
+Rule Peru 1938 only - Jan 1 0:00 1:00 S
+Rule Peru 1938 only - Apr 1 0:00 0 -
+Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S
+Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 -
+Rule Peru 1986 1987 - Jan 1 0:00 1:00 S
+Rule Peru 1986 1987 - Apr 1 0:00 0 -
+Rule Peru 1990 only - Jan 1 0:00 1:00 S
+Rule Peru 1990 only - Apr 1 0:00 0 -
+Rule Peru 1994 only - Jan 1 0:00 1:00 S
+Rule Peru 1994 only - Apr 1 0:00 0 -
+Zone America/Lima -5:08:12 - LMT 1890
+ -5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
+ -5:00 Peru PE%sT # Peru Time
+Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
+ -2:00 - GST # South Georgia Time
+Zone America/Paramaribo -3:40:40 - LMT 1911
+ -3:40:52 - PMT 1935 # Paramaribo Mean Time
+ -3:40:36 - PMT 1945 Oct # The capital moved?
+ -3:30 - NEGT 1975 Nov 20 # Dutch Guiana Time
+ -3:30 - SRT 1984 Oct # Suriname Time
+ -3:00 - SRT
+Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
+ -4:00 - AST
+Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS
+Rule Uruguay 1924 1926 - Apr 1 0:00 0 -
+Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS
+Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS
+Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 -
+Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS
+Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 -
+Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS
+Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS
+Rule Uruguay 1942 only - Jan 1 0:00 0 -
+Rule Uruguay 1942 only - Dec 14 0:00 1:00 S
+Rule Uruguay 1943 only - Mar 14 0:00 0 -
+Rule Uruguay 1959 only - May 24 0:00 1:00 S
+Rule Uruguay 1959 only - Nov 15 0:00 0 -
+Rule Uruguay 1960 only - Jan 17 0:00 1:00 S
+Rule Uruguay 1960 only - Mar 6 0:00 0 -
+Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S
+Rule Uruguay 1965 only - Sep 26 0:00 0 -
+Rule Uruguay 1966 1967 - Oct 31 0:00 0 -
+Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS
+Rule Uruguay 1968 1970 - Dec 2 0:00 0 -
+Rule Uruguay 1972 only - Apr 24 0:00 1:00 S
+Rule Uruguay 1972 only - Aug 15 0:00 0 -
+Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS
+Rule Uruguay 1974 only - Dec 22 0:00 1:00 S
+Rule Uruguay 1976 only - Oct 1 0:00 0 -
+Rule Uruguay 1977 only - Dec 4 0:00 1:00 S
+Rule Uruguay 1978 only - Apr 1 0:00 0 -
+Rule Uruguay 1979 only - Oct 1 0:00 1:00 S
+Rule Uruguay 1980 only - May 1 0:00 0 -
+Rule Uruguay 1987 only - Dec 14 0:00 1:00 S
+Rule Uruguay 1988 only - Mar 14 0:00 0 -
+Rule Uruguay 1988 only - Dec 11 0:00 1:00 S
+Rule Uruguay 1989 only - Mar 12 0:00 0 -
+Rule Uruguay 1989 only - Oct 29 0:00 1:00 S
+Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 -
+Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S
+Rule Uruguay 1992 only - Oct 18 0:00 1:00 S
+Rule Uruguay 1993 only - Feb 28 0:00 0 -
+Rule Uruguay 2004 only - Sep 19 0:00 1:00 S
+Rule Uruguay 2005 only - Mar 27 2:00 0 -
+Rule Uruguay 2005 only - Oct 9 2:00 1:00 S
+Rule Uruguay 2006 only - Mar 12 2:00 0 -
+Rule Uruguay 2006 max - Oct Sun>=1 2:00 1:00 S
+Rule Uruguay 2007 max - Mar Sun>=8 2:00 0 -
+Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
+ -3:44:44 - MMT 1920 May 1 # Montevideo MT
+ -3:30 Uruguay UY%sT 1942 Dec 14 # Uruguay Time
+ -3:00 Uruguay UY%sT
+Zone America/Caracas -4:27:44 - LMT 1890
+ -4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
+ -4:30 - VET 1965 # Venezuela Time
+ -4:00 - VET 2007 Dec 9 03:00
+ -4:30 - VET
diff --git a/js/dojo/dojox/drawing.js b/js/dojo/dojox/drawing.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing"]){
+dojo._hasResource["dojox.drawing"]=true;
+dojo.provide("dojox.drawing");
+dojo.require("dojox.drawing._base");
+}
diff --git a/js/dojo/dojox/drawing/Drawing.js b/js/dojo/dojox/drawing/Drawing.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/Drawing.js
@@ -0,0 +1,231 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.Drawing"]){
+dojo._hasResource["dojox.drawing.Drawing"]=true;
+dojo.provide("dojox.drawing.Drawing");
+(function(){
+var _1=false;
+dojo.declare("dojox.drawing.Drawing",[],{ready:false,mode:"",width:0,height:0,constructor:function(_2,_3){
+var _4=dojo.attr(_3,"defaults");
+if(_4){
+dojox.drawing.defaults=dojo.getObject(_4);
+}
+this.defaults=dojox.drawing.defaults;
+this.id=_3.id;
+dojox.drawing.register(this,"drawing");
+this.mode=(_2.mode||dojo.attr(_3,"mode")||"").toLowerCase();
+var _5=dojo.contentBox(_3);
+this.width=_5.w;
+this.height=_5.h;
+this.util=dojox.drawing.util.common;
+this.util.register(this);
+this.keys=dojox.drawing.manager.keys;
+this.mouse=new dojox.drawing.manager.Mouse({util:this.util,keys:this.keys,id:this.mode=="ui"?"MUI":"mse"});
+this.mouse.setEventMode(this.mode);
+this.tools={};
+this.stencilTypes={};
+this.stencilTypeMap={};
+this.srcRefNode=_3;
+this.domNode=_3;
+var _6=dojo.attr(_3,"plugins");
+if(_6){
+this.plugins=eval(_6);
+}else{
+this.plugins=[];
+}
+this.widgetId=this.id;
+dojo.attr(this.domNode,"widgetId",this.widgetId);
+if(dijit&&dijit.registry){
+dijit.registry.add(this);
+}else{
+dijit.registry={objs:{},add:function(_7){
+this.objs[_7.id]=_7;
+}};
+dijit.byId=function(id){
+return dijit.registry.objs[id];
+};
+dijit.registry.add(this);
+}
+var _8=dojox.drawing.getRegistered("stencil");
+for(var nm in _8){
+this.registerTool(_8[nm].name);
+}
+var _9=dojox.drawing.getRegistered("tool");
+for(var nm in _9){
+this.registerTool(_9[nm].name);
+}
+var _a=dojox.drawing.getRegistered("plugin");
+for(var nm in _a){
+this.registerTool(_a[nm].name);
+}
+this._createCanvas();
+},_createCanvas:function(){
+this.canvas=new dojox.drawing.manager.Canvas({srcRefNode:this.domNode,util:this.util,mouse:this.mouse,callback:dojo.hitch(this,"onSurfaceReady")});
+this.initPlugins();
+},resize:function(_b){
+dojo.style(this.domNode,{width:_b.w+"px",height:_b.h+"px"});
+if(!this.canvas){
+this._createCanvas();
+}else{
+this.canvas.resize(_b.w,_b.h);
+}
+},startup:function(){
+},getShapeProps:function(_c,_d){
+return dojo.mixin({container:this.mode=="ui"||_d=="ui"?this.canvas.overlay.createGroup():this.canvas.surface.createGroup(),util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,drawingType:this.mode=="ui"||_d=="ui"?"ui":"stencil",style:this.defaults.copy()},_c||{});
+},addPlugin:function(_e){
+this.plugins.push(_e);
+if(this.canvas.surfaceReady){
+this.initPlugins();
+}
+},initPlugins:function(){
+if(!this.canvas||!this.canvas.surfaceReady){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.initPlugins();
+});
+return;
+}
+dojo.forEach(this.plugins,function(p,i){
+var _f=dojo.mixin({util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas},p.options||{});
+this.registerTool(p.name,dojo.getObject(p.name));
+try{
+this.plugins[i]=new this.tools[p.name](_f);
+}
+catch(e){
+console.error("Failed to initilaize plugin:\t"+p.name+". Did you require it?");
+}
+},this);
+this.plugins=[];
+_1=true;
+this.mouse.setCanvas();
+},onSurfaceReady:function(){
+this.ready=true;
+this.mouse.init(this.canvas.domNode);
+this.undo=new dojox.drawing.manager.Undo({keys:this.keys});
+this.anchors=new dojox.drawing.manager.Anchors({drawing:this,mouse:this.mouse,undo:this.undo,util:this.util});
+if(this.mode=="ui"){
+this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
+}else{
+this.stencils=new dojox.drawing.manager.Stencil({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,undo:this.undo,keys:this.keys,anchors:this.anchors});
+this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
+}
+if(dojox.gfx.renderer=="silverlight"){
+try{
+new dojox.drawing.plugins.drawing.Silverlight({util:this.util,mouse:this.mouse,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas});
+}
+catch(e){
+throw new Error("Attempted to install the Silverlight plugin, but it was not found.");
+}
+}
+dojo.forEach(this.plugins,function(p){
+p.onSurfaceReady&&p.onSurfaceReady();
+});
+},addUI:function(_10,_11){
+if(!this.ready){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.addUI(_10,_11);
+});
+return false;
+}
+if(_11&&!_11.data&&!_11.points){
+_11={data:_11};
+}
+if(!this.stencilTypes[_10]){
+if(_10!="tooltip"){
+console.warn("Not registered:",_10);
+}
+return null;
+}
+var s=this.uiStencils.register(new this.stencilTypes[_10](this.getShapeProps(_11,"ui")));
+return s;
+},addStencil:function(_12,_13){
+if(!this.ready){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.addStencil(_12,_13);
+});
+return false;
+}
+if(_13&&!_13.data&&!_13.points){
+_13={data:_13};
+}
+var s=this.stencils.register(new this.stencilTypes[_12](this.getShapeProps(_13)));
+this.currentStencil&&this.currentStencil.moveToFront();
+return s;
+},removeStencil:function(_14){
+this.stencils.unregister(_14);
+_14.destroy();
+},removeAll:function(){
+this.stencils.removeAll();
+},selectAll:function(){
+this.stencils.selectAll();
+},toSelected:function(_15){
+this.stencils.toSelected.apply(this.stencils,arguments);
+},exporter:function(){
+return this.stencils.exporter();
+},importer:function(_16){
+dojo.forEach(_16,function(m){
+this.addStencil(m.type,m);
+},this);
+},changeDefaults:function(_17){
+for(var nm in _17){
+for(var n in _17[nm]){
+this.defaults[nm][n]=_17[nm][n];
+}
+}
+this.unSetTool();
+this.setTool(this.currentType);
+},onRenderStencil:function(_18){
+this.stencils.register(_18);
+this.unSetTool();
+this.setTool(this.currentType);
+},onDeleteStencil:function(_19){
+this.stencils.unregister(_19);
+},registerTool:function(_1a){
+if(this.tools[_1a]){
+return;
+}
+var _1b=dojo.getObject(_1a);
+this.tools[_1a]=_1b;
+var _1c=this.util.abbr(_1a);
+this.stencilTypes[_1c]=_1b;
+this.stencilTypeMap[_1c]=_1a;
+},getConstructor:function(_1d){
+return this.stencilTypes[_1d];
+},setTool:function(_1e){
+if(this.mode=="ui"){
+return;
+}
+if(!this.canvas||!this.canvas.surface){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.setTool(_1e);
+});
+return;
+}
+if(this.currentStencil){
+this.unSetTool();
+}
+this.currentType=this.tools[_1e]?_1e:this.stencilTypeMap[_1e];
+try{
+this.currentStencil=new this.tools[this.currentType]({container:this.canvas.surface.createGroup(),util:this.util,mouse:this.mouse,keys:this.keys});
+this.currentStencil.connect(this.currentStencil,"onRender",this,"onRenderStencil");
+this.currentStencil.connect(this.currentStencil,"destroy",this,"onDeleteStencil");
+}
+catch(e){
+console.error("dojox.drawing.setTool Error:",e);
+console.error(this.currentType+" is not a constructor: ",this.tools[this.currentType]);
+}
+},unSetTool:function(){
+if(!this.currentStencil.created){
+this.currentStencil.destroy();
+}
+}});
+})();
+}
diff --git a/js/dojo/dojox/drawing/README b/js/dojo/dojox/drawing/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/README
@@ -0,0 +1,36 @@
+-------------------------------------------------------------------------------
+Drawing
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: August 22, 2009
+-------------------------------------------------------------------------------
+Project state: alpha
+ The code is very well tested with relatively few bugs. But it is also in a
+ state where APIs and methods can still change.
+-------------------------------------------------------------------------------
+Project author
+ Mike Wilcox anm8tr AT yahoo.com
+-------------------------------------------------------------------------------
+Project description
+
+Drawing is a project that sits on top of DojoX GFX and uses SVG and VML vector
+graphics to draw and display.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo.gfx
+-------------------------------------------------------------------------------
+Documentation
+
+http://docs.dojocampus.org/dojox/drawing
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojo/dojox/trunk/drawing.js
+http://svn.dojotoolkit.org/dojo/dojox/trunk/drawing/*
+
+Install into the following directory structure:
+/dojox/drawing/
+
+...which should be at the same level as your Dojo checkout.
diff --git a/js/dojo/dojox/drawing/_base.js b/js/dojo/dojox/drawing/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/_base.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing._base"]){
+dojo._hasResource["dojox.drawing._base"]=true;
+dojo.provide("dojox.drawing._base");
+dojo.experimental("dojox.drawing");
+dojo.require("dojox.drawing.manager._registry");
+dojo.require("dojox.gfx");
+dojo.require("dojox.drawing.Drawing");
+dojo.require("dojox.drawing.util.oo");
+dojo.require("dojox.drawing.util.common");
+dojo.require("dojox.drawing.defaults");
+dojo.require("dojox.drawing.manager.Canvas");
+dojo.require("dojox.drawing.manager.Undo");
+dojo.require("dojox.drawing.manager.keys");
+dojo.require("dojox.drawing.manager.Mouse");
+dojo.require("dojox.drawing.manager.Stencil");
+dojo.require("dojox.drawing.manager.StencilUI");
+dojo.require("dojox.drawing.manager.Anchors");
+dojo.require("dojox.drawing.stencil._Base");
+dojo.require("dojox.drawing.stencil.Line");
+dojo.require("dojox.drawing.stencil.Rect");
+dojo.require("dojox.drawing.stencil.Ellipse");
+dojo.require("dojox.drawing.stencil.Path");
+dojo.require("dojox.drawing.stencil.Text");
+dojo.require("dojox.drawing.stencil.Image");
+dojo.require("dojox.drawing.annotations.Label");
+dojo.require("dojox.drawing.annotations.Angle");
+dojo.require("dojox.drawing.annotations.Arrow");
+dojo.require("dojox.drawing.annotations.BoxShadow");
+}
diff --git a/js/dojo/dojox/drawing/annotations/Angle.js b/js/dojo/dojox/drawing/annotations/Angle.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/annotations/Angle.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Angle"]){
+dojo._hasResource["dojox.drawing.annotations.Angle"]=true;
+dojo.provide("dojox.drawing.annotations.Angle");
+dojox.drawing.annotations.Angle=dojox.drawing.util.oo.declare(function(_1){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.stencil.connectMult([["onDrag",this,"showAngle"],["onUp",this,"hideAngle"],["onTransformBegin",this,"showAngle"],["onTransform",this,"showAngle"],["onTransformEnd",this,"hideAngle"]]);
+},{type:"dojox.drawing.tools.custom",angle:0,showAngle:function(){
+if(!this.stencil.selected&&this.stencil.created){
+return;
+}
+if(this.stencil.getRadius()<this.stencil.minimumSize){
+this.hideAngle();
+return;
+}
+var _2=this.getAngleNode();
+var d=this.stencil.pointsToData();
+var pt=dojox.drawing.util.positioning.angle({x:d.x1,y:d.y1},{x:d.x2,y:d.y2});
+var sc=this.mouse.scrollOffset();
+var mx=this.stencil.getTransform();
+var dx=mx.dx/this.mouse.zoom;
+var dy=mx.dy/this.mouse.zoom;
+pt.x/=this.mouse.zoom;
+pt.y/=this.mouse.zoom;
+var x=this.stencil._offX+pt.x-sc.left+dx;
+var y=this.stencil._offY+pt.y-sc.top+dy;
+dojo.style(_2,{left:x+"px",top:y+"px",align:pt.align});
+_2.innerHTML=Math.ceil(this.stencil.getAngle());
+},getAngleNode:function(){
+if(!this._angleNode){
+this._angleNode=dojo.create("span",null,dojo.body());
+dojo.addClass(this._angleNode,"textAnnotation");
+dojo.style(this._angleNode,"opacity",1);
+}
+return this._angleNode;
+},hideAngle:function(){
+if(this._angleNode&&dojo.style(this._angleNode,"opacity")>0.9){
+dojo.fadeOut({node:this._angleNode,duration:500,onEnd:function(_3){
+dojo.destroy(_3);
+}}).play();
+this._angleNode=null;
+}
+}});
+}
diff --git a/js/dojo/dojox/drawing/annotations/Arrow.js b/js/dojo/dojox/drawing/annotations/Arrow.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/annotations/Arrow.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Arrow"]){
+dojo._hasResource["dojox.drawing.annotations.Arrow"]=true;
+dojo.provide("dojox.drawing.annotations.Arrow");
+dojo.require("dojox.drawing.stencil.Path");
+dojox.drawing.annotations.Arrow=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(_1){
+this.stencil.connectMult([[this.stencil,"select",this,"select"],[this.stencil,"deselect",this,"deselect"],[this.stencil,"render",this,"render"],[this.stencil,"onDelete",this,"destroy"]]);
+this.connect("onBeforeRender",this,function(){
+var o=this.stencil.points[this.idx1];
+var c=this.stencil.points[this.idx2];
+if(this.stencil.getRadius()>=this.minimumSize){
+this.points=this.arrowHead(c.x,c.y,o.x,o.y,this.style);
+}else{
+this.points=[];
+}
+});
+},{idx1:0,idx2:1,subShape:true,minimumSize:30,arrowHead:function(x1,y1,x2,y2,_2){
+var _3={start:{x:x1,y:y1},x:x2,y:y2};
+var _4=this.util.angle(_3);
+var _5=this.util.length(_3);
+var al=_2.arrows.length;
+var aw=_2.arrows.width/2;
+if(_5<al){
+al=_5/2;
+}
+var p1=this.util.pointOnCircle(x2,y2,-al,_4-aw);
+var p2=this.util.pointOnCircle(x2,y2,-al,_4+aw);
+return [{x:x2,y:y2},p1,p2];
+}});
+}
diff --git a/js/dojo/dojox/drawing/annotations/BoxShadow.js b/js/dojo/dojox/drawing/annotations/BoxShadow.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/annotations/BoxShadow.js
@@ -0,0 +1,122 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.BoxShadow"]){
+dojo._hasResource["dojox.drawing.annotations.BoxShadow"]=true;
+dojo.provide("dojox.drawing.annotations.BoxShadow");
+dojox.drawing.annotations.BoxShadow=dojox.drawing.util.oo.declare(function(_1){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.style=_1.stencil.style;
+var _2={size:6,mult:4,alpha:0.05,place:"BR",color:"#646464"};
+delete _1.stencil;
+this.options=dojo.mixin(_2,_1);
+this.options.color=new dojo.Color(this.options.color);
+this.options.color.a=this.options.alpha;
+switch(this.stencil.shortType){
+case "image":
+case "rect":
+this.method="createForRect";
+break;
+case "ellipse":
+this.method="createForEllipse";
+break;
+case "line":
+this.method="createForLine";
+break;
+case "path":
+this.method="createForPath";
+break;
+default:
+console.warn("A shadow cannot be made for Stencil type ",this.stencil.type);
+}
+if(this.method){
+this.render();
+this.stencil.connectMult([[this.stencil,"onTransform",this,"onTransform"],[this.stencil,"render",this,"onRender"],[this.stencil,"onDelete",this,"destroy"]]);
+}
+},{showing:true,render:function(){
+if(this.container){
+this.container.removeShape();
+}
+this.container=this.stencil.container.createGroup();
+this.container.moveToBack();
+var o=this.options,_3=o.size,_4=o.mult,d=this.method=="createForPath"?this.stencil.points:this.stencil.data,r=d.r||1,p=o.place,c=o.color;
+this[this.method](o,_3,_4,d,r,p,c);
+},hide:function(){
+if(this.showing){
+this.showing=false;
+this.container.removeShape();
+}
+},show:function(){
+if(!this.showing){
+this.showing=true;
+this.stencil.container.add(this.container);
+}
+},createForPath:function(o,_5,_6,_7,r,p,c){
+var sh=_5*_6/4,_8=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,_9=/R/.test(p)?sh:/L/.test(p)?sh*-1:0;
+var _a=true;
+for(var i=1;i<=_5;i++){
+var _b=i*_6;
+if(dojox.gfx.renderer=="svg"){
+var _c=[];
+dojo.forEach(_7,function(o,i){
+if(i==0){
+_c.push("M "+(o.x+_9)+" "+(o.y+_8));
+}else{
+var _d=o.t||"L ";
+_c.push(_d+(o.x+_9)+" "+(o.y+_8));
+}
+},this);
+if(_a){
+_c.push("Z");
+}
+this.container.createPath(_c.join(", ")).setStroke({width:_b,color:c,cap:"round"});
+}else{
+var _e=this.container.createPath({}).setStroke({width:_b,color:c,cap:"round"});
+dojo.forEach(this.points,function(o,i){
+if(i==0||o.t=="M"){
+_e.moveTo(o.x+_9,o.y+_8);
+}else{
+if(o.t=="Z"){
+_a&&_e.closePath();
+}else{
+_e.lineTo(o.x+_9,o.y+_8);
+}
+}
+},this);
+_a&&_e.closePath();
+}
+}
+},createForLine:function(o,_f,_10,d,r,p,c){
+var sh=_f*_10/4,shy=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,shx=/R/.test(p)?sh:/L/.test(p)?sh*-1:0;
+for(var i=1;i<=_f;i++){
+var _11=i*_10;
+this.container.createLine({x1:d.x1+shx,y1:d.y1+shy,x2:d.x2+shx,y2:d.y2+shy}).setStroke({width:_11,color:c,cap:"round"});
+}
+},createForEllipse:function(o,_12,_13,d,r,p,c){
+var sh=_12*_13/8,shy=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,shx=/R/.test(p)?sh*0.8:/L/.test(p)?sh*-0.8:0;
+for(var i=1;i<=_12;i++){
+var _14=i*_13;
+this.container.createEllipse({cx:d.cx+shx,cy:d.cy+shy,rx:d.rx-sh,ry:d.ry-sh,r:r}).setStroke({width:_14,color:c});
+}
+},createForRect:function(o,_15,_16,d,r,p,c){
+var sh=_15*_16/2,shy=/B/.test(p)?sh:/T/.test(p)?0:sh/2,shx=/R/.test(p)?sh:/L/.test(p)?0:sh/2;
+for(var i=1;i<=_15;i++){
+var _17=i*_16;
+this.container.createRect({x:d.x+shx,y:d.y+shy,width:d.width-sh,height:d.height-sh,r:r}).setStroke({width:_17,color:c});
+}
+},onTransform:function(){
+this.render();
+},onRender:function(){
+this.container.moveToBack();
+},destroy:function(){
+if(this.container){
+this.container.removeShape();
+}
+}});
+}
diff --git a/js/dojo/dojox/drawing/annotations/Label.js b/js/dojo/dojox/drawing/annotations/Label.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/annotations/Label.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Label"]){
+dojo._hasResource["dojox.drawing.annotations.Label"]=true;
+dojo.provide("dojox.drawing.annotations.Label");
+dojo.require("dojox.drawing.stencil.Text");
+dojox.drawing.annotations.Label=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Text,function(_1){
+this.master=_1.stencil;
+this.labelPosition=_1.labelPosition||"BR";
+if(dojo.isFunction(this.labelPosition)){
+this.setLabel=this.setLabelCustom;
+}
+this.setLabel(_1.text||"");
+this.connect(this.master,"onTransform",this,"setLabel");
+this.connect(this.master,"destroy",this,"destroy");
+if(this.style.labelSameColor){
+this.connect(this.master,"attr",this,"beforeAttr");
+}
+},{_align:"start",setLabelCustom:function(_2){
+var d=dojo.hitch(this.master,this.labelPosition)();
+this.setData({x:d.x,y:d.y,width:d.w||this.style.text.minWidth,height:d.h||this._lineHeight});
+if(_2&&!_2.split){
+_2=null;
+}
+this.render(_2);
+},setLabel:function(_3){
+var x,y,_4=this.master.getBounds();
+if(/B/.test(this.labelPosition)){
+y=_4.y2-this._lineHeight;
+}else{
+y=_4.y1;
+}
+if(/R/.test(this.labelPosition)){
+x=_4.x2;
+}else{
+y=_4.y1;
+this._align="end";
+}
+if(!this.labelWidth||(_3&&_3.split&&_3!=this._text)){
+this.setData({x:x,y:y,height:this._lineHeight,width:this.style.text.minWidth});
+this.labelWidth=this.style.text.minWidth;
+this.render(_3);
+}else{
+this.setData({x:x,y:y,height:this.data.height,width:this.data.width});
+this.render();
+}
+},beforeAttr:function(_5,_6){
+if(_6!==undefined){
+var k=_5;
+_5={};
+_5[k]=_6;
+}
+delete _5.x;
+delete _5.y;
+delete _5.width;
+delete _5.height;
+this.attr(_5);
+!this.created&&this.render();
+}});
+}
diff --git a/js/dojo/dojox/drawing/defaults.js b/js/dojo/dojox/drawing/defaults.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/defaults.js
@@ -0,0 +1,42 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.defaults"]){
+dojo._hasResource["dojox.drawing.defaults"]=true;
+dojo.provide("dojox.drawing.defaults");
+dojox.drawing.defaults={current:null,currentHit:null,angleSnap:1,renderHitLines:true,renderHitLayer:true,labelSameColor:false,useSelectedStyle:true,norm:{width:1,color:"#000000",style:"Solid",cap:"round",fill:"#CCCCCC"},selected:{width:6,color:"#00FF00"},highlighted:{width:6,color:"#FF00FF",style:"Solid",cap:"round",fill:"#E11EBB"},disabled:{width:1,color:"#666666",style:"solid",cap:"round",fill:"#cccccc"},hitNorm:{width:6,color:{r:0,g:255,b:255,a:0},style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},hitSelected:{width:6,color:"#FF9900",style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},hitHighlighted:{width:6,color:"#FFFF00",style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},anchors:{size:10,width:2,color:"#999",style:"solid",fill:"#fff",cap:"square",minSize:10,marginZero:5},arrows:{length:30,width:16},text:{minWidth:100,deleteEmptyCreate:true,deleteEmptyModify:true,pad:3,size:"18px",family:"sans-serif",weight:"normal",color:"#000000"},textDisabled:{size:"18px",family:"sans-serif",weight:"normal",color:"#cccccc"},textMode:{create:{width:2,style:"dotted",color:"#666666",fill:null},edit:{width:1,style:"dashed",color:"#666",fill:null}},button:{norm:{"color":"#cccccc","fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0.5,color:"#ffffff"},{offset:1,color:"#e5e5e5"}]}},over:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0.5,color:"#ffffff"},{offset:1,color:"#e1eaf5"}]},"color":"#92a0b3"},down:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0,color:"#e1eaf5"},{offset:1,color:"#ffffff"}]},"color":"#92a0b3"},selected:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0,color:"#97b4bf"},{offset:1,color:"#c8dae1"}]},"color":"#92a0b3"},icon:{norm:{fill:null,color:"#92a0b3"},selected:{fill:"#ffffff",color:"#92a0b3"}}},copy:function(){
+var _1=function(_2){
+if(typeof (_2)!="object"||_2===null||_2===undefined){
+return _2;
+}
+var o;
+if(_2.push){
+o=[];
+for(var i=0;i<_2.length;i++){
+o.push(_1(_2[i]));
+}
+return o;
+}
+o={};
+for(var nm in _2){
+if(nm!="copy"){
+if(typeof (_2[nm])=="object"){
+o[nm]=_1(_2[nm]);
+}else{
+o[nm]=_2[nm];
+}
+}
+}
+return o;
+};
+var o=_1(this);
+o.current=o.norm;
+o.currentHit=o.hitNorm;
+o.currentText=o.text;
+return o;
+}};
+}
diff --git a/js/dojo/dojox/drawing/library/icons.js b/js/dojo/dojox/drawing/library/icons.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/library/icons.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.library.icons"]){
+dojo._hasResource["dojox.drawing.library.icons"]=true;
+dojo.provide("dojox.drawing.library.icons");
+dojox.drawing.library.icons={line:{type:"line",borderWidth:1,x1:20,y1:20,x2:80,y2:80},ellipse:{type:"ellipse",borderWidth:1,cx:50,cy:50,rx:35,ry:20},rect:{type:"rect",borderWidth:1,x:10,y:30,width:80,height:40},triangle:{type:"path",borderWidth:1,closePath:true,points:[{x:50,y:10},{x:10,y:90},{x:90,y:90}]},path:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:80},{x:26,y:20},{x:80,y:32},{x:32,y:50},{x:56,y:62}]},arrow:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:20},{x:80,y:80},{t:"M",x:74,y:56},{x:80,y:80},{x:56,y:74}]},textBlock:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:20},{x:80,y:20},{x:80,y:38},{x:80,y:38},{x:74,y:32},{x:68,y:26},{x:56,y:20},{x:56,y:68},{x:56,y:74},{x:62,y:80},{x:68,y:80},{x:68,y:80},{x:32,y:80},{x:32,y:80},{x:38,y:80},{x:44,y:74},{x:44,y:68},{x:44,y:20},{x:32,y:26},{x:26,y:32},{x:20,y:38},{x:20,y:38}]},axes:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:32},{x:26,y:20},{x:32,y:32},{t:"M",x:26,y:20},{x:26,y:74},{x:80,y:74},{t:"M",x:68,y:68},{x:80,y:74},{x:68,y:80}]},vector:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:80},{x:80,y:20},{t:"M",x:62,y:26},{x:80,y:20},{x:73,y:40},{t:"M",x:56,y:56},{x:62,y:68},{x:62,y:74}]},pan:{type:"path",borderWidth:1,closePath:true,points:[{x:38,y:80},{x:26,y:68},{x:20,y:50},{x:26,y:44},{x:26,y:44},{x:38,y:56},{x:32,y:32},{x:32,y:26},{x:38,y:26},{x:44,y:44},{x:44,y:20},{x:50,y:20},{x:56,y:20},{x:56,y:44},{x:56,y:26},{x:62,y:26},{x:68,y:26},{x:68,y:50},{x:68,y:32},{x:74,y:32},{x:80,y:38},{x:80,y:50},{x:74,y:68},{x:68,y:80}]},plus:{type:"path",borderWidth:3,closePath:false,points:[{x:50,y:20},{x:50,y:80},{t:"M",x:20,y:50},{x:80,y:50}]},zoomIn:{type:"path",borderWidth:3,closePath:false,points:[{x:50,y:20},{x:50,y:80},{t:"M",x:20,y:50},{x:80,y:50}]},zoomOut:{type:"path",borderWidth:3,closePath:false,points:[{x:20,y:50},{x:80,y:50}]},zoom100:{type:"text",text:"100%"},iconize:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:38},{x:32,y:26},{x:44,y:26},{x:56,y:38},{x:56,y:50},{x:44,y:62},{x:32,y:62},{x:20,y:56},{t:"Z"},{t:"M",x:38,y:44},{x:68,y:44},{x:68,y:80},{x:38,y:80},{t:"Z"},{t:"M",x:56,y:62},{x:68,y:20},{x:80,y:62}]},pencil:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:80},{x:26,y:68},{x:68,y:20},{x:80,y:20},{x:80,y:32},{x:38,y:74},{t:"Z"},{t:"M",x:62,y:32},{x:68,y:26},{x:74,y:26},{x:74,y:32},{x:68,y:38},{x:68,y:32},{t:"Z"},{t:"M",x:56,y:38},{x:62,y:38},{x:32,y:68},{x:32,y:68}]}};
+}
diff --git a/js/dojo/dojox/drawing/manager/Anchors.js b/js/dojo/dojox/drawing/manager/Anchors.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/Anchors.js
@@ -0,0 +1,236 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Anchors"]){
+dojo._hasResource["dojox.drawing.manager.Anchors"]=true;
+dojo.provide("dojox.drawing.manager.Anchors");
+dojox.drawing.manager.Anchors=dojox.drawing.util.oo.declare(function(_1){
+this.mouse=_1.mouse;
+this.undo=_1.undo;
+this.util=_1.util;
+this.drawing=_1.drawing;
+this.items={};
+},{onAddAnchor:function(_2){
+},onReset:function(_3){
+var st=this.util.byId("drawing").stencils;
+st.onDeselect(_3);
+st.onSelect(_3);
+},onRenderStencil:function(){
+for(var nm in this.items){
+dojo.forEach(this.items[nm].anchors,function(a){
+a.shape.moveToFront();
+});
+}
+},onTransformPoint:function(_4){
+var _5=this.items[_4.stencil.id].anchors;
+var _6=this.items[_4.stencil.id].item;
+var _7=[];
+dojo.forEach(_5,function(a,i){
+if(_4.id==a.id||_4.stencil.anchorType!="group"){
+}else{
+if(_4.org.y==a.org.y){
+a.setPoint({dx:0,dy:_4.shape.getTransform().dy-a.shape.getTransform().dy});
+}else{
+if(_4.org.x==a.org.x){
+a.setPoint({dx:_4.shape.getTransform().dx-a.shape.getTransform().dx,dy:0});
+}
+}
+a.shape.moveToFront();
+}
+var mx=a.shape.getTransform();
+_7.push({x:mx.dx+a.org.x,y:mx.dy+a.org.y});
+if(a.point.t){
+_7[_7.length-1].t=a.point.t;
+}
+},this);
+_6.setPoints(_7);
+_6.onTransform(_4);
+this.onRenderStencil();
+},onAnchorUp:function(_8){
+},onAnchorDown:function(_9){
+},onAnchorDrag:function(_a){
+},onChangeStyle:function(_b){
+for(var nm in this.items){
+dojo.forEach(this.items[nm].anchors,function(a){
+a.shape.moveToFront();
+});
+}
+},add:function(_c){
+this.items[_c.id]={item:_c,anchors:[]};
+if(_c.anchorType=="none"){
+return;
+}
+var _d=_c.points;
+dojo.forEach(_d,function(p,i){
+if(p.noAnchor){
+return;
+}
+if(i==0||i==_c.points.length-1){
+if(i==0){
+}else{
+}
+}
+var a=new dojox.drawing.manager.Anchor({stencil:_c,point:p,pointIdx:i,mouse:this.mouse,util:this.util});
+this.items[_c.id]._cons=[dojo.connect(a,"onRenderStencil",this,"onRenderStencil"),dojo.connect(a,"reset",this,"onReset"),dojo.connect(a,"onAnchorUp",this,"onAnchorUp"),dojo.connect(a,"onAnchorDown",this,"onAnchorDown"),dojo.connect(a,"onAnchorDrag",this,"onAnchorDrag"),dojo.connect(a,"onTransformPoint",this,"onTransformPoint"),dojo.connect(_c,"onChangeStyle",this,"onChangeStyle")];
+this.items[_c.id].anchors.push(a);
+this.onAddAnchor(a);
+},this);
+if(_c.shortType=="path"){
+var f=_d[0],l=_d[_d.length-1],a=this.items[_c.id].anchors;
+if(f.x==l.x&&f.y==l.y){
+console.warn("LINK ANVHROS",a[0],a[a.length-1]);
+a[0].linkedAnchor=a[a.length-1];
+a[a.length-1].linkedAnchor=a[0];
+}
+}
+if(_c.anchorType=="group"){
+dojo.forEach(this.items[_c.id].anchors,function(_e){
+dojo.forEach(this.items[_c.id].anchors,function(a){
+if(_e.id!=a.id){
+if(_e.org.y==a.org.y){
+_e.x_anchor=a;
+}else{
+if(_e.org.x==a.org.x){
+_e.y_anchor=a;
+}
+}
+}
+},this);
+},this);
+}
+},remove:function(_f){
+if(!this.items[_f.id]){
+return;
+}
+dojo.forEach(this.items[_f.id].anchors,function(a){
+a.destroy();
+});
+dojo.forEach(this.items[_f.id]._cons,dojo.disconnect,dojo);
+this.items[_f.id].anchors=null;
+delete this.items[_f.id];
+}});
+dojox.drawing.manager.Anchor=dojox.drawing.util.oo.declare(function(_10){
+this.defaults=dojox.drawing.defaults.copy();
+this.mouse=_10.mouse;
+this.point=_10.point;
+this.pointIdx=_10.pointIdx;
+this.util=_10.util;
+this.id=_10.id||this.util.uid("anchor");
+this.org=dojo.mixin({},this.point);
+this.stencil=_10.stencil;
+if(this.stencil.anchorPositionCheck){
+this.anchorPositionCheck=dojo.hitch(this.stencil,this.stencil.anchorPositionCheck);
+}
+this._zCon=dojo.connect(this.mouse,"setZoom",this,"render");
+this.render();
+this.connectMouse();
+},{y_anchor:null,x_anchor:null,render:function(){
+this.shape&&this.shape.removeShape();
+var d=this.defaults.anchors,z=this.mouse.zoom,b=d.width*z,s=d.size*z,p=s/2,_11={width:b,style:d.style,color:d.color,cap:d.cap};
+var _12={x:this.point.x-p,y:this.point.y-p,width:s,height:s};
+this.shape=this.stencil.container.createRect(_12).setStroke(_11).setFill(d.fill);
+this.shape.setTransform({dx:0,dy:0});
+this.util.attr(this,"drawingType","anchor");
+this.util.attr(this,"id",this.id);
+},onRenderStencil:function(_13){
+},onTransformPoint:function(_14){
+},onAnchorDown:function(obj){
+this.selected=obj.id==this.id;
+},onAnchorUp:function(obj){
+this.selected=false;
+this.stencil.onTransformEnd(this);
+},onAnchorDrag:function(obj){
+if(this.selected){
+var mx=this.shape.getTransform();
+var pmx=this.shape.getParent().getParent().getTransform();
+var _15=this.defaults.anchors.marginZero;
+var _16=pmx.dx+this.org.x,_17=pmx.dy+this.org.y,x=obj.x-_16;
+y=obj.y-_17;
+s=this.defaults.anchors.minSize;
+var _18,_19,_1a,_1b;
+var chk=this.anchorPositionCheck(x,y,this);
+if(chk.x<0){
+console.warn("X<0 Shift");
+while(this.anchorPositionCheck(x,y,this).x<0){
+this.shape.getParent().getParent().applyTransform({dx:2,dy:0});
+}
+}
+if(chk.y<0){
+console.warn("Y<0 Shift");
+while(this.anchorPositionCheck(x,y,this).y<0){
+this.shape.getParent().getParent().applyTransform({dx:0,dy:2});
+}
+}
+if(this.y_anchor){
+if(this.org.y>this.y_anchor.org.y){
+_1a=this.y_anchor.point.y+s-this.org.y;
+_1b=Infinity;
+if(y<_1a){
+y=_1a;
+}
+}else{
+_1a=-_17+_15;
+_1b=this.y_anchor.point.y-s-this.org.y;
+if(y<_1a){
+y=_1a;
+}else{
+if(y>_1b){
+y=_1b;
+}
+}
+}
+}else{
+_1a=-_17+_15;
+if(y<_1a){
+y=_1a;
+}
+}
+if(this.x_anchor){
+if(this.org.x>this.x_anchor.org.x){
+_18=this.x_anchor.point.x+s-this.org.x;
+_19=Infinity;
+if(x<_18){
+x=_18;
+}
+}else{
+_18=-_16+_15;
+_19=this.x_anchor.point.x-s-this.org.x;
+if(x<_18){
+x=_18;
+}else{
+if(x>_19){
+x=_19;
+}
+}
+}
+}else{
+_18=-_16+_15;
+if(x<_18){
+x=_18;
+}
+}
+this.shape.setTransform({dx:x,dy:y});
+if(this.linkedAnchor){
+this.linkedAnchor.shape.setTransform({dx:x,dy:y});
+}
+this.onTransformPoint(this);
+}
+},anchorPositionCheck:function(x,y,_1c){
+return {x:1,y:1};
+},setPoint:function(mx){
+this.shape.applyTransform(mx);
+},connectMouse:function(){
+this._mouseHandle=this.mouse.register(this);
+},disconnectMouse:function(){
+this.mouse.unregister(this._mouseHandle);
+},reset:function(_1d){
+},destroy:function(){
+dojo.disconnect(this._zCon);
+this.disconnectMouse();
+this.shape.removeShape();
+}});
+}
diff --git a/js/dojo/dojox/drawing/manager/Canvas.js b/js/dojo/dojox/drawing/manager/Canvas.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/Canvas.js
@@ -0,0 +1,87 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Canvas"]){
+dojo._hasResource["dojox.drawing.manager.Canvas"]=true;
+dojo.provide("dojox.drawing.manager.Canvas");
+(function(){
+dojox.drawing.manager.Canvas=dojox.drawing.util.oo.declare(function(_1){
+dojo.mixin(this,_1);
+var _2=dojo.contentBox(this.srcRefNode);
+this.height=this.parentHeight=_2.h;
+this.width=this.parentWidth=_2.w;
+this.domNode=dojo.create("div",{id:"canvasNode"},this.srcRefNode);
+dojo.style(this.domNode,{width:this.width,height:"auto"});
+dojo.setSelectable(this.domNode,false);
+this.id=this.id||this.util.uid("surface");
+this.gfxSurface=dojox.gfx.createSurface(this.domNode,this.width,this.height);
+this.gfxSurface.whenLoaded(this,function(){
+setTimeout(dojo.hitch(this,function(){
+this.surfaceReady=true;
+if(dojo.isIE){
+}else{
+if(dojox.gfx.renderer=="silverlight"){
+this.id=this.domNode.firstChild.id;
+}else{
+}
+}
+this.underlay=this.gfxSurface.createGroup();
+this.surface=this.gfxSurface.createGroup();
+this.overlay=this.gfxSurface.createGroup();
+this.surface.setTransform({dx:0,dy:0,xx:1,yy:1});
+this.gfxSurface.getDimensions=dojo.hitch(this.gfxSurface,"getDimensions");
+if(_1.callback){
+_1.callback(this.domNode);
+}
+}),500);
+});
+this._mouseHandle=this.mouse.register(this);
+},{zoom:1,useScrollbars:true,baseClass:"drawingCanvas",resize:function(_3,_4){
+this.parentWidth=_3;
+this.parentHeight=_4;
+this.setDimensions(_3,_4);
+},setDimensions:function(_5,_6,_7,_8){
+var sw=this.getScrollWidth();
+this.width=Math.max(_5,this.parentWidth);
+this.height=Math.max(_6,this.parentHeight);
+if(this.height>this.parentHeight){
+this.width-=sw;
+}
+if(this.width>this.parentWidth){
+this.height-=sw;
+}
+this.gfxSurface.setDimensions(this.width,this.height);
+this.domNode.parentNode.scrollTop=_8||0;
+this.domNode.parentNode.scrollLeft=_7||0;
+if(this.useScrollbars){
+dojo.style(this.domNode.parentNode,{overflowY:this.height>this.parentHeight?"scroll":"hidden",overflowX:this.width>this.parentWidth?"scroll":"hidden"});
+}else{
+dojo.style(this.domNode.parentNode,{overflowY:"hidden",overflowX:"hidden"});
+}
+},setZoom:function(_9){
+this.zoom=_9;
+this.surface.setTransform({xx:_9,yy:_9});
+this.setDimensions(this.width*_9,this.height*_9);
+},onScroll:function(){
+},getScrollOffset:function(){
+return {top:this.domNode.parentNode.scrollTop,left:this.domNode.parentNode.scrollLeft};
+},getScrollWidth:function(){
+var p=dojo.create("div");
+p.innerHTML="<div style=\"width:50px;height:50px;overflow:hidden;position:absolute;top:0px;left:-1000px;\"><div style=\"height:100px;\"></div>";
+var _a=p.firstChild;
+dojo.body().appendChild(_a);
+var _b=dojo.contentBox(_a).h;
+dojo.style(_a,"overflow","scroll");
+var _c=_b-dojo.contentBox(_a).h;
+dojo.destroy(_a);
+this.getScrollWidth=function(){
+return _c;
+};
+return _c;
+}});
+})();
+}
diff --git a/js/dojo/dojox/drawing/manager/Mouse.js b/js/dojo/dojox/drawing/manager/Mouse.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/Mouse.js
@@ -0,0 +1,195 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Mouse"]){
+dojo._hasResource["dojox.drawing.manager.Mouse"]=true;
+dojo.provide("dojox.drawing.manager.Mouse");
+dojox.drawing.manager.Mouse=dojox.drawing.util.oo.declare(function(_1){
+this.util=_1.util;
+this.keys=_1.keys;
+this.id=_1.id||this.util.uid("mouse");
+this.currentNodeId="";
+this.registered={};
+},{doublClickSpeed:400,_lastx:0,_lasty:0,__reg:0,_downOnCanvas:false,init:function(_2){
+this.container=_2;
+this.setCanvas();
+var c;
+var _3=false;
+dojo.connect(this.container,"rightclick",this,function(_4){
+console.warn("RIGHTCLICK");
+});
+dojo.connect(document.body,"mousedown",this,function(_5){
+});
+dojo.connect(this.container,"mousedown",this,function(_6){
+this.down(_6);
+_3=true;
+c=dojo.connect(document,"mousemove",this,"drag");
+});
+dojo.connect(document,"mouseup",this,function(_7){
+dojo.disconnect(c);
+_3=false;
+this.up(_7);
+});
+dojo.connect(document,"mousemove",this,function(_8){
+if(!_3){
+this.move(_8);
+}
+});
+dojo.connect(this.keys,"onEsc",this,function(_9){
+this._dragged=false;
+});
+},setCanvas:function(){
+var _a=dojo.coords(this.container.parentNode);
+this.origin=dojo.clone(_a);
+},scrollOffset:function(){
+return {top:this.container.parentNode.scrollTop,left:this.container.parentNode.scrollLeft};
+},register:function(_b){
+var _c=_b.id||"reg_"+(this.__reg++);
+if(!this.registered[_c]){
+this.registered[_c]=_b;
+}
+return _c;
+},unregister:function(_d){
+if(!this.registered[_d]){
+return;
+}
+delete this.registered[_d];
+},_broadcastEvent:function(_e,_f){
+for(var nm in this.registered){
+if(this.registered[nm][_e]){
+this.registered[nm][_e](_f);
+}
+}
+},onDown:function(obj){
+this._broadcastEvent(this.eventName("down"),obj);
+},onDrag:function(obj){
+var nm=this.eventName("drag");
+if(this._selected&&nm=="onDrag"){
+nm="onStencilDrag";
+}
+this._broadcastEvent(nm,obj);
+},onMove:function(obj){
+this._broadcastEvent("onMove",obj);
+},onOver:function(obj){
+this._broadcastEvent("onOver",obj);
+},onOut:function(obj){
+this._broadcastEvent("onOut",obj);
+},onUp:function(obj){
+var nm=this.eventName("up");
+if(nm=="onStencilUp"){
+this._selected=true;
+}else{
+if(this._selected&&nm=="onUp"){
+nm="onStencilUp";
+this._selected=false;
+}
+}
+this._broadcastEvent(nm,obj);
+if(dojox.gfx.renderer=="silverlight"){
+return;
+}
+this._clickTime=new Date().getTime();
+if(this._lastClickTime){
+if(this._clickTime-this._lastClickTime<this.doublClickSpeed){
+var dnm=this.eventName("doubleClick");
+console.warn("DOUBLE CLICK",dnm,obj);
+this._broadcastEvent(dnm,obj);
+}else{
+}
+}
+this._lastClickTime=this._clickTime;
+},zoom:1,setZoom:function(_10){
+this.zoom=1/_10;
+},setEventMode:function(_11){
+this.mode=_11?"on"+_11.charAt(0).toUpperCase()+_11.substring(1):"";
+},eventName:function(_12){
+_12=_12.charAt(0).toUpperCase()+_12.substring(1);
+if(this.mode){
+if(this.mode=="onPathEdit"){
+return "on"+_12;
+}
+if(this.mode=="onUI"){
+}
+return this.mode+_12;
+}else{
+var dt=!this.drawingType||this.drawingType=="surface"||this.drawingType=="canvas"?"":this.drawingType;
+var t=!dt?"":dt.charAt(0).toUpperCase()+dt.substring(1);
+return "on"+t+_12;
+}
+},up:function(evt){
+this.onUp(this.create(evt));
+},down:function(evt){
+evt.preventDefault();
+dojo.stopEvent(evt);
+this._downOnCanvas=true;
+var sc=this.scrollOffset();
+var dim=this._getXY(evt);
+this._lastpagex=dim.x;
+this._lastpagey=dim.y;
+var o=this.origin;
+var x=dim.x-o.x;
+var y=dim.y-o.y;
+x*=this.zoom;
+y*=this.zoom;
+x+=sc.left*this.zoom;
+y+=sc.top*this.zoom;
+var _13=x>=0&&y>=0&&x<=o.w&&y<=o.h;
+o.startx=x;
+o.starty=y;
+this._lastx=x;
+this._lasty=y;
+this.drawingType=this.util.attr(evt,"drawingType")||"";
+var id=this._getId(evt);
+this.onDown({mid:this.id,x:x,y:y,pageX:dim.x,pageY:dim.y,withinCanvas:_13,id:id});
+},over:function(obj){
+this.onOver(obj);
+},out:function(obj){
+this.onOut(obj);
+},move:function(evt){
+var obj=this.create(evt);
+if(this.id=="MUI"){
+}
+if(obj.id!=this.currentNodeId){
+var _14={};
+for(var nm in obj){
+_14[nm]=obj[nm];
+}
+_14.id=this.currentNodeId;
+this.currentNodeId&&this.out(_14);
+obj.id&&this.over(obj);
+this.currentNodeId=obj.id;
+}
+this.onMove(obj);
+},drag:function(evt){
+this.onDrag(this.create(evt,true));
+},create:function(evt,_15){
+var sc=this.scrollOffset();
+var dim=this._getXY(evt);
+var _16=dim.x;
+var _17=dim.y;
+var x=dim.x-this.origin.x;
+var y=dim.y-this.origin.y;
+var o=this.origin;
+x+=sc.left;
+y+=sc.top;
+x*=this.zoom;
+y*=this.zoom;
+var _18=x>=0&&y>=0&&x<=o.w&&y<=o.h;
+var id=_18?this._getId(evt,_15):"";
+var ret={mid:this.id,x:x,y:y,pageX:dim.x,pageY:dim.y,page:{x:dim.x,y:dim.y},orgX:o.x,orgY:o.y,last:{x:this._lastx,y:this._lasty},start:{x:this.origin.startx,y:this.origin.starty},move:{x:_16-this._lastpagex,y:_17-this._lastpagey},scroll:sc,id:id,withinCanvas:_18};
+this._lastx=x;
+this._lasty=y;
+this._lastpagex=_16;
+this._lastpagey=_17;
+dojo.stopEvent(evt);
+return ret;
+},_getId:function(evt,_19){
+return this.util.attr(evt,"id",null,_19);
+},_getXY:function(evt){
+return {x:evt.pageX,y:evt.pageY};
+}});
+}
diff --git a/js/dojo/dojox/drawing/manager/Stencil.js b/js/dojo/dojox/drawing/manager/Stencil.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/Stencil.js
@@ -0,0 +1,312 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Stencil"]){
+dojo._hasResource["dojox.drawing.manager.Stencil"]=true;
+dojo.provide("dojox.drawing.manager.Stencil");
+(function(){
+var _1,_2;
+dojox.drawing.manager.Stencil=dojox.drawing.util.oo.declare(function(_3){
+_1=_3.surface;
+this.canvas=_3.canvas;
+this.defaults=dojox.drawing.defaults.copy();
+this.undo=_3.undo;
+this.mouse=_3.mouse;
+this.keys=_3.keys;
+this.anchors=_3.anchors;
+this.stencils={};
+this.selectedStencils={};
+this._mouseHandle=this.mouse.register(this);
+dojo.connect(this.keys,"onArrow",this,"onArrow");
+dojo.connect(this.keys,"onEsc",this,"deselect");
+dojo.connect(this.keys,"onDelete",this,"onDelete");
+},{_dragBegun:false,_wasDragged:false,_secondClick:false,_isBusy:false,register:function(_4){
+if(_4.isText&&!_4.editMode&&_4.deleteEmptyCreate&&!_4.getText()){
+console.warn("EMPTY CREATE DELETE",_4);
+_4.destroy();
+return false;
+}
+this.stencils[_4.id]=_4;
+if(_4.execText){
+if(_4._text&&!_4.editMode){
+this.selectItem(_4);
+}
+_4.connect("execText",this,function(){
+if(_4.isText&&_4.deleteEmptyModify&&!_4.getText()){
+console.warn("EMPTY MOD DELETE",_4);
+this.deleteItem(_4);
+}else{
+if(_4.selectOnExec){
+this.selectItem(_4);
+}
+}
+});
+}
+_4.connect("deselect",this,function(){
+if(!this._isBusy&&this.isSelected(_4)){
+this.deselectItem(_4);
+}
+});
+_4.connect("select",this,function(){
+if(!this._isBusy&&!this.isSelected(_4)){
+this.selectItem(_4);
+}
+});
+return _4;
+},unregister:function(_5){
+if(_5){
+_5.selected&&this.onDeselect(_5);
+delete this.stencils[_5.id];
+}
+},onArrow:function(_6){
+if(this.hasSelected()){
+this.saveThrottledState();
+this.group.applyTransform({dx:_6.x,dy:_6.y});
+}
+},_throttleVrl:null,_throttle:false,throttleTime:400,_lastmxx:-1,_lastmxy:-1,saveMoveState:function(){
+var mx=this.group.getTransform();
+if(mx.dx==this._lastmxx&&mx.dy==this._lastmxy){
+return;
+}
+this._lastmxx=mx.dx;
+this._lastmxy=mx.dy;
+this.undo.add({before:dojo.hitch(this.group,"setTransform",mx)});
+},saveThrottledState:function(){
+clearTimeout(this._throttleVrl);
+clearInterval(this._throttleVrl);
+this._throttleVrl=setTimeout(dojo.hitch(this,function(){
+this._throttle=false;
+this.saveMoveState();
+}),this.throttleTime);
+if(this._throttle){
+return;
+}
+this._throttle=true;
+this.saveMoveState();
+},unDelete:function(_7){
+for(var s in _7){
+_7[s].render();
+this.onSelect(_7[s]);
+}
+},onDelete:function(_8){
+if(_8!==true){
+this.undo.add({before:dojo.hitch(this,"unDelete",this.selectedStencils),after:dojo.hitch(this,"onDelete",true)});
+}
+this.withSelected(function(m){
+this.anchors.remove(m);
+var id=m.id;
+m.destroy();
+delete this.stencils[id];
+});
+this.selectedStencils={};
+},deleteItem:function(_9){
+if(this.hasSelected()){
+var _a=[];
+for(var m in this.selectedStencils){
+if(this.selectedStencils.id==_9.id){
+if(this.hasSelected()==1){
+this.onDelete();
+return;
+}
+}else{
+_a.push(this.selectedStencils.id);
+}
+}
+this.deselect();
+this.selectItem(_9);
+this.onDelete();
+dojo.forEach(_a,function(id){
+this.selectItem(id);
+},this);
+}else{
+this.selectItem(_9);
+this.onDelete();
+}
+},removeAll:function(){
+this.selectAll();
+this._isBusy=true;
+this.onDelete();
+this.stencils={};
+this._isBusy=false;
+},setSelectionGroup:function(){
+this.withSelected(function(m){
+this.onDeselect(m,true);
+});
+if(this.group){
+_1.remove(this.group);
+this.group.removeShape();
+}
+this.group=_1.createGroup();
+this.group.setTransform({dx:0,dy:0});
+this.withSelected(function(m){
+this.group.add(m.container);
+m.select();
+});
+},setConstraint:function(){
+var t=Infinity;
+l=Infinity;
+this.withSelected(function(m){
+var o=m.getBounds();
+t=Math.min(o.y1,t);
+l=Math.min(o.x1,l);
+});
+this.constrain={l:-l,t:-t};
+},onDeselect:function(_b,_c){
+if(!_c){
+delete this.selectedStencils[_b.id];
+}
+this.anchors.remove(_b);
+_1.add(_b.container);
+_b.selected&&_b.deselect();
+_b.applyTransform(this.group.getTransform());
+},deselectItem:function(_d){
+this.onDeselect(_d);
+},deselect:function(){
+this.withSelected(function(m){
+this.onDeselect(m);
+});
+this._dragBegun=false;
+this._wasDragged=false;
+},onSelect:function(_e){
+if(!_e){
+console.error("null stencil is not selected:",this.stencils);
+}
+if(this.selectedStencils[_e.id]){
+return;
+}
+this.selectedStencils[_e.id]=_e;
+this.group.add(_e.container);
+_e.select();
+if(this.hasSelected()==1){
+this.anchors.add(_e,this.group);
+}
+},selectAll:function(){
+this._isBusy=true;
+for(var m in this.stencils){
+this.selectItem(m);
+}
+this._isBusy=false;
+},selectItem:function(_f){
+var id=typeof (_f)=="string"?_f:_f.id;
+var _10=this.stencils[id];
+this.setSelectionGroup();
+this.onSelect(_10);
+this.group.moveToFront();
+this.setConstraint();
+},onStencilDoubleClick:function(obj){
+if(this.selectedStencils[obj.id]){
+if(this.selectedStencils[obj.id].edit){
+var m=this.selectedStencils[obj.id];
+m.editMode=true;
+this.deselect();
+m.edit();
+}
+}
+},onAnchorUp:function(){
+this.setConstraint();
+},onStencilDown:function(obj,evt){
+if(!this.stencils[obj.id]){
+return;
+}
+this._isBusy=true;
+if(this.selectedStencils[obj.id]&&this.keys.meta){
+if(dojo.isMac&&this.keys.cmmd){
+}
+this.onDeselect(this.selectedStencils[obj.id]);
+if(this.hasSelected()==1){
+this.withSelected(function(m){
+this.anchors.add(m,this.group);
+});
+}
+this.group.moveToFront();
+this.setConstraint();
+return;
+}else{
+if(this.selectedStencils[obj.id]){
+var mx=this.group.getTransform();
+this._offx=obj.x-mx.dx;
+this._offy=obj.y-mx.dy;
+return;
+}else{
+if(!this.keys.meta){
+this.deselect();
+}else{
+}
+}
+}
+this.selectItem(obj.id);
+var mx=this.group.getTransform();
+this._offx=obj.x-mx.dx;
+this._offy=obj.y-mx.dx;
+this.orgx=obj.x;
+this.orgy=obj.y;
+this._isBusy=false;
+this.undo.add({before:function(){
+},after:function(){
+}});
+},onStencilUp:function(obj){
+},onStencilDrag:function(obj){
+if(!this._dragBegun){
+this.onBeginDrag(obj);
+this._dragBegun=true;
+}else{
+this.saveThrottledState();
+var x=obj.x-obj.last.x,y=obj.y-obj.last.y,mx=this.group.getTransform(),c=this.constrain,mz=this.defaults.anchors.marginZero;
+x=obj.x-this._offx;
+y=obj.y-this._offy;
+if(x<c.l+mz){
+x=c.l+mz;
+}
+if(y<c.t+mz){
+y=c.t+mz;
+}
+this.group.setTransform({dx:x,dy:y});
+}
+},onDragEnd:function(obj){
+this._dragBegun=false;
+},onBeginDrag:function(obj){
+this._wasDragged=true;
+},onDown:function(obj){
+this.deselect();
+},exporter:function(){
+var _11=[];
+for(var m in this.stencils){
+this.stencils[m].enabled&&_11.push(this.stencils[m].exporter());
+}
+return _11;
+},toSelected:function(_12){
+var _13=Array.prototype.slice.call(arguments).splice(1);
+for(var m in this.selectedStencils){
+var _14=this.selectedStencils[m];
+_14[_12].apply(_14,_13);
+}
+},withSelected:function(_15){
+var f=dojo.hitch(this,_15);
+for(var m in this.selectedStencils){
+f(this.selectedStencils[m]);
+}
+},withUnselected:function(_16){
+var f=dojo.hitch(this,_16);
+for(var m in this.stencils){
+!this.stencils[m].selected&&f(this.stencils[m]);
+}
+},withStencils:function(_17){
+var f=dojo.hitch(this,_17);
+for(var m in this.stencils){
+f(this.stencils[m]);
+}
+},hasSelected:function(){
+var ln=0;
+for(var m in this.selectedStencils){
+ln++;
+}
+return ln;
+},isSelected:function(_18){
+return !!this.selectedStencils[_18.id];
+}});
+})();
+}
diff --git a/js/dojo/dojox/drawing/manager/StencilUI.js b/js/dojo/dojox/drawing/manager/StencilUI.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/StencilUI.js
@@ -0,0 +1,48 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.StencilUI"]){
+dojo._hasResource["dojox.drawing.manager.StencilUI"]=true;
+dojo.provide("dojox.drawing.manager.StencilUI");
+(function(){
+var _1,_2;
+dojox.drawing.manager.StencilUI=dojox.drawing.util.oo.declare(function(_3){
+_1=_3.surface;
+this.canvas=_3.canvas;
+this.defaults=dojox.drawing.defaults.copy();
+this.mouse=_3.mouse;
+this.keys=_3.keys;
+this._mouseHandle=this.mouse.register(this);
+this.stencils={};
+},{register:function(_4){
+this.stencils[_4.id]=_4;
+return _4;
+},onUiDown:function(_5){
+if(!this._isStencil(_5)){
+return;
+}
+this.stencils[_5.id].onDown(_5);
+},onUiUp:function(_6){
+if(!this._isStencil(_6)){
+return;
+}
+this.stencils[_6.id].onUp(_6);
+},onOver:function(_7){
+if(!this._isStencil(_7)){
+return;
+}
+this.stencils[_7.id].onOver(_7);
+},onOut:function(_8){
+if(!this._isStencil(_8)){
+return;
+}
+this.stencils[_8.id].onOut(_8);
+},_isStencil:function(_9){
+return !!_9.id&&!!this.stencils[_9.id]&&this.stencils[_9.id].type=="drawing.library.UI.Button";
+}});
+})();
+}
diff --git a/js/dojo/dojox/drawing/manager/Undo.js b/js/dojo/dojox/drawing/manager/Undo.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/Undo.js
@@ -0,0 +1,51 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Undo"]){
+dojo._hasResource["dojox.drawing.manager.Undo"]=true;
+dojo.provide("dojox.drawing.manager.Undo");
+dojox.drawing.manager.Undo=dojox.drawing.util.oo.declare(function(_1){
+this.keys=_1.keys;
+this.undostack=[];
+this.redostack=[];
+dojo.connect(this.keys,"onKeyDown",this,"onKeyDown");
+},{onKeyDown:function(_2){
+if(!_2.cmmd){
+return;
+}
+if(_2.keyCode==90&&!_2.shift){
+this.undo();
+}else{
+if((_2.keyCode==90&&_2.shift)||_2.keyCode==89){
+this.redo();
+}
+}
+},add:function(_3){
+_3.args=dojo.mixin({},_3.args);
+this.undostack.push(_3);
+},apply:function(_4,_5,_6){
+dojo.hitch(_4,_5)(_6);
+},undo:function(){
+var o=this.undostack.pop();
+if(!o){
+return;
+}
+o.before();
+this.redostack.push(o);
+},redo:function(){
+var o=this.redostack.pop();
+if(!o){
+return;
+}
+if(o.after){
+o.after();
+}else{
+o.before();
+}
+this.undostack.push(o);
+}});
+}
diff --git a/js/dojo/dojox/drawing/manager/_registry.js b/js/dojo/dojox/drawing/manager/_registry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/_registry.js
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager._registry"]){
+dojo._hasResource["dojox.drawing.manager._registry"]=true;
+dojo.provide("dojox.drawing.manager._registry");
+(function(){
+var _1={tool:{},stencil:{},drawing:{},plugin:{}};
+dojox.drawing.register=function(_2,_3){
+if(_3=="drawing"){
+_1.drawing[_2.id]=_2;
+}else{
+if(_3=="tool"){
+_1.tool[_2.name]=_2;
+}else{
+if(_3=="stencil"){
+_1.stencil[_2.name]=_2;
+}else{
+if(_3=="plugin"){
+_1.plugin[_2.name]=_2;
+}
+}
+}
+}
+};
+dojox.drawing.getRegistered=function(_4,id){
+return id?_1[_4][id]:_1[_4];
+};
+})();
+}
diff --git a/js/dojo/dojox/drawing/manager/keys.js b/js/dojo/dojox/drawing/manager/keys.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/manager/keys.js
@@ -0,0 +1,154 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.keys"]){
+dojo._hasResource["dojox.drawing.manager.keys"]=true;
+dojo.provide("dojox.drawing.manager.keys");
+(function(){
+var _1=false;
+var _2=true;
+var _3="abcdefghijklmnopqrstuvwxyz";
+dojox.drawing.manager.keys={arrowIncrement:1,arrowShiftIncrement:10,shift:false,ctrl:false,alt:false,cmmd:false,meta:false,onDelete:function(_4){
+},onEsc:function(_5){
+},onEnter:function(_6){
+},onArrow:function(_7){
+},onKeyDown:function(_8){
+},onKeyUp:function(_9){
+},listeners:[],register:function(_a){
+var _b=dojox.drawing.util.uid("listener");
+this.listeners.push({handle:_b,scope:_a.scope||window,callback:_a.callback,keyCode:_a.keyCode});
+},_getLetter:function(_c){
+if(!_c.meta&&_c.keyCode>=65&&_c.keyCode<=90){
+return _3.charAt(_c.keyCode-65);
+}
+return null;
+},_mixin:function(_d){
+_d.meta=this.meta;
+_d.shift=this.shift;
+_d.alt=this.alt;
+_d.cmmd=this.cmmd;
+_d.letter=this._getLetter(_d);
+return _d;
+},editMode:function(_e){
+_1=_e;
+},enable:function(_f){
+_2=_f;
+},scanForFields:function(){
+if(this._fieldCons){
+dojo.forEach(this._fieldCons,dojo.disconnect,dojo);
+}
+this._fieldCons=[];
+dojo.query("input").forEach(function(n){
+var a=dojo.connect(n,"focus",this,function(evt){
+this.enable(false);
+});
+var b=dojo.connect(n,"blur",this,function(evt){
+this.enable(true);
+});
+this._fieldCons.push(a);
+this._fieldCons.push(b);
+},this);
+},init:function(){
+setTimeout(dojo.hitch(this,"scanForFields"),500);
+dojo.connect(document,"blur",this,function(evt){
+this.meta=this.shift=this.ctrl=this.cmmd=this.alt=false;
+});
+dojo.connect(document,"keydown",this,function(evt){
+if(!_2){
+return;
+}
+if(evt.keyCode==16){
+this.shift=true;
+}
+if(evt.keyCode==17){
+this.ctrl=true;
+}
+if(evt.keyCode==18){
+this.alt=true;
+}
+if(evt.keyCode==224){
+this.cmmd=true;
+}
+this.meta=this.shift||this.ctrl||this.cmmd||this.alt;
+if(!_1){
+this.onKeyDown(this._mixin(evt));
+if(evt.keyCode==8||evt.keyCode==46){
+dojo.stopEvent(evt);
+}
+}
+});
+dojo.connect(document,"keyup",this,function(evt){
+if(!_2){
+return;
+}
+var _10=false;
+if(evt.keyCode==16){
+this.shift=false;
+}
+if(evt.keyCode==17){
+this.ctrl=false;
+}
+if(evt.keyCode==18){
+this.alt=false;
+}
+if(evt.keyCode==224){
+this.cmmd=false;
+}
+this.meta=this.shift||this.ctrl||this.cmmd||this.alt;
+!_1&&this.onKeyUp(this._mixin(evt));
+if(evt.keyCode==13){
+console.warn("KEY ENTER");
+this.onEnter(evt);
+_10=true;
+}
+if(evt.keyCode==27){
+this.onEsc(evt);
+_10=true;
+}
+if(evt.keyCode==8||evt.keyCode==46){
+this.onDelete(evt);
+_10=true;
+}
+if(_10&&!_1){
+dojo.stopEvent(evt);
+}
+});
+dojo.connect(document,"keypress",this,function(evt){
+if(!_2){
+return;
+}
+var inc=this.shift?this.arrowIncrement*this.arrowShiftIncrement:this.arrowIncrement;
+var x=0,y=0;
+if(evt.keyCode==32&&!_1){
+dojo.stopEvent(evt);
+}
+if(evt.keyCode==37){
+x=-inc;
+}
+if(evt.keyCode==38){
+y=-inc;
+}
+if(evt.keyCode==39){
+x=inc;
+}
+if(evt.keyCode==40){
+y=inc;
+}
+if(x||y){
+evt.x=x;
+evt.y=y;
+evt.shift=this.shift;
+this.onArrow(evt);
+if(!_1){
+dojo.stopEvent(evt);
+}
+}
+});
+}};
+dojo.addOnLoad(dojox.drawing.manager.keys,"init");
+})();
+}
diff --git a/js/dojo/dojox/drawing/plugins/_Plugin.js b/js/dojo/dojox/drawing/plugins/_Plugin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/_Plugin.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins._Plugin"]){
+dojo._hasResource["dojox.drawing.plugins._Plugin"]=true;
+dojo.provide("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins._Plugin=dojox.drawing.util.oo.declare(function(_1){
+this._cons=[];
+dojo.mixin(this,_1);
+if(this.button&&this.onClick){
+this.connect(this.button,"onClick",this,"onClick");
+}
+},{util:null,keys:null,mouse:null,drawing:null,stencils:null,anchors:null,canvas:null,node:null,button:null,type:"dojox.drawing.plugins._Plugin",connect:function(){
+this._cons.push(dojo.connect.apply(dojo,arguments));
+},disconnect:function(_2){
+if(!_2){
+return;
+}
+if(!dojo.isArray(_2)){
+_2=[_2];
+}
+dojo.forEach(_2,dojo.disconnect,dojo);
+}});
+}
diff --git a/js/dojo/dojox/drawing/plugins/drawing/Grid.js b/js/dojo/dojox/drawing/plugins/drawing/Grid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/drawing/Grid.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.drawing.Grid"]){
+dojo._hasResource["dojox.drawing.plugins.drawing.Grid"]=true;
+dojo.provide("dojox.drawing.plugins.drawing.Grid");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.drawing.Grid=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+if(_1.gap){
+this.major=_1.gap;
+}
+this.setGrid();
+dojo.connect(this.canvas,"setZoom",this,"setZoom");
+},{type:"dojox.drawing.plugins.drawing.Grid",gap:100,major:100,minor:0,zoom:1,setZoom:function(_2){
+this.zoom=_2;
+this.setGrid();
+},setGrid:function(_3){
+var _4=Math.floor(this.major*this.zoom);
+var _5=this.minor?Math.floor(this.minor*this.zoom):_4;
+this.grid&&this.grid.removeShape();
+var x1,x2,y1,y2,i,_6;
+var s=this.canvas.underlay.createGroup();
+var w=2000;
+var h=1000;
+var b=1;
+var mj="#00ffff";
+var mn="#d7ffff";
+var _7=function(x1,y1,x2,y2,c){
+s.createLine({x1:x1,y1:y1,x2:x2,y2:y2}).setStroke({style:"Solid",width:b,cap:"round",color:c});
+};
+for(i=1,len=h/_5;i<len;i++){
+x1=0,x2=w;
+y1=_5*i,y2=y1;
+_6=y1%_4?mn:mj;
+_7(x1,y1,x2,y2,_6);
+}
+for(i=1,len=w/_5;i<len;i++){
+y1=0,y2=h;
+x1=_5*i,x2=x1;
+_6=x1%_4?mn:mj;
+_7(x1,y1,x2,y2,_6);
+}
+s.moveToBack();
+this.grid=s;
+this.util.attr(s,"id","grid");
+return s;
+}});
+}
diff --git a/js/dojo/dojox/drawing/plugins/drawing/Silverlight.js b/js/dojo/dojox/drawing/plugins/drawing/Silverlight.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/drawing/Silverlight.js
@@ -0,0 +1,138 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.drawing.Silverlight"]){
+dojo._hasResource["dojox.drawing.plugins.drawing.Silverlight"]=true;
+dojo.provide("dojox.drawing.plugins.drawing.Silverlight");
+dojox.drawing.plugins.drawing.Silverlight=dojox.drawing.util.oo.declare(function(_1){
+if(dojox.gfx.renderer!="silverlight"){
+return;
+}
+this.mouse=_1.mouse;
+this.stencils=_1.stencils;
+this.anchors=_1.anchors;
+this.canvas=_1.canvas;
+this.util=_1.util;
+dojo.connect(this.stencils,"register",this,function(_2){
+var c1,c2,c3,c4,c5,_3=this;
+var _4=function(){
+c1=_2.container.connect("onmousedown",function(_5){
+_5.superTarget=_2;
+_3.mouse.down(_5);
+});
+};
+_4();
+c2=dojo.connect(_2,"setTransform",this,function(){
+});
+c3=dojo.connect(_2,"onBeforeRender",function(){
+});
+c4=dojo.connect(_2,"onRender",this,function(){
+});
+c5=dojo.connect(_2,"destroy",this,function(){
+dojo.forEach([c1,c2,c3,c4,c5],dojo.disconnect,dojo);
+});
+});
+dojo.connect(this.anchors,"onAddAnchor",this,function(_6){
+var c1=_6.shape.connect("onmousedown",this.mouse,function(_7){
+_7.superTarget=_6;
+this.down(_7);
+});
+var c2=dojo.connect(_6,"disconnectMouse",this,function(){
+dojo.disconnect(c1);
+dojo.disconnect(c2);
+});
+});
+this.mouse._down=function(_8){
+var _9=this._getXY(_8);
+var x=_9.x-this.origin.x;
+var y=_9.y-this.origin.y;
+x*=this.zoom;
+y*=this.zoom;
+this.origin.startx=x;
+this.origin.starty=y;
+this._lastx=x;
+this._lasty=y;
+this.drawingType=this.util.attr(_8,"drawingType")||"";
+var id=this._getId(_8);
+var _a={x:x,y:y,id:id};
+this.onDown(_a);
+this._clickTime=new Date().getTime();
+if(this._lastClickTime){
+if(this._clickTime-this._lastClickTime<this.doublClickSpeed){
+var _b=this.eventName("doubleClick");
+console.warn("DOUBLE CLICK",_b,_a);
+this._broadcastEvent(_b,_a);
+}else{
+}
+}
+this._lastClickTime=this._clickTime;
+};
+this.mouse.down=function(_c){
+clearTimeout(this.__downInv);
+if(this.util.attr(_c,"drawingType")=="surface"){
+this.__downInv=setTimeout(dojo.hitch(this,function(){
+this._down(_c);
+}),500);
+return;
+}
+this._down(_c);
+};
+this.mouse._getXY=function(_d){
+if(_d.pageX){
+return {x:_d.pageX,y:_d.pageY,cancelBubble:true};
+}
+for(var nm in _d){
+}
+if(_d.x!==undefined){
+return {x:_d.x+this.origin.x,y:_d.y+this.origin.y};
+}else{
+return {x:_d.pageX,y:_d.pageY};
+}
+};
+this.mouse._getId=function(_e){
+return this.util.attr(_e,"id");
+};
+this.util.attr=function(_f,_10,_11,_12){
+if(!_f){
+return false;
+}
+try{
+var t;
+if(_f.superTarget){
+t=_f.superTarget;
+}else{
+if(_f.superClass){
+t=_f.superClass;
+}else{
+if(_f.target){
+t=_f.target;
+}else{
+t=_f;
+}
+}
+}
+if(_11!==undefined){
+_f[_10]=_11;
+return _11;
+}
+if(t.tagName){
+if(_10=="drawingType"&&t.tagName.toLowerCase()=="object"){
+return "surface";
+}
+var r=dojo.attr(t,_10);
+}
+var r=t[_10];
+return r;
+}
+catch(e){
+if(!_12){
+}
+return false;
+}
+};
+},{});
+}
diff --git a/js/dojo/dojox/drawing/plugins/tools/Iconize.js b/js/dojo/dojox/drawing/plugins/tools/Iconize.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/tools/Iconize.js
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Iconize"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Iconize"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Iconize");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.tools.Iconize=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+},{onClick:function(){
+var _2;
+for(var nm in this.stencils.stencils){
+if(this.stencils.stencils[nm].shortType=="path"){
+_2=this.stencils.stencils[nm];
+break;
+}
+}
+if(_2){
+this.makeIcon(_2.points);
+}
+},makeIcon:function(p){
+var _3=function(n){
+return Number(n.toFixed(1));
+};
+var x=10000;
+var y=10000;
+p.forEach(function(pt){
+if(pt.x!==undefined&&!isNaN(pt.x)){
+x=Math.min(x,pt.x);
+y=Math.min(y,pt.y);
+}
+});
+var _4=0;
+var _5=0;
+p.forEach(function(pt){
+if(pt.x!==undefined&&!isNaN(pt.x)){
+pt.x=_3(pt.x-x);
+pt.y=_3(pt.y-y);
+_4=Math.max(_4,pt.x);
+_5=Math.max(_5,pt.y);
+}
+});
+var s=60;
+var m=20;
+p.forEach(function(pt){
+pt.x=_3(pt.x/_4)*s+m;
+pt.y=_3(pt.y/_5)*s+m;
+});
+var _6="[\n";
+dojo.forEach(p,function(pt,i){
+_6+="{\t";
+if(pt.t){
+_6+="t:'"+pt.t+"'";
+}
+if(pt.x!==undefined&&!isNaN(pt.x)){
+if(pt.t){
+_6+=", ";
+}
+_6+="x:"+pt.x+",\t\ty:"+pt.y;
+}
+_6+="\t}";
+if(i!=p.length-1){
+_6+=",";
+}
+_6+="\n";
+});
+_6+="]";
+var n=dojo.byId("data");
+if(n){
+n.value=_6;
+}
+}});
+dojox.drawing.plugins.tools.Iconize.setup={name:"dojox.drawing.plugins.tools.Iconize",tooltip:"Iconize Tool",iconClass:"iconPan"};
+dojox.drawing.register(dojox.drawing.plugins.tools.Iconize.setup,"plugin");
+}
diff --git a/js/dojo/dojox/drawing/plugins/tools/Pan.js b/js/dojo/dojox/drawing/plugins/tools/Pan.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/tools/Pan.js
@@ -0,0 +1,126 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Pan"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Pan"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Pan");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.tools.Pan=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+this.domNode=_1.node;
+var _2;
+this.toolbar=_1.scope;
+this.connect(this.toolbar,"onToolClick",this,function(){
+this.onSetPan(false);
+});
+this.connect(this.button,"onClick",this,"onSetPan");
+this.connect(this.keys,"onKeyUp",this,"onKeyUp");
+this.connect(this.keys,"onKeyDown",this,"onKeyDown");
+this.connect(this.anchors,"onAnchorUp",this,"checkBounds");
+this.connect(this.stencils,"register",this,"checkBounds");
+this.connect(this.canvas,"resize",this,"checkBounds");
+this.connect(this.canvas,"setZoom",this,"checkBounds");
+this.connect(this.canvas,"onScroll",this,function(){
+if(this._blockScroll){
+this._blockScroll=false;
+return;
+}
+_2&&clearTimeout(_2);
+_2=setTimeout(dojo.hitch(this,"checkBounds"),200);
+});
+this._mouseHandle=this.mouse.register(this);
+},{selected:false,type:"dojox.drawing.plugins.tools.Pan",onPanUp:function(_3){
+if(_3.id==this.button.id){
+this.onSetPan(false);
+}
+},onKeyUp:function(_4){
+if(_4.keyCode==32){
+this.onSetPan(false);
+}
+},onKeyDown:function(_5){
+if(_5.keyCode==32){
+this.onSetPan(true);
+}
+},onSetPan:function(_6){
+if(_6===true||_6===false){
+this.selected=!_6;
+}
+if(this.selected){
+this.selected=false;
+this.button.deselect();
+}else{
+this.selected=true;
+this.button.select();
+}
+this.mouse.setEventMode(this.selected?"pan":"");
+},onPanDrag:function(_7){
+var x=_7.x-_7.last.x;
+var y=_7.y-_7.last.y;
+this.canvas.domNode.parentNode.scrollTop-=_7.move.y;
+this.canvas.domNode.parentNode.scrollLeft-=_7.move.x;
+this.canvas.onScroll();
+},onStencilUp:function(_8){
+this.checkBounds();
+},onStencilDrag:function(_9){
+},checkBounds:function(){
+var _a=function(){
+};
+var _b=function(){
+};
+var t=Infinity,r=-Infinity,b=-10000,l=10000,sx=0,sy=0,dy=0,dx=0,mx=this.stencils.group?this.stencils.group.getTransform():{dx:0,dy:0},sc=this.mouse.scrollOffset(),_c=sc.left?10:0,_d=sc.top?10:0,ch=this.canvas.height,cw=this.canvas.width,z=this.canvas.zoom,_e=this.canvas.parentHeight,_f=this.canvas.parentWidth;
+this.stencils.withSelected(function(m){
+var o=m.getBounds();
+_b("SEL BOUNDS:",o);
+t=Math.min(o.y1+mx.dy,t);
+r=Math.max(o.x2+mx.dx,r);
+b=Math.max(o.y2+mx.dy,b);
+l=Math.min(o.x1+mx.dx,l);
+});
+this.stencils.withUnselected(function(m){
+var o=m.getBounds();
+_b("UN BOUNDS:",o);
+t=Math.min(o.y1,t);
+r=Math.max(o.x2,r);
+b=Math.max(o.y2,b);
+l=Math.min(o.x1,l);
+_a("----------- B:",b,o.y2);
+});
+b*=z;
+var _10=0,_11=0;
+_a("Bottom test","b:",b,"z:",z,"ch:",ch,"pch:",_e,"top:",sc.top,"sy:",sy,"mx.dy:",mx.dy);
+if(b>_e||sc.top){
+_a("*bottom scroll*");
+ch=Math.max(b,_e+sc.top);
+sy=sc.top;
+_10+=this.canvas.getScrollWidth();
+}else{
+if(!sy&&ch>_e){
+_a("*bottom remove*");
+ch=_e;
+}
+}
+r*=z;
+if(r>_f||sc.left){
+cw=Math.max(r,_f+sc.left);
+sx=sc.left;
+_11+=this.canvas.getScrollWidth();
+}else{
+if(!sx&&cw>_f){
+cw=_f;
+}
+}
+cw+=_10*2;
+ch+=_11*2;
+this._blockScroll=true;
+this.stencils.group&&this.stencils.group.applyTransform({dx:dx,dy:dy});
+this.stencils.withUnselected(function(m){
+m.transformPoints({dx:dx,dy:dy});
+});
+this.canvas.setDimensions(cw,ch,sx,sy);
+}});
+dojox.drawing.plugins.tools.Pan.setup={name:"dojox.drawing.plugins.tools.Pan",tooltip:"Pan Tool",iconClass:"iconPan"};
+dojox.drawing.register(dojox.drawing.plugins.tools.Pan.setup,"plugin");
+}
diff --git a/js/dojo/dojox/drawing/plugins/tools/Zoom.js b/js/dojo/dojox/drawing/plugins/tools/Zoom.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/plugins/tools/Zoom.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Zoom"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Zoom"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Zoom");
+dojo.require("dojox.drawing.plugins._Plugin");
+(function(){
+var _1=0.1,_2=10,_3=0.1,_4=1,dt=dojox.drawing.plugins.tools;
+dt.ZoomIn=dojox.drawing.util.oo.declare(function(_5){
+},{});
+dt.ZoomIn=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_6){
+},{type:"dojox.drawing.plugins.tools.ZoomIn",onZoomIn:function(){
+_4+=_1;
+_4=Math.min(_4,_2);
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoomIn();
+}});
+dt.Zoom100=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_7){
+},{type:"dojox.drawing.plugins.tools.Zoom100",onZoom100:function(){
+_4=1;
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoom100();
+}});
+dt.ZoomOut=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_8){
+},{type:"dojox.drawing.plugins.tools.ZoomOut",onZoomOut:function(){
+_4-=_1;
+_4=Math.max(_4,_3);
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoomOut();
+}});
+dt.ZoomIn.setup={name:"dojox.drawing.plugins.tools.ZoomIn",tooltip:"Zoom In"};
+dojox.drawing.register(dt.ZoomIn.setup,"plugin");
+dt.Zoom100.setup={name:"dojox.drawing.plugins.tools.Zoom100",tooltip:"Zoom to 100%"};
+dojox.drawing.register(dt.Zoom100.setup,"plugin");
+dt.ZoomOut.setup={name:"dojox.drawing.plugins.tools.ZoomOut",tooltip:"Zoom In"};
+dojox.drawing.register(dt.ZoomOut.setup,"plugin");
+})();
+}
diff --git a/js/dojo/dojox/drawing/resources/CrazyTruck.jpg b/js/dojo/dojox/drawing/resources/CrazyTruck.jpg
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bc270ec3aaa4065284e57c94c03a8ebb9135fc4e
GIT binary patch
literal 20014
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
diff --git a/js/dojo/dojox/drawing/resources/drawing.css b/js/dojo/dojox/drawing/resources/drawing.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/resources/drawing.css
@@ -0,0 +1,36 @@
+html, body{
+ width:100%;
+ height:100%;
+ font-family:sans-serif;
+}
+.textAnnotation{
+ position:absolute;
+ border:1px solid #ccc;
+ background-color:#ffff00;
+ color:#0000ff;
+ padding:3px;
+ font-family:sans-serif;
+ font-size:12px;
+ margin-top:-10px;
+ z-index:501;
+}
+#conEdit{
+ border:0;
+
+ padding:3px;
+ margin:0;
+}
+.drawingTooltip{
+ font-family:sans-serif;
+ font-family:sans-serif;
+ font-weight:normal;
+ padding:5px;
+}
+.drawingTipTitle{
+ font-size:12px;
+ font-weight:bold;
+}
+.drawingTipDesc{
+ font-size:11px;
+ padding-left:10px;
+}
diff --git a/js/dojo/dojox/drawing/resources/images/tool_icons.png b/js/dojo/dojox/drawing/resources/images/tool_icons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..74eaee9540503cafe4db1a9382ee067cc490d1b3
GIT binary patch
literal 7213
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
PKtBraRAt~&rl0>05wimt
diff --git a/js/dojo/dojox/drawing/resources/images/tool_sprites.png b/js/dojo/dojox/drawing/resources/images/tool_sprites.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d80bd4de053f02f0c9aa89b7423836466bac7e59
GIT binary patch
literal 7431
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
FV1i-8Oq>7!
diff --git a/js/dojo/dojox/drawing/resources/toolbar.css b/js/dojo/dojox/drawing/resources/toolbar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/resources/toolbar.css
@@ -0,0 +1,179 @@
+
+.horizontal.drawingToolbar{
+ position:relative;
+ width:auto;
+ height:32px;
+ padding:5px;
+ left:5px;
+}
+.vertical.drawingToolbar{
+ width:32px;
+ padding:5px;
+ position:absolute;
+ left:5px;
+ margin-top:5px;
+ background:#fff;
+}
+.drawingToolbar .drawingButton{
+ position:relative;
+ padding:0;
+ width:32px;
+ height:32px;
+ background-image:url("images/tool_sprites.png");
+ background-position:0px 0px;
+ border:0;
+ cursor:pointer;
+}
+.horizontal.drawingToolbar .drawingButton{
+ float:left;
+ margin-right:5px;
+}
+.dj_ie6 .drawingToolbar .drawingButton {
+ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='images/tool_sprites.png');
+}
+.vertical.drawingToolbar .drawingButton{
+ margin-bottom:5px;
+ margin-right:0px;
+}
+.drawingToolbar .drawingButton.hover{
+ background-position:-32px 0px;
+}
+.drawingToolbar .drawingButton.active{
+ background-position:-64px 0px;
+}
+.drawingToolbar .drawingButton.selected{
+ background-position:-96px 0px;
+}
+.drawingToolbar .drawingButton.selected:hover{}
+.drawingToolbar.vertical{}
+.drawingToolbar .drawingButton .icon{
+ background-image:url("images/tool_icons.png");
+ width:32px;
+ height:64px;
+ position:absolute;
+ left:0px;
+ top:0px;
+ margin:0;
+ padding:0;
+ clip: rect(0px 32px 32px 0px);
+}
+.drawingToolbar .drawingButton.selected .icon{
+
+ top:-32px;
+ clip: rect(32px 32px 64px 0px);
+}
+.drawingToolbar .drawingButton .icon.iconLine{
+ background-position:-64px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconRect{
+ background-position: 0px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconEllipse{
+ background-position:-32px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconText{
+ background-position:-224px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconArrow{
+ background-position:-96px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconVector{
+ background-position:-128px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconAxes{
+ background-position:-160px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconPan{
+ background-position:-192px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconEq{
+ background-position:-351px 0px;
+}
+.dj_ie6 .drawingToolbar .drawingButton .icon {
+
+ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='images/tool_icons.png');
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop{
+ background-position:-128px 0px;
+ margin:0;
+ margin-top:10px;
+ border-bottom:1px solid #d6d6d6;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop.hover{
+ background-position:-160px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop.active{
+ background-position:-192px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid{
+ background-position:-384px 0px;
+ border-style:solid;
+ border-width:1px;
+ border-color:#fff #cccccc #d6d6d6 #cccccc;
+ height:24px;
+ width:30px;
+ margin:0;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid.hover,
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid.hover{
+ background-position:-416px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid.active,
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid.active{
+ background-position:-448px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot{
+ background-position:-256px 0px;
+ border-top:1px solid #fff;
+ margin:0;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot.hover{
+ background-position:-288px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot.active{
+ background-position:-320px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop{
+ background-position:-512px 0px;
+ margin:0;
+ margin-left:10px;
+ border:0px;
+ border-right:1px solid #d6d6d6;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop.hover{
+ background-position:-544px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop.active{
+ background-position:-576px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid{
+ background-position:-384px 0px;
+ border-style:solid;
+ border-width:1px;
+ border-color:#cccccc #d6d6d6 #cccccc #fff;
+ height:30px;
+ width:31px;
+ margin:0;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot{
+ background-position:-640px 0px;
+ border-left:1px solid #fff;
+ margin:0;
+ margin-top:-1px;
+ margin-right:-1px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot.hover{
+ background-position:-673px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot.active{
+ background-position:-704px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconZoomIn{
+ background-position:-256px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconZoom100{
+ background-position:-320px -4px;
+}
+.drawingToolbar .drawingButton .icon.iconZoomOut{
+ background-position:-288px 0px;
+}
diff --git a/js/dojo/dojox/drawing/stencil/Ellipse.js b/js/dojo/dojox/drawing/stencil/Ellipse.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Ellipse.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Ellipse"]){
+dojo._hasResource["dojox.drawing.stencil.Ellipse"]=true;
+dojo.provide("dojox.drawing.stencil.Ellipse");
+dojox.drawing.stencil.Ellipse=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Ellipse",anchorType:"group",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+var x=o.cx-o.rx,y=o.cy-o.ry,w=o.rx*2,h=o.ry*2;
+this.points=[{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+h},{x:x,y:y+h}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={cx:s.x+(e.x-s.x)/2,cy:s.y+(e.y-s.y)/2,rx:(e.x-s.x)*0.5,ry:(e.y-s.y)*0.5};
+return this.data;
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+this[_2]=this.container.createEllipse(d).setStroke(_3).setFill(_3.fill);
+this.util.attr(this[_2],"drawingType","stencil");
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Ellipse"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/Image.js b/js/dojo/dojox/drawing/stencil/Image.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Image.js
@@ -0,0 +1,62 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Image"]){
+dojo._hasResource["dojox.drawing.stencil.Image"]=true;
+dojo.provide("dojox.drawing.stencil.Image");
+dojox.drawing.stencil.Image=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Image",anchorType:"group",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+this.points=[{x:o.x,y:o.y},{x:o.x+o.width,y:o.y},{x:o.x+o.width,y:o.y+o.height},{x:o.x,y:o.y+o.height}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y,src:this.src||this.data.src};
+return this.data;
+},_createHilite:function(){
+this.remove(this.hit);
+this.hit=this.container.createRect(this.data).setStroke(this.style.current).setFill(this.style.current.fill);
+this._setNodeAtts(this.hit);
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+var s=this.container.getParent();
+this[_2]=s.createImage(d);
+this.container.add(this[_2]);
+this._setNodeAtts(this[_2]);
+},render:function(_4){
+if(this.data.width=="auto"||isNaN(this.data.width)){
+this.getImageSize(true);
+console.warn("Image size not provided. Acquiring...");
+return;
+}
+this.onBeforeRender(this);
+this.renderHit&&this._createHilite();
+this._create("shape",this.data,this.style.current);
+},getImageSize:function(_5){
+if(this._gettingSize){
+return;
+}
+this._gettingSize=true;
+var _6=dojo.create("img",{src:this.data.src},dojo.body());
+var _7=dojo.connect(_6,"error",this,function(){
+dojo.disconnect(c);
+dojo.disconnect(_7);
+console.error("Error loading image:",this.data.src);
+console.warn("Error image:",this.data);
+});
+var c=dojo.connect(_6,"load",this,function(){
+var _8=dojo.marginBox(_6);
+this.setData({x:this.data.x,y:this.data.y,src:this.data.src,width:_8.w,height:_8.h});
+dojo.disconnect(c);
+dojo.destroy(_6);
+_5&&this.render(true);
+});
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Image"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/Line.js b/js/dojo/dojox/drawing/stencil/Line.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Line.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Line"]){
+dojo._hasResource["dojox.drawing.stencil.Line"]=true;
+dojo.provide("dojox.drawing.stencil.Line");
+dojox.drawing.stencil.Line=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Line",anchorType:"single",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+if(o.radius||o.angle){
+var _2=o.angle;
+o.angle=(180-o.angle)<0?180-o.angle+360:180-o.angle;
+var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle);
+this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y};
+}
+this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+this.data={x1:p[0].x,y1:p[0].y,x2:p[1].x,y2:p[1].y};
+return this.data;
+},_create:function(_3,d,_4){
+this.remove(this[_3]);
+this[_3]=this.container.createLine(d).setStroke(_4);
+this._setNodeAtts(this[_3]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Line"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/Path.js b/js/dojo/dojox/drawing/stencil/Path.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Path.js
@@ -0,0 +1,86 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Path"]){
+dojo._hasResource["dojox.drawing.stencil.Path"]=true;
+dojo.provide("dojox.drawing.stencil.Path");
+dojox.drawing.stencil.Path=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+dojo.disconnect(this._postRenderCon);
+},{type:"dojox.drawing.stencil.Path",closePath:true,baseRender:true,closeRadius:10,closeColor:{r:255,g:255,b:0,a:0.5},_create:function(_2,_3){
+this.remove(this[_2]);
+if(!this.points.length){
+return;
+}
+if(dojox.gfx.renderer=="svg"){
+var _4=[];
+dojo.forEach(this.points,function(o,i){
+if(i==0){
+_4.push("M "+o.x+" "+o.y);
+}else{
+var _5=(o.t||"")+" ";
+if(o.x===undefined){
+_4.push(_5);
+}else{
+_4.push(_5+o.x+" "+o.y);
+}
+}
+},this);
+if(this.closePath){
+_4.push("Z");
+}
+this.stringPath=_4.join(" ");
+this[_2]=this.container.createPath(_4.join(" ")).setStroke(_3);
+this.closePath&&this[_2].setFill(_3.fill);
+}else{
+this[_2]=this.container.createPath({}).setStroke(_3);
+this.closePath&&this[_2].setFill(_3.fill);
+dojo.forEach(this.points,function(o,i){
+if(i==0||o.t=="M"){
+this[_2].moveTo(o.x,o.y);
+}else{
+if(o.t=="Z"){
+this.closePath&&this[_2].closePath();
+}else{
+this[_2].lineTo(o.x,o.y);
+}
+}
+},this);
+this.closePath&&this[_2].closePath();
+}
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.style.currentHit);
+this._create("shape",this.style.current);
+},getBounds:function(_6){
+var _7=10000,_8=10000,_9=0,_a=0;
+dojo.forEach(this.points,function(p){
+if(p.x!==undefined&&!isNaN(p.x)){
+_7=Math.min(_7,p.x);
+_8=Math.min(_8,p.y);
+_9=Math.max(_9,p.x);
+_a=Math.max(_a,p.y);
+}
+});
+return {x1:_7,y1:_8,x2:_9,y2:_a,x:_7,y:_8,w:_9-_7,h:_a-_8};
+},checkClosePoint:function(_b,_c,_d){
+var _e=this.util.distance(_b.x,_b.y,_c.x,_c.y);
+if(this.points.length>1){
+if(_e<this.closeRadius&&!this.closeGuide&&!_d){
+var c={cx:_b.x,cy:_b.y,rx:this.closeRadius,ry:this.closeRadius};
+this.closeGuide=this.container.createEllipse(c).setFill(this.closeColor);
+}else{
+if(_d||_e>this.closeRadius&&this.closeGuide){
+this.remove(this.closeGuide);
+this.closeGuide=null;
+}
+}
+}
+return _e<this.closeRadius;
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Path"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/Rect.js b/js/dojo/dojox/drawing/stencil/Rect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Rect.js
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Rect"]){
+dojo._hasResource["dojox.drawing.stencil.Rect"]=true;
+dojo.provide("dojox.drawing.stencil.Rect");
+dojox.drawing.stencil.Rect=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+if(this.points.length){
+}
+},{type:"dojox.drawing.stencil.Rect",anchorType:"group",baseRender:true,dataToPoints:function(d){
+d=d||this.data;
+this.points=[{x:d.x,y:d.y},{x:d.x+d.width,y:d.y},{x:d.x+d.width,y:d.y+d.height},{x:d.x,y:d.y+d.height}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y,r:this.data.r||0};
+return this.data;
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+this[_2]=this.container.createRect(d).setStroke(_3).setFill(_3.fill);
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Rect"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/Text.js b/js/dojo/dojox/drawing/stencil/Text.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/Text.js
@@ -0,0 +1,91 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Text"]){
+dojo._hasResource["dojox.drawing.stencil.Text"]=true;
+dojo.provide("dojox.drawing.stencil.Text");
+dojox.drawing.stencil.Text=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Text",anchorType:"none",baseRender:true,align:"start",valign:"top",_lineHeight:1,setText:function(_2){
+this._text=_2;
+this._textArray=[];
+this.created&&this.render(_2);
+},getText:function(){
+return this._text;
+},dataToPoints:function(o){
+o=o||this.data;
+var w=o.width=="auto"?1:o.width;
+var h=o.height||this._lineHeight;
+this.points=[{x:o.x,y:o.y},{x:o.x+w,y:o.y},{x:o.x+w,y:o.y+h},{x:o.x,y:o.y+h}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y};
+return this.data;
+},render:function(_3){
+this.remove(this.shape,this.hit);
+!this.annotation&&this.renderHit&&this._renderOutline();
+if(_3){
+this._text=_3;
+this._textArray=this._text.split("\n");
+}
+var d=this.pointsToData();
+var w=d.width;
+var h=this._lineHeight;
+var x=d.x+this.style.text.pad*2;
+var y=d.y+this._lineHeight-(this.textSize*0.4);
+if(this.valign=="middle"){
+y-=h/2;
+}
+this.shape=this.container.createGroup();
+dojo.forEach(this._textArray,function(_4,i){
+var tb=this.shape.createText({x:x,y:y+(h*i),text:unescape(_4),align:this.align}).setFont(this.style.currentText).setFill(this.style.currentText.color);
+this._setNodeAtts(tb);
+},this);
+this._setNodeAtts(this.shape);
+},_renderOutline:function(){
+if(this.annotation){
+return;
+}
+var d=this.pointsToData();
+if(this.align=="middle"){
+d.x-=d.width/2-this.style.text.pad*2;
+}else{
+if(this.align=="start"){
+d.x+=this.style.text.pad;
+}else{
+if(this.align=="end"){
+d.x-=d.width-this.style.text.pad*3;
+}
+}
+}
+if(this.valign=="middle"){
+d.y-=(this._lineHeight)/2-this.style.text.pad;
+}
+this.hit=this.container.createRect(d).setStroke(this.style.currentHit).setFill(this.style.currentHit.fill);
+this._setNodeAtts(this.hit);
+this.hit.moveToBack();
+},makeFit:function(_5,w){
+var _6=dojo.create("span",{innerHTML:_5,id:"foo"},document.body);
+var sz=1;
+dojo.style(_6,"fontSize",sz+"px");
+var _7=30;
+while(dojo.marginBox(_6).w<w){
+sz++;
+dojo.style(_6,"fontSize",sz+"px");
+if(_7--<=0){
+break;
+}
+}
+sz--;
+var _8=dojo.marginBox(_6);
+dojo.destroy(_6);
+return {size:sz,box:_8};
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Text"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/stencil/_Base.js b/js/dojo/dojox/drawing/stencil/_Base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/stencil/_Base.js
@@ -0,0 +1,569 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil._Base"]){
+dojo._hasResource["dojox.drawing.stencil._Base"]=true;
+dojo.provide("dojox.drawing.stencil._Base");
+dojo.require("dojo.fx.easing");
+dojox.drawing.stencil._Base=dojox.drawing.util.oo.declare(function(_1){
+dojo.mixin(this,_1);
+this.style=_1.style||dojox.drawing.defaults.copy();
+if(_1.stencil){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.container=_1.stencil.container;
+this.style=_1.stencil.style;
+}
+var _2=/Line|Vector|Axes|Arrow/;
+var _3=/Text/;
+this.shortType=this.util.abbr(this.type);
+this.isText=_3.test(this.type);
+this.isLine=_2.test(this.type);
+this.renderHit=this.style.renderHitLayer;
+if(!this.renderHit&&this.style.renderHitLines&&this.isLine){
+this.renderHit=true;
+}
+if(!this.renderHit&&this.style.useSelectedStyle){
+this.useSelectedStyle=true;
+this.selCopy=dojo.clone(this.style.selected);
+for(var nm in this.style.norm){
+if(this.style.selected[nm]===undefined){
+this.style.selected[nm]=this.style.norm[nm];
+}
+}
+this.textSelected=dojo.clone(this.style.text);
+this.textSelected.color=this.style.selected.fill;
+}
+this.angleSnap=this.style.angleSnap||1;
+this.marginZero=_1.marginZero||this.style.anchors.marginZero;
+this.id=_1.id||this.util.uid(this.type);
+this._cons=[];
+if(!this.annotation&&!this.subShape){
+this.util.attr(this.container,"id",this.id);
+}
+this.connect(this,"onBeforeRender","preventNegativePos");
+this._offX=this.mouse.origin.x;
+this._offY=this.mouse.origin.y;
+if(this.isText){
+this.align=_1.align||this.align;
+this.valign=_1.valign||this.valign;
+if(_1.data&&_1.data.makeFit){
+var _4=this.makeFit(_1.data.text,_1.data.width);
+this.textSize=this.style.text.size=_4.size;
+this._lineHeight=_4.box.h;
+}else{
+this.textSize=parseInt(this.style.text.size,10);
+this._lineHeight=this.textSize*1.4;
+}
+this.deleteEmptyCreate=_1.deleteEmptyCreate!==undefined?_1.deleteEmptyCreate:this.style.text.deleteEmptyCreate;
+this.deleteEmptyModify=_1.deleteEmptyModify!==undefined?_1.deleteEmptyModify:this.style.text.deleteEmptyModify;
+}
+this.attr(_1.data);
+if(this.noBaseRender){
+return;
+}
+if(_1.points){
+if(_1.data&&_1.data.closePath===false){
+this.closePath=false;
+}
+this.setPoints(_1.points);
+this.connect(this,"render",this,"onRender",true);
+this.baseRender&&this.enabled&&this.render();
+_1.label&&this.setLabel(_1.label);
+_1.shadow&&this.addShadow(_1.shadow);
+}else{
+if(_1.data){
+_1.data.width=_1.data.width?_1.data.width:this.style.text.minWidth;
+_1.data.height=_1.data.height?_1.data.height:this._lineHeight;
+this.setData(_1.data);
+this.connect(this,"render",this,"onRender",true);
+this.baseRender&&this.enabled&&this.render(_1.data.text);
+_1.label&&this.setLabel(_1.label);
+_1.shadow&&this.addShadow(_1.shadow);
+}else{
+if(this.draws){
+this.points=[];
+this.data={};
+this.connectMouse();
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+}
+}
+}
+if(this.showAngle){
+this.angleLabel=new dojox.drawing.annotations.Angle({stencil:this});
+}
+if(!this.enabled){
+this.disable();
+this.moveToBack();
+this.render(_1.data.text);
+}
+},{type:"dojox.drawing.stencil",minimumSize:10,enabled:true,drawingType:"stencil",setData:function(_5){
+this.data=_5;
+this.points=this.dataToPoints();
+},setPoints:function(_6){
+this.points=_6;
+if(this.pointsToData){
+this.data=this.pointsToData();
+}
+},onDelete:function(_7){
+},onBeforeRender:function(_8){
+},onModify:function(_9){
+},onChangeData:function(_a){
+},onChangeText:function(_b){
+},onRender:function(_c){
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+this.created=true;
+this.disconnectMouse();
+if(this.shape){
+this.shape.superClass=this;
+}else{
+this.container.superClass=this;
+}
+this._setNodeAtts(this);
+},onChangeStyle:function(_d){
+this._isBeingModified=true;
+if(!this.enabled){
+this.style.current=this.style.disabled;
+this.style.currentText=this.style.textDisabled;
+this.style.currentHit=this.style.hitNorm;
+}else{
+this.style.current=this.style.norm;
+this.style.currentHit=this.style.hitNorm;
+this.style.currentText=this.style.text;
+}
+if(this.selected){
+if(this.useSelectedStyle){
+this.style.current=this.style.selected;
+this.style.currentText=this.textSelected;
+}
+this.style.currentHit=this.style.hitSelected;
+}else{
+if(this.highlighted){
+this.style.currentHit=this.style.hitHighlighted;
+}
+}
+this.render();
+},animate:function(_e,_f){
+console.warn("ANIMATE..........................");
+var d=_e.d||_e.duration||1000;
+var ms=_e.ms||20;
+var _10=_e.ease||dojo.fx.easing.linear;
+var _11=_e.steps;
+var ts=new Date().getTime();
+var w=100;
+var cnt=0;
+var _12=true;
+var sp,ep;
+if(dojo.isArray(_e.start)){
+sp=_e.start;
+ep=_e.end;
+}else{
+if(dojo.isObject(_e.start)){
+sp=_e.start;
+ep=_e.end;
+_12=false;
+}else{
+console.warn("No data provided to animate");
+}
+}
+var v=setInterval(dojo.hitch(this,function(){
+var t=new Date().getTime()-ts;
+var p=_10(1-t/d);
+if(t>d||cnt++>100){
+clearInterval(v);
+return;
+}
+if(_12){
+var _13=[];
+dojo.forEach(sp,function(pt,i){
+var o={x:(ep[i].x-sp[i].x)*p+sp[i].x,y:(ep[i].y-sp[i].y)*p+sp[i].y};
+_13.push(o);
+});
+this.setPoints(_13);
+this.render();
+}else{
+var o={};
+for(var nm in sp){
+o[nm]=(ep[nm]-sp[nm])*p+sp[nm];
+}
+this.attr(o);
+}
+}),ms);
+},attr:function(key,_14){
+var n=this.style.norm,t=this.style.text,ts=this.textSelected||{},o,nm,_15,_16=dojo.toJson(n),_17=dojo.toJson(t);
+var _18={x:true,y:true,r:true,height:true,width:true,r:true,radius:true,angle:true};
+var _19=false;
+if(typeof (key)!="object"){
+o={};
+o[key]=_14;
+}else{
+o=dojo.clone(key);
+}
+if(o.width){
+_15=o.width;
+delete o.width;
+}
+for(nm in o){
+if(nm in n){
+n[nm]=o[nm];
+}
+if(nm in t){
+t[nm]=o[nm];
+}
+if(nm in ts){
+ts[nm]=o[nm];
+}
+if(nm in _18){
+_18[nm]=o[nm];
+_19=true;
+if(nm=="radius"&&o.angle===undefined){
+o.angle=_18.angle=this.getAngle();
+}else{
+if(nm=="angle"&&o.radius===undefined){
+o.radius=_18.radius=this.getRadius();
+}
+}
+}
+if(nm=="text"){
+this.setText(o.text);
+}
+if(nm=="label"){
+this.setLabel(o.label);
+}
+}
+if(o.borderWidth!==undefined){
+n.width=o.borderWidth;
+}
+if(this.useSelectedStyle){
+for(nm in this.style.norm){
+if(this.selCopy[nm]===undefined){
+this.style.selected[nm]=this.style.norm[nm];
+}
+}
+this.textSelected.color=this.style.selected.color;
+}
+if(!this.created){
+return;
+}
+if(o.x!==undefined||o.y!==undefined){
+var box=this.getBounds(true);
+var mx={dx:0,dy:0};
+for(nm in o){
+if(nm=="x"||nm=="y"||nm=="r"){
+mx["d"+nm]=o[nm]-box[nm];
+}
+}
+this.transformPoints(mx);
+}
+var p=this.points;
+if(o.angle!==undefined){
+this.dataToPoints({x:this.data.x1,y:this.data.y1,angle:o.angle,radius:o.radius});
+}else{
+if(_15!==undefined){
+p[1].x=p[2].x=p[0].x+_15;
+this.pointsToData(p);
+}
+}
+if(o.height!==undefined&&o.angle===undefined){
+p[2].y=p[3].y=p[0].y+o.height;
+this.pointsToData(p);
+}
+if(o.r!==undefined){
+this.data.r=Math.max(0,o.r);
+}
+if(_19||_17!=dojo.toJson(t)||_16!=dojo.toJson(n)){
+this.onChangeStyle(this);
+}
+o.width=_15;
+},exporter:function(){
+var _1a=this.type.substring(this.type.lastIndexOf(".")+1).charAt(0).toLowerCase()+this.type.substring(this.type.lastIndexOf(".")+2);
+var o=dojo.clone(this.style.norm);
+o.borderWidth=o.width;
+delete o.width;
+if(_1a=="path"){
+o.points=this.points;
+}else{
+o=dojo.mixin(o,this.data);
+}
+o.type=_1a;
+if(this.isText){
+o.text=this.getText();
+o=dojo.mixin(o,this.style.text);
+delete o.minWidth;
+delete o.deleteEmptyCreate;
+delete o.deleteEmptyModify;
+}
+var lbl=this.getLabel();
+if(lbl){
+o.label=lbl;
+}
+return o;
+},disable:function(){
+this.enabled=false;
+this.renderHit=false;
+this.onChangeStyle(this);
+},enable:function(){
+this.enabled=true;
+this.renderHit=true;
+this.onChangeStyle(this);
+},select:function(){
+this.selected=true;
+this.onChangeStyle(this);
+},deselect:function(_1b){
+if(_1b){
+setTimeout(dojo.hitch(this,function(){
+this.selected=false;
+this.onChangeStyle(this);
+}),200);
+}else{
+this.selected=false;
+this.onChangeStyle(this);
+}
+},_toggleSelected:function(){
+if(!this.selected){
+return;
+}
+this.deselect();
+setTimeout(dojo.hitch(this,"select"),0);
+},highlight:function(){
+this.highlighted=true;
+this.onChangeStyle(this);
+},unhighlight:function(){
+this.highlighted=false;
+this.onChangeStyle(this);
+},moveToFront:function(){
+this.container&&this.container.moveToFront();
+},moveToBack:function(){
+this.container&&this.container.moveToBack();
+},onTransformBegin:function(_1c){
+this._isBeingModified=true;
+},onTransformEnd:function(_1d){
+this._isBeingModified=false;
+this.onModify(this);
+},onTransform:function(_1e){
+if(!this._isBeingModified){
+this.onTransformBegin();
+}
+this.setPoints(this.points);
+this.render();
+},transformPoints:function(mx){
+if(!mx.dx&&!mx.dy){
+return;
+}
+var _1f=dojo.clone(this.points),_20=false;
+dojo.forEach(this.points,function(o){
+o.x+=mx.dx;
+o.y+=mx.dy;
+if(o.x<this.marginZero||o.y<this.marginZero){
+_20=true;
+}
+});
+if(_20){
+this.points=_1f;
+console.error("Attempt to set object '"+this.id+"' to less than zero.");
+return;
+}
+this.onTransform();
+this.onTransformEnd();
+},applyTransform:function(mx){
+this.transformPoints(mx);
+},setTransform:function(mx){
+this.attr({x:mx.dx,y:mx.dy});
+},getTransform:function(){
+return this.selected?this.container.getParent().getTransform():{dx:0,dy:0};
+},addShadow:function(_21){
+_21=_21===true?{}:_21;
+_21.stencil=this;
+this.shadow=new dojox.drawing.annotations.BoxShadow(_21);
+},removeShadow:function(){
+this.shadow.destroy();
+},setLabel:function(_22){
+if(!this._label){
+this._label=new dojox.drawing.annotations.Label({text:_22,util:this.util,mouse:this.mouse,stencil:this,annotation:true,container:this.container,labelPosition:this.labelPosition});
+}else{
+if(_22){
+this._label.setLabel(_22);
+}
+}
+},getLabel:function(){
+if(this._label){
+return this._label.getText();
+}
+return null;
+},getAngle:function(){
+var d=this.pointsToData();
+var obj={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
+var _23=this.util.angle(obj,this.angleSnap);
+_23=180-_23;
+_23=_23==360?0:_23;
+return _23;
+},getRadius:function(){
+var box=this.getBounds(true);
+var _24={start:{x:box.x1,y:box.y1},x:box.x2,y:box.y2};
+return this.util.length(_24);
+},getBounds:function(_25){
+var p=this.points,x1,y1,x2,y2;
+if(p.length==2){
+if(_25){
+x1=p[0].x;
+y1=p[0].y;
+x2=p[1].x;
+y2=p[1].y;
+}else{
+x1=p[0].x<p[1].x?p[0].x:p[1].x;
+y1=p[0].y<p[1].y?p[0].y:p[1].y;
+x2=p[0].x<p[1].x?p[1].x:p[0].x;
+y2=p[0].y<p[1].y?p[1].y:p[0].y;
+}
+return {x1:x1,y1:y1,x2:x2,y2:y2,x:x1,y:y1,w:x2-x1,h:y2-y1};
+}else{
+return {x1:p[0].x,y1:p[0].y,x2:p[2].x,y2:p[2].y,x:p[0].x,y:p[0].y,w:p[2].x-p[0].x,h:p[2].y-p[0].y};
+}
+},preventNegativePos:function(){
+if(this._isBeingModified){
+return;
+}
+if(!this.points||!this.points.length){
+return;
+}
+if(this.type=="dojox.drawing.tools.custom.Axes"){
+var _26=this.marginZero,_27=this.marginZero;
+dojo.forEach(this.points,function(p){
+_26=Math.min(p.y,_26);
+});
+dojo.forEach(this.points,function(p){
+_27=Math.min(p.x,_27);
+});
+if(_26<this.marginZero){
+dojo.forEach(this.points,function(p,i){
+p.y=p.y+(this.marginZero-_26);
+},this);
+}
+if(_27<this.marginZero){
+dojo.forEach(this.points,function(p){
+p.x+=(this.marginZero-_27);
+},this);
+}
+}else{
+dojo.forEach(this.points,function(p){
+p.x=p.x<0?this.marginZero:p.x;
+p.y=p.y<0?this.marginZero:p.y;
+});
+}
+this.setPoints(this.points);
+},_onPostRender:function(_28){
+if(this._isBeingModified){
+this.onModify(this);
+this._isBeingModified=false;
+}else{
+if(!this.created){
+}
+}
+if(!this.editMode&&!this.selected&&this._prevData&&dojo.toJson(this._prevData)!=dojo.toJson(this.data)){
+this.onChangeData(this);
+this._prevData=dojo.clone(this.data);
+}else{
+if(!this._prevData&&(!this.isText||this.getText())){
+this._prevData=dojo.clone(this.data);
+}
+}
+},_setNodeAtts:function(_29){
+var att=this.enabled&&!this.annotation?this.drawingType:"";
+this.util.attr(_29,"drawingType",att);
+},destroy:function(){
+if(this.destroyed){
+return;
+}
+if(this.data||this.points&&this.points.length){
+this.onDelete(this);
+}
+this.disconnectMouse();
+this.disconnect(this._cons);
+dojo.disconnect(this._postRenderCon);
+this.remove(this.shape,this.hit);
+this.destroyed=true;
+},remove:function(){
+var a=arguments;
+if(!a.length){
+if(!this.shape){
+return;
+}
+a=[this.shape];
+}
+for(var i=0;i<a.length;i++){
+if(a[i]){
+a[i].removeShape();
+}
+}
+},connectMult:function(){
+if(arguments.length>1){
+this._cons.push(this.connect.apply(this,arguments));
+}else{
+if(dojo.isArray(arguments[0][0])){
+dojo.forEach(arguments[0],function(ar){
+this._cons.push(this.connect.apply(this,ar));
+},this);
+}else{
+this._cons.push(this.connect.apply(this,arguments[0]));
+}
+}
+},connect:function(o,e,s,m,_2a){
+var c;
+if(typeof (o)!="object"){
+if(s){
+m=s;
+s=e;
+e=o;
+o=this;
+}else{
+m=e;
+e=o;
+o=s=this;
+}
+}else{
+if(!m){
+m=s;
+s=this;
+}else{
+if(_2a){
+c=dojo.connect(o,e,function(evt){
+dojo.hitch(s,m)(evt);
+dojo.disconnect(c);
+});
+this._cons.push(c);
+return c;
+}else{
+}
+}
+}
+c=dojo.connect(o,e,s,m);
+this._cons.push(c);
+return c;
+},disconnect:function(_2b){
+if(!_2b){
+return;
+}
+if(!dojo.isArray(_2b)){
+_2b=[_2b];
+}
+dojo.forEach(_2b,dojo.disconnect,dojo);
+},connectMouse:function(){
+this._mouseHandle=this.mouse.register(this);
+},disconnectMouse:function(){
+this.mouse.unregister(this._mouseHandle);
+},render:function(){
+},dataToPoints:function(_2c){
+},pointsToData:function(_2d){
+},onDown:function(obj){
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+},onMove:function(obj){
+},onDrag:function(obj){
+},onUp:function(obj){
+}});
+}
diff --git a/js/dojo/dojox/drawing/tools/Arrow.js b/js/dojo/dojox/drawing/tools/Arrow.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Arrow.js
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Arrow"]){
+dojo._hasResource["dojox.drawing.tools.Arrow"]=true;
+dojo.provide("dojox.drawing.tools.Arrow");
+dojox.drawing.tools.Arrow=dojox.drawing.util.oo.declare(dojox.drawing.tools.Line,function(_1){
+if(this.arrowStart){
+this.begArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:0,idx2:1});
+}
+if(this.arrowEnd){
+this.endArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:1,idx2:0});
+}
+if(this.points.length){
+this.render();
+}
+},{draws:true,type:"dojox.drawing.tools.Arrow",baseRender:false,arrowStart:false,arrowEnd:true,onUp:function(_2){
+if(this.created||!this.shape){
+return;
+}
+var p=this.points;
+var _3=this.util.distance(p[0].x,p[0].y,p[1].x,p[1].y);
+if(_3<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+var pt=this.util.snapAngle(_2,this.angleSnap/180);
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.Arrow.setup={name:"dojox.drawing.tools.Arrow",tooltip:"Arrow Tool",iconClass:"iconArrow"};
+dojox.drawing.register(dojox.drawing.tools.Arrow.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/Ellipse.js b/js/dojo/dojox/drawing/tools/Ellipse.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Ellipse.js
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Ellipse"]){
+dojo._hasResource["dojox.drawing.tools.Ellipse"]=true;
+dojo.provide("dojox.drawing.tools.Ellipse");
+dojox.drawing.tools.Ellipse=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Ellipse,function(){
+},{draws:true,onDrag:function(_1){
+var s=_1.start,e=_1;
+var x=s.x<e.x?s.x:e.x,y=s.y<e.y?s.y:e.y,w=s.x<e.x?e.x-s.x:s.x-e.x,h=s.y<e.y?e.y-s.y:s.y-e.y;
+if(this.keys.shift){
+w=h=Math.max(w,h);
+}
+if(!this.keys.alt){
+x+=w/2;
+y+=h/2;
+w/=2;
+h/=2;
+}else{
+if(y-h<0){
+h=y;
+}
+if(x-w<0){
+w=x;
+}
+}
+this.points=[{x:x-w,y:y-h},{x:x+w,y:y-h},{x:x+w,y:y+h},{x:x-w,y:y+h}];
+this.render();
+},onUp:function(_2){
+if(this.created||!this.shape){
+return;
+}
+var o=this.pointsToData();
+if(o.rx*2<this.minimumSize&&o.ry*2<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+this.onRender(this);
+}});
+dojox.drawing.tools.Ellipse.setup={name:"dojox.drawing.tools.Ellipse",tooltip:"Ellipse Tool",iconClass:"iconEllipse"};
+dojox.drawing.register(dojox.drawing.tools.Ellipse.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/Line.js b/js/dojo/dojox/drawing/tools/Line.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Line.js
@@ -0,0 +1,61 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Line"]){
+dojo._hasResource["dojox.drawing.tools.Line"]=true;
+dojo.provide("dojox.drawing.tools.Line");
+dojox.drawing.tools.Line=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Line,function(){
+},{draws:true,showAngle:true,onTransformEnd:function(_1){
+this._toggleSelected();
+if(this.getRadius()<this.minimumSize){
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]);
+}else{
+var d=this.data;
+var _2={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
+var pt=this.util.snapAngle(_2,this.angleSnap/180);
+this.setPoints([{x:d.x1,y:d.y1},{x:pt.x,y:pt.y}]);
+this._isBeingModified=false;
+this.onModify(this);
+}
+},onDrag:function(_3){
+if(this.created){
+return;
+}
+var x1=_3.start.x,y1=_3.start.y,x2=_3.x,y2=_3.y;
+if(this.keys.shift){
+var pt=this.util.snapAngle(_3,45/180);
+x2=pt.x;
+y2=pt.y;
+}
+if(this.keys.alt){
+var dx=x2>x1?((x2-x1)/2):((x1-x2)/-2);
+var dy=y2>y1?((y2-y1)/2):((y1-y2)/-2);
+x1-=dx;
+x2-=dx;
+y1-=dy;
+y2-=dy;
+}
+this.setPoints([{x:x1,y:y1},{x:x2,y:y2}]);
+this.render();
+},onUp:function(_4){
+if(this.created||!this.shape){
+return;
+}
+if(this.getRadius()<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+var pt=this.util.snapAngle(_4,this.angleSnap/180);
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.Line.setup={name:"dojox.drawing.tools.Line",tooltip:"Line Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Line.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/Path.js b/js/dojo/dojox/drawing/tools/Path.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Path.js
@@ -0,0 +1,152 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Path"]){
+dojo._hasResource["dojox.drawing.tools.Path"]=true;
+dojo.provide("dojox.drawing.tools.Path");
+dojox.drawing.tools.Path=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(){
+this.pathMode="";
+this.currentPathMode="";
+this._started=false;
+this.oddEvenClicks=0;
+},{draws:true,onDown:function(_1){
+if(!this._started){
+this.onStartPath(_1);
+}
+},makeSubPath:function(_2){
+if(_2){
+if(this.currentPathMode=="Q"){
+this.points.push({x:this.points[0].x,y:this.points[0].y});
+}
+this.points.push({t:"Z"});
+this.render();
+}
+this.currentPathMode="";
+this.pathMode="M";
+},onStartPath:function(_3){
+this._started=true;
+this.revertRenderHit=this.renderHit;
+this.renderHit=false;
+this.closePath=false;
+this.mouse.setEventMode("PathEdit");
+this.closePoint={x:_3.x,y:_3.y};
+this._kc1=this.connect(this.keys,"onEsc",this,function(){
+this.onCompletePath(false);
+});
+this._kc2=this.connect(this.keys,"onKeyUp",this,function(_4){
+switch(_4.letter){
+case "c":
+this.onCompletePath(true);
+break;
+case "l":
+this.pathMode="L";
+break;
+case "m":
+this.makeSubPath(false);
+break;
+case "q":
+this.pathMode="Q";
+break;
+case "s":
+this.pathMode="S";
+break;
+case "z":
+this.makeSubPath(true);
+break;
+}
+});
+},onCompletePath:function(_5){
+this.remove(this.closeGuide,this.guide);
+var _6=this.getBounds();
+if(_6.w<this.minimumSize&&_6.h<this.minimumSize){
+this.remove(this.hit,this.shape,this.closeGuide);
+this._started=false;
+this.mouse.setEventMode("");
+this.setPoints([]);
+return;
+}
+if(_5){
+if(this.currentPathMode=="Q"){
+this.points.push({x:this.points[0].x,y:this.points[0].y});
+}
+this.closePath=true;
+}
+this.renderHit=this.revertRenderHit;
+this.renderedOnce=true;
+this.onRender(this);
+this.disconnect([this._kc1,this._kc2]);
+this.mouse.setEventMode("");
+this.render();
+},onUp:function(_7){
+if(!this._started||!_7.withinCanvas){
+return;
+}
+if(this.points.length>2&&this.closeRadius>this.util.distance(_7.x,_7.y,this.closePoint.x,this.closePoint.y)){
+this.onCompletePath(true);
+}else{
+var p={x:_7.x,y:_7.y};
+this.oddEvenClicks++;
+if(this.currentPathMode!=this.pathMode){
+if(this.pathMode=="Q"){
+p.t="Q";
+this.oddEvenClicks=0;
+}else{
+if(this.pathMode=="L"){
+p.t="L";
+}else{
+if(this.pathMode=="M"){
+p.t="M";
+this.closePoint={x:_7.x,y:_7.y};
+}
+}
+}
+this.currentPathMode=this.pathMode;
+}
+this.points.push(p);
+if(this.points.length>1){
+this.remove(this.guide);
+this.render();
+}
+}
+},createGuide:function(_8){
+if(!this.points.length){
+return;
+}
+var _9=[].concat(this.points);
+var pt={x:_8.x,y:_8.y};
+if(this.currentPathMode=="Q"&&this.oddEvenClicks%2){
+pt.t="L";
+}
+this.points.push(pt);
+this.render();
+this.points=_9;
+var _a=this.util.distance(_8.x,_8.y,this.closePoint.x,this.closePoint.y);
+if(this.points.length>1){
+if(_a<this.closeRadius&&!this.closeGuide){
+var c={cx:this.closePoint.x,cy:this.closePoint.y,rx:this.closeRadius,ry:this.closeRadius};
+this.closeGuide=this.container.createEllipse(c).setFill(this.closeColor);
+}else{
+if(_a>this.closeRadius&&this.closeGuide){
+this.remove(this.closeGuide);
+this.closeGuide=null;
+}
+}
+}
+},onMove:function(_b){
+if(!this._started){
+return;
+}
+this.createGuide(_b);
+},onDrag:function(_c){
+if(!this._started){
+return;
+}
+this.createGuide(_c);
+}});
+dojox.drawing.tools.Path.setup={name:"dojox.drawing.tools.Path",tooltip:"Path Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Path.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/Pencil.js b/js/dojo/dojox/drawing/tools/Pencil.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Pencil.js
@@ -0,0 +1,56 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Pencil"]){
+dojo._hasResource["dojox.drawing.tools.Pencil"]=true;
+dojo.provide("dojox.drawing.tools.Pencil");
+dojox.drawing.tools.Pencil=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(){
+this._started=false;
+},{draws:true,minDist:15,onDown:function(_1){
+this._started=true;
+var p={x:_1.x,y:_1.y};
+this.points=[p];
+this.lastPoint=p;
+this.revertRenderHit=this.renderHit;
+this.renderHit=false;
+this.closePath=false;
+},onDrag:function(_2){
+if(!this._started||this.minDist>this.util.distance(_2.x,_2.y,this.lastPoint.x,this.lastPoint.y)){
+return;
+}
+var p={x:_2.x,y:_2.y};
+this.points.push(p);
+this.render();
+this.checkClosePoint(this.points[0],_2);
+this.lastPoint=p;
+},onUp:function(_3){
+if(!this._started){
+return;
+}
+if(!this.points||this.points.length<2){
+this._started=false;
+this.points=[];
+return;
+}
+var _4=this.getBounds();
+if(_4.w<this.minimumSize&&_4.h<this.minimumSize){
+this.remove(this.hit,this.shape,this.closeGuide);
+this._started=false;
+this.setPoints([]);
+return;
+}
+if(this.checkClosePoint(this.points[0],_3,true)){
+this.closePath=true;
+}
+this.renderHit=this.revertRenderHit;
+this.renderedOnce=true;
+this.render();
+this.onRender(this);
+}});
+dojox.drawing.tools.Pencil.setup={name:"dojox.drawing.tools.Pencil",tooltip:"Pencil Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Pencil.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/Rect.js b/js/dojo/dojox/drawing/tools/Rect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/Rect.js
@@ -0,0 +1,41 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Rect"]){
+dojo._hasResource["dojox.drawing.tools.Rect"]=true;
+dojo.provide("dojox.drawing.tools.Rect");
+dojox.drawing.tools.Rect=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Rect,function(){
+},{draws:true,onDrag:function(_1){
+var s=_1.start,e=_1;
+var x=s.x<e.x?s.x:e.x,y=s.y<e.y?s.y:e.y,w=s.x<e.x?e.x-s.x:s.x-e.x,h=s.y<e.y?e.y-s.y:s.y-e.y;
+if(this.keys.shift){
+w=h=Math.max(w,h);
+}
+if(this.keys.alt){
+x-=w;
+y-=h;
+w*=2;
+h*=2;
+x=Math.max(x,0);
+y=Math.max(y,0);
+}
+this.setPoints([{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+h},{x:x,y:y+h}]);
+this.render();
+},onUp:function(_2){
+if(this.created||!this.shape){
+return;
+}
+var o=this.data;
+if(o.width<this.minimumSize&&o.height<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+this.onRender(this);
+}});
+dojox.drawing.tools.Rect.setup={name:"dojox.drawing.tools.Rect",tooltip:"<span class=\"drawingTipTitle\">Rectangle Tool</span><br/>"+"<span class=\"drawingTipDesc\">SHIFT - constrain to square</span>",iconClass:"iconRect"};
+dojox.drawing.register(dojox.drawing.tools.Rect.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/TextBlock.js b/js/dojo/dojox/drawing/tools/TextBlock.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/TextBlock.js
@@ -0,0 +1,385 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.TextBlock"]){
+dojo._hasResource["dojox.drawing.tools.TextBlock"]=true;
+dojo.provide("dojox.drawing.tools.TextBlock");
+dojo.require("dojox.drawing.stencil.Text");
+(function(){
+var _1;
+dojo.addOnLoad(function(){
+_1=dojo.byId("conEdit");
+if(!_1){
+console.error("A contenteditable div is missing from the main document. See 'dojox.drawing.tools.TextBlock'");
+}else{
+_1.parentNode.removeChild(_1);
+}
+});
+dojox.drawing.tools.TextBlock=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Text,function(_2){
+if(_2.data){
+var d=_2.data;
+var w=!d.width?this.style.text.minWidth:d.width=="auto"?"auto":Math.max(d.width,this.style.text.minWidth);
+var h=this._lineHeight;
+if(d.text&&w=="auto"){
+var o=this.measureText(this.cleanText(d.text,false),w);
+w=o.w;
+h=o.h;
+}else{
+this._text="";
+}
+this.points=[{x:d.x,y:d.y},{x:d.x+w,y:d.y},{x:d.x+w,y:d.y+h},{x:d.x,y:d.y+h}];
+if(d.showEmpty||d.text){
+this.editMode=true;
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+this.connect(this,"render",this,"onRender",true);
+if(d.showEmpty){
+this._text=d.text||"";
+this.edit();
+}else{
+if(d.text&&d.editMode){
+this._text="";
+this.edit();
+}else{
+if(d.text){
+this.render(d.text);
+}
+}
+}
+setTimeout(dojo.hitch(this,function(){
+this.editMode=false;
+}),100);
+}
+}else{
+this.connectMouse();
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+}
+},{draws:true,baseRender:false,type:"dojox.drawing.tools.TextBlock",selectOnExec:true,showEmpty:false,onDrag:function(_3){
+if(!this.parentNode){
+this.showParent(_3);
+}
+var s=this._startdrag,e=_3.page;
+this._box.left=(s.x<e.x?s.x:e.x);
+this._box.top=s.y;
+this._box.width=(s.x<e.x?e.x-s.x:s.x-e.x)+this.style.text.pad;
+dojo.style(this.parentNode,this._box.toPx());
+},onUp:function(_4){
+if(!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+var c=dojo.connect(this,"render",this,function(){
+dojo.disconnect(c);
+this.onRender(this);
+});
+this.editMode=true;
+this.showParent(_4);
+this.created=true;
+this.createTextField();
+this.connectTextField();
+},showParent:function(_5){
+if(this.parentNode){
+return;
+}
+var x=_5.pageX||10;
+var y=_5.pageY||10;
+this.parentNode=dojo.doc.createElement("div");
+this.parentNode.id=this.id;
+var d=this.style.textMode.create;
+this._box={left:x,top:y,width:_5.width||1,height:_5.height&&_5.height>8?_5.height:this._lineHeight,border:d.width+"px "+d.style+" "+d.color,position:"absolute",zIndex:500,toPx:function(){
+var o={};
+for(var nm in this){
+o[nm]=typeof (this[nm])=="number"&&nm!="zIndex"?this[nm]+"px":this[nm];
+}
+return o;
+}};
+dojo.style(this.parentNode,this._box);
+document.body.appendChild(this.parentNode);
+},createTextField:function(_6){
+var d=this.style.textMode.edit;
+this._box.border=d.width+"px "+d.style+" "+d.color;
+this._box.height="auto";
+this._box.width=Math.max(this._box.width,this.style.text.minWidth*this.mouse.zoom);
+dojo.style(this.parentNode,this._box.toPx());
+this.parentNode.appendChild(_1);
+dojo.style(_1,{height:_6?"auto":this._lineHeight+"px",fontSize:(this.textSize/this.mouse.zoom)+"px",fontFamily:this.style.text.family});
+_1.innerHTML=_6||"";
+return _1;
+},connectTextField:function(){
+if(this._textConnected){
+return;
+}
+this._textConnected=true;
+this.mouse.setEventMode("TEXT");
+this.keys.editMode(true);
+var _7,_8,_9,_a,_b=this,_c=false,_d=function(){
+dojo.forEach([_7,_8,_9,_a],function(c){
+dojo.disconnect(c);
+});
+_b._textConnected=false;
+_b.keys.editMode(false);
+_b.mouse.setEventMode();
+_b.execText();
+};
+_7=dojo.connect(_1,"keyup",this,function(_e){
+if(dojo.trim(_1.innerHTML)&&!_c){
+dojo.style(_1,"height","auto");
+_c=true;
+}else{
+if(dojo.trim(_1.innerHTML).length<2&&_c){
+dojo.style(_1,"height",this._lineHeight+"px");
+_c=false;
+}
+}
+if(_e.keyCode==13||_e.keyCode==27){
+dojo.stopEvent(_e);
+_d();
+}
+});
+_8=dojo.connect(_1,"keydown",this,function(_f){
+if(_f.keyCode==13||_f.keyCode==27){
+dojo.stopEvent(_f);
+}
+});
+_9=dojo.connect(document,"mouseup",this,function(evt){
+if(!this._onAnchor&&evt.target.id!="conEdit"){
+dojo.stopEvent(evt);
+_d();
+}else{
+_1.blur();
+setTimeout(function(){
+_1.focus();
+},200);
+}
+});
+this.createAnchors();
+_a=dojo.connect(this.mouse,"setZoom",this,function(evt){
+_d();
+});
+_1.focus();
+this.onDown=function(){
+};
+this.onDrag=function(){
+};
+var _b=this;
+setTimeout(dojo.hitch(this,function(){
+_1.focus();
+this.onUp=function(){
+if(!_b._onAnchor&&this.parentNode){
+_b.disconnectMouse();
+_d();
+_b.onUp=function(){
+};
+}
+};
+}),500);
+},execText:function(){
+var d=dojo.marginBox(this.parentNode);
+var w=Math.max(d.w,this.style.text.minWidth);
+var txt=this.cleanText(_1.innerHTML,true);
+_1.innerHTML="";
+_1.blur();
+this.destroyAnchors();
+var o=this.measureText(txt,w);
+var sc=this.mouse.scrollOffset();
+var org=this.mouse.origin;
+var x=this._box.left+sc.left-org.x;
+var y=this._box.top+sc.top-org.y;
+x*=this.mouse.zoom;
+y*=this.mouse.zoom;
+w*=this.mouse.zoom;
+o.h*=this.mouse.zoom;
+this.points=[{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+o.h},{x:x,y:y+o.h}];
+this.editMode=false;
+if(!o.text){
+this._text="";
+this._textArray=[];
+}
+this.render(o.text);
+this.onChangeText(txt);
+},edit:function(){
+this.editMode=true;
+if(this.parentNode||!this.points){
+return;
+}
+var d=this.pointsToData();
+var sc=this.mouse.scrollOffset();
+var org=this.mouse.origin;
+var obj={pageX:(d.x)/this.mouse.zoom-sc.left+org.x,pageY:(d.y)/this.mouse.zoom-sc.top+org.y,width:d.width/this.mouse.zoom,height:d.height/this.mouse.zoom};
+this.remove(this.shape,this.hit);
+this.showParent(obj);
+this.createTextField(this._text.replace("/n"," "));
+this.connectTextField();
+if(this._text){
+this.setSelection(_1,"end");
+}
+},cleanText:function(txt,_10){
+var _11=function(str){
+var _12={"&lt;":"<","&gt;":">","&amp;":"&"};
+for(var nm in _12){
+str=str.replace(new RegExp(nm,"gi"),_12[nm]);
+}
+return str;
+};
+if(_10){
+dojo.forEach(["<br>","<br/>","<br />","\\n","\\r"],function(br){
+txt=txt.replace(new RegExp(br,"gi")," ");
+});
+}
+txt=txt.replace(/&nbsp;/g," ");
+txt=_11(txt);
+txt=dojo.trim(txt);
+txt=txt.replace(/\s{2,}/g," ");
+return txt;
+},measureText:function(str,_13){
+var r="(<br\\s*/*>)|(\\n)|(\\r)";
+this.showParent({width:_13||"auto",height:"auto"});
+this.createTextField(str);
+var txt="";
+var el=_1;
+el.innerHTML="X";
+var h=dojo.marginBox(el).h;
+el.innerHTML=str;
+if(!_13||new RegExp(r,"gi").test(str)){
+txt=str.replace(new RegExp(r,"gi"),"\n");
+el.innerHTML=str.replace(new RegExp(r,"gi"),"<br/>");
+}else{
+if(dojo.marginBox(el).h==h){
+txt=str;
+}else{
+var ar=str.split(" ");
+var _14=[[]];
+var _15=0;
+el.innerHTML="";
+while(ar.length){
+var _16=ar.shift();
+el.innerHTML+=_16+" ";
+if(dojo.marginBox(el).h>h){
+_15++;
+_14[_15]=[];
+el.innerHTML=_16+" ";
+}
+_14[_15].push(_16);
+}
+dojo.forEach(_14,function(ar,i){
+_14[i]=ar.join(" ");
+});
+txt=_14.join("\n");
+el.innerHTML=txt.replace("\n","<br/>");
+}
+}
+var dim=dojo.marginBox(el);
+_1.parentNode.removeChild(_1);
+dojo.destroy(this.parentNode);
+this.parentNode=null;
+return {h:dim.h,w:dim.w,text:txt};
+},_downOnCanvas:false,onDown:function(obj){
+this._startdrag={x:obj.pageX,y:obj.pageY};
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+this._downOnCanvas=true;
+},createAnchors:function(){
+this._anchors={};
+var _17=this;
+var d=this.style.anchors,b=d.width,w=d.size-b*2,h=d.size-b*2,p=(d.size)/2*-1+"px";
+var s={position:"absolute",width:w+"px",height:h+"px",backgroundColor:d.fill,border:b+"px "+d.style+" "+d.color};
+if(dojo.isIE){
+s.paddingLeft=w+"px";
+s.fontSize=w+"px";
+}
+var ss=[{top:p,left:p},{top:p,right:p},{bottom:p,right:p},{bottom:p,left:p}];
+for(var i=0;i<4;i++){
+var _18=(i==0)||(i==3);
+var id=this.util.uid(_18?"left_anchor":"right_anchor");
+var a=dojo.create("div",{id:id},this.parentNode);
+dojo.style(a,dojo.mixin(dojo.clone(s),ss[i]));
+var md,mm,mu;
+var md=dojo.connect(a,"mousedown",this,function(evt){
+_18=evt.target.id.indexOf("left")>-1;
+_17._onAnchor=true;
+var _19=evt.pageX;
+var _1a=this._box.width;
+dojo.stopEvent(evt);
+mm=dojo.connect(document,"mousemove",this,function(evt){
+var x=evt.pageX;
+if(_18){
+this._box.left=x;
+this._box.width=_1a+_19-x;
+}else{
+this._box.width=x+_1a-_19;
+}
+dojo.style(this.parentNode,this._box.toPx());
+});
+mu=dojo.connect(document,"mouseup",this,function(evt){
+_19=this._box.left;
+_1a=this._box.width;
+dojo.disconnect(mm);
+dojo.disconnect(mu);
+_17._onAnchor=false;
+_1.focus();
+dojo.stopEvent(evt);
+});
+});
+this._anchors[id]={a:a,cons:[md]};
+}
+},destroyAnchors:function(){
+for(var n in this._anchors){
+dojo.forEach(this._anchors[n].con,dojo.disconnect,dojo);
+dojo.destroy(this._anchors[n].a);
+}
+},setSelection:function(_1b,_1c){
+console.warn("setSelection:");
+if(dojo.doc.selection){
+var r=dojo.body().createTextRange();
+r.moveToElementText(_1b);
+r.collapse(false);
+r.select();
+}else{
+var _1d=function(_1e,_1f){
+_1f=_1f||[];
+for(var i=0;i<_1e.childNodes.length;i++){
+var n=_1e.childNodes[i];
+if(n.nodeType==3){
+_1f.push(n);
+}else{
+if(n.tagName&&n.tagName.toLowerCase()=="img"){
+_1f.push(n);
+}
+}
+if(n.childNodes&&n.childNodes.length){
+_1d(n,_1f);
+}
+}
+return _1f;
+};
+_1b.focus();
+var _20=dojo.global.getSelection();
+_20.removeAllRanges();
+var r=dojo.doc.createRange();
+r.selectNodeContents(_1b);
+var _21=_1d(_1b);
+if(_1c=="end"){
+r.setStart(_21[_21.length-1],_21[_21.length-1].textContent.length);
+r.setEnd(_21[_21.length-1],_21[_21.length-1].textContent.length);
+}else{
+if(_1c=="beg"||_1c=="start"){
+r.setStart(_21[0],0);
+r.setEnd(_21[0],0);
+}else{
+if(_1c=="all"){
+r.setStart(_21[0],0);
+r.setEnd(_21[_21.length-1],_21[_21.length-1].textContent.length);
+}
+}
+}
+_20.addRange(r);
+}
+}});
+dojox.drawing.tools.TextBlock.setup={name:"dojox.drawing.tools.TextBlock",tooltip:"Text Tool",iconClass:"iconText"};
+dojox.drawing.register(dojox.drawing.tools.TextBlock.setup,"tool");
+})();
+}
diff --git a/js/dojo/dojox/drawing/tools/custom/Axes.js b/js/dojo/dojox/drawing/tools/custom/Axes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/custom/Axes.js
@@ -0,0 +1,204 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Axes"]){
+dojo._hasResource["dojox.drawing.tools.custom.Axes"]=true;
+dojo.provide("dojox.drawing.tools.custom.Axes");
+dojo.require("dojox.drawing.stencil.Path");
+dojox.drawing.tools.custom.Axes=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(_1){
+this.closePath=false;
+this.xArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:0,idx2:1});
+this.yArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:2,idx2:1});
+if(this.points&&this.points.length){
+this.setPoints=this._postSetPoints;
+this.render();
+this.onRender();
+}
+},{draws:true,type:"dojox.drawing.tools.custom.Axes",minimumSize:30,showAngle:true,closePath:false,baseRender:false,createLabels:function(){
+var _2={align:"middle",valign:"middle",util:this.util,annotation:true,container:this.container,mouse:this.mouse,stencil:this};
+this.labelX=new dojox.drawing.annotations.Label(dojo.mixin(_2,{labelPosition:this.setLabelX}));
+this.labelY=new dojox.drawing.annotations.Label(dojo.mixin(_2,{labelPosition:this.setLabelY}));
+},setLabelX:function(){
+var ax=this.points[0];
+var c=this.points[1];
+var ay=this.points[2];
+var _3=40;
+var _4=20;
+var pt,px,py,_5;
+pt=this.util.lineSub(c.x,c.y,ax.x,ax.y,_3);
+px=pt.x+(pt.y-ax.y);
+py=pt.y+(ax.x-pt.x);
+_5=this.util.lineSub(pt.x,pt.y,px,py,(_3-_4));
+return {x:_5.x,y:_5.y,width:20};
+},setLabelY:function(){
+var ax=this.points[0];
+var c=this.points[1];
+var ay=this.points[2];
+var _6=40;
+var _7=20;
+var pt,px,py,_8;
+pt=this.util.lineSub(c.x,c.y,ay.x,ay.y,_6);
+px=pt.x+(ay.y-pt.y);
+py=pt.y+(pt.x-ay.x);
+_8=this.util.lineSub(pt.x,pt.y,px,py,(_6-_7));
+_8=this.util.lineSub(pt.x,pt.y,px,py,(_6-_7));
+return {x:_8.x,y:_8.y,width:20};
+},setLabel:function(_9){
+if(this._labelsCreated){
+return;
+}
+!this.labelX&&this.createLabels();
+var x="x";
+var y="y";
+if(_9){
+_9.replace(/^\s+/,"");
+_9.replace(/\s+$/,"");
+var _a=_9.match(/(.*?)(and|&)(.*)/i);
+if(_a.length>2){
+x=_a[1].replace(/\s+$/,"");
+y=_a[3].replace(/^\s+/,"");
+}
+}
+this.labelX.setLabel(x);
+this.labelY.setLabel(y);
+this._labelsCreated=true;
+},getLabel:function(){
+if(!this.labelX){
+return {};
+}
+return {x:this.labelX._text,y:this.labelY._text};
+},anchorPositionCheck:function(x,y,_b){
+var pm=this.container.getParent().getTransform();
+var am=_b.shape.getTransform();
+var p=this.points;
+var o={x:am.dx+_b.org.x+pm.dx,y:am.dy+_b.org.y+pm.dy};
+var c={x:p[1].x+pm.dx,y:p[1].y+pm.dy};
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+return {x:ox,y:oy};
+},onTransformBegin:function(_c){
+this._isBeingModified=true;
+},onTransformEnd:function(_d){
+if(!_d){
+return;
+}
+this._isBeingModified=false;
+this._toggleSelected();
+var o=this.points[0];
+var c=this.points[1];
+var pt=this.util.constrainAngle({start:{x:c.x,y:c.y},x:o.x,y:o.y},91,180);
+if(pt.x==o.x&&pt.y==o.y){
+var _e={start:{x:c.x,y:c.y},x:o.x,y:o.y};
+pt=this.util.snapAngle(_e,this.angleSnap/180);
+_e.x=pt.x;
+_e.y=pt.y;
+var ox=_e.start.x-(_e.start.y-_e.y);
+var oy=_e.start.y-(_e.x-_e.start.x);
+if(ox<0||oy<0){
+console.warn("AXES ERROR LESS THAN ZERO - ABORT");
+return;
+}
+this.points=[{x:_e.x,y:_e.y},{x:_e.start.x,y:_e.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+this.setPoints(this.points);
+this.onModify(this);
+return;
+}
+this.points[0].x=pt.x;
+this.points[0].y=pt.y;
+o=this.points[0];
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+this.points[2]={x:ox,y:oy,noAnchor:true};
+this.setPoints(this.points);
+this.labelX.setLabel();
+this.labelY.setLabel();
+this.onModify(this);
+},getBounds:function(_f){
+var px=this.points[0],pc=this.points[1],py=this.points[2];
+if(_f){
+return {x:pc.x,y:pc.y,x1:pc.x,y1:pc.y,x2:px.x,y2:px.y,x3:py.x,y3:py.y};
+}
+var x1=py.x,y1=py.y<px.y?py.y:px.y,x2=px.x,y2=pc.y;
+return {x1:x1,y1:y1,x2:x2,y2:y2,x:x1,y:y1,w:x2-x1,h:y2-y1};
+},_postSetPoints:function(pts){
+this.points[0]=pts[0];
+if(this.pointsToData){
+this.data=this.pointsToData();
+}
+},onTransform:function(_10){
+var o=this.points[0];
+var c=this.points[1];
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+this.points[2]={x:ox,y:oy,noAnchor:true};
+this.setPoints(this.points);
+if(!this._isBeingModified){
+this.onTransformBegin();
+}
+this.render();
+},pointsToData:function(){
+var p=this.points;
+return {x1:p[1].x,y1:p[1].y,x2:p[0].x,y2:p[0].y,x3:p[2].x,y3:p[2].y};
+},dataToPoints:function(o){
+o=o||this.data;
+if(o.radius||o.angle){
+o.angle=(180-o.angle)<0?180-o.angle+360:180-o.angle;
+var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle);
+var ox=o.x-(o.y-pt.y);
+var oy=o.y-(pt.x-o.x);
+this.data=o={x2:o.x,y2:o.y,x1:pt.x,y1:pt.y,x3:ox,y3:oy};
+}
+this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2,noAnchor:true},{x:o.x3,y:o.y3,noAnchor:true}];
+return this.points;
+},onDrag:function(obj){
+var pt=this.util.constrainAngle(obj,91,180);
+obj.x=pt.x;
+obj.y=pt.y;
+var ox=obj.start.x-(obj.start.y-obj.y);
+var oy=obj.start.y-(obj.x-obj.start.x);
+if(ox<0||oy<0){
+return;
+}
+this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+this.render();
+},onUp:function(obj){
+var p=this.points;
+if(!p.length){
+return;
+}
+var len=this.util.distance(p[1].x,p[1].y,p[0].x,p[0].y);
+if(!p||!p.length){
+return;
+}else{
+if(len<this.minimumSize){
+this.remove(this.shape,this.hit);
+this.xArrow.remove(this.xArrow.shape,this.xArrow.hit);
+this.yArrow.remove(this.yArrow.shape,this.yArrow.hit);
+return;
+}
+}
+var o=p[0];
+var c=p[1];
+obj={start:{x:c.x,y:c.y},x:o.x,y:o.y};
+var pt=this.util.snapAngle(obj,this.angleSnap/180);
+obj.x=pt.x;
+obj.y=pt.y;
+var ox=obj.start.x-(obj.start.y-obj.y);
+var oy=obj.start.y-(obj.x-obj.start.x);
+if(ox<0||oy<0){
+return;
+}
+this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+this.onRender(this);
+this.setPoints=this._postSetPoints;
+}});
+dojox.drawing.tools.custom.Axes.setup={name:"dojox.drawing.tools.custom.Axes",tooltip:"Axes Tool",iconClass:"iconAxes"};
+dojox.drawing.register(dojox.drawing.tools.custom.Axes.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/custom/Equation.js b/js/dojo/dojox/drawing/tools/custom/Equation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/custom/Equation.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Equation"]){
+dojo._hasResource["dojox.drawing.tools.custom.Equation"]=true;
+dojo.provide("dojox.drawing.tools.custom.Equation");
+dojo.require("dojox.drawing.tools.TextBlock");
+dojox.drawing.tools.custom.Equation=dojox.drawing.util.oo.declare(dojox.drawing.tools.TextBlock,function(_1){
+},{customType:"equation"});
+dojox.drawing.tools.custom.Equation.setup={name:"dojox.drawing.tools.custom.Equation",tooltip:"Equation Tool",iconClass:"iconEq"};
+dojox.drawing.register(dojox.drawing.tools.custom.Equation.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/tools/custom/Vector.js b/js/dojo/dojox/drawing/tools/custom/Vector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/tools/custom/Vector.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Vector"]){
+dojo._hasResource["dojox.drawing.tools.custom.Vector"]=true;
+dojo.provide("dojox.drawing.tools.custom.Vector");
+dojo.require("dojox.drawing.tools.Arrow");
+dojo.require("dojox.drawing.util.positioning");
+dojox.drawing.tools.custom.Vector=dojox.drawing.util.oo.declare(dojox.drawing.tools.Arrow,function(_1){
+this.minimumSize=this.style.arrows.length;
+},{draws:true,type:"dojox.drawing.tools.custom.Vector",minimumSize:30,showAngle:true,labelPosition:function(){
+var d=this.data;
+var pt=dojox.drawing.util.positioning.label({x:d.x1,y:d.y1},{x:d.x2,y:d.y2});
+return {x:pt.x,y:pt.y};
+},_createZeroVector:function(_2,d,_3){
+var s=_2=="hit"?this.minimumSize:this.minimumSize/2;
+var f=_2=="hit"?_3.fill:null;
+d={cx:this.data.x1,cy:this.data.y1,rx:s,ry:s};
+this.remove(this[_2]);
+this[_2]=this.container.createEllipse(d).setStroke(_3).setFill(f);
+this.util.attr(this[_2],"drawingType","stencil");
+},render:function(){
+this.onBeforeRender(this);
+if(this.getRadius()>=this.minimumSize){
+this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}else{
+this._createZeroVector("hit",this.data,this.style.currentHit);
+this._createZeroVector("shape",this.data,this.style.current);
+}
+},onUp:function(_4){
+if(this.created||!this.shape){
+return;
+}
+if(this.getRadius()<this.minimumSize){
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]);
+}else{
+var pt=this.util.snapAngle(_4,this.angleSnap/180);
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+}
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.custom.Vector.setup={name:"dojox.drawing.tools.custom.Vector",tooltip:"Vector Tool",iconClass:"iconVector"};
+dojox.drawing.register(dojox.drawing.tools.custom.Vector.setup,"tool");
+}
diff --git a/js/dojo/dojox/drawing/ui/Button.js b/js/dojo/dojox/drawing/ui/Button.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/Button.js
@@ -0,0 +1,140 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Button"]){
+dojo._hasResource["dojox.drawing.ui.Button"]=true;
+dojo.provide("dojox.drawing.ui.Button");
+dojox.drawing.ui.Button=dojox.drawing.util.oo.declare(function(_1){
+_1.subShape=true;
+dojo.mixin(this,_1);
+this.width=_1.data.width;
+this.height=_1.data.height;
+this.id=this.id||this.util.uid(this.type);
+this.util.attr(this.container,"id",this.id);
+if(this.callback){
+this.hitched=dojo.hitch(this.scope||window,this.callback,this);
+}
+this.shape=new dojox.drawing.stencil.Rect(_1);
+var _2=function(s,p,v){
+dojo.forEach(["norm","over","down","selected"],function(nm){
+s[nm].fill[p]=v;
+});
+};
+_2(this.style.button,"y2",this.data.height+this.data.y);
+_2(this.style.button,"y1",this.data.y);
+if(_1.icon&&!_1.icon.text){
+var _3=this.drawing.getConstructor(_1.icon.type);
+var o=this.makeOptions(_1.icon);
+o.data=dojo.mixin(o.data,this.style.button.icon.norm);
+if(o.data&&o.data.borderWidth===0){
+o.data.fill=this.style.button.icon.norm.fill=o.data.color;
+}else{
+if(_1.icon.type=="line"||(_1.icon.type=="path"&&!_1.icon.closePath)){
+this.style.button.icon.selected.color=this.style.button.icon.selected.fill;
+}else{
+}
+}
+this.icon=new _3(o);
+}else{
+if(_1.text||_1.icon.text){
+var o=this.makeOptions(_1.text||_1.icon.text);
+o.data.color=this.style.button.icon.norm.color;
+this.style.button.icon.selected.color=this.style.button.icon.selected.fill;
+this.icon=new dojox.drawing.stencil.Text(o);
+this.icon.attr({height:this.icon._lineHeight,y:((this.data.height-this.icon._lineHeight)/2)+this.data.y});
+}
+}
+var c=this.drawing.getConstructor(this.toolType);
+if(c){
+this.drawing.addUI("tooltip",{data:{text:c.setup.tooltip},button:this});
+}
+this.onOut();
+},{callback:null,scope:null,hitched:null,toolType:"",onClick:function(_4){
+},makeOptions:function(d,s){
+s=s||1;
+d=dojo.clone(d);
+var o={util:this.util,mouse:this.mouse,container:this.container,subShape:true};
+if(typeof (d)=="string"){
+o.data={x:this.data.x-5,y:this.data.y+2,width:this.data.width,height:this.data.height,text:d,makeFit:true};
+}else{
+if(d.points){
+dojo.forEach(d.points,function(pt){
+pt.x=pt.x*this.data.width*0.01*s+this.data.x;
+pt.y=pt.y*this.data.height*0.01*s+this.data.y;
+},this);
+o.data={};
+for(var n in d){
+if(n!="points"){
+o.data[n]=d[n];
+}
+}
+o.points=d.points;
+}else{
+for(var n in d){
+if(/x|width/.test(n)){
+d[n]=d[n]*this.data.width*0.01*s;
+}else{
+if(/y|height/.test(n)){
+d[n]=d[n]*this.data.height*0.01*s;
+}
+}
+if(/x/.test(n)&&!/r/.test(n)){
+d[n]+=this.data.x;
+}else{
+if(/y/.test(n)&&!/r/.test(n)){
+d[n]+=this.data.y;
+}
+}
+}
+delete d.type;
+o.data=d;
+}
+}
+o.drawingType="ui";
+return o;
+if(d.borderWidth!==undefined){
+o.data.borderWidth=d.borderWidth;
+}
+return o;
+},enabled:true,selected:false,type:"drawing.library.UI.Button",select:function(){
+this.selected=true;
+this.icon.attr(this.style.button.icon.selected);
+this._change(this.style.button.selected);
+this.shape.shadow&&this.shape.shadow.hide();
+},deselect:function(){
+this.selected=false;
+this.icon.attr(this.style.button.icon.norm);
+this.shape.shadow&&this.shape.shadow.show();
+this._change(this.style.button.norm);
+},_change:function(_5){
+this.shape.attr(_5);
+this.shape.shadow&&this.shape.shadow.container.moveToBack();
+this.icon.shape.moveToFront();
+},onOver:function(){
+if(this.selected){
+return;
+}
+this._change(this.style.button.over);
+},onOut:function(){
+if(this.selected){
+return;
+}
+this._change(this.style.button.norm);
+},onDown:function(){
+if(this.selected){
+return;
+}
+this._change(this.style.button.selected);
+},onUp:function(){
+this._change(this.style.button.over);
+if(this.hitched){
+this.hitched();
+}
+this.onClick(this);
+}});
+dojox.drawing.register({name:"dojox.drawing.ui.Button"},"stencil");
+}
diff --git a/js/dojo/dojox/drawing/ui/Toolbar.js b/js/dojo/dojox/drawing/ui/Toolbar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/Toolbar.js
@@ -0,0 +1,123 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Toolbar"]){
+dojo._hasResource["dojox.drawing.ui.Toolbar"]=true;
+dojo.provide("dojox.drawing.ui.Toolbar");
+dojo.require("dojox.drawing.library.icons");
+dojo.declare("dojox.drawing.ui.Toolbar",[],{constructor:function(_1,_2){
+this.util=dojox.drawing.util.common;
+if(_1.drawing){
+this.toolDrawing=_1.drawing;
+this.drawing=this.toolDrawing;
+this.width=this.toolDrawing.width;
+this.height=this.toolDrawing.height;
+this.strSelected=_1.selected;
+this.strTools=_1.tools;
+this.strPlugs=_1.plugs;
+this._mixprops(["padding","margin","size","radius"],_1);
+this.addBack();
+}else{
+var _3=dojo.marginBox(_2);
+this.width=_3.w;
+this.height=_3.h;
+this.strSelected=dojo.attr(_2,"selected");
+this.strTools=dojo.attr(_2,"tools");
+this.strPlugs=dojo.attr(_2,"plugs");
+this._mixprops(["padding","margin","size","radius"],_2);
+this.toolDrawing=new dojox.drawing.Drawing({mode:"ui"},_2);
+}
+this.horizontal=this.width>this.height;
+if(this.toolDrawing.ready){
+this.makeButtons();
+}else{
+var c=dojo.connect(this.toolDrawing,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.drawing=dojox.drawing.getRegistered("drawing",dojo.attr(_2,"drawingId"));
+this.makeButtons();
+});
+}
+},padding:10,margin:5,size:30,radius:3,toolPlugGap:20,strSlelected:"",strTools:"",strPlugs:"",makeButtons:function(){
+this.buttons=[];
+this.plugins=[];
+var x=this.padding,y=this.padding,w=this.size,h=this.size,r=this.radius,g=this.margin,_4=dojox.drawing.library.icons,s={place:"BR",size:2,mult:4};
+if(this.strTools){
+var _5=[];
+if(this.strTools=="all"){
+for(var nm in dojox.drawing.getRegistered("tool")){
+_5.push(this.util.abbr(nm));
+}
+}else{
+_5=this.strTools.split(",");
+dojo.map(_5,function(t){
+return dojo.trim(t);
+});
+}
+dojo.forEach(_5,function(t){
+t=dojo.trim(t);
+var _6=this.toolDrawing.addUI("button",{data:{x:x,y:y,width:w,height:h,r:r},toolType:t,icon:_4[t],shadow:s,scope:this,callback:"onToolClick"});
+this.buttons.push(_6);
+if(this.strSelected==t){
+_6.select();
+this.drawing.setTool(_6.toolType);
+}
+if(this.horizontal){
+y+=h+g;
+}else{
+y+=h+g;
+}
+},this);
+}
+if(this.horizontal){
+y+=this.toolPlugGap;
+}else{
+y+=this.toolPlugGap;
+}
+if(this.strPlugs){
+var _7=[];
+if(this.strPlugs=="all"){
+for(var nm in dojox.drawing.getRegistered("plugin")){
+_7.push(this.util.abbr(nm));
+}
+}else{
+_7=this.strPlugs.split(",");
+dojo.map(_7,function(p){
+return dojo.trim(p);
+});
+}
+dojo.forEach(_7,function(p){
+t=dojo.trim(p);
+var _8=this.toolDrawing.addUI("button",{data:{x:x,y:y,width:w,height:h,r:r},toolType:t,icon:_4[t],shadow:s,scope:this,callback:"onPlugClick"});
+this.plugins.push(_8);
+if(this.horizontal){
+y+=h+g;
+}else{
+y+=h+g;
+}
+this.drawing.addPlugin({name:this.drawing.stencilTypeMap[p],options:{button:_8}});
+},this);
+}
+},addTool:function(){
+},addPlugin:function(){
+},addBack:function(){
+this.toolDrawing.addUI("rect",{data:{x:0,y:0,width:this.width,height:this.size+(this.padding*2),fill:"#ffffff",borderWidth:0}});
+},onToolClick:function(_9){
+dojo.forEach(this.buttons,function(b){
+if(b.id==_9.id){
+b.select();
+this.drawing.setTool(_9.toolType);
+}else{
+b.deselect();
+}
+},this);
+},onPlugClick:function(_a){
+},_mixprops:function(_b,_c){
+dojo.forEach(_b,function(p){
+this[p]=_c.tagName?dojo.attr(_c,p)===null?this[p]:dojo.attr(_c,p):_c[p]===undefined?this[p]:_c[p];
+},this);
+}});
+}
diff --git a/js/dojo/dojox/drawing/ui/Tooltip.js b/js/dojo/dojox/drawing/ui/Tooltip.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/Tooltip.js
@@ -0,0 +1,64 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Tooltip"]){
+dojo._hasResource["dojox.drawing.ui.Tooltip"]=true;
+dojo.provide("dojox.drawing.ui.Tooltip");
+dojo.require("dojox.drawing.plugins._Plugin");
+(function(){
+var _1=null;
+var _2=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_3){
+this.createDom();
+},{show:function(_4,_5){
+this.domNode.innerHTML=_5;
+var dx=30,dy=30;
+var px=_4.data.x+_4.data.width;
+var py=_4.data.y+_4.data.height;
+var x=px+this.mouse.origin.x+dx;
+var y=py+this.mouse.origin.y+dx;
+dojo.style(this.domNode,{display:"inline",left:x+"px",top:y+"px"});
+var _6=dojo.marginBox(this.domNode);
+this.createShape(x-this.mouse.origin.x,y-this.mouse.origin.y,_6.w,_6.h);
+},createShape:function(x,y,w,h){
+this.balloon&&this.balloon.destroy();
+var r=5,x2=x+w,y2=y+h,_7=[];
+var _8=function(){
+for(var i=0;i<arguments.length;i++){
+_7.push(arguments[i]);
+}
+};
+_8({x:x,y:y+5},{t:"Q",x:x,y:y},{x:x+r,y:y});
+_8({t:"L",x:x2-r,y:y});
+_8({t:"Q",x:x2,y:y},{x:x2,y:y+r});
+_8({t:"L",x:x2,y:y2-r});
+_8({t:"Q",x:x2,y:y2},{x:x2-r,y:y2});
+_8({t:"L",x:x+r,y:y2});
+_8({t:"Q",x:x,y:y2},{x:x,y:y2-r});
+_8({t:"L",x:x,y:y+r});
+this.balloon=this.drawing.addUI("path",{points:_7});
+},createDom:function(){
+this.domNode=dojo.create("span",{"class":"drawingTooltip"},document.body);
+dojo.style(this.domNode,{display:"none",position:"absolute"});
+}});
+dojox.drawing.ui.Tooltip=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_9){
+if(!_1){
+_1=new _2(_9);
+}
+if(_9.stencil){
+}else{
+if(this.button){
+this.connect(this.button,"onOver",this,"onOver");
+this.connect(this.button,"onOut",this,"onOut");
+}
+}
+},{width:300,height:200,onOver:function(){
+_1.show(this.button,this.data.text);
+},onOut:function(){
+}});
+dojox.drawing.register({name:"dojox.drawing.ui.Tooltip"},"stencil");
+})();
+}
diff --git a/js/dojo/dojox/drawing/ui/dom/Pan.js b/js/dojo/dojox/drawing/ui/dom/Pan.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/dom/Pan.js
@@ -0,0 +1,118 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Pan"]){
+dojo._hasResource["dojox.drawing.ui.dom.Pan"]=true;
+dojo.provide("dojox.drawing.ui.dom.Pan");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojo.deprecated("dojox.drawing.ui.dom.Pan","It may not even make it to the 1.4 release.",1.4);
+dojox.drawing.ui.dom.Pan=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+this.domNode=_1.node;
+var _2;
+dojo.connect(this.domNode,"click",this,"onSetPan");
+dojo.connect(this.keys,"onKeyUp",this,"onKeyUp");
+dojo.connect(this.keys,"onKeyDown",this,"onKeyDown");
+dojo.connect(this.anchors,"onAnchorUp",this,"checkBounds");
+dojo.connect(this.stencils,"register",this,"checkBounds");
+dojo.connect(this.canvas,"resize",this,"checkBounds");
+dojo.connect(this.canvas,"setZoom",this,"checkBounds");
+dojo.connect(this.canvas,"onScroll",this,function(){
+if(this._blockScroll){
+this._blockScroll=false;
+return;
+}
+_2&&clearTimeout(_2);
+_2=setTimeout(dojo.hitch(this,"checkBounds"),200);
+});
+this._mouseHandle=this.mouse.register(this);
+},{selected:false,type:"dojox.drawing.ui.dom.Pan",onKeyUp:function(_3){
+if(_3.keyCode==32){
+this.onSetPan(false);
+}
+},onKeyDown:function(_4){
+if(_4.keyCode==32){
+this.onSetPan(true);
+}
+},onSetPan:function(_5){
+if(_5===true||_5===false){
+this.selected=!_5;
+}
+if(this.selected){
+this.selected=false;
+dojo.removeClass(this.domNode,"selected");
+}else{
+this.selected=true;
+dojo.addClass(this.domNode,"selected");
+}
+this.mouse.setEventMode(this.selected?"pan":"");
+},onPanDrag:function(_6){
+var x=_6.x-_6.last.x;
+var y=_6.y-_6.last.y;
+this.canvas.domNode.parentNode.scrollTop-=_6.move.y;
+this.canvas.domNode.parentNode.scrollLeft-=_6.move.x;
+this.canvas.onScroll();
+},onStencilUp:function(_7){
+this.checkBounds();
+},onStencilDrag:function(_8){
+},checkBounds:function(){
+var _9=function(){
+};
+var _a=function(){
+};
+var t=Infinity,r=-Infinity,b=-Infinity,l=Infinity,sx=0,sy=0,dy=0,dx=0,mx=this.stencils.group?this.stencils.group.getTransform():{dx:0,dy:0},sc=this.mouse.scrollOffset(),_b=sc.left?10:0,_c=sc.top?10:0,ch=this.canvas.height,cw=this.canvas.width,z=this.canvas.zoom,_d=this.canvas.parentHeight,_e=this.canvas.parentWidth;
+this.stencils.withSelected(function(m){
+var o=m.getBounds();
+_a("SEL BOUNDS:",o);
+t=Math.min(o.y1+mx.dy,t);
+r=Math.max(o.x2+mx.dx,r);
+b=Math.max(o.y2+mx.dy,b);
+l=Math.min(o.x1+mx.dx,l);
+});
+this.stencils.withUnselected(function(m){
+var o=m.getBounds();
+_a("UN BOUNDS:",o);
+t=Math.min(o.y1,t);
+r=Math.max(o.x2,r);
+b=Math.max(o.y2,b);
+l=Math.min(o.x1,l);
+});
+b*=z;
+var _f=0,_10=0;
+_9("Bottom test","b:",b,"z:",z,"ch:",ch,"pch:",_d,"top:",sc.top,"sy:",sy);
+if(b>_d||sc.top){
+_9("*bottom scroll*");
+ch=Math.max(b,_d+sc.top);
+sy=sc.top;
+_f+=this.canvas.getScrollWidth();
+}else{
+if(!sy&&ch>_d){
+_9("*bottom remove*");
+ch=_d;
+}
+}
+r*=z;
+if(r>_e||sc.left){
+cw=Math.max(r,_e+sc.left);
+sx=sc.left;
+_10+=this.canvas.getScrollWidth();
+}else{
+if(!sx&&cw>_e){
+cw=_e;
+}
+}
+cw+=_f*2;
+ch+=_10*2;
+this._blockScroll=true;
+this.stencils.group&&this.stencils.group.applyTransform({dx:dx,dy:dy});
+this.stencils.withUnselected(function(m){
+m.transformPoints({dx:dx,dy:dy});
+});
+this.canvas.setDimensions(cw,ch,sx,sy);
+}});
+dojox.drawing.ui.dom.Pan.setup={name:"dojox.drawing.ui.dom.Pan",tooltip:"Pan Tool",iconClass:"iconPan"};
+dojox.drawing.register(dojox.drawing.ui.dom.Pan.setup,"plugin");
+}
diff --git a/js/dojo/dojox/drawing/ui/dom/Toolbar.js b/js/dojo/dojox/drawing/ui/dom/Toolbar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/dom/Toolbar.js
@@ -0,0 +1,114 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Toolbar"]){
+dojo._hasResource["dojox.drawing.ui.dom.Toolbar"]=true;
+dojo.provide("dojox.drawing.ui.dom.Toolbar");
+dojo.deprecated("dojox.drawing.ui.dom.Toolbar","It may not even make it to the 1.4 release.",1.4);
+(function(){
+dojo.declare("dojox.drawing.ui.dom.Toolbar",[],{baseClass:"drawingToolbar",buttonClass:"drawingButton",iconClass:"icon",constructor:function(_1,_2){
+dojo.addOnLoad(this,function(){
+this.domNode=dojo.byId(_2);
+dojo.addClass(this.domNode,this.baseClass);
+this.parse();
+});
+},createIcon:function(_3,_4){
+var _5=_4&&_4.setup?_4.setup:{};
+if(_5.iconClass){
+var _6=_5.iconClass?_5.iconClass:"iconNone";
+var _7=_5.tooltip?_5.tooltip:"Tool";
+var _8=dojo.create("div",{title:_7},_3);
+dojo.addClass(_8,this.iconClass);
+dojo.addClass(_8,_6);
+dojo.connect(_3,"mouseup",function(_9){
+dojo.stopEvent(_9);
+dojo.removeClass(_3,"active");
+});
+dojo.connect(_3,"mouseover",function(_a){
+dojo.stopEvent(_a);
+dojo.addClass(_3,"hover");
+});
+dojo.connect(_3,"mousedown",this,function(_b){
+dojo.stopEvent(_b);
+dojo.addClass(_3,"active");
+});
+dojo.connect(_3,"mouseout",this,function(_c){
+dojo.stopEvent(_c);
+dojo.removeClass(_3,"hover");
+});
+}
+},createTool:function(_d){
+_d.innerHTML="";
+var _e=dojo.attr(_d,"tool");
+this.toolNodes[_e]=_d;
+dojo.attr(_d,"tabIndex",1);
+var _f=dojo.getObject(_e);
+this.createIcon(_d,_f);
+this.drawing.registerTool(_e,_f);
+dojo.connect(_d,"mouseup",this,function(evt){
+dojo.stopEvent(evt);
+dojo.removeClass(_d,"active");
+this.onClick(_e);
+});
+dojo.connect(_d,"mouseover",function(evt){
+dojo.stopEvent(evt);
+dojo.addClass(_d,"hover");
+});
+dojo.connect(_d,"mousedown",this,function(evt){
+dojo.stopEvent(evt);
+dojo.addClass(_d,"active");
+});
+dojo.connect(_d,"mouseout",this,function(evt){
+dojo.stopEvent(evt);
+dojo.removeClass(_d,"hover");
+});
+},parse:function(){
+var _10=dojo.attr(this.domNode,"drawingId");
+this.drawing=dojox.drawing.util.common.byId(_10);
+!this.drawing&&console.error("Drawing not found based on 'drawingId' in Toolbar. ");
+this.toolNodes={};
+var _11;
+dojo.query(">",this.domNode).forEach(function(_12,i){
+_12.className=this.buttonClass;
+var _13=dojo.attr(_12,"tool");
+var _14=dojo.attr(_12,"action");
+var _15=dojo.attr(_12,"plugin");
+if(_13){
+if(i==0||dojo.attr(_12,"selected")=="true"){
+_11=_13;
+}
+this.createTool(_12);
+}else{
+if(_15){
+var p={name:_15,options:{}},opt=dojo.attr(_12,"options");
+if(opt){
+p.options=eval("("+opt+")");
+}
+p.options.node=_12;
+_12.innerHTML="";
+this.drawing.addPlugin(p);
+this.createIcon(_12,dojo.getObject(dojo.attr(_12,"plugin")));
+}
+}
+},this);
+this.drawing.initPlugins();
+dojo.connect(this.drawing,"setTool",this,"onSetTool");
+this.drawing.setTool(_11);
+},onClick:function(_16){
+this.drawing.setTool(_16);
+},onSetTool:function(_17){
+for(var n in this.toolNodes){
+if(n==_17){
+dojo.addClass(this.toolNodes[_17],"selected");
+this.toolNodes[_17].blur();
+}else{
+dojo.removeClass(this.toolNodes[n],"selected");
+}
+}
+}});
+})();
+}
diff --git a/js/dojo/dojox/drawing/ui/dom/Zoom.js b/js/dojo/dojox/drawing/ui/dom/Zoom.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/ui/dom/Zoom.js
@@ -0,0 +1,57 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Zoom"]){
+dojo._hasResource["dojox.drawing.ui.dom.Zoom"]=true;
+dojo.provide("dojox.drawing.ui.dom.Zoom");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.ui.dom.Zoom=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+var _2=_1.node.className;
+var _3=_1.node.innerHTML;
+this.domNode=dojo.create("div",{id:"btnZoom","class":"toolCombo"},_1.node,"replace");
+this.makeButton("ZoomIn",this.topClass);
+this.makeButton("Zoom100",this.midClass);
+this.makeButton("ZoomOut",this.botClass);
+},{type:"dojox.drawing.ui.dom.Zoom",zoomInc:0.1,maxZoom:10,minZoom:0.1,zoomFactor:1,baseClass:"drawingButton",topClass:"toolComboTop",midClass:"toolComboMid",botClass:"toolComboBot",makeButton:function(_4,_5){
+var _6=dojo.create("div",{id:"btn"+_4,"class":this.baseClass+" "+_5,innerHTML:"<div title=\"Zoom In\" class=\"icon icon"+_4+"\"></div>"},this.domNode);
+dojo.connect(document,"mouseup",function(_7){
+dojo.stopEvent(_7);
+dojo.removeClass(_6,"active");
+});
+dojo.connect(_6,"mouseup",this,function(_8){
+dojo.stopEvent(_8);
+dojo.removeClass(_6,"active");
+this["on"+_4]();
+});
+dojo.connect(_6,"mouseover",function(_9){
+dojo.stopEvent(_9);
+dojo.addClass(_6,"hover");
+});
+dojo.connect(_6,"mousedown",this,function(_a){
+dojo.stopEvent(_a);
+dojo.addClass(_6,"active");
+});
+dojo.connect(_6,"mouseout",this,function(_b){
+dojo.stopEvent(_b);
+dojo.removeClass(_6,"hover");
+});
+},onZoomIn:function(_c){
+this.zoomFactor+=this.zoomInc;
+this.zoomFactor=Math.min(this.zoomFactor,this.maxZoom);
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+},onZoom100:function(_d){
+this.zoomFactor=1;
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+},onZoomOut:function(_e){
+this.zoomFactor-=this.zoomInc;
+this.zoomFactor=Math.max(this.zoomFactor,this.minZoom);
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+}});
+}
diff --git a/js/dojo/dojox/drawing/util/common.js b/js/dojo/dojox/drawing/util/common.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/util/common.js
@@ -0,0 +1,108 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.common"]){
+dojo._hasResource["dojox.drawing.util.common"]=true;
+dojo.provide("dojox.drawing.util.common");
+dojo.require("dojox.math.round");
+(function(){
+var _1={};
+dojox.drawing.util.common={radToDeg:function(n){
+return (n*180)/Math.PI;
+},degToRad:function(n){
+return (n*Math.PI)/180;
+},angle:function(_2,_3){
+if(_3){
+_3=_3/180;
+var _4=this.radians(_2),_5=this.length(_2),_6=Math.PI*_3,_7=dojox.math.round(_4/_6),_8=_7*_6;
+return dojox.math.round(this.radToDeg(_8));
+}else{
+return this.radToDeg(this.radians(_2));
+}
+},radians:function(o){
+return Math.atan2(o.start.y-o.y,o.start.x-o.x);
+},length:function(o){
+return Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2));
+},lineSub:function(x1,y1,x2,y2,_9){
+var _a=this.distance(this.argsToObj.apply(this,arguments));
+_a=_a<_9?_9:_a;
+var pc=(_a-_9)/_a;
+var x=x1-(x1-x2)*pc;
+var y=y1-(y1-y2)*pc;
+return {x:x,y:y};
+},argsToObj:function(){
+var a=arguments;
+if(a.length<4){
+return a[0];
+}
+return {start:{x:a[0],y:a[1]},x:a[2],y:a[3]};
+},distance:function(){
+var o=this.argsToObj.apply(this,arguments);
+return Math.abs(Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2)));
+},slope:function(p1,p2){
+if(!(p1.x-p2.x)){
+return 0;
+}
+return ((p1.y-p2.y)/(p1.x-p2.x));
+},pointOnCircle:function(cx,cy,_b,_c){
+radians=_c*Math.PI/180;
+var x=_b*Math.cos(radians)*-1;
+var y=_b*Math.sin(radians)*-1;
+return {x:cx+x,y:cy+y};
+},constrainAngle:function(_d,_e,_f){
+var _10=this.angle(_d);
+if(_10>=_e&&_10<=_f){
+return _d;
+}
+var _11=this.length(_d);
+var _12=_e-((360-(_f-_e))/2);
+var _13=_10>_f?_f:_e-_10<100?_e:_f;
+return this.pointOnCircle(_d.start.x,_d.start.y,_11,_13);
+},snapAngle:function(obj,ca){
+var _14=this.radians(obj),_15=this.angle(obj),_16=this.length(obj),seg=Math.PI*ca,rnd=Math.round(_14/seg),_17=rnd*seg,_18=this.radToDeg(_17),pt=this.pointOnCircle(obj.start.x,obj.start.y,_16,_18);
+return pt;
+},uid:function(str){
+str=str||"shape";
+_1[str]=_1[str]===undefined?0:_1[str]+1;
+return str+_1[str];
+},abbr:function(_19){
+return _19.substring(_19.lastIndexOf(".")+1).charAt(0).toLowerCase()+_19.substring(_19.lastIndexOf(".")+2);
+},mixin:function(o1,o2){
+},objects:{},register:function(obj){
+this.objects[obj.id]=obj;
+},byId:function(id){
+return this.objects[id];
+},attr:function(_1a,_1b,_1c,_1d){
+if(!_1a){
+return false;
+}
+try{
+if(_1a.shape&&_1a.util){
+_1a=_1a.shape;
+}
+if(!_1c&&_1b=="id"&&_1a.target){
+var n=_1a.target;
+while(!dojo.attr(n,"id")){
+n=n.parentNode;
+}
+return dojo.attr(n,"id");
+}
+if(_1a.rawNode||_1a.target){
+var _1e=Array.prototype.slice.call(arguments);
+_1e[0]=_1a.rawNode||_1a.target;
+return dojo.attr.apply(dojo,_1e);
+}
+return dojo.attr(_1a,"id");
+}
+catch(e){
+if(!_1d){
+}
+return false;
+}
+}};
+})();
+}
diff --git a/js/dojo/dojox/drawing/util/oo.js b/js/dojo/dojox/drawing/util/oo.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/util/oo.js
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.oo"]){
+dojo._hasResource["dojox.drawing.util.oo"]=true;
+dojo.provide("dojox.drawing.util.oo");
+dojox.drawing.util.oo={declare:function(){
+var f,o,_1=0,a=arguments;
+if(a.length<2){
+console.error("gfx.oo.declare; not enough arguments");
+}
+if(a.length==2){
+f=a[0];
+o=a[1];
+}else{
+a=Array.prototype.slice.call(arguments);
+o=a.pop();
+f=a.pop();
+_1=1;
+}
+for(var n in o){
+f.prototype[n]=o[n];
+}
+if(_1){
+a.unshift(f);
+f=this.extend.apply(this,a);
+}
+return f;
+},extend:function(){
+var a=arguments,_2=a[0];
+if(a.length<2){
+console.error("gfx.oo.extend; not enough arguments");
+}
+var f=function(){
+for(var i=1;i<a.length;i++){
+a[i].prototype.constructor.apply(this,arguments);
+}
+_2.prototype.constructor.apply(this,arguments);
+};
+for(var i=1;i<a.length;i++){
+for(var n in a[i].prototype){
+f.prototype[n]=a[i].prototype[n];
+}
+}
+for(var n in _2.prototype){
+f.prototype[n]=_2.prototype[n];
+}
+return f;
+}};
+}
diff --git a/js/dojo/dojox/drawing/util/positioning.js b/js/dojo/dojox/drawing/util/positioning.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/drawing/util/positioning.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.positioning"]){
+dojo._hasResource["dojox.drawing.util.positioning"]=true;
+dojo.provide("dojox.drawing.util.positioning");
+(function(){
+var _1=4;
+var _2=20;
+dojox.drawing.util.positioning.label=function(_3,_4){
+var x=0.5*(_3.x+_4.x);
+var y=0.5*(_3.y+_4.y);
+var _5=dojox.drawing.util.common.slope(_3,_4);
+var _6=_1/Math.sqrt(1+_5*_5);
+if(_4.y>_3.y){
+_6=-_6;
+}
+x+=-_6*_5;
+y+=_6;
+var _7=_4.x<_3.x?"end":"start";
+if(_4.y>_3.y){
+y-=_2;
+}
+return {x:x,y:y,foo:"bar",align:_7};
+};
+dojox.drawing.util.positioning.angle=function(_8,_9){
+var x=0.7*_8.x+0.3*_9.x;
+var y=0.7*_8.y+0.3*_9.y;
+var _a=dojox.drawing.util.common.slope(_8,_9);
+var _b=_1/Math.sqrt(1+_a*_a);
+if(_9.x<_8.x){
+_b=-_b;
+}
+x+=-_b*_a;
+y+=_b;
+var _c=_9.y>_8.y?"end":"start";
+y+=_9.x>_8.x?0.5*_2:-0.5*_2;
+return {x:x,y:y,align:_c};
+};
+})();
+}
diff --git a/js/dojo/dojox/dtl.js.uncompressed.js b/js/dojo/dojox/dtl.js.uncompressed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl.js.uncompressed.js
@@ -0,0 +1,2855 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+if(!dojo._hasResource["dojox.string.Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.string.Builder"] = true;
+dojo.provide("dojox.string.Builder");
+
+dojox.string.Builder = function(/*String?*/str){
+ // summary:
+ // A fast buffer for creating large strings.
+ //
+ // length: Number
+ // The current length of the internal string.
+
+ // N.B. the public nature of the internal buffer is no longer
+ // needed because the IE-specific fork is no longer needed--TRT.
+ var b = "";
+ this.length = 0;
+
+ this.append = function(/* String... */s){
+ // summary: Append all arguments to the end of the buffer
+ if(arguments.length>1){
+ /*
+ This is a loop unroll was designed specifically for Firefox;
+ it would seem that static index access on an Arguments
+ object is a LOT faster than doing dynamic index access.
+ Therefore, we create a buffer string and take advantage
+ of JS's switch fallthrough. The peformance of this method
+ comes very close to straight up string concatenation (+=).
+
+ If the arguments object length is greater than 9, we fall
+ back to standard dynamic access.
+
+ This optimization seems to have no real effect on either
+ Safari or Opera, so we just use it for all.
+
+ It turns out also that this loop unroll can increase performance
+ significantly with Internet Explorer, particularly when
+ as many arguments are provided as possible.
+
+ Loop unroll per suggestion from Kris Zyp, implemented by
+ Tom Trenka.
+
+ Note: added empty string to force a string cast if needed.
+ */
+ var tmp="", l=arguments.length;
+ switch(l){
+ case 9: tmp=""+arguments[8]+tmp;
+ case 8: tmp=""+arguments[7]+tmp;
+ case 7: tmp=""+arguments[6]+tmp;
+ case 6: tmp=""+arguments[5]+tmp;
+ case 5: tmp=""+arguments[4]+tmp;
+ case 4: tmp=""+arguments[3]+tmp;
+ case 3: tmp=""+arguments[2]+tmp;
+ case 2: {
+ b+=""+arguments[0]+arguments[1]+tmp;
+ break;
+ }
+ default: {
+ var i=0;
+ while(i<arguments.length){
+ tmp += arguments[i++];
+ }
+ b += tmp;
+ }
+ }
+ } else {
+ b += s;
+ }
+ this.length = b.length;
+ return this; // dojox.string.Builder
+ };
+
+ this.concat = function(/*String...*/s){
+ // summary:
+ // Alias for append.
+ return this.append.apply(this, arguments); // dojox.string.Builder
+ };
+
+ this.appendArray = function(/*Array*/strings) {
+ // summary:
+ // Append an array of items to the internal buffer.
+
+ // Changed from String.prototype.concat.apply because of IE.
+ return this.append.apply(this, strings); // dojox.string.Builder
+ };
+
+ this.clear = function(){
+ // summary:
+ // Remove all characters from the buffer.
+ b = "";
+ this.length = 0;
+ return this; // dojox.string.Builder
+ };
+
+ this.replace = function(/* String */oldStr, /* String */ newStr){
+ // summary:
+ // Replace instances of one string with another in the buffer.
+ b = b.replace(oldStr,newStr);
+ this.length = b.length;
+ return this; // dojox.string.Builder
+ };
+
+ this.remove = function(/* Number */start, /* Number? */len){
+ // summary:
+ // Remove len characters starting at index start. If len
+ // is not provided, the end of the string is assumed.
+ if(len===undefined){ len = b.length; }
+ if(len == 0){ return this; }
+ b = b.substr(0, start) + b.substr(start+len);
+ this.length = b.length;
+ return this; // dojox.string.Builder
+ };
+
+ this.insert = function(/* Number */index, /* String */str){
+ // summary:
+ // Insert string str starting at index.
+ if(index == 0){
+ b = str + b;
+ }else{
+ b = b.slice(0, index) + str + b.slice(index);
+ }
+ this.length = b.length;
+ return this; // dojox.string.Builder
+ };
+
+ this.toString = function(){
+ // summary:
+ // Return the string representation of the internal buffer.
+ return b; // String
+ };
+
+ // initialize the buffer.
+ if(str){ this.append(str); }
+};
+
+}
+
+if(!dojo._hasResource["dojox.string.tokenize"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.string.tokenize"] = true;
+dojo.provide("dojox.string.tokenize");
+
+dojox.string.tokenize = function(/*String*/ str, /*RegExp*/ re, /*Function?*/ parseDelim, /*Object?*/ instance){
+ // summary:
+ // Split a string by a regular expression with the ability to capture the delimeters
+ // parseDelim:
+ // Each group (excluding the 0 group) is passed as a parameter. If the function returns
+ // a value, it's added to the list of tokens.
+ // instance:
+ // Used as the "this" instance when calling parseDelim
+ var tokens = [];
+ var match, content, lastIndex = 0;
+ while(match = re.exec(str)){
+ content = str.slice(lastIndex, re.lastIndex - match[0].length);
+ if(content.length){
+ tokens.push(content);
+ }
+ if(parseDelim){
+ if(dojo.isOpera){
+ var copy = match.slice(0);
+ while(copy.length < match.length){
+ copy.push(null);
+ }
+ match = copy;
+ }
+ var parsed = parseDelim.apply(instance, match.slice(1).concat(tokens.length));
+ if(typeof parsed != "undefined"){
+ tokens.push(parsed);
+ }
+ }
+ lastIndex = re.lastIndex;
+ }
+ content = str.slice(lastIndex);
+ if(content.length){
+ tokens.push(content);
+ }
+ return tokens;
+}
+
+}
+
+if(!dojo._hasResource["dojox.dtl._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl._base"] = true;
+dojo.provide("dojox.dtl._base");
+
+
+
+
+dojo.experimental("dojox.dtl");
+
+(function(){
+ var dd = dojox.dtl;
+
+ dd.TOKEN_BLOCK = -1;
+ dd.TOKEN_VAR = -2;
+ dd.TOKEN_COMMENT = -3;
+ dd.TOKEN_TEXT = 3;
+
+ dd._Context = dojo.extend(function(dict){
+ // summary: Pass one of these when rendering a template to tell the template what values to use.
+ dojo._mixin(this, dict || {});
+ this._dicts = [];
+ },
+ {
+ push: function(){
+ var last = this;
+ var context = dojo.delegate(this);
+ context.pop = function(){ return last; }
+ return context;
+ },
+ pop: function(){
+ throw new Error("pop() called on empty Context");
+ },
+ get: function(key, otherwise){
+ if(typeof this[key] != "undefined"){
+ return this._normalize(this[key]);
+ }
+
+ for(var i = 0, dict; dict = this._dicts[i]; i++){
+ if(typeof dict[key] != "undefined"){
+ return this._normalize(dict[key]);
+ }
+ }
+
+ return otherwise;
+ },
+ _normalize: function(value){
+ if(value instanceof Date){
+ value.year = value.getFullYear();
+ value.month = value.getMonth() + 1;
+ value.day = value.getDate();
+ value.date = value.year + "-" + ("0" + value.month).slice(-2) + "-" + ("0" + value.day).slice(-2);
+ value.hour = value.getHours();
+ value.minute = value.getMinutes();
+ value.second = value.getSeconds();
+ value.microsecond = value.getMilliseconds();
+ }
+ return value;
+ },
+ update: function(dict){
+ var context = this.push();
+ if(dict){
+ dojo._mixin(this, dict);
+ }
+ return context;
+ }
+ });
+
+ var smart_split_re = /("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;
+ var split_re = /\s+/g;
+ var split = function(/*String|RegExp?*/ splitter, /*Integer?*/ limit){
+ splitter = splitter || split_re;
+ if(!(splitter instanceof RegExp)){
+ splitter = new RegExp(splitter, "g");
+ }
+ if(!splitter.global){
+ throw new Error("You must use a globally flagged RegExp with split " + splitter);
+ }
+ splitter.exec(""); // Reset the global
+
+ var part, parts = [], lastIndex = 0, i = 0;
+ while(part = splitter.exec(this)){
+ parts.push(this.slice(lastIndex, splitter.lastIndex - part[0].length));
+ lastIndex = splitter.lastIndex;
+ if(limit && (++i > limit - 1)){
+ break;
+ }
+ }
+ parts.push(this.slice(lastIndex));
+ return parts;
+ }
+
+ dd.Token = function(token_type, contents){
+ this.token_type = token_type;
+ this.contents = new String(dojo.trim(contents));
+ this.contents.split = split;
+ this.split = function(){
+ return String.prototype.split.apply(this.contents, arguments);
+ }
+ }
+ dd.Token.prototype.split_contents = function(/*Integer?*/ limit){
+ var bit, bits = [], i = 0;
+ limit = limit || 999;
+ while(i++ < limit && (bit = smart_split_re.exec(this.contents))){
+ bit = bit[0];
+ if(bit.charAt(0) == '"' && bit.slice(-1) == '"'){
+ bits.push('"' + bit.slice(1, -1).replace('\\"', '"').replace('\\\\', '\\') + '"');
+ }else if(bit.charAt(0) == "'" && bit.slice(-1) == "'"){
+ bits.push("'" + bit.slice(1, -1).replace("\\'", "'").replace('\\\\', '\\') + "'");
+ }else{
+ bits.push(bit);
+ }
+ }
+ return bits;
+ }
+
+ var ddt = dd.text = {
+ _get: function(module, name, errorless){
+ // summary: Used to find both tags and filters
+ var params = dd.register.get(module, name.toLowerCase(), errorless);
+ if(!params){
+ if(!errorless){
+ throw new Error("No tag found for " + name);
+ }
+ return null;
+ }
+
+ var fn = params[1];
+ var require = params[2];
+
+ var parts;
+ if(fn.indexOf(":") != -1){
+ parts = fn.split(":");
+ fn = parts.pop();
+ }
+
+ dojo["require"](require);
+
+ var parent = dojo.getObject(require);
+
+ return parent[fn || name] || parent[name + "_"] || parent[fn + "_"];
+ },
+ getTag: function(name, errorless){
+ return ddt._get("tag", name, errorless);
+ },
+ getFilter: function(name, errorless){
+ return ddt._get("filter", name, errorless);
+ },
+ getTemplate: function(file){
+ return new dd.Template(ddt.getTemplateString(file));
+ },
+ getTemplateString: function(file){
+ return dojo._getText(file.toString()) || "";
+ },
+ _resolveLazy: function(location, sync, json){
+ if(sync){
+ if(json){
+ return dojo.fromJson(dojo._getText(location)) || {};
+ }else{
+ return dd.text.getTemplateString(location);
+ }
+ }else{
+ return dojo.xhrGet({
+ handleAs: (json) ? "json" : "text",
+ url: location
+ });
+ }
+ },
+ _resolveTemplateArg: function(arg, sync){
+ if(ddt._isTemplate(arg)){
+ if(!sync){
+ var d = new dojo.Deferred();
+ d.callback(arg);
+ return d;
+ }
+ return arg;
+ }
+ return ddt._resolveLazy(arg, sync);
+ },
+ _isTemplate: function(arg){
+ return (typeof arg == "undefined") || (typeof arg == "string" && (arg.match(/^\s*[<{]/) || arg.indexOf(" ") != -1));
+ },
+ _resolveContextArg: function(arg, sync){
+ if(arg.constructor == Object){
+ if(!sync){
+ var d = new dojo.Deferred;
+ d.callback(arg);
+ return d;
+ }
+ return arg;
+ }
+ return ddt._resolveLazy(arg, sync, true);
+ },
+ _re: /(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,
+ tokenize: function(str){
+ return dojox.string.tokenize(str, ddt._re, ddt._parseDelims);
+ },
+ _parseDelims: function(varr, load, tag){
+ if(varr){
+ return [dd.TOKEN_VAR, varr];
+ }else if(load){
+ var parts = dojo.trim(tag).split(/\s+/g);
+ for(var i = 0, part; part = parts[i]; i++){
+ dojo["require"](part);
+ }
+ }else{
+ return [dd.TOKEN_BLOCK, tag];
+ }
+ }
+ }
+
+ dd.Template = dojo.extend(function(/*String|dojo._Url*/ template, /*Boolean*/ isString){
+ // template:
+ // The string or location of the string to
+ // use as a template
+ var str = isString ? template : ddt._resolveTemplateArg(template, true) || "";
+ var tokens = ddt.tokenize(str);
+ var parser = new dd._Parser(tokens);
+ this.nodelist = parser.parse();
+ },
+ {
+ update: function(node, context){
+ // node: DOMNode|String|dojo.NodeList
+ // A node reference or set of nodes
+ // context: dojo._Url|String|Object
+ // The context object or location
+ return ddt._resolveContextArg(context).addCallback(this, function(contextObject){
+ var content = this.render(new dd._Context(contextObject));
+ if(node.forEach){
+ node.forEach(function(item){
+ item.innerHTML = content;
+ });
+ }else{
+ dojo.byId(node).innerHTML = content;
+ }
+ return this;
+ });
+ },
+ render: function(context, /*concatenatable?*/ buffer){
+ buffer = buffer || this.getBuffer();
+ context = context || new dd._Context({});
+ return this.nodelist.render(context, buffer) + "";
+ },
+ getBuffer: function(){
+
+ return new dojox.string.Builder();
+ }
+ });
+
+ var qfRe = /\{\{\s*(.+?)\s*\}\}/g;
+ dd.quickFilter = function(str){
+ if(!str){
+ return new dd._NodeList();
+ }
+
+ if(str.indexOf("{%") == -1){
+ return new dd._QuickNodeList(dojox.string.tokenize(str, qfRe, function(token){
+ return new dd._Filter(token);
+ }));
+ }
+ }
+
+ dd._QuickNodeList = dojo.extend(function(contents){
+ this.contents = contents;
+ },
+ {
+ render: function(context, buffer){
+ for(var i=0, l=this.contents.length; i<l; i++){
+ if(this.contents[i].resolve){
+ buffer = buffer.concat(this.contents[i].resolve(context));
+ }else{
+ buffer = buffer.concat(this.contents[i]);
+ }
+ }
+ return buffer;
+ },
+ dummyRender: function(context){ return this.render(context, dd.Template.prototype.getBuffer()).toString(); },
+ clone: function(buffer){ return this; }
+ });
+
+ dd._Filter = dojo.extend(function(token){
+ // summary: Uses a string to find (and manipulate) a variable
+ if(!token) throw new Error("Filter must be called with variable name");
+ this.contents = token;
+
+ var cache = this._cache[token];
+ if(cache){
+ this.key = cache[0];
+ this.filters = cache[1];
+ }else{
+ this.filters = [];
+ dojox.string.tokenize(token, this._re, this._tokenize, this);
+ this._cache[token] = [this.key, this.filters];
+ }
+ },
+ {
+ _cache: {},
+ _re: /(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,
+ _values: {
+ 0: '"', // _("text")
+ 1: '"', // "text"
+ 2: "", // variable
+ 8: '"' // 'text'
+ },
+ _args: {
+ 4: '"', // :_("text")
+ 5: '"', // :"text"
+ 6: "", // :variable
+ 7: "'"// :'text'
+ },
+ _tokenize: function(){
+ var pos, arg;
+
+ for(var i = 0, has = []; i < arguments.length; i++){
+ has[i] = (typeof arguments[i] != "undefined" && typeof arguments[i] == "string" && arguments[i]);
+ }
+
+ if(!this.key){
+ for(pos in this._values){
+ if(has[pos]){
+ this.key = this._values[pos] + arguments[pos] + this._values[pos];
+ break;
+ }
+ }
+ }else{
+ for(pos in this._args){
+ if(has[pos]){
+ var value = arguments[pos];
+ if(this._args[pos] == "'"){
+ value = value.replace(/\\'/g, "'");
+ }else if(this._args[pos] == '"'){
+ value = value.replace(/\\"/g, '"');
+ }
+ arg = [!this._args[pos], value];
+ break;
+ }
+ }
+ // Get a named filter
+ var fn = ddt.getFilter(arguments[3]);
+ if(!dojo.isFunction(fn)) throw new Error(arguments[3] + " is not registered as a filter");
+ this.filters.push([fn, arg]);
+ }
+ },
+ getExpression: function(){
+ return this.contents;
+ },
+ resolve: function(context){
+ if(typeof this.key == "undefined"){
+ return "";
+ }
+
+ var str = this.resolvePath(this.key, context);
+
+ for(var i = 0, filter; filter = this.filters[i]; i++){
+ // Each filter has the function in [0], a boolean in [1][0] of whether it's a variable or a string
+ // and [1][1] is either the variable name of the string content.
+ if(filter[1]){
+ if(filter[1][0]){
+ str = filter[0](str, this.resolvePath(filter[1][1], context));
+ }else{
+ str = filter[0](str, filter[1][1]);
+ }
+ }else{
+ str = filter[0](str);
+ }
+ }
+
+ return str;
+ },
+ resolvePath: function(path, context){
+ var current, parts;
+ var first = path.charAt(0);
+ var last = path.slice(-1);
+ if(!isNaN(parseInt(first))){
+ current = (path.indexOf(".") == -1) ? parseInt(path) : parseFloat(path);
+ }else if(first == '"' && first == last){
+ current = path.slice(1, -1);
+ }else{
+ if(path == "true"){ return true; }
+ if(path == "false"){ return false; }
+ if(path == "null" || path == "None"){ return null; }
+ parts = path.split(".");
+ current = context.get(parts[0]);
+
+ if(dojo.isFunction(current)){
+ var self = context.getThis && context.getThis();
+ if(current.alters_data){
+ current = "";
+ }else if(self){
+ current = current.call(self);
+ }else{
+ current = "";
+ }
+ }
+
+ for(var i = 1; i < parts.length; i++){
+ var part = parts[i];
+ if(current){
+ var base = current;
+ if(dojo.isObject(current) && part == "items" && typeof current[part] == "undefined"){
+ var items = [];
+ for(var key in current){
+ items.push([key, current[key]]);
+ }
+ current = items;
+ continue;
+ }
+
+ if(current.get && dojo.isFunction(current.get) && current.get.safe){
+ current = current.get(part);
+ }else if(typeof current[part] == "undefined"){
+ current = current[part];
+ break;
+ }else{
+ current = current[part];
+ }
+
+ if(dojo.isFunction(current)){
+ if(current.alters_data){
+ current = "";
+ }else{
+ current = current.call(base);
+ }
+ }else if(current instanceof Date){
+ current = dd._Context.prototype._normalize(current);
+ }
+ }else{
+ return "";
+ }
+ }
+ }
+ return current;
+ }
+ });
+
+ dd._TextNode = dd._Node = dojo.extend(function(/*Object*/ obj){
+ // summary: Basic catch-all node
+ this.contents = obj;
+ },
+ {
+ set: function(data){
+ this.contents = data;
+ return this;
+ },
+ render: function(context, buffer){
+ // summary: Adds content onto the buffer
+ return buffer.concat(this.contents);
+ },
+ isEmpty: function(){
+ return !dojo.trim(this.contents);
+ },
+ clone: function(){ return this; }
+ });
+
+ dd._NodeList = dojo.extend(function(/*Node[]*/ nodes){
+ // summary: Allows us to render a group of nodes
+ this.contents = nodes || [];
+ this.last = "";
+ },
+ {
+ push: function(node){
+ // summary: Add a new node to the list
+ this.contents.push(node);
+ return this;
+ },
+ concat: function(nodes){
+ this.contents = this.contents.concat(nodes);
+ return this;
+ },
+ render: function(context, buffer){
+ // summary: Adds all content onto the buffer
+ for(var i = 0; i < this.contents.length; i++){
+ buffer = this.contents[i].render(context, buffer);
+ if(!buffer) throw new Error("Template must return buffer");
+ }
+ return buffer;
+ },
+ dummyRender: function(context){
+ return this.render(context, dd.Template.prototype.getBuffer()).toString();
+ },
+ unrender: function(){ return arguments[1]; },
+ clone: function(){ return this; },
+ rtrim: function(){
+ while(1){
+ i = this.contents.length - 1;
+ if(this.contents[i] instanceof dd._TextNode && this.contents[i].isEmpty()){
+ this.contents.pop();
+ }else{
+ break;
+ }
+ }
+
+ return this;
+ }
+ });
+
+ dd._VarNode = dojo.extend(function(str){
+ // summary: A node to be processed as a variable
+ this.contents = new dd._Filter(str);
+ },
+ {
+ render: function(context, buffer){
+ var str = this.contents.resolve(context);
+ if(!str.safe){
+ str = dd._base.escape("" + str);
+ }
+ return buffer.concat(str);
+ }
+ });
+
+ dd._noOpNode = new function(){
+ // summary: Adds a no-op node. Useful in custom tags
+ this.render = this.unrender = function(){ return arguments[1]; }
+ this.clone = function(){ return this; }
+ }
+
+ dd._Parser = dojo.extend(function(tokens){
+ // summary: Parser used during initialization and for tag groups.
+ this.contents = tokens;
+ },
+ {
+ i: 0,
+ parse: function(/*Array?*/ stop_at){
+ // summary: Turns tokens into nodes
+ // description: Steps into tags are they're found. Blocks use the parse object
+ // to find their closing tag (the stop_at array). stop_at is inclusive, it
+ // returns the node that matched.
+ var terminators = {}, token;
+ stop_at = stop_at || [];
+ for(var i = 0; i < stop_at.length; i++){
+ terminators[stop_at[i]] = true;
+ }
+
+ var nodelist = new dd._NodeList();
+ while(this.i < this.contents.length){
+ token = this.contents[this.i++];
+ if(typeof token == "string"){
+ nodelist.push(new dd._TextNode(token));
+ }else{
+ var type = token[0];
+ var text = token[1];
+ if(type == dd.TOKEN_VAR){
+ nodelist.push(new dd._VarNode(text));
+ }else if(type == dd.TOKEN_BLOCK){
+ if(terminators[text]){
+ --this.i;
+ return nodelist;
+ }
+ var cmd = text.split(/\s+/g);
+ if(cmd.length){
+ cmd = cmd[0];
+ var fn = ddt.getTag(cmd);
+ if(fn){
+ nodelist.push(fn(this, new dd.Token(type, text)));
+ }
+ }
+ }
+ }
+ }
+
+ if(stop_at.length){
+ throw new Error("Could not find closing tag(s): " + stop_at.toString());
+ }
+
+ this.contents.length = 0;
+ return nodelist;
+ },
+ next_token: function(){
+ // summary: Returns the next token in the list.
+ var token = this.contents[this.i++];
+ return new dd.Token(token[0], token[1]);
+ },
+ delete_first_token: function(){
+ this.i++;
+ },
+ skip_past: function(endtag){
+ while(this.i < this.contents.length){
+ var token = this.contents[this.i++];
+ if(token[0] == dd.TOKEN_BLOCK && token[1] == endtag){
+ return;
+ }
+ }
+ throw new Error("Unclosed tag found when looking for " + endtag);
+ },
+ create_variable_node: function(expr){
+ return new dd._VarNode(expr);
+ },
+ create_text_node: function(expr){
+ return new dd._TextNode(expr || "");
+ },
+ getTemplate: function(file){
+ return new dd.Template(file);
+ }
+ });
+
+ dd.register = {
+ _registry: {
+ attributes: [],
+ tags: [],
+ filters: []
+ },
+ get: function(/*String*/ module, /*String*/ name){
+ var registry = dd.register._registry[module + "s"];
+ for(var i = 0, entry; entry = registry[i]; i++){
+ if(typeof entry[0] == "string"){
+ if(entry[0] == name){
+ return entry;
+ }
+ }else if(name.match(entry[0])){
+ return entry;
+ }
+ }
+ },
+ getAttributeTags: function(){
+ var tags = [];
+ var registry = dd.register._registry.attributes;
+ for(var i = 0, entry; entry = registry[i]; i++){
+ if(entry.length == 3){
+ tags.push(entry);
+ }else{
+ var fn = dojo.getObject(entry[1]);
+ if(fn && dojo.isFunction(fn)){
+ entry.push(fn);
+ tags.push(entry);
+ }
+ }
+ }
+ return tags;
+ },
+ _any: function(type, base, locations){
+ for(var path in locations){
+ for(var i = 0, fn; fn = locations[path][i]; i++){
+ var key = fn;
+ if(dojo.isArray(fn)){
+ key = fn[0];
+ fn = fn[1];
+ }
+ if(typeof key == "string"){
+ if(key.substr(0, 5) == "attr:"){
+ var attr = fn;
+ if(attr.substr(0, 5) == "attr:"){
+ attr = attr.slice(5);
+ }
+ dd.register._registry.attributes.push([attr.toLowerCase(), base + "." + path + "." + attr]);
+ }
+ key = key.toLowerCase()
+ }
+ dd.register._registry[type].push([
+ key,
+ fn,
+ base + "." + path
+ ]);
+ }
+ }
+ },
+ tags: function(/*String*/ base, /*Object*/ locations){
+ dd.register._any("tags", base, locations);
+ },
+ filters: function(/*String*/ base, /*Object*/ locations){
+ dd.register._any("filters", base, locations);
+ }
+ }
+
+ var escapeamp = /&/g;
+ var escapelt = /</g;
+ var escapegt = />/g;
+ var escapeqt = /'/g;
+ var escapedblqt = /"/g;
+ dd._base.escape = function(value){
+ // summary: Escapes a string's HTML
+ return dd.mark_safe(value.replace(escapeamp, '&amp;').replace(escapelt, '&lt;').replace(escapegt, '&gt;').replace(escapedblqt, '&quot;').replace(escapeqt, '&#39;'));
+ }
+
+ dd._base.safe = function(value){
+ if(typeof value == "string"){
+ value = new String(value);
+ }
+ if(typeof value == "object"){
+ value.safe = true;
+ }
+ return value;
+ }
+ dd.mark_safe = dd._base.safe;
+
+ dd.register.tags("dojox.dtl.tag", {
+ "date": ["now"],
+ "logic": ["if", "for", "ifequal", "ifnotequal"],
+ "loader": ["extends", "block", "include", "load", "ssi"],
+ "misc": ["comment", "debug", "filter", "firstof", "spaceless", "templatetag", "widthratio", "with"],
+ "loop": ["cycle", "ifchanged", "regroup"]
+ });
+ dd.register.filters("dojox.dtl.filter", {
+ "dates": ["date", "time", "timesince", "timeuntil"],
+ "htmlstrings": ["linebreaks", "linebreaksbr", "removetags", "striptags"],
+ "integers": ["add", "get_digit"],
+ "lists": ["dictsort", "dictsortreversed", "first", "join", "length", "length_is", "random", "slice", "unordered_list"],
+ "logic": ["default", "default_if_none", "divisibleby", "yesno"],
+ "misc": ["filesizeformat", "pluralize", "phone2numeric", "pprint"],
+ "strings": ["addslashes", "capfirst", "center", "cut", "fix_ampersands", "floatformat", "iriencode", "linenumbers", "ljust", "lower", "make_list", "rjust", "slugify", "stringformat", "title", "truncatewords", "truncatewords_html", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap"]
+ });
+ dd.register.filters("dojox.dtl", {
+ "_base": ["escape", "safe"]
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl"] = true;
+dojo.provide("dojox.dtl");
+
+
+}
+
+if(!dojo._hasResource["dojox.dtl.Context"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.Context"] = true;
+dojo.provide("dojox.dtl.Context");
+
+
+dojox.dtl.Context = dojo.extend(function(dict){
+ this._this = {};
+ dojox.dtl._Context.call(this, dict);
+}, dojox.dtl._Context.prototype,
+{
+ getKeys: function(){
+ var keys = [];
+ for(var key in this){
+ if(this.hasOwnProperty(key) && key != "_dicts" && key != "_this"){
+ keys.push(key);
+ }
+ }
+ return keys;
+ },
+ extend: function(/*dojox.dtl.Context|Object*/ obj){
+ // summary: Returns a clone of this context object, with the items from the
+ // passed objecct mixed in.
+ return dojo.delegate(this, obj);
+ },
+ filter: function(/*dojox.dtl.Context|Object|String...*/ filter){
+ // summary: Returns a clone of this context, only containing the items
+ // defined in the filter.
+ var context = new dojox.dtl.Context();
+ var keys = [];
+ var i, arg;
+ if(filter instanceof dojox.dtl.Context){
+ keys = filter.getKeys();
+ }else if(typeof filter == "object"){
+ for(var key in filter){
+ keys.push(key);
+ }
+ }else{
+ for(i = 0; arg = arguments[i]; i++){
+ if(typeof arg == "string"){
+ keys.push(arg);
+ }
+ }
+ }
+
+ for(i = 0, key; key = keys[i]; i++){
+ context[key] = this[key];
+ }
+
+ return context;
+ },
+ setThis: function(/*Object*/ _this){
+ this._this = _this;
+ },
+ getThis: function(){
+ return this._this;
+ },
+ hasKey: function(key){
+ if(typeof this[key] != "undefined"){
+ return true;
+ }
+
+ for(var i = 0, dict; dict = this._dicts[i]; i++){
+ if(typeof dict[key] != "undefined"){
+ return true;
+ }
+ }
+
+ return false;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.logic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.logic"] = true;
+dojo.provide("dojox.dtl.tag.logic");
+
+
+
+(function(){
+ var dd = dojox.dtl;
+ var ddt = dd.text;
+ var ddtl = dd.tag.logic;
+
+ ddtl.IfNode = dojo.extend(function(bools, trues, falses, type){
+ this.bools = bools;
+ this.trues = trues;
+ this.falses = falses;
+ this.type = type;
+ },
+ {
+ render: function(context, buffer){
+ var i, bool, ifnot, filter, value;
+ if(this.type == "or"){
+ for(i = 0; bool = this.bools[i]; i++){
+ ifnot = bool[0];
+ filter = bool[1];
+ value = filter.resolve(context);
+ if((value && !ifnot) || (ifnot && !value)){
+ if(this.falses){
+ buffer = this.falses.unrender(context, buffer);
+ }
+ return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+ }
+ }
+ if(this.trues){
+ buffer = this.trues.unrender(context, buffer);
+ }
+ return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+ }else{
+ for(i = 0; bool = this.bools[i]; i++){
+ ifnot = bool[0];
+ filter = bool[1];
+ value = filter.resolve(context);
+ // If we ever encounter a false value
+ if(value == ifnot){
+ if(this.trues){
+ buffer = this.trues.unrender(context, buffer);
+ }
+ return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+ }
+ }
+ if(this.falses){
+ buffer = this.falses.unrender(context, buffer);
+ }
+ return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ buffer = (this.trues) ? this.trues.unrender(context, buffer) : buffer;
+ buffer = (this.falses) ? this.falses.unrender(context, buffer) : buffer;
+ return buffer;
+ },
+ clone: function(buffer){
+ var trues = (this.trues) ? this.trues.clone(buffer) : null;
+ var falses = (this.falses) ? this.falses.clone(buffer) : null;
+ return new this.constructor(this.bools, trues, falses, this.type);
+ }
+ });
+
+ ddtl.IfEqualNode = dojo.extend(function(var1, var2, trues, falses, negate){
+ this.var1 = new dd._Filter(var1);
+ this.var2 = new dd._Filter(var2);
+ this.trues = trues;
+ this.falses = falses;
+ this.negate = negate;
+ },
+ {
+ render: function(context, buffer){
+ var var1 = this.var1.resolve(context);
+ var var2 = this.var2.resolve(context);
+ var1 = (typeof var1 != "undefined") ? var1 : "";
+ var2 = (typeof var1 != "undefined") ? var2 : "";
+ if((this.negate && var1 != var2) || (!this.negate && var1 == var2)){
+ if(this.falses){
+ buffer = this.falses.unrender(context, buffer, this);
+ }
+ return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+ }
+ if(this.trues){
+ buffer = this.trues.unrender(context, buffer, this);
+ }
+ return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+ },
+ unrender: function(context, buffer){
+ return ddtl.IfNode.prototype.unrender.call(this, context, buffer);
+ },
+ clone: function(buffer){
+ var trues = this.trues ? this.trues.clone(buffer) : null;
+ var falses = this.falses ? this.falses.clone(buffer) : null;
+ return new this.constructor(this.var1.getExpression(), this.var2.getExpression(), trues, falses, this.negate);
+ }
+ });
+
+ ddtl.ForNode = dojo.extend(function(assign, loop, reversed, nodelist){
+ this.assign = assign;
+ this.loop = new dd._Filter(loop);
+ this.reversed = reversed;
+ this.nodelist = nodelist;
+ this.pool = [];
+ },
+ {
+ render: function(context, buffer){
+ var i, j, k;
+ var dirty = false;
+ var assign = this.assign;
+
+ for(k = 0; k < assign.length; k++){
+ if(typeof context[assign[k]] != "undefined"){
+ dirty = true;
+ context = context.push();
+ break;
+ }
+ }
+ if(!dirty && context.forloop){
+ dirty = true;
+ context = context.push();
+ }
+
+ var items = this.loop.resolve(context) || [];
+ for(i = items.length; i < this.pool.length; i++){
+ this.pool[i].unrender(context, buffer, this);
+ }
+ if(this.reversed){
+ items = items.slice(0).reverse();
+ }
+
+ var isObject = dojo.isObject(items) && !dojo.isArrayLike(items);
+ var arred = [];
+ if(isObject){
+ for(var key in items){
+ arred.push(items[key]);
+ }
+ }else{
+ arred = items;
+ }
+
+ var forloop = context.forloop = {
+ parentloop: context.get("forloop", {})
+ };
+ var j = 0;
+ for(i = 0; i < arred.length; i++){
+ var item = arred[i];
+
+ forloop.counter0 = j;
+ forloop.counter = j + 1;
+ forloop.revcounter0 = arred.length - j - 1;
+ forloop.revcounter = arred.length - j;
+ forloop.first = !j;
+ forloop.last = (j == arred.length - 1);
+
+ if(assign.length > 1 && dojo.isArrayLike(item)){
+ if(!dirty){
+ dirty = true;
+ context = context.push();
+ }
+ var zipped = {};
+ for(k = 0; k < item.length && k < assign.length; k++){
+ zipped[assign[k]] = item[k];
+ }
+ dojo.mixin(context, zipped);
+ }else{
+ context[assign[0]] = item;
+ }
+
+ if(j + 1 > this.pool.length){
+ this.pool.push(this.nodelist.clone(buffer));
+ }
+ buffer = this.pool[j++].render(context, buffer, this);
+ }
+
+ delete context.forloop;
+ if(dirty){
+ context = context.pop();
+ }else{
+ for(k = 0; k < assign.length; k++){
+ delete context[assign[k]];
+ }
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ for(var i = 0, pool; pool = this.pool[i]; i++){
+ buffer = pool.unrender(context, buffer);
+ }
+ return buffer;
+ },
+ clone: function(buffer){
+ return new this.constructor(this.assign, this.loop.getExpression(), this.reversed, this.nodelist.clone(buffer));
+ }
+ });
+
+ dojo.mixin(ddtl, {
+ if_: function(parser, token){
+ var i, part, type, bools = [], parts = token.contents.split();
+ parts.shift();
+ token = parts.join(" ");
+ parts = token.split(" and ");
+ if(parts.length == 1){
+ type = "or";
+ parts = token.split(" or ");
+ }else{
+ type = "and";
+ for(i = 0; i < parts.length; i++){
+ if(parts[i].indexOf(" or ") != -1){
+ // Note, since we split by and, this is the only place we need to error check
+ throw new Error("'if' tags can't mix 'and' and 'or'");
+ }
+ }
+ }
+ for(i = 0; part = parts[i]; i++){
+ var not = false;
+ if(part.indexOf("not ") == 0){
+ part = part.slice(4);
+ not = true;
+ }
+ bools.push([not, new dd._Filter(part)]);
+ }
+ var trues = parser.parse(["else", "endif"]);
+ var falses = false;
+ var token = parser.next_token();
+ if(token.contents == "else"){
+ falses = parser.parse(["endif"]);
+ parser.next_token();
+ }
+ return new ddtl.IfNode(bools, trues, falses, type);
+ },
+ _ifequal: function(parser, token, negate){
+ var parts = token.split_contents();
+ if(parts.length != 3){
+ throw new Error(parts[0] + " takes two arguments");
+ }
+ var end = 'end' + parts[0];
+ var trues = parser.parse(["else", end]);
+ var falses = false;
+ var token = parser.next_token();
+ if(token.contents == "else"){
+ falses = parser.parse([end]);
+ parser.next_token();
+ }
+ return new ddtl.IfEqualNode(parts[1], parts[2], trues, falses, negate);
+ },
+ ifequal: function(parser, token){
+ return ddtl._ifequal(parser, token);
+ },
+ ifnotequal: function(parser, token){
+ return ddtl._ifequal(parser, token, true);
+ },
+ for_: function(parser, token){
+ var parts = token.contents.split();
+ if(parts.length < 4){
+ throw new Error("'for' statements should have at least four words: " + token.contents);
+ }
+ var reversed = parts[parts.length - 1] == "reversed";
+ var index = (reversed) ? -3 : -2;
+ if(parts[parts.length + index] != "in"){
+ throw new Error("'for' tag received an invalid argument: " + token.contents);
+ }
+ var loopvars = parts.slice(1, index).join(" ").split(/ *, */);
+ for(var i = 0; i < loopvars.length; i++){
+ if(!loopvars[i] || loopvars[i].indexOf(" ") != -1){
+ throw new Error("'for' tag received an invalid argument: " + token.contents);
+ }
+ }
+ var nodelist = parser.parse(["endfor"]);
+ parser.next_token();
+ return new ddtl.ForNode(loopvars, parts[parts.length + index + 1], reversed, nodelist);
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.loop"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.loop"] = true;
+dojo.provide("dojox.dtl.tag.loop");
+
+
+
+
+(function(){
+ var dd = dojox.dtl;
+ var ddtl = dd.tag.loop;
+
+ ddtl.CycleNode = dojo.extend(function(cyclevars, name, text, shared){
+ this.cyclevars = cyclevars;
+ this.name = name;
+ this.contents = text;
+ this.shared = shared || {counter: -1, map: {}};
+ },
+ {
+ render: function(context, buffer){
+ if(context.forloop && !context.forloop.counter0){
+ this.shared.counter = -1;
+ }
+
+ ++this.shared.counter;
+ var value = this.cyclevars[this.shared.counter % this.cyclevars.length];
+
+ var map = this.shared.map;
+ if(!map[value]){
+ map[value] = new dd._Filter(value);
+ }
+ value = map[value].resolve(context, buffer);
+
+ if(this.name){
+ context[this.name] = value;
+ }
+ this.contents.set(value);
+ return this.contents.render(context, buffer);
+ },
+ unrender: function(context, buffer){
+ return this.contents.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.cyclevars, this.name, this.contents.clone(buffer), this.shared);
+ }
+ });
+
+ ddtl.IfChangedNode = dojo.extend(function(nodes, vars, shared){
+ this.nodes = nodes;
+ this._vars = vars;
+ this.shared = shared || {last: null, counter: 0};
+ this.vars = dojo.map(vars, function(item){
+ return new dojox.dtl._Filter(item);
+ });
+ }, {
+ render: function(context, buffer){
+ if(context.forloop){
+ if(context.forloop.counter <= this.shared.counter){
+ this.shared.last = null;
+ }
+ this.shared.counter = context.forloop.counter;
+ }
+
+ var change;
+ if(this.vars.length){
+ change = dojo.toJson(dojo.map(this.vars, function(item){
+ return item.resolve(context);
+ }));
+ }else{
+ change = this.nodes.dummyRender(context, buffer);
+ }
+
+ if(change != this.shared.last){
+ var firstloop = (this.shared.last === null);
+ this.shared.last = change;
+ context = context.push();
+ context.ifchanged = {firstloop: firstloop};
+ buffer = this.nodes.render(context, buffer);
+ context = context.pop();
+ }else{
+ buffer = this.nodes.unrender(context, buffer);
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return this.nodes.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.nodes.clone(buffer), this._vars, this.shared);
+ }
+ });
+
+ ddtl.RegroupNode = dojo.extend(function(expression, key, alias){
+ this._expression = expression;
+ this.expression = new dd._Filter(expression);
+ this.key = key;
+ this.alias = alias;
+ },
+ {
+ _push: function(container, grouper, stack){
+ if(stack.length){
+ container.push({ grouper: grouper, list: stack });
+ }
+ },
+ render: function(context, buffer){
+ context[this.alias] = [];
+ var list = this.expression.resolve(context);
+ if(list){
+ var last = null;
+ var stack = [];
+ for(var i = 0; i < list.length; i++){
+ var id = list[i][this.key];
+ if(last !== id){
+ this._push(context[this.alias], last, stack);
+ last = id;
+ stack = [list[i]];
+ }else{
+ stack.push(list[i]);
+ }
+ }
+ this._push(context[this.alias], last, stack);
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return buffer;
+ },
+ clone: function(context, buffer){
+ return this;
+ }
+ });
+
+ dojo.mixin(ddtl, {
+ cycle: function(parser, token){
+ // summary: Cycle among the given strings each time this tag is encountered
+ var args = token.split_contents();
+
+ if(args.length < 2){
+ throw new Error("'cycle' tag requires at least two arguments");
+ }
+
+ if(args[1].indexOf(",") != -1){
+ var vars = args[1].split(",");
+ args = [args[0]];
+ for(var i = 0; i < vars.length; i++){
+ args.push('"' + vars[i] + '"');
+ }
+ }
+
+ if(args.length == 2){
+ var name = args[args.length - 1];
+
+ if(!parser._namedCycleNodes){
+ throw new Error("No named cycles in template: '" + name + "' is not defined");
+ }
+ if(!parser._namedCycleNodes[name]){
+ throw new Error("Named cycle '" + name + "' does not exist");
+ }
+
+ return parser._namedCycleNodes[name];
+ }
+
+ if(args.length > 4 && args[args.length - 2] == "as"){
+ var name = args[args.length - 1];
+
+ var node = new ddtl.CycleNode(args.slice(1, args.length - 2), name, parser.create_text_node());
+
+ if(!parser._namedCycleNodes){
+ parser._namedCycleNodes = {};
+ }
+ parser._namedCycleNodes[name] = node;
+ }else{
+ node = new ddtl.CycleNode(args.slice(1), null, parser.create_text_node());
+ }
+
+ return node;
+ },
+ ifchanged: function(parser, token){
+ var parts = token.contents.split();
+ var nodes = parser.parse(["endifchanged"]);
+ parser.delete_first_token();
+ return new ddtl.IfChangedNode(nodes, parts.slice(1));
+ },
+ regroup: function(parser, token){
+ var tokens = dojox.string.tokenize(token.contents, /(\s+)/g, function(spaces){
+ return spaces;
+ });
+ if(tokens.length < 11 || tokens[tokens.length - 3] != "as" || tokens[tokens.length - 7] != "by"){
+ throw new Error("Expected the format: regroup list by key as newList");
+ }
+ var expression = tokens.slice(2, -8).join("");
+ var key = tokens[tokens.length - 5];
+ var alias = tokens[tokens.length - 1];
+ return new ddtl.RegroupNode(expression, key, alias);
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date"] = true;
+dojo.provide("dojo.date");
+
+/*=====
+dojo.date = {
+ // summary: Date manipulation utilities
+}
+=====*/
+
+dojo.date.getDaysInMonth = function(/*Date*/dateObject){
+ // summary:
+ // Returns the number of days in the month used by dateObject
+ var month = dateObject.getMonth();
+ var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+ if(month == 1 && dojo.date.isLeapYear(dateObject)){ return 29; } // Number
+ return days[month]; // Number
+}
+
+dojo.date.isLeapYear = function(/*Date*/dateObject){
+ // summary:
+ // Determines if the year of the dateObject is a leap year
+ // description:
+ // Leap years are years with an additional day YYYY-02-29, where the
+ // year number is a multiple of four with the following exception: If
+ // a year is a multiple of 100, then it is only a leap year if it is
+ // also a multiple of 400. For example, 1900 was not a leap year, but
+ // 2000 is one.
+
+ var year = dateObject.getFullYear();
+ return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
+}
+
+// FIXME: This is not localized
+dojo.date.getTimezoneName = function(/*Date*/dateObject){
+ // summary:
+ // Get the user's time zone as provided by the browser
+ // dateObject:
+ // Needed because the timezone may vary with time (daylight savings)
+ // description:
+ // Try to get time zone info from toString or toLocaleString method of
+ // the Date object -- UTC offset is not a time zone. See
+ // http://www.twinsun.com/tz/tz-link.htm Note: results may be
+ // inconsistent across browsers.
+
+ var str = dateObject.toString(); // Start looking in toString
+ var tz = ''; // The result -- return empty string if nothing found
+ var match;
+
+ // First look for something in parentheses -- fast lookup, no regex
+ var pos = str.indexOf('(');
+ if(pos > -1){
+ tz = str.substring(++pos, str.indexOf(')'));
+ }else{
+ // If at first you don't succeed ...
+ // If IE knows about the TZ, it appears before the year
+ // Capital letters or slash before a 4-digit year
+ // at the end of string
+ var pat = /([A-Z\/]+) \d{4}$/;
+ if((match = str.match(pat))){
+ tz = match[1];
+ }else{
+ // Some browsers (e.g. Safari) glue the TZ on the end
+ // of toLocaleString instead of putting it in toString
+ str = dateObject.toLocaleString();
+ // Capital letters or slash -- end of string,
+ // after space
+ pat = / ([A-Z\/]+)$/;
+ if((match = str.match(pat))){
+ tz = match[1];
+ }
+ }
+ }
+
+ // Make sure it doesn't somehow end up return AM or PM
+ return (tz == 'AM' || tz == 'PM') ? '' : tz; // String
+}
+
+// Utility methods to do arithmetic calculations with Dates
+
+dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
+ // summary:
+ // Compare two date objects by date, time, or both.
+ // description:
+ // Returns 0 if equal, positive if a > b, else negative.
+ // date1:
+ // Date object
+ // date2:
+ // Date object. If not specified, the current Date is used.
+ // portion:
+ // A string indicating the "date" or "time" portion of a Date object.
+ // Compares both "date" and "time" by default. One of the following:
+ // "date", "time", "datetime"
+
+ // Extra step required in copy for IE - see #3112
+ date1 = new Date(+date1);
+ date2 = new Date(+(date2 || new Date()));
+
+ if(portion == "date"){
+ // Ignore times and compare dates.
+ date1.setHours(0, 0, 0, 0);
+ date2.setHours(0, 0, 0, 0);
+ }else if(portion == "time"){
+ // Ignore dates and compare times.
+ date1.setFullYear(0, 0, 0);
+ date2.setFullYear(0, 0, 0);
+ }
+
+ if(date1 > date2){ return 1; } // int
+ if(date1 < date2){ return -1; } // int
+ return 0; // int
+};
+
+dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
+ // summary:
+ // Add to a Date in intervals of different size, from milliseconds to years
+ // date: Date
+ // Date object to start with
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "quarter", "week", "weekday"
+ // amount:
+ // How much to add to the date.
+
+ var sum = new Date(+date); // convert to Number before copying to accomodate IE (#3112)
+ var fixOvershoot = false;
+ var property = "Date";
+
+ switch(interval){
+ case "day":
+ break;
+ case "weekday":
+ //i18n FIXME: assumes Saturday/Sunday weekend, but this is not always true. see dojo.cldr.supplemental
+
+ // Divide the increment time span into weekspans plus leftover days
+ // e.g., 8 days is one 5-day weekspan / and two leftover days
+ // Can't have zero leftover days, so numbers divisible by 5 get
+ // a days value of 5, and the remaining days make up the number of weeks
+ var days, weeks;
+ var mod = amount % 5;
+ if(!mod){
+ days = (amount > 0) ? 5 : -5;
+ weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5);
+ }else{
+ days = mod;
+ weeks = parseInt(amount/5);
+ }
+ // Get weekday value for orig date param
+ var strt = date.getDay();
+ // Orig date is Sat / positive incrementer
+ // Jump over Sun
+ var adj = 0;
+ if(strt == 6 && amount > 0){
+ adj = 1;
+ }else if(strt == 0 && amount < 0){
+ // Orig date is Sun / negative incrementer
+ // Jump back over Sat
+ adj = -1;
+ }
+ // Get weekday val for the new date
+ var trgt = strt + days;
+ // New date is on Sat or Sun
+ if(trgt == 0 || trgt == 6){
+ adj = (amount > 0) ? 2 : -2;
+ }
+ // Increment by number of weeks plus leftover days plus
+ // weekend adjustments
+ amount = (7 * weeks) + days + adj;
+ break;
+ case "year":
+ property = "FullYear";
+ // Keep increment/decrement from 2/29 out of March
+ fixOvershoot = true;
+ break;
+ case "week":
+ amount *= 7;
+ break;
+ case "quarter":
+ // Naive quarter is just three months
+ amount *= 3;
+ // fallthrough...
+ case "month":
+ // Reset to last day of month if you overshoot
+ fixOvershoot = true;
+ property = "Month";
+ break;
+// case "hour":
+// case "minute":
+// case "second":
+// case "millisecond":
+ default:
+ property = "UTC"+interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
+ }
+
+ if(property){
+ sum["set"+property](sum["get"+property]()+amount);
+ }
+
+ if(fixOvershoot && (sum.getDate() < date.getDate())){
+ sum.setDate(0);
+ }
+
+ return sum; // Date
+};
+
+dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
+ // summary:
+ // Get the difference in a specific unit of time (e.g., number of
+ // months, weeks, days, etc.) between two dates, rounded to the
+ // nearest integer.
+ // date1:
+ // Date object
+ // date2:
+ // Date object. If not specified, the current Date is used.
+ // interval:
+ // A string representing the interval. One of the following:
+ // "year", "month", "day", "hour", "minute", "second",
+ // "millisecond", "quarter", "week", "weekday"
+ // Defaults to "day".
+
+ date2 = date2 || new Date();
+ interval = interval || "day";
+ var yearDiff = date2.getFullYear() - date1.getFullYear();
+ var delta = 1; // Integer return value
+
+ switch(interval){
+ case "quarter":
+ var m1 = date1.getMonth();
+ var m2 = date2.getMonth();
+ // Figure out which quarter the months are in
+ var q1 = Math.floor(m1/3) + 1;
+ var q2 = Math.floor(m2/3) + 1;
+ // Add quarters for any year difference between the dates
+ q2 += (yearDiff * 4);
+ delta = q2 - q1;
+ break;
+ case "weekday":
+ var days = Math.round(dojo.date.difference(date1, date2, "day"));
+ var weeks = parseInt(dojo.date.difference(date1, date2, "week"));
+ var mod = days % 7;
+
+ // Even number of weeks
+ if(mod == 0){
+ days = weeks*5;
+ }else{
+ // Weeks plus spare change (< 7 days)
+ var adj = 0;
+ var aDay = date1.getDay();
+ var bDay = date2.getDay();
+
+ weeks = parseInt(days/7);
+ mod = days % 7;
+ // Mark the date advanced by the number of
+ // round weeks (may be zero)
+ var dtMark = new Date(date1);
+ dtMark.setDate(dtMark.getDate()+(weeks*7));
+ var dayMark = dtMark.getDay();
+
+ // Spare change days -- 6 or less
+ if(days > 0){
+ switch(true){
+ // Range starts on Sat
+ case aDay == 6:
+ adj = -1;
+ break;
+ // Range starts on Sun
+ case aDay == 0:
+ adj = 0;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = -1;
+ break;
+ // Range ends on Sun
+ case bDay == 0:
+ adj = -2;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) > 5:
+ adj = -2;
+ }
+ }else if(days < 0){
+ switch(true){
+ // Range starts on Sat
+ case aDay == 6:
+ adj = 0;
+ break;
+ // Range starts on Sun
+ case aDay == 0:
+ adj = 1;
+ break;
+ // Range ends on Sat
+ case bDay == 6:
+ adj = 2;
+ break;
+ // Range ends on Sun
+ case bDay == 0:
+ adj = 1;
+ break;
+ // Range contains weekend
+ case (dayMark + mod) < 0:
+ adj = 2;
+ }
+ }
+ days += adj;
+ days -= (weeks*2);
+ }
+ delta = days;
+ break;
+ case "year":
+ delta = yearDiff;
+ break;
+ case "month":
+ delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12);
+ break;
+ case "week":
+ // Truncate instead of rounding
+ // Don't use Math.floor -- value may be negative
+ delta = parseInt(dojo.date.difference(date1, date2, "day")/7);
+ break;
+ case "day":
+ delta /= 24;
+ // fallthrough
+ case "hour":
+ delta /= 60;
+ // fallthrough
+ case "minute":
+ delta /= 60;
+ // fallthrough
+ case "second":
+ delta /= 1000;
+ // fallthrough
+ case "millisecond":
+ delta *= date2.getTime() - date1.getTime();
+ }
+
+ // Round for fractional values and DST leaps
+ return Math.round(delta); // Number (integer)
+};
+
+}
+
+if(!dojo._hasResource["dojox.date.php"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.date.php"] = true;
+dojo.provide("dojox.date.php");
+
+
+
+dojox.date.php.format = function(/*Date*/ date, /*String*/ format){
+ // summary: Get a formatted string for a given date object
+ var df = new dojox.date.php.DateFormat(format);
+ return df.format(date);
+}
+
+dojox.date.php.DateFormat = function(/*String*/ format){
+ // summary: Format the internal date object
+ if(!this.regex){
+ var keys = [];
+ for(var key in this.constructor.prototype){
+ if(dojo.isString(key) && key.length == 1 && dojo.isFunction(this[key])){
+ keys.push(key);
+ }
+ }
+ this.constructor.prototype.regex = new RegExp("(?:(\\\\.)|([" + keys.join("") + "]))", "g");
+ }
+
+ var replacements = [];
+
+ this.tokens = dojox.string.tokenize(format, this.regex, function(escape, token, i){
+ if(token){
+ replacements.push([i, token]);
+ return token;
+ }
+ if(escape){
+ return escape.charAt(1);
+ }
+ });
+
+ this.replacements = replacements;
+}
+dojo.extend(dojox.date.php.DateFormat, {
+ weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ monthdays: [31,28,31,30,31,30,31,31,30,31,30,31],
+
+ format: function(/*Date*/ date){
+ this.date = date;
+ for(var i = 0, replacement; replacement = this.replacements[i]; i++){
+ this.tokens[replacement[0]] = this[replacement[1]]();
+ }
+ return this.tokens.join("");
+ },
+
+ // Day
+
+ d: function(){
+ // summary: Day of the month, 2 digits with leading zeros
+ var j = this.j();
+ return (j.length == 1) ? "0" + j : j;
+ },
+
+ D: function(){
+ // summary: A textual representation of a day, three letters
+ return this.weekdays_3[this.date.getDay()];
+ },
+
+ j: function(){
+ // summary: Day of the month without leading zeros
+ return this.date.getDate() + "";
+ },
+
+ l: function(){
+ // summary: A full textual representation of the day of the week
+ return this.weekdays[this.date.getDay()];
+ },
+
+ N: function(){
+ // summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
+ var w = this.w();
+ return (!w) ? 7 : w;
+ },
+
+ S: function(){
+ // summary: English ordinal suffix for the day of the month, 2 characters
+ switch(this.date.getDate()){
+ case 11: case 12: case 13: return "th";
+ case 1: case 21: case 31: return "st";
+ case 2: case 22: return "nd";
+ case 3: case 23: return "rd";
+ default: return "th";
+ }
+ },
+
+ w: function(){
+ // summary: Numeric representation of the day of the week
+ return this.date.getDay() + "";
+ },
+
+ z: function(){
+ // summary: The day of the year (starting from 0)
+ var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime();
+ return Math.floor(millis/86400000) + "";
+ },
+
+ // Week
+
+ W: function(){
+ // summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)
+ var week;
+ var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1;
+ var w = this.date.getDay() + 1;
+ var z = parseInt(this.z());
+
+ if(z <= (8 - jan1_w) && jan1_w > 4){
+ var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate());
+ if(jan1_w == 5 || (jan1_w == 6 && dojo.date.isLeapYear(last_year))){
+ week = 53;
+ }else{
+ week = 52;
+ }
+ }else{
+ var i;
+ if(Boolean(this.L())){
+ i = 366;
+ }else{
+ i = 365;
+ }
+ if((i - z) < (4 - w)){
+ week = 1;
+ }else{
+ var j = z + (7 - w) + (jan1_w - 1);
+ week = Math.ceil(j / 7);
+ if(jan1_w > 4){
+ --week;
+ }
+ }
+ }
+
+ return week;
+ },
+
+ // Month
+
+ F: function(){
+ // summary: A full textual representation of a month, such as January or March
+ return this.months[this.date.getMonth()];
+ },
+
+ m: function(){
+ // summary: Numeric representation of a month, with leading zeros
+ var n = this.n();
+ return (n.length == 1) ? "0" + n : n;
+ },
+
+ M: function(){
+ // summary: A short textual representation of a month, three letters
+ return this.months_3[this.date.getMonth()];
+ },
+
+ n: function(){
+ // summary: Numeric representation of a month, without leading zeros
+ return this.date.getMonth() + 1 + "";
+ },
+
+ t: function(){
+ // summary: Number of days in the given month
+ return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()];
+ },
+
+ // Year
+
+ L: function(){
+ // summary: Whether it's a leap year
+ return (dojo.date.isLeapYear(this.date)) ? "1" : "0";
+ },
+
+ o: function(){
+ // summary:
+ // ISO-8601 year number. This has the same value as Y, except that if
+ // the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)
+ // TODO: Figure out what this means
+ },
+
+ Y: function(){
+ // summary: A full numeric representation of a year, 4 digits
+ return this.date.getFullYear() + "";
+ },
+
+ y: function(){
+ // summary: A two digit representation of a year
+ return this.Y().slice(-2);
+ },
+
+ // Time
+
+ a: function(){
+ // summary: Lowercase Ante meridiem and Post meridiem
+ return this.date.getHours() >= 12 ? "pm" : "am";
+ },
+
+ b: function(){
+ // summary: Uppercase Ante meridiem and Post meridiem
+ return this.a().toUpperCase();
+ },
+
+ B: function(){
+ // summary:
+ // Swatch Internet time
+ // A day is 1,000 beats. All time is measured from GMT + 1
+ var off = this.date.getTimezoneOffset() + 60;
+ var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60);
+ var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + "";
+ while(beat.length < 2) beat = "0" + beat;
+ return beat;
+ },
+
+ g: function(){
+ // summary: 12-hour format of an hour without leading zeros
+ return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + "";
+ },
+
+ G: function(){
+ // summary: 24-hour format of an hour without leading zeros
+ return this.date.getHours() + "";
+ },
+
+ h: function(){
+ // summary: 12-hour format of an hour with leading zeros
+ var g = this.g();
+ return (g.length == 1) ? "0" + g : g;
+ },
+
+ H: function(){
+ // summary: 24-hour format of an hour with leading zeros
+ var G = this.G();
+ return (G.length == 1) ? "0" + G : G;
+ },
+
+ i: function(){
+ // summary: Minutes with leading zeros
+ var mins = this.date.getMinutes() + "";
+ return (mins.length == 1) ? "0" + mins : mins;
+ },
+
+ s: function(){
+ // summary: Seconds, with leading zeros
+ var secs = this.date.getSeconds() + "";
+ return (secs.length == 1) ? "0" + secs : secs;
+ },
+
+ // Timezone
+
+ e: function(){
+ // summary: Timezone identifier (added in PHP 5.1.0)
+ return dojo.date.getTimezoneName(this.date);
+ },
+
+ I: function(){
+ // summary: Whether or not the date is in daylight saving time
+ // TODO: Can dojo.date do this?
+ },
+
+ O: function(){
+ // summary: Difference to Greenwich time (GMT) in hours
+ var off = Math.abs(this.date.getTimezoneOffset());
+ var hours = Math.floor(off / 60) + "";
+ var mins = (off % 60) + "";
+ if(hours.length == 1) hours = "0" + hours;
+ if(mins.length == 1) hours = "0" + mins;
+ return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins;
+ },
+
+ P: function(){
+ // summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)
+ var O = this.O();
+ return O.substring(0, 2) + ":" + O.substring(2, 4);
+ },
+
+ T: function(){
+ // summary: Timezone abbreviation
+
+ // Guess...
+ return this.e().substring(0, 3);
+ },
+
+ Z: function(){
+ // summary:
+ // Timezone offset in seconds. The offset for timezones west of UTC is always negative,
+ // and for those east of UTC is always positive.
+ return this.date.getTimezoneOffset() * -60;
+ },
+
+ // Full Date/Time
+
+ c: function(){
+ // summary: ISO 8601 date (added in PHP 5)
+ return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P();
+ },
+
+ r: function(){
+ // summary: RFC 2822 formatted date
+ return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
+ },
+
+ U: function(){
+ // summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
+ return Math.floor(this.date.getTime() / 1000);
+ }
+
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.utils.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.utils.date"] = true;
+dojo.provide("dojox.dtl.utils.date");
+
+
+
+dojox.dtl.utils.date.DateFormat = function(/*String*/ format){
+ dojox.date.php.DateFormat.call(this, format);
+}
+dojo.extend(dojox.dtl.utils.date.DateFormat, dojox.date.php.DateFormat.prototype, {
+ f: function(){
+ // summary:
+ // Time, in 12-hour hours and minutes, with minutes left off if they're zero.
+ // description:
+ // Examples: '1', '1:30', '2:05', '2'
+ // Proprietary extension.
+ return (!this.date.getMinutes()) ? this.g() : this.g() + ":" + this.i();
+ },
+ N: function(){
+ // summary: Month abbreviation in Associated Press style. Proprietary extension.
+ return dojox.dtl.utils.date._months_ap[this.date.getMonth()];
+ },
+ P: function(){
+ // summary:
+ // Time, in 12-hour hours, minutes and 'a.m.'/'p.m.', with minutes left off
+ // if they're zero and the strings 'midnight' and 'noon' if appropriate.
+ // description:
+ // Examples: '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.'
+ // Proprietary extension.
+ if(!this.date.getMinutes() && !this.date.getHours()){
+ return 'midnight';
+ }
+ if(!this.date.getMinutes() && this.date.getHours() == 12){
+ return 'noon';
+ }
+ return this.f() + " " + this.a();
+ }
+});
+
+dojo.mixin(dojox.dtl.utils.date, {
+ format: function(/*Date*/ date, /*String*/ format){
+ var df = new dojox.dtl.utils.date.DateFormat(format);
+ return df.format(date);
+ },
+ timesince: function(d, now){
+ // summary:
+ // Takes two datetime objects and returns the time between then and now
+ // as a nicely formatted string, e.g "10 minutes"
+ // description:
+ // Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
+ if(!(d instanceof Date)){
+ d = new Date(d.year, d.month, d.day);
+ }
+ if(!now){
+ now = new Date();
+ }
+
+ var delta = Math.abs(now.getTime() - d.getTime());
+ for(var i = 0, chunk; chunk = dojox.dtl.utils.date._chunks[i]; i++){
+ var count = Math.floor(delta / chunk[0]);
+ if(count) break;
+ }
+ return count + " " + chunk[1](count);
+ },
+ _chunks: [
+ [60 * 60 * 24 * 365 * 1000, function(n){ return (n == 1) ? 'year' : 'years'; }],
+ [60 * 60 * 24 * 30 * 1000, function(n){ return (n == 1) ? 'month' : 'months'; }],
+ [60 * 60 * 24 * 7 * 1000, function(n){ return (n == 1) ? 'week' : 'weeks'; }],
+ [60 * 60 * 24 * 1000, function(n){ return (n == 1) ? 'day' : 'days'; }],
+ [60 * 60 * 1000, function(n){ return (n == 1) ? 'hour' : 'hours'; }],
+ [60 * 1000, function(n){ return (n == 1) ? 'minute' : 'minutes'; }]
+ ],
+ _months_ap: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.date"] = true;
+dojo.provide("dojox.dtl.tag.date");
+
+
+
+
+dojox.dtl.tag.date.NowNode = function(format, node){
+ this._format = format;
+ this.format = new dojox.dtl.utils.date.DateFormat(format);
+ this.contents = node;
+}
+dojo.extend(dojox.dtl.tag.date.NowNode, {
+ render: function(context, buffer){
+ this.contents.set(this.format.format(new Date()));
+ return this.contents.render(context, buffer);
+ },
+ unrender: function(context, buffer){
+ return this.contents.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this._format, this.contents.clone(buffer));
+ }
+});
+
+dojox.dtl.tag.date.now = function(parser, token){
+ // Split by either :" or :'
+ var parts = token.split_contents();
+ if(parts.length != 2){
+ throw new Error("'now' statement takes one argument");
+ }
+ return new dojox.dtl.tag.date.NowNode(parts[1].slice(1, -1), parser.create_text_node());
+}
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.loader"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.loader"] = true;
+dojo.provide("dojox.dtl.tag.loader");
+
+
+
+(function(){
+ var dd = dojox.dtl;
+ var ddtl = dd.tag.loader;
+
+ ddtl.BlockNode = dojo.extend(function(name, nodelist){
+ this.name = name;
+ this.nodelist = nodelist; // Can be overridden
+ },
+ {
+ "super": function(){
+ if(this.parent){
+ var html = this.parent.nodelist.dummyRender(this.context, null, true);
+ if(typeof html == "string"){
+ html = new String(html);
+ }
+ html.safe = true;
+ return html;
+ }
+ return '';
+ },
+ render: function(context, buffer){
+ var name = this.name;
+ var nodelist = this.nodelist;
+ var parent;
+ if(buffer.blocks){
+ var block = buffer.blocks[name];
+ if(block){
+ parent = block.parent;
+ nodelist = block.nodelist;
+ block.used = true;
+ }
+ }
+
+ this.rendered = nodelist;
+
+ context = context.push();
+ this.context = context;
+ this.parent = null;
+ if(nodelist != this.nodelist){
+ this.parent = this;
+ }
+ context.block = this;
+
+ if(buffer.getParent){
+ var bufferParent = buffer.getParent();
+ var setParent = dojo.connect(buffer, "onSetParent", function(node, up, root){
+ if(up && root){
+ buffer.setParent(bufferParent);
+ }
+ });
+ }
+ buffer = nodelist.render(context, buffer, this);
+ setParent && dojo.disconnect(setParent);
+ context = context.pop();
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return this.rendered.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.name, this.nodelist.clone(buffer));
+ },
+ toString: function(){ return "dojox.dtl.tag.loader.BlockNode"; }
+ });
+
+ ddtl.ExtendsNode = dojo.extend(function(getTemplate, nodelist, shared, parent, key){
+ this.getTemplate = getTemplate;
+ this.nodelist = nodelist;
+ this.shared = shared;
+ this.parent = parent;
+ this.key = key;
+ },
+ {
+ parents: {},
+ getParent: function(context){
+ var parent = this.parent;
+ if(!parent){
+ var string;
+ parent = this.parent = context.get(this.key, false);
+ if(!parent){
+ throw new Error("extends tag used a variable that did not resolve");
+ }
+ if(typeof parent == "object"){
+ var url = parent.url || parent.templatePath;
+ if(parent.shared){
+ this.shared = true;
+ }
+ if(url){
+ parent = this.parent = url.toString();
+ }else if(parent.templateString){
+ // Allow the builder's string interning to work
+ string = parent.templateString;
+ parent = this.parent = " ";
+ }else{
+ parent = this.parent = this.parent.toString();
+ }
+ }
+ if(parent && parent.indexOf("shared:") === 0){
+ this.shared = true;
+ parent = this.parent = parent.substring(7, parent.length);
+ }
+ }
+ if(!parent){
+ throw new Error("Invalid template name in 'extends' tag.");
+ }
+ if(parent.render){
+ return parent;
+ }
+ if(this.parents[parent]){
+ return this.parents[parent];
+ }
+ this.parent = this.getTemplate(string || dojox.dtl.text.getTemplateString(parent));
+ if(this.shared){
+ this.parents[parent] = this.parent;
+ }
+ return this.parent;
+ },
+ render: function(context, buffer){
+ var parent = this.getParent(context);
+
+ parent.blocks = parent.blocks || {};
+ buffer.blocks = buffer.blocks || {};
+
+ for(var i = 0, node; node = this.nodelist.contents[i]; i++){
+ if(node instanceof dojox.dtl.tag.loader.BlockNode){
+ var old = parent.blocks[node.name];
+ if(old && old.nodelist != node.nodelist){
+ // In a shared template, the individual blocks might change
+ buffer = old.nodelist.unrender(context, buffer);
+ }
+ parent.blocks[node.name] = buffer.blocks[node.name] = {
+ shared: this.shared,
+ nodelist: node.nodelist,
+ used: false
+ }
+ }
+ }
+
+ this.rendered = parent;
+ return parent.nodelist.render(context, buffer, this);
+ },
+ unrender: function(context, buffer){
+ return this.rendered.unrender(context, buffer, this);
+ },
+ toString: function(){ return "dojox.dtl.block.ExtendsNode"; }
+ });
+
+ ddtl.IncludeNode = dojo.extend(function(path, constant, getTemplate, text, parsed){
+ this._path = path;
+ this.constant = constant;
+ this.path = (constant) ? path : new dd._Filter(path);
+ this.getTemplate = getTemplate;
+ this.text = text;
+ this.parsed = (arguments.length == 5) ? parsed : true;
+ },
+ {
+ _cache: [{}, {}],
+ render: function(context, buffer){
+ var location = ((this.constant) ? this.path : this.path.resolve(context)).toString();
+ var parsed = Number(this.parsed);
+ var dirty = false;
+ if(location != this.last){
+ dirty = true;
+ if(this.last){
+ buffer = this.unrender(context, buffer);
+ }
+ this.last = location;
+ }
+
+ var cache = this._cache[parsed];
+
+ if(parsed){
+ if(!cache[location]){
+ cache[location] = dd.text._resolveTemplateArg(location, true);
+ }
+ if(dirty){
+ var template = this.getTemplate(cache[location]);
+ this.rendered = template.nodelist;
+ }
+ return this.rendered.render(context, buffer, this);
+ }else{
+ if(this.text instanceof dd._TextNode){
+ if(dirty){
+ this.rendered = this.text;
+ this.rendered.set(dd.text._resolveTemplateArg(location, true));
+ }
+ return this.rendered.render(context, buffer);
+ }else{
+ if(!cache[location]){
+ var nodelist = [];
+ var div = document.createElement("div");
+ div.innerHTML = dd.text._resolveTemplateArg(location, true);
+ var children = div.childNodes;
+ while(children.length){
+ var removed = div.removeChild(children[0]);
+ nodelist.push(removed);
+ }
+ cache[location] = nodelist;
+ }
+ if(dirty){
+ this.nodelist = [];
+ var exists = true;
+ for(var i = 0, child; child = cache[location][i]; i++){
+ this.nodelist.push(child.cloneNode(true));
+ }
+ }
+ for(var i = 0, node; node = this.nodelist[i]; i++){
+ buffer = buffer.concat(node);
+ }
+ }
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ if(this.rendered){
+ buffer = this.rendered.unrender(context, buffer);
+ }
+ if(this.nodelist){
+ for(var i = 0, node; node = this.nodelist[i]; i++){
+ buffer = buffer.remove(node);
+ }
+ }
+ return buffer;
+ },
+ clone: function(buffer){
+ return new this.constructor(this._path, this.constant, this.getTemplate, this.text.clone(buffer), this.parsed);
+ }
+ });
+
+ dojo.mixin(ddtl, {
+ block: function(parser, token){
+ var parts = token.contents.split();
+ var name = parts[1];
+
+ parser._blocks = parser._blocks || {};
+ parser._blocks[name] = parser._blocks[name] || [];
+ parser._blocks[name].push(name);
+
+ var nodelist = parser.parse(["endblock", "endblock " + name]).rtrim();
+ parser.next_token();
+ return new dojox.dtl.tag.loader.BlockNode(name, nodelist);
+ },
+ extends_: function(parser, token){
+ var parts = token.contents.split();
+ var shared = false;
+ var parent = null;
+ var key = null;
+ if(parts[1].charAt(0) == '"' || parts[1].charAt(0) == "'"){
+ parent = parts[1].substring(1, parts[1].length - 1);
+ }else{
+ key = parts[1];
+ }
+ if(parent && parent.indexOf("shared:") == 0){
+ shared = true;
+ parent = parent.substring(7, parent.length);
+ }
+ var nodelist = parser.parse();
+ return new dojox.dtl.tag.loader.ExtendsNode(parser.getTemplate, nodelist, shared, parent, key);
+ },
+ include: function(parser, token){
+ var parts = token.contents.split();
+ if(parts.length != 2){
+ throw new Error(parts[0] + " tag takes one argument: the name of the template to be included");
+ }
+ var path = parts[1];
+ var constant = false;
+ if((path.charAt(0) == '"' || path.slice(-1) == "'") && path.charAt(0) == path.slice(-1)){
+ path = path.slice(1, -1);
+ constant = true;
+ }
+ return new ddtl.IncludeNode(path, constant, parser.getTemplate, parser.create_text_node());
+ },
+ ssi: function(parser, token){
+ // We're going to treat things a little differently here.
+ // First of all, this tag is *not* portable, so I'm not
+ // concerned about it being a "drop in" replacement.
+
+ // Instead, we'll just replicate the include tag, but with that
+ // optional "parsed" parameter.
+ var parts = token.contents.split();
+ var parsed = false;
+ if(parts.length == 3){
+ parsed = (parts.pop() == "parsed");
+ if(!parsed){
+ throw new Error("Second (optional) argument to ssi tag must be 'parsed'");
+ }
+ }
+ var node = ddtl.include(parser, new dd.Token(token.token_type, parts.join(" ")));
+ node.parsed = parsed;
+ return node;
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.misc"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.misc"] = true;
+dojo.provide("dojox.dtl.tag.misc");
+
+
+(function(){
+ var dd = dojox.dtl;
+ var ddtm = dd.tag.misc;
+
+ ddtm.DebugNode = dojo.extend(function(text){
+ this.text = text;
+ },
+ {
+ render: function(context, buffer){
+ var keys = context.getKeys();
+ var debug = [];
+ var only = {};
+ for(var i = 0, key; key = keys[i]; i++){
+ only[key] = context[key];
+ debug += "[" + key + ": " + typeof context[key] + "]\n";
+ }
+ console.debug(only);
+ return this.text.set(debug).render(context, buffer, this);
+ },
+ unrender: function(context, buffer){
+ return buffer;
+ },
+ clone: function(buffer){
+ return new this.constructor(this.text.clone(buffer));
+ },
+ toString: function(){ return "ddtm.DebugNode"; }
+ });
+
+ ddtm.FilterNode = dojo.extend(function(varnode, nodelist){
+ this._varnode = varnode;
+ this._nodelist = nodelist;
+ },
+ {
+ render: function(context, buffer){
+ // Doing this in HTML requires a different buffer with a fake root node
+ var output = this._nodelist.render(context, new dojox.string.Builder());
+ context = context.update({ "var": output.toString() });
+ var filtered = this._varnode.render(context, buffer);
+ context = context.pop();
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return buffer;
+ },
+ clone: function(buffer){
+ return new this.constructor(this._expression, this._nodelist.clone(buffer));
+ }
+ });
+
+ ddtm.FirstOfNode = dojo.extend(function(vars, text){
+ this._vars = vars;
+ this.vars = dojo.map(vars, function(item){
+ return new dojox.dtl._Filter(item);
+ });
+ this.contents = text;
+ },
+ {
+ render: function(context, buffer){
+ for(var i = 0, item; item = this.vars[i]; i++){
+ var resolved = item.resolve(context);
+ if(typeof resolved != "undefined"){
+ if(resolved === null){
+ resolved = "null";
+ }
+ this.contents.set(resolved);
+ return this.contents.render(context, buffer);
+ }
+ }
+ return this.contents.unrender(context, buffer);
+ },
+ unrender: function(context, buffer){
+ return this.contents.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this._vars, this.contents.clone(buffer));
+ }
+ });
+
+ ddtm.SpacelessNode = dojo.extend(function(nodelist, text){
+ this.nodelist = nodelist;
+ this.contents = text;
+ },
+ {
+ render: function(context, buffer){
+ if(buffer.getParent){
+ // Unfortunately, we have to branch here
+ var watch = [
+ dojo.connect(buffer, "onAddNodeComplete", this, "_watch"),
+ dojo.connect(buffer, "onSetParent", this, "_watchParent")
+ ];
+ buffer = this.nodelist.render(context, buffer);
+ dojo.disconnect(watch[0]);
+ dojo.disconnect(watch[1]);
+ }else{
+ var value = this.nodelist.dummyRender(context);
+ this.contents.set(value.replace(/>\s+</g, '><'));
+ buffer = this.contents.render(context, buffer);
+ }
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return this.nodelist.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.nodelist.clone(buffer), this.contents.clone(buffer));
+ },
+ _isEmpty: function(node){
+ return (node.nodeType == 3 && !node.data.match(/[^\s\n]/));
+ },
+ _watch: function(node){
+ if(this._isEmpty(node)){
+ var remove = false;
+ if(node.parentNode.firstChild == node){
+ node.parentNode.removeChild(node);
+ }
+ }else{
+ var children = node.parentNode.childNodes;
+ if(node.nodeType == 1 && children.length > 2){
+ for(var i = 2, child; child = children[i]; i++){
+ if(children[i - 2].nodeType == 1 && this._isEmpty(children[i - 1])){
+ node.parentNode.removeChild(children[i - 1]);
+ return;
+ }
+ }
+ }
+ }
+ },
+ _watchParent: function(node){
+ var children = node.childNodes;
+ if(children.length){
+ while(node.childNodes.length){
+ var last = node.childNodes[node.childNodes.length - 1];
+ if(!this._isEmpty(last)){
+ return;
+ }
+ node.removeChild(last);
+ }
+ }
+ }
+ });
+
+ ddtm.TemplateTagNode = dojo.extend(function(tag, text){
+ this.tag = tag;
+ this.contents = text;
+ },
+ {
+ mapping: {
+ openblock: "{%",
+ closeblock: "%}",
+ openvariable: "{{",
+ closevariable: "}}",
+ openbrace: "{",
+ closebrace: "}",
+ opencomment: "{#",
+ closecomment: "#}"
+ },
+ render: function(context, buffer){
+ this.contents.set(this.mapping[this.tag]);
+ return this.contents.render(context, buffer);
+ },
+ unrender: function(context, buffer){
+ return this.contents.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.tag, this.contents.clone(buffer));
+ }
+ });
+
+ ddtm.WidthRatioNode = dojo.extend(function(current, max, width, text){
+ this.current = new dd._Filter(current);
+ this.max = new dd._Filter(max);
+ this.width = width;
+ this.contents = text;
+ },
+ {
+ render: function(context, buffer){
+ var current = +this.current.resolve(context);
+ var max = +this.max.resolve(context);
+ if(typeof current != "number" || typeof max != "number" || !max){
+ this.contents.set("");
+ }else{
+ this.contents.set("" + Math.round((current / max) * this.width));
+ }
+ return this.contents.render(context, buffer);
+ },
+ unrender: function(context, buffer){
+ return this.contents.unrender(context, buffer);
+ },
+ clone: function(buffer){
+ return new this.constructor(this.current.getExpression(), this.max.getExpression(), this.width, this.contents.clone(buffer));
+ }
+ });
+
+ ddtm.WithNode = dojo.extend(function(target, alias, nodelist){
+ this.target = new dd._Filter(target);
+ this.alias = alias;
+ this.nodelist = nodelist;
+ },
+ {
+ render: function(context, buffer){
+ var target = this.target.resolve(context);
+ context = context.push();
+ context[this.alias] = target;
+ buffer = this.nodelist.render(context, buffer);
+ context = context.pop();
+ return buffer;
+ },
+ unrender: function(context, buffer){
+ return buffer;
+ },
+ clone: function(buffer){
+ return new this.constructor(this.target.getExpression(), this.alias, this.nodelist.clone(buffer));
+ }
+ });
+
+ dojo.mixin(ddtm, {
+ comment: function(parser, token){
+ // summary: Ignore everything between {% comment %} and {% endcomment %}
+ parser.skip_past("endcomment");
+ return dd._noOpNode;
+ },
+ debug: function(parser, token){
+ // summary: Output the current context, maybe add more stuff later.
+ return new ddtm.DebugNode(parser.create_text_node());
+ },
+ filter: function(parser, token){
+ // summary: Filter the contents of the blog through variable filters.
+ var rest = token.contents.split(null, 1)[1];
+ var varnode = parser.create_variable_node("var|" + rest);
+ var nodelist = parser.parse(["endfilter"]);
+ parser.next_token();
+ return new ddtm.FilterNode(varnode, nodelist);
+ },
+ firstof: function(parser, token){
+ var parts = token.split_contents().slice(1);
+ if(!parts.length){
+ throw new Error("'firstof' statement requires at least one argument");
+ }
+ return new ddtm.FirstOfNode(parts, parser.create_text_node());
+ },
+ spaceless: function(parser, token){
+ var nodelist = parser.parse(["endspaceless"]);
+ parser.delete_first_token();
+ return new ddtm.SpacelessNode(nodelist, parser.create_text_node());
+ },
+ templatetag: function(parser, token){
+ var parts = token.contents.split();
+ if(parts.length != 2){
+ throw new Error("'templatetag' statement takes one argument");
+ }
+ var tag = parts[1];
+ var mapping = ddtm.TemplateTagNode.prototype.mapping;
+ if(!mapping[tag]){
+ var keys = [];
+ for(var key in mapping){
+ keys.push(key);
+ }
+ throw new Error("Invalid templatetag argument: '" + tag + "'. Must be one of: " + keys.join(", "));
+ }
+ return new ddtm.TemplateTagNode(tag, parser.create_text_node());
+ },
+ widthratio: function(parser, token){
+ var parts = token.contents.split();
+ if(parts.length != 4){
+ throw new Error("widthratio takes three arguments");
+ }
+ var width = +parts[3];
+ if(typeof width != "number"){
+ throw new Error("widthratio final argument must be an integer");
+ }
+ return new ddtm.WidthRatioNode(parts[1], parts[2], width, parser.create_text_node());
+ },
+ with_: function(parser, token){
+ var parts = token.split_contents();
+ if(parts.length != 4 || parts[2] != "as"){
+ throw new Error("do_width expected format as 'with value as name'");
+ }
+ var nodelist = parser.parse(["endwith"]);
+ parser.next_token();
+ return new ddtm.WithNode(parts[1], parts[3], nodelist);
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.ext-dojo.NodeList"] = true;
+dojo.provide("dojox.dtl.ext-dojo.NodeList");
+
+
+dojo.extend(dojo.NodeList, {
+ dtl: function(template, context){
+ // template: dojox.dtl.__StringArgs|String
+ // The template string or location
+ // context: dojox.dtl.__ObjectArgs|Object
+ // The context object or location
+ var d = dojox.dtl;
+
+ var self = this;
+ var render = function(template, context){
+ var content = template.render(new d._Context(context));
+ self.forEach(function(node){
+ node.innerHTML = content;
+ });
+ }
+
+ d.text._resolveTemplateArg(template).addCallback(function(templateString){
+ template = new d.Template(templateString);
+ d.text._resolveContextArg(context).addCallback(function(context){
+ render(template, context);
+ });
+ });
+
+ return this;
+ }
+});
+
+}
+
diff --git a/js/dojo/dojox/dtl/Context.js b/js/dojo/dojox/dtl/Context.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/Context.js
@@ -0,0 +1,63 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.Context"]){
+dojo._hasResource["dojox.dtl.Context"]=true;
+dojo.provide("dojox.dtl.Context");
+dojo.require("dojox.dtl._base");
+dojox.dtl.Context=dojo.extend(function(_1){
+this._this={};
+dojox.dtl._Context.call(this,_1);
+},dojox.dtl._Context.prototype,{getKeys:function(){
+var _2=[];
+for(var _3 in this){
+if(this.hasOwnProperty(_3)&&_3!="_dicts"&&_3!="_this"){
+_2.push(_3);
+}
+}
+return _2;
+},extend:function(_4){
+return dojo.delegate(this,_4);
+},filter:function(_5){
+var _6=new dojox.dtl.Context();
+var _7=[];
+var i,_8;
+if(_5 instanceof dojox.dtl.Context){
+_7=_5.getKeys();
+}else{
+if(typeof _5=="object"){
+for(var _9 in _5){
+_7.push(_9);
+}
+}else{
+for(i=0;_8=arguments[i];i++){
+if(typeof _8=="string"){
+_7.push(_8);
+}
+}
+}
+}
+for(i=0,_9;_9=_7[i];i++){
+_6[_9]=this[_9];
+}
+return _6;
+},setThis:function(_a){
+this._this=_a;
+},getThis:function(){
+return this._this;
+},hasKey:function(_b){
+if(typeof this[_b]!="undefined"){
+return true;
+}
+for(var i=0,_c;_c=this._dicts[i];i++){
+if(typeof _c[_b]!="undefined"){
+return true;
+}
+}
+return false;
+}});
+}
diff --git a/js/dojo/dojox/dtl/DomInline.js b/js/dojo/dojox/dtl/DomInline.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/DomInline.js
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.DomInline"]){
+dojo._hasResource["dojox.dtl.DomInline"]=true;
+dojo.provide("dojox.dtl.DomInline");
+dojo.require("dojox.dtl.dom");
+dojo.require("dijit._Widget");
+dojox.dtl.DomInline=dojo.extend(function(_1,_2){
+this.create(_1,_2);
+},dijit._Widget.prototype,{context:null,render:function(_3){
+this.context=_3||this.context;
+this.postMixInProperties();
+var _4=this.template.render(this.context).getRootNode();
+if(_4!=this.containerNode){
+this.containerNode.parentNode.replaceChild(_4,this.containerNode);
+this.containerNode=_4;
+}
+},declaredClass:"dojox.dtl.Inline",buildRendering:function(){
+var _5=this.domNode=document.createElement("div");
+this.containerNode=_5.appendChild(document.createElement("div"));
+var _6=this.srcNodeRef;
+if(_6.parentNode){
+_6.parentNode.replaceChild(_5,_6);
+}
+this.template=new dojox.dtl.DomTemplate(dojo.trim(_6.text),true);
+this.render();
+},postMixInProperties:function(){
+this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl.Context(this.context);
+}});
+}
diff --git a/js/dojo/dojox/dtl/HtmlInline.js b/js/dojo/dojox/dtl/HtmlInline.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/HtmlInline.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.HtmlInline"]){
+dojo._hasResource["dojox.dtl.HtmlInline"]=true;
+dojo.provide("dojox.dtl.HtmlInline");
+dojo.require("dojox.dtl.DomInline");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+dojox.dtl.HtmlInline=dojox.dtl.DomInline;
+dojox.dtl.HtmlInline.prototype.declaredClass="dojox.dtl.HtmlInline";
+}
diff --git a/js/dojo/dojox/dtl/Inline.js b/js/dojo/dojox/dtl/Inline.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/Inline.js
@@ -0,0 +1,31 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.Inline"]){
+dojo._hasResource["dojox.dtl.Inline"]=true;
+dojo.provide("dojox.dtl.Inline");
+dojo.require("dojox.dtl._base");
+dojo.require("dijit._Widget");
+dojox.dtl.Inline=dojo.extend(function(_1,_2){
+this.create(_1,_2);
+},dijit._Widget.prototype,{context:null,render:function(_3){
+this.context=_3||this.context;
+this.postMixInProperties();
+dojo.query("*",this.domNode).orphan();
+this.domNode.innerHTML=this.template.render(this.context);
+},declaredClass:"dojox.dtl.Inline",buildRendering:function(){
+var _4=this.domNode=document.createElement("div");
+var _5=this.srcNodeRef;
+if(_5.parentNode){
+_5.parentNode.replaceChild(_4,_5);
+}
+this.template=new dojox.dtl.Template(dojo.trim(_5.text),true);
+this.render();
+},postMixInProperties:function(){
+this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl._Context(this.context);
+}});
+}
diff --git a/js/dojo/dojox/dtl/_DomTemplated.js b/js/dojo/dojox/dtl/_DomTemplated.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/_DomTemplated.js
@@ -0,0 +1,63 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._DomTemplated"]){
+dojo._hasResource["dojox.dtl._DomTemplated"]=true;
+dojo.provide("dojox.dtl._DomTemplated");
+dojo.require("dijit._Templated");
+dojo.require("dojox.dtl.dom");
+dojo.require("dojox.dtl.render.dom");
+dojo.require("dojox.dtl.contrib.dijit");
+dojox.dtl._DomTemplated=function(){
+};
+dojox.dtl._DomTemplated.prototype={_dijitTemplateCompat:false,buildRendering:function(){
+this.domNode=this.srcNodeRef;
+if(!this._render){
+var _1=dojox.dtl.contrib.dijit;
+var _2=_1.widgetsInTemplate;
+_1.widgetsInTemplate=this.widgetsInTemplate;
+this.template=this.template||this._getCachedTemplate(this.templatePath,this.templateString);
+this._render=new dojox.dtl.render.dom.Render(this.domNode,this.template);
+_1.widgetsInTemplate=_2;
+}
+this.render();
+this.domNode=this.template.getRootNode();
+if(this.srcNodeRef&&this.srcNodeRef.parentNode){
+dojo.destroy(this.srcNodeRef);
+delete this.srcNodeRef;
+}
+},setTemplate:function(_3,_4){
+if(dojox.dtl.text._isTemplate(_3)){
+this.template=this._getCachedTemplate(null,_3);
+}else{
+this.template=this._getCachedTemplate(_3);
+}
+this.render(_4);
+},render:function(_5,_6){
+if(_6){
+this.template=_6;
+}
+this._render.render(this._getContext(_5),this.template);
+},_getContext:function(_7){
+if(!(_7 instanceof dojox.dtl.Context)){
+_7=false;
+}
+_7=_7||new dojox.dtl.Context(this);
+_7.setThis(this);
+return _7;
+},_getCachedTemplate:function(_8,_9){
+if(!this._templates){
+this._templates={};
+}
+var _a=_9||_8.toString();
+var _b=this._templates;
+if(_b[_a]){
+return _b[_a];
+}
+return (_b[_a]=new dojox.dtl.DomTemplate(dijit._Templated.getCachedTemplate(_8,_9,true)));
+}};
+}
diff --git a/js/dojo/dojox/dtl/_HtmlTemplated.js b/js/dojo/dojox/dtl/_HtmlTemplated.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/_HtmlTemplated.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._HtmlTemplated"]){
+dojo._hasResource["dojox.dtl._HtmlTemplated"]=true;
+dojo.provide("dojox.dtl._HtmlTemplated");
+dojo.require("dojox.dtl._DomTemplated");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+dojox.dtl._HtmlTemplated=dojox.dtl._DomTemplated;
+dojox.dtl._HtmlTemplated.prototype.declaredClass="dojox.dtl._HtmlTemplated";
+}
diff --git a/js/dojo/dojox/dtl/_Templated.js b/js/dojo/dojox/dtl/_Templated.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/_Templated.js
@@ -0,0 +1,71 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._Templated"]){
+dojo._hasResource["dojox.dtl._Templated"]=true;
+dojo.provide("dojox.dtl._Templated");
+dojo.require("dijit._Templated");
+dojo.require("dojox.dtl._base");
+dojo.declare("dojox.dtl._Templated",dijit._Templated,{_dijitTemplateCompat:false,buildRendering:function(){
+var _1;
+if(this.domNode&&!this._template){
+return;
+}
+if(!this._template){
+var t=this.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);
+if(t instanceof dojox.dtl.Template){
+this._template=t;
+}else{
+_1=t;
+}
+}
+if(!_1){
+var _2=dojo._toDom(this._template.render(new dojox.dtl._Context(this)));
+if(_2.nodeType!==1&&_2.nodeType!==3){
+for(var i=0,l=_2.childNodes.length;i<l;++i){
+_1=_2.childNodes[i];
+if(_1.nodeType==1){
+break;
+}
+}
+}else{
+_1=_2;
+}
+}
+this._attachTemplateNodes(_1);
+if(this.widgetsInTemplate){
+var _3=dojo.parser.parse(_1);
+this._attachTemplateNodes(_3,function(n,p){
+return n[p];
+});
+}
+if(this.domNode){
+dojo.place(_1,this.domNode,"before");
+this.destroyDescendants();
+dojo.destroy(this.domNode);
+}
+this.domNode=_1;
+this._fillContent(this.srcNodeRef);
+},_templateCache:{},getCachedTemplate:function(_4,_5,_6){
+var _7=this._templateCache;
+var _8=_5||_4;
+if(_7[_8]){
+return _7[_8];
+}
+_5=dojo.string.trim(_5||dojo.cache(_4,{sanitize:true}));
+if(this._dijitTemplateCompat&&(_6||_5.match(/\$\{([^\}]+)\}/g))){
+_5=this._stringRepl(_5);
+}
+if(_6||!_5.match(/\{[{%]([^\}]+)[%}]\}/g)){
+return _7[_8]=dojo._toDom(_5);
+}else{
+return _7[_8]=new dojox.dtl.Template(_5);
+}
+},render:function(){
+this.buildRendering();
+}});
+}
diff --git a/js/dojo/dojox/dtl/contrib/data.js b/js/dojo/dojox/dtl/contrib/data.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/contrib/data.js
@@ -0,0 +1,121 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.data"]){
+dojo._hasResource["dojox.dtl.contrib.data"]=true;
+dojo.provide("dojox.dtl.contrib.data");
+dojo.require("dojox.dtl._base");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.data;
+var _2=true;
+_1._BoundItem=dojo.extend(function(_3,_4){
+this.item=_3;
+this.store=_4;
+},{get:function(_5){
+var _6=this.store;
+var _7=this.item;
+if(_5=="getLabel"){
+return _6.getLabel(_7);
+}else{
+if(_5=="getAttributes"){
+return _6.getAttributes(_7);
+}else{
+if(_5=="getIdentity"){
+if(_6.getIdentity){
+return _6.getIdentity(_7);
+}
+return "Store has no identity API";
+}else{
+if(!_6.hasAttribute(_7,_5)){
+if(_5.slice(-1)=="s"){
+if(_2){
+_2=false;
+dojo.deprecated("You no longer need an extra s to call getValues, it can be figured out automatically");
+}
+_5=_5.slice(0,-1);
+}
+if(!_6.hasAttribute(_7,_5)){
+return;
+}
+}
+var _8=_6.getValues(_7,_5);
+if(!_8){
+return;
+}
+if(!dojo.isArray(_8)){
+return new _1._BoundItem(_8,_6);
+}
+_8=dojo.map(_8,function(_9){
+if(dojo.isObject(_9)&&_6.isItem(_9)){
+return new _1._BoundItem(_9,_6);
+}
+return _9;
+});
+_8.get=_1._get;
+return _8;
+}
+}
+}
+}});
+_1._BoundItem.prototype.get.safe=true;
+_1.BindDataNode=dojo.extend(function(_a,_b,_c,_d){
+this.items=_a&&new dd._Filter(_a);
+this.query=_b&&new dd._Filter(_b);
+this.store=new dd._Filter(_c);
+this.alias=_d;
+},{render:function(_e,_f){
+var _10=this.items&&this.items.resolve(_e);
+var _11=this.query&&this.query.resolve(_e);
+var _12=this.store.resolve(_e);
+if(!_12||!_12.getFeatures){
+throw new Error("data_bind didn't receive a store");
+}
+if(_11){
+var _13=false;
+_12.fetch({query:_11,sync:true,scope:this,onComplete:function(it){
+_13=true;
+_10=it;
+}});
+if(!_13){
+throw new Error("The bind_data tag only works with a query if the store executed synchronously");
+}
+}
+var _14=[];
+if(_10){
+for(var i=0,_15;_15=_10[i];i++){
+_14.push(new _1._BoundItem(_15,_12));
+}
+}
+_e[this.alias]=_14;
+return _f;
+},unrender:function(_16,_17){
+return _17;
+},clone:function(){
+return this;
+}});
+dojo.mixin(_1,{_get:function(key){
+if(this.length){
+return (this[0] instanceof _1._BoundItem)?this[0].get(key):this[0][key];
+}
+},bind_data:function(_18,_19){
+var _1a=_19.contents.split();
+if(_1a[2]!="to"||_1a[4]!="as"||!_1a[5]){
+throw new Error("data_bind expects the format: 'data_bind items to store as varName'");
+}
+return new _1.BindDataNode(_1a[1],null,_1a[3],_1a[5]);
+},bind_query:function(_1b,_1c){
+var _1d=_1c.contents.split();
+if(_1d[2]!="to"||_1d[4]!="as"||!_1d[5]){
+throw new Error("data_bind expects the format: 'bind_query query to store as varName'");
+}
+return new _1.BindDataNode(null,_1d[1],_1d[3],_1d[5]);
+}});
+_1._get.safe=true;
+dd.register.tags("dojox.dtl.contrib",{"data":["bind_data","bind_query"]});
+})();
+}
diff --git a/js/dojo/dojox/dtl/contrib/dijit.js b/js/dojo/dojox/dtl/contrib/dijit.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/contrib/dijit.js
@@ -0,0 +1,184 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.dijit"]){
+dojo._hasResource["dojox.dtl.contrib.dijit"]=true;
+dojo.provide("dojox.dtl.contrib.dijit");
+dojo.require("dojox.dtl.dom");
+dojo.require("dojo.parser");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.dijit;
+_1.AttachNode=dojo.extend(function(_2,_3){
+this._keys=_2;
+this._object=_3;
+},{render:function(_4,_5){
+if(!this._rendered){
+this._rendered=true;
+for(var i=0,_6;_6=this._keys[i];i++){
+_4.getThis()[_6]=this._object||_5.getParent();
+}
+}
+return _5;
+},unrender:function(_7,_8){
+if(this._rendered){
+this._rendered=false;
+for(var i=0,_9;_9=this._keys[i];i++){
+if(_7.getThis()[_9]===(this._object||_8.getParent())){
+delete _7.getThis()[_9];
+}
+}
+}
+return _8;
+},clone:function(_a){
+return new this.constructor(this._keys,this._object);
+}});
+_1.EventNode=dojo.extend(function(_b,_c){
+this._command=_b;
+var _d,_e=_b.split(/\s*,\s*/);
+var _f=dojo.trim;
+var _10=[];
+var fns=[];
+while(_d=_e.pop()){
+if(_d){
+var fn=null;
+if(_d.indexOf(":")!=-1){
+var _11=_d.split(":");
+_d=_f(_11[0]);
+fn=_f(_11.slice(1).join(":"));
+}else{
+_d=_f(_d);
+}
+if(!fn){
+fn=_d;
+}
+_10.push(_d);
+fns.push(fn);
+}
+}
+this._types=_10;
+this._fns=fns;
+this._object=_c;
+this._rendered=[];
+},{_clear:false,render:function(_12,_13){
+for(var i=0,_14;_14=this._types[i];i++){
+if(!this._clear&&!this._object){
+_13.getParent()[_14]=null;
+}
+var fn=this._fns[i];
+var _15;
+if(fn.indexOf(" ")!=-1){
+if(this._rendered[i]){
+dojo.disconnect(this._rendered[i]);
+this._rendered[i]=false;
+}
+_15=dojo.map(fn.split(" ").slice(1),function(_16){
+return new dd._Filter(_16).resolve(_12);
+});
+fn=fn.split(" ",2)[0];
+}
+if(!this._rendered[i]){
+if(!this._object){
+this._rendered[i]=_13.addEvent(_12,_14,fn,_15);
+}else{
+this._rendered[i]=dojo.connect(this._object,_14,_12.getThis(),fn);
+}
+}
+}
+this._clear=true;
+return _13;
+},unrender:function(_17,_18){
+while(this._rendered.length){
+dojo.disconnect(this._rendered.pop());
+}
+return _18;
+},clone:function(){
+return new this.constructor(this._command,this._object);
+}});
+function _19(n1){
+var n2=n1.cloneNode(true);
+if(dojo.isIE){
+dojo.query("script",n2).forEach("item.text = this[index].text;",dojo.query("script",n1));
+}
+return n2;
+};
+_1.DojoTypeNode=dojo.extend(function(_1a,_1b){
+this._node=_1a;
+this._parsed=_1b;
+var _1c=_1a.getAttribute("dojoAttachEvent");
+if(_1c){
+this._events=new _1.EventNode(dojo.trim(_1c));
+}
+var _1d=_1a.getAttribute("dojoAttachPoint");
+if(_1d){
+this._attach=new _1.AttachNode(dojo.trim(_1d).split(/\s*,\s*/));
+}
+if(!_1b){
+this._dijit=dojo.parser.instantiate([_19(_1a)])[0];
+}else{
+_1a=_19(_1a);
+var old=_1.widgetsInTemplate;
+_1.widgetsInTemplate=false;
+this._template=new dd.DomTemplate(_1a);
+_1.widgetsInTemplate=old;
+}
+},{render:function(_1e,_1f){
+if(this._parsed){
+var _20=new dd.DomBuffer();
+this._template.render(_1e,_20);
+var _21=_19(_20.getRootNode());
+var div=document.createElement("div");
+div.appendChild(_21);
+var _22=div.innerHTML;
+div.removeChild(_21);
+if(_22!=this._rendered){
+this._rendered=_22;
+if(this._dijit){
+this._dijit.destroyRecursive();
+}
+this._dijit=dojo.parser.instantiate([_21])[0];
+}
+}
+var _23=this._dijit.domNode;
+if(this._events){
+this._events._object=this._dijit;
+this._events.render(_1e,_1f);
+}
+if(this._attach){
+this._attach._object=this._dijit;
+this._attach.render(_1e,_1f);
+}
+return _1f.concat(_23);
+},unrender:function(_24,_25){
+return _25.remove(this._dijit.domNode);
+},clone:function(){
+return new this.constructor(this._node,this._parsed);
+}});
+dojo.mixin(_1,{widgetsInTemplate:true,dojoAttachPoint:function(_26,_27){
+return new _1.AttachNode(_27.contents.slice(16).split(/\s*,\s*/));
+},dojoAttachEvent:function(_28,_29){
+return new _1.EventNode(_29.contents.slice(16));
+},dojoType:function(_2a,_2b){
+var _2c=false;
+if(_2b.contents.slice(-7)==" parsed"){
+_2c=true;
+}
+var _2d=_2b.contents.slice(9);
+var _2e=_2c?_2d.slice(0,-7):_2d.toString();
+if(_1.widgetsInTemplate){
+var _2f=_2a.swallowNode();
+_2f.setAttribute("dojoType",_2e);
+return new _1.DojoTypeNode(_2f,_2c);
+}
+return new dd.AttributeNode("dojoType",_2e);
+},on:function(_30,_31){
+var _32=_31.contents.split();
+return new _1.EventNode(_32[0]+":"+_32.slice(1).join(" "));
+}});
+dd.register.tags("dojox.dtl.contrib",{"dijit":["attr:dojoType","attr:dojoAttachPoint",["attr:attach","dojoAttachPoint"],"attr:dojoAttachEvent",[/(attr:)?on(click|key(up))/i,"on"]]});
+})();
+}
diff --git a/js/dojo/dojox/dtl/contrib/dom.js b/js/dojo/dojox/dtl/contrib/dom.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/contrib/dom.js
@@ -0,0 +1,131 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.dom"]){
+dojo._hasResource["dojox.dtl.contrib.dom"]=true;
+dojo.provide("dojox.dtl.contrib.dom");
+dojo.require("dojox.dtl.dom");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.dom;
+var _2={render:function(){
+return this.contents;
+}};
+_1.StyleNode=dojo.extend(function(_3){
+this.contents={};
+this._current={};
+this._styles=_3;
+for(var _4 in _3){
+if(_3[_4].indexOf("{{")!=-1){
+var _5=new dd.Template(_3[_4]);
+}else{
+var _5=dojo.delegate(_2);
+_5.contents=_3[_4];
+}
+this.contents[_4]=_5;
+}
+},{render:function(_6,_7){
+for(var _8 in this.contents){
+var _9=this.contents[_8].render(_6);
+if(this._current[_8]!=_9){
+dojo.style(_7.getParent(),_8,this._current[_8]=_9);
+}
+}
+return _7;
+},unrender:function(_a,_b){
+this._current={};
+return _b;
+},clone:function(_c){
+return new this.constructor(this._styles);
+}});
+_1.BufferNode=dojo.extend(function(_d,_e){
+this.nodelist=_d;
+this.options=_e;
+},{_swap:function(_f,_10){
+if(!this.swapped&&this.parent.parentNode){
+if(_f=="node"){
+if((_10.nodeType==3&&!this.options.text)||(_10.nodeType==1&&!this.options.node)){
+return;
+}
+}else{
+if(_f=="class"){
+if(_f!="class"){
+return;
+}
+}
+}
+this.onAddNode&&dojo.disconnect(this.onAddNode);
+this.onRemoveNode&&dojo.disconnect(this.onRemoveNode);
+this.onChangeAttribute&&dojo.disconnect(this.onChangeAttribute);
+this.onChangeData&&dojo.disconnect(this.onChangeData);
+this.swapped=this.parent.cloneNode(true);
+this.parent.parentNode.replaceChild(this.swapped,this.parent);
+}
+},render:function(_11,_12){
+this.parent=_12.getParent();
+if(this.options.node){
+this.onAddNode=dojo.connect(_12,"onAddNode",dojo.hitch(this,"_swap","node"));
+this.onRemoveNode=dojo.connect(_12,"onRemoveNode",dojo.hitch(this,"_swap","node"));
+}
+if(this.options.text){
+this.onChangeData=dojo.connect(_12,"onChangeData",dojo.hitch(this,"_swap","node"));
+}
+if(this.options["class"]){
+this.onChangeAttribute=dojo.connect(_12,"onChangeAttribute",dojo.hitch(this,"_swap","class"));
+}
+_12=this.nodelist.render(_11,_12);
+if(this.swapped){
+this.swapped.parentNode.replaceChild(this.parent,this.swapped);
+dojo.destroy(this.swapped);
+}else{
+this.onAddNode&&dojo.disconnect(this.onAddNode);
+this.onRemoveNode&&dojo.disconnect(this.onRemoveNode);
+this.onChangeAttribute&&dojo.disconnect(this.onChangeAttribute);
+this.onChangeData&&dojo.disconnect(this.onChangeData);
+}
+delete this.parent;
+delete this.swapped;
+return _12;
+},unrender:function(_13,_14){
+return this.nodelist.unrender(_13,_14);
+},clone:function(_15){
+return new this.constructor(this.nodelist.clone(_15),this.options);
+}});
+dojo.mixin(_1,{buffer:function(_16,_17){
+var _18=_17.contents.split().slice(1);
+var _19={};
+var _1a=false;
+for(var i=_18.length;i--;){
+_1a=true;
+_19[_18[i]]=true;
+}
+if(!_1a){
+_19.node=true;
+}
+var _1b=_16.parse(["endbuffer"]);
+_16.next_token();
+return new _1.BufferNode(_1b,_19);
+},html:function(_1c,_1d){
+dojo.deprecated("{% html someVariable %}","Use {{ someVariable|safe }} instead");
+return _1c.create_variable_node(_1d.contents.slice(5)+"|safe");
+},style_:function(_1e,_1f){
+var _20={};
+_1f=_1f.contents.replace(/^style\s+/,"");
+var _21=_1f.split(/\s*;\s*/g);
+for(var i=0,_22;_22=_21[i];i++){
+var _23=_22.split(/\s*:\s*/g);
+var key=_23[0];
+var _24=dojo.trim(_23[1]);
+if(_24){
+_20[key]=_24;
+}
+}
+return new _1.StyleNode(_20);
+}});
+dd.register.tags("dojox.dtl.contrib",{"dom":["html","attr:style","buffer"]});
+})();
+}
diff --git a/js/dojo/dojox/dtl/contrib/html.js b/js/dojo/dojox/dtl/contrib/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/contrib/html.js
@@ -0,0 +1,13 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.html"]){
+dojo._hasResource["dojox.dtl.contrib.html"]=true;
+dojo.provide("dojox.dtl.contrib.html");
+dojo.require("dojox.dtl.contrib.dom");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+}
diff --git a/js/dojo/dojox/dtl/contrib/objects.js b/js/dojo/dojox/dtl/contrib/objects.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/contrib/objects.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.objects"]){
+dojo._hasResource["dojox.dtl.contrib.objects"]=true;
+dojo.provide("dojox.dtl.contrib.objects");
+dojo.mixin(dojox.dtl.contrib.objects,{key:function(_1,_2){
+return _1[_2];
+}});
+dojox.dtl.register.filters("dojox.dtl.contrib",{"objects":["key"]});
+}
diff --git a/js/dojo/dojox/dtl/dom.js b/js/dojo/dojox/dtl/dom.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/dom.js
@@ -0,0 +1,864 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.dom"]){
+dojo._hasResource["dojox.dtl.dom"]=true;
+dojo.provide("dojox.dtl.dom");
+dojo.require("dojox.dtl._base");
+dojo.require("dojox.dtl.Context");
+(function(){
+var dd=dojox.dtl;
+dd.BOOLS={checked:1,disabled:1,readonly:1};
+dd.TOKEN_CHANGE=-11;
+dd.TOKEN_ATTR=-12;
+dd.TOKEN_CUSTOM=-13;
+dd.TOKEN_NODE=1;
+var _1=dd.text;
+var _2=dd.dom={_attributes:{},_uppers:{},_re4:/^function anonymous\(\)\s*{\s*(.*)\s*}$/,_reTrim:/(?:^[\n\s]*(\{%)?\s*|\s*(%\})?[\n\s]*$)/g,_reSplit:/\s*%\}[\n\s]*\{%\s*/g,getTemplate:function(_3){
+if(typeof this._commentable=="undefined"){
+this._commentable=false;
+var _4=document.createElement("div");
+_4.innerHTML="<!--Test comment handling, and long comments, using comments whenever possible.-->";
+if(_4.childNodes.length&&_4.childNodes[0].nodeType==8&&_4.childNodes[0].data=="comment"){
+this._commentable=true;
+}
+}
+if(!this._commentable){
+_3=_3.replace(/<!--({({|%).*?(%|})})-->/g,"$1");
+}
+if(dojo.isIE){
+_3=_3.replace(/\b(checked|disabled|readonly|style)="/g,"t$1=\"");
+}
+_3=_3.replace(/\bstyle="/g,"tstyle=\"");
+var _5;
+var _6=dojo.isWebKit;
+var _7=[[true,"select","option"],[_6,"tr","td|th"],[_6,"thead","tr","th"],[_6,"tbody","tr","td"],[_6,"table","tbody|thead|tr","tr","td"]];
+var _8=[];
+for(var i=0,_9;_9=_7[i];i++){
+if(!_9[0]){
+continue;
+}
+if(_3.indexOf("<"+_9[1])!=-1){
+var _a=new RegExp("<"+_9[1]+"(?:.|\n)*?>((?:.|\n)+?)</"+_9[1]+">","ig");
+tagLoop:
+while(_5=_a.exec(_3)){
+var _b=_9[2].split("|");
+var _c=[];
+for(var j=0,_d;_d=_b[j];j++){
+_c.push("<"+_d+"(?:.|\n)*?>(?:.|\n)*?</"+_d+">");
+}
+var _e=[];
+var _f=dojox.string.tokenize(_5[1],new RegExp("("+_c.join("|")+")","ig"),function(_10){
+var tag=/<(\w+)/.exec(_10)[1];
+if(!_e[tag]){
+_e[tag]=true;
+_e.push(tag);
+}
+return {data:_10};
+});
+if(_e.length){
+var tag=(_e.length==1)?_e[0]:_9[2].split("|")[0];
+var _11=[];
+for(var j=0,jl=_f.length;j<jl;j++){
+var _12=_f[j];
+if(dojo.isObject(_12)){
+_11.push(_12.data);
+}else{
+var _13=_12.replace(this._reTrim,"");
+if(!_13){
+continue;
+}
+_12=_13.split(this._reSplit);
+for(var k=0,kl=_12.length;k<kl;k++){
+var _14="";
+for(var p=2,pl=_9.length;p<pl;p++){
+if(p==2){
+_14+="<"+tag+" dtlinstruction=\"{% "+_12[k].replace("\"","\\\"")+" %}\">";
+}else{
+if(tag==_9[p]){
+continue;
+}else{
+_14+="<"+_9[p]+">";
+}
+}
+}
+_14+="DTL";
+for(var p=_9.length-1;p>1;p--){
+if(p==2){
+_14+="</"+tag+">";
+}else{
+if(tag==_9[p]){
+continue;
+}else{
+_14+="</"+_9[p]+">";
+}
+}
+}
+_11.push("ÿ"+_8.length);
+_8.push(_14);
+}
+}
+}
+_3=_3.replace(_5[1],_11.join(""));
+}
+}
+}
+}
+for(var i=_8.length;i--;){
+_3=_3.replace("ÿ"+i,_8[i]);
+}
+var re=/\b([a-zA-Z_:][a-zA-Z0-9_\-\.:]*)=['"]/g;
+while(_5=re.exec(_3)){
+var _15=_5[1].toLowerCase();
+if(_15=="dtlinstruction"){
+continue;
+}
+if(_15!=_5[1]){
+this._uppers[_15]=_5[1];
+}
+this._attributes[_15]=true;
+}
+var _4=document.createElement("div");
+_4.innerHTML=_3;
+var _16={nodes:[]};
+while(_4.childNodes.length){
+_16.nodes.push(_4.removeChild(_4.childNodes[0]));
+}
+return _16;
+},tokenize:function(_17){
+var _18=[];
+for(var i=0,_19;_19=_17[i++];){
+if(_19.nodeType!=1){
+this.__tokenize(_19,_18);
+}else{
+this._tokenize(_19,_18);
+}
+}
+return _18;
+},_swallowed:[],_tokenize:function(_1a,_1b){
+var _1c=false;
+var _1d=this._swallowed;
+var i,j,tag,_1e;
+if(!_1b.first){
+_1c=_1b.first=true;
+var _1f=dd.register.getAttributeTags();
+for(i=0;tag=_1f[i];i++){
+try{
+(tag[2])({swallowNode:function(){
+throw 1;
+}},new dd.Token(dd.TOKEN_ATTR,""));
+}
+catch(e){
+_1d.push(tag);
+}
+}
+}
+for(i=0;tag=_1d[i];i++){
+var _20=_1a.getAttribute(tag[0]);
+if(_20){
+var _1d=false;
+var _21=(tag[2])({swallowNode:function(){
+_1d=true;
+return _1a;
+}},new dd.Token(dd.TOKEN_ATTR,tag[0]+" "+_20));
+if(_1d){
+if(_1a.parentNode&&_1a.parentNode.removeChild){
+_1a.parentNode.removeChild(_1a);
+}
+_1b.push([dd.TOKEN_CUSTOM,_21]);
+return;
+}
+}
+}
+var _22=[];
+if(dojo.isIE&&_1a.tagName=="SCRIPT"){
+_22.push({nodeType:3,data:_1a.text});
+_1a.text="";
+}else{
+for(i=0;_1e=_1a.childNodes[i];i++){
+_22.push(_1e);
+}
+}
+_1b.push([dd.TOKEN_NODE,_1a]);
+var _23=false;
+if(_22.length){
+_1b.push([dd.TOKEN_CHANGE,_1a]);
+_23=true;
+}
+for(var key in this._attributes){
+var _24=false;
+var _25="";
+if(key=="class"){
+_25=_1a.className||_25;
+}else{
+if(key=="for"){
+_25=_1a.htmlFor||_25;
+}else{
+if(key=="value"&&_1a.value==_1a.innerHTML){
+continue;
+}else{
+if(_1a.getAttribute){
+_25=_1a.getAttribute(key,2)||_25;
+if(key=="href"||key=="src"){
+if(dojo.isIE){
+var _26=location.href.lastIndexOf(location.hash);
+var _27=location.href.substring(0,_26).split("/");
+_27.pop();
+_27=_27.join("/")+"/";
+if(_25.indexOf(_27)==0){
+_25=_25.replace(_27,"");
+}
+_25=decodeURIComponent(_25);
+}
+}else{
+if(key=="tstyle"){
+_24=key;
+key="style";
+}else{
+if(dd.BOOLS[key.slice(1)]&&dojo.trim(_25)){
+key=key.slice(1);
+}else{
+if(this._uppers[key]&&dojo.trim(_25)){
+_24=this._uppers[key];
+}
+}
+}
+}
+}
+}
+}
+}
+if(_24){
+_1a.setAttribute(_24,"");
+_1a.removeAttribute(_24);
+}
+if(typeof _25=="function"){
+_25=_25.toString().replace(this._re4,"$1");
+}
+if(!_23){
+_1b.push([dd.TOKEN_CHANGE,_1a]);
+_23=true;
+}
+_1b.push([dd.TOKEN_ATTR,_1a,key,_25]);
+}
+for(i=0,_1e;_1e=_22[i];i++){
+if(_1e.nodeType==1){
+var _28=_1e.getAttribute("dtlinstruction");
+if(_28){
+_1e.parentNode.removeChild(_1e);
+_1e={nodeType:8,data:_28};
+}
+}
+this.__tokenize(_1e,_1b);
+}
+if(!_1c&&_1a.parentNode&&_1a.parentNode.tagName){
+if(_23){
+_1b.push([dd.TOKEN_CHANGE,_1a,true]);
+}
+_1b.push([dd.TOKEN_CHANGE,_1a.parentNode]);
+_1a.parentNode.removeChild(_1a);
+}else{
+_1b.push([dd.TOKEN_CHANGE,_1a,true,true]);
+}
+},__tokenize:function(_29,_2a){
+var _2b=_29.data;
+switch(_29.nodeType){
+case 1:
+this._tokenize(_29,_2a);
+return;
+case 3:
+if(_2b.match(/[^\s\n]/)&&(_2b.indexOf("{{")!=-1||_2b.indexOf("{%")!=-1)){
+var _2c=_1.tokenize(_2b);
+for(var j=0,_2d;_2d=_2c[j];j++){
+if(typeof _2d=="string"){
+_2a.push([dd.TOKEN_TEXT,_2d]);
+}else{
+_2a.push(_2d);
+}
+}
+}else{
+_2a.push([_29.nodeType,_29]);
+}
+if(_29.parentNode){
+_29.parentNode.removeChild(_29);
+}
+return;
+case 8:
+if(_2b.indexOf("{%")==0){
+var _2d=dojo.trim(_2b.slice(2,-2));
+if(_2d.substr(0,5)=="load "){
+var _2e=dojo.trim(_2d).split(/\s+/g);
+for(var i=1,_2f;_2f=_2e[i];i++){
+dojo["require"](_2f);
+}
+}
+_2a.push([dd.TOKEN_BLOCK,_2d]);
+}
+if(_2b.indexOf("{{")==0){
+_2a.push([dd.TOKEN_VAR,dojo.trim(_2b.slice(2,-2))]);
+}
+if(_29.parentNode){
+_29.parentNode.removeChild(_29);
+}
+return;
+}
+}};
+dd.DomTemplate=dojo.extend(function(obj){
+if(!obj.nodes){
+var _30=dojo.byId(obj);
+if(_30&&_30.nodeType==1){
+dojo.forEach(["class","src","href","name","value"],function(_31){
+_2._attributes[_31]=true;
+});
+obj={nodes:[_30]};
+}else{
+if(typeof obj=="object"){
+obj=_1.getTemplateString(obj);
+}
+obj=_2.getTemplate(obj);
+}
+}
+var _32=_2.tokenize(obj.nodes);
+if(dd.tests){
+this.tokens=_32.slice(0);
+}
+var _33=new dd._DomParser(_32);
+this.nodelist=_33.parse();
+},{_count:0,_re:/\bdojo:([a-zA-Z0-9_]+)\b/g,setClass:function(str){
+this.getRootNode().className=str;
+},getRootNode:function(){
+return this.buffer.rootNode;
+},getBuffer:function(){
+return new dd.DomBuffer();
+},render:function(_34,_35){
+_35=this.buffer=_35||this.getBuffer();
+this.rootNode=null;
+var _36=this.nodelist.render(_34||new dd.Context({}),_35);
+for(var i=0,_37;_37=_35._cache[i];i++){
+if(_37._cache){
+_37._cache.length=0;
+}
+}
+return _36;
+},unrender:function(_38,_39){
+return this.nodelist.unrender(_38,_39);
+}});
+dd.DomBuffer=dojo.extend(function(_3a){
+this._parent=_3a;
+this._cache=[];
+},{concat:function(_3b){
+var _3c=this._parent;
+if(_3c&&_3b.parentNode&&_3b.parentNode===_3c&&!_3c._dirty){
+return this;
+}
+if(_3b.nodeType==1&&!this.rootNode){
+this.rootNode=_3b||true;
+return this;
+}
+if(!_3c){
+if(_3b.nodeType==3&&dojo.trim(_3b.data)){
+throw new Error("Text should not exist outside of the root node in template");
+}
+return this;
+}
+if(this._closed){
+if(_3b.nodeType==3&&!dojo.trim(_3b.data)){
+return this;
+}else{
+throw new Error("Content should not exist outside of the root node in template");
+}
+}
+if(_3c._dirty){
+if(_3b._drawn&&_3b.parentNode==_3c){
+var _3d=_3c._cache;
+if(_3d){
+for(var i=0,_3e;_3e=_3d[i];i++){
+this.onAddNode&&this.onAddNode(_3e);
+_3c.insertBefore(_3e,_3b);
+this.onAddNodeComplete&&this.onAddNodeComplete(_3e);
+}
+_3d.length=0;
+}
+}
+_3c._dirty=false;
+}
+if(!_3c._cache){
+_3c._cache=[];
+this._cache.push(_3c);
+}
+_3c._dirty=true;
+_3c._cache.push(_3b);
+return this;
+},remove:function(obj){
+if(typeof obj=="string"){
+if(this._parent){
+this._parent.removeAttribute(obj);
+}
+}else{
+if(obj.nodeType==1&&!this.getRootNode()&&!this._removed){
+this._removed=true;
+return this;
+}
+if(obj.parentNode){
+this.onRemoveNode&&this.onRemoveNode(obj);
+if(obj.parentNode){
+obj.parentNode.removeChild(obj);
+}
+}
+}
+return this;
+},setAttribute:function(key,_3f){
+var old=dojo.attr(this._parent,key);
+if(this.onChangeAttribute&&old!=_3f){
+this.onChangeAttribute(this._parent,key,old,_3f);
+}
+if(key=="style"){
+this._parent.style.cssText=_3f;
+}else{
+dojo.attr(this._parent,key,_3f);
+}
+return this;
+},addEvent:function(_40,_41,fn,_42){
+if(!_40.getThis()){
+throw new Error("You must use Context.setObject(instance)");
+}
+this.onAddEvent&&this.onAddEvent(this.getParent(),_41,fn);
+var _43=fn;
+if(dojo.isArray(_42)){
+_43=function(e){
+this[fn].apply(this,[e].concat(_42));
+};
+}
+return dojo.connect(this.getParent(),_41,_40.getThis(),_43);
+},setParent:function(_44,up,_45){
+if(!this._parent){
+this._parent=this._first=_44;
+}
+if(up&&_45&&_44===this._first){
+this._closed=true;
+}
+if(up){
+var _46=this._parent;
+var _47="";
+var ie=dojo.isIE&&_46.tagName=="SCRIPT";
+if(ie){
+_46.text="";
+}
+if(_46._dirty){
+var _48=_46._cache;
+var _49=(_46.tagName=="SELECT"&&!_46.options.length);
+for(var i=0,_4a;_4a=_48[i];i++){
+if(_4a!==_46){
+this.onAddNode&&this.onAddNode(_4a);
+if(ie){
+_47+=_4a.data;
+}else{
+_46.appendChild(_4a);
+if(_49&&_4a.defaultSelected&&i){
+_49=i;
+}
+}
+this.onAddNodeComplete&&this.onAddNodeComplete(_4a);
+}
+}
+if(_49){
+_46.options.selectedIndex=(typeof _49=="number")?_49:0;
+}
+_48.length=0;
+_46._dirty=false;
+}
+if(ie){
+_46.text=_47;
+}
+}
+this._parent=_44;
+this.onSetParent&&this.onSetParent(_44,up,_45);
+return this;
+},getParent:function(){
+return this._parent;
+},getRootNode:function(){
+return this.rootNode;
+}});
+dd._DomNode=dojo.extend(function(_4b){
+this.contents=_4b;
+},{render:function(_4c,_4d){
+this._rendered=true;
+return _4d.concat(this.contents);
+},unrender:function(_4e,_4f){
+if(!this._rendered){
+return _4f;
+}
+this._rendered=false;
+return _4f.remove(this.contents);
+},clone:function(_50){
+return new this.constructor(this.contents);
+}});
+dd._DomNodeList=dojo.extend(function(_51){
+this.contents=_51||[];
+},{push:function(_52){
+this.contents.push(_52);
+},unshift:function(_53){
+this.contents.unshift(_53);
+},render:function(_54,_55,_56){
+_55=_55||dd.DomTemplate.prototype.getBuffer();
+if(_56){
+var _57=_55.getParent();
+}
+for(var i=0;i<this.contents.length;i++){
+_55=this.contents[i].render(_54,_55);
+if(!_55){
+throw new Error("Template node render functions must return their buffer");
+}
+}
+if(_57){
+_55.setParent(_57);
+}
+return _55;
+},dummyRender:function(_58,_59,_5a){
+var div=document.createElement("div");
+var _5b=_59.getParent();
+var old=_5b._clone;
+_5b._clone=div;
+var _5c=this.clone(_59,div);
+if(old){
+_5b._clone=old;
+}else{
+_5b._clone=null;
+}
+_59=dd.DomTemplate.prototype.getBuffer();
+_5c.unshift(new dd.ChangeNode(div));
+_5c.unshift(new dd._DomNode(div));
+_5c.push(new dd.ChangeNode(div,true));
+_5c.render(_58,_59);
+if(_5a){
+return _59.getRootNode();
+}
+var _5d=div.innerHTML;
+return (dojo.isIE)?_5d.replace(/\s*_(dirty|clone)="[^"]*"/g,""):_5d;
+},unrender:function(_5e,_5f,_60){
+if(_60){
+var _61=_5f.getParent();
+}
+for(var i=0;i<this.contents.length;i++){
+_5f=this.contents[i].unrender(_5e,_5f);
+if(!_5f){
+throw new Error("Template node render functions must return their buffer");
+}
+}
+if(_61){
+_5f.setParent(_61);
+}
+return _5f;
+},clone:function(_62){
+var _63=_62.getParent();
+var _64=this.contents;
+var _65=new dd._DomNodeList();
+var _66=[];
+for(var i=0;i<_64.length;i++){
+var _67=_64[i].clone(_62);
+if(_67 instanceof dd.ChangeNode||_67 instanceof dd._DomNode){
+var _68=_67.contents._clone;
+if(_68){
+_67.contents=_68;
+}else{
+if(_63!=_67.contents&&_67 instanceof dd._DomNode){
+var _69=_67.contents;
+_67.contents=_67.contents.cloneNode(false);
+_62.onClone&&_62.onClone(_69,_67.contents);
+_66.push(_69);
+_69._clone=_67.contents;
+}
+}
+}
+_65.push(_67);
+}
+for(var i=0,_67;_67=_66[i];i++){
+_67._clone=null;
+}
+return _65;
+},rtrim:function(){
+while(1){
+var i=this.contents.length-1;
+if(this.contents[i] instanceof dd._DomTextNode&&this.contents[i].isEmpty()){
+this.contents.pop();
+}else{
+break;
+}
+}
+return this;
+}});
+dd._DomVarNode=dojo.extend(function(str){
+this.contents=new dd._Filter(str);
+},{render:function(_6a,_6b){
+var str=this.contents.resolve(_6a);
+var _6c="text";
+if(str){
+if(str.render&&str.getRootNode){
+_6c="injection";
+}else{
+if(str.safe){
+if(str.nodeType){
+_6c="node";
+}else{
+if(str.toString){
+str=str.toString();
+_6c="html";
+}
+}
+}
+}
+}
+if(this._type&&_6c!=this._type){
+this.unrender(_6a,_6b);
+}
+this._type=_6c;
+switch(_6c){
+case "text":
+this._rendered=true;
+this._txt=this._txt||document.createTextNode(str);
+if(this._txt.data!=str){
+var old=this._txt.data;
+this._txt.data=str;
+_6b.onChangeData&&_6b.onChangeData(this._txt,old,this._txt.data);
+}
+return _6b.concat(this._txt);
+case "injection":
+var _6d=str.getRootNode();
+if(this._rendered&&_6d!=this._root){
+_6b=this.unrender(_6a,_6b);
+}
+this._root=_6d;
+var _6e=this._injected=new dd._DomNodeList();
+_6e.push(new dd.ChangeNode(_6b.getParent()));
+_6e.push(new dd._DomNode(_6d));
+_6e.push(str);
+_6e.push(new dd.ChangeNode(_6b.getParent()));
+this._rendered=true;
+return _6e.render(_6a,_6b);
+case "node":
+this._rendered=true;
+if(this._node&&this._node!=str&&this._node.parentNode&&this._node.parentNode===_6b.getParent()){
+this._node.parentNode.removeChild(this._node);
+}
+this._node=str;
+return _6b.concat(str);
+case "html":
+if(this._rendered&&this._src!=str){
+_6b=this.unrender(_6a,_6b);
+}
+this._src=str;
+if(!this._rendered){
+this._rendered=true;
+this._html=this._html||[];
+var div=(this._div=this._div||document.createElement("div"));
+div.innerHTML=str;
+var _6f=div.childNodes;
+while(_6f.length){
+var _70=div.removeChild(_6f[0]);
+this._html.push(_70);
+_6b=_6b.concat(_70);
+}
+}
+return _6b;
+default:
+return _6b;
+}
+},unrender:function(_71,_72){
+if(!this._rendered){
+return _72;
+}
+this._rendered=false;
+switch(this._type){
+case "text":
+return _72.remove(this._txt);
+case "injection":
+return this._injection.unrender(_71,_72);
+case "node":
+if(this._node.parentNode===_72.getParent()){
+return _72.remove(this._node);
+}
+return _72;
+case "html":
+for(var i=0,l=this._html.length;i<l;i++){
+_72=_72.remove(this._html[i]);
+}
+return _72;
+default:
+return _72;
+}
+},clone:function(){
+return new this.constructor(this.contents.getExpression());
+}});
+dd.ChangeNode=dojo.extend(function(_73,up,_74){
+this.contents=_73;
+this.up=up;
+this.root=_74;
+},{render:function(_75,_76){
+return _76.setParent(this.contents,this.up,this.root);
+},unrender:function(_77,_78){
+if(!_78.getParent()){
+return _78;
+}
+return _78.setParent(this.contents);
+},clone:function(){
+return new this.constructor(this.contents,this.up,this.root);
+}});
+dd.AttributeNode=dojo.extend(function(key,_79){
+this.key=key;
+this.value=_79;
+this.contents=_79;
+if(this._pool[_79]){
+this.nodelist=this._pool[_79];
+}else{
+if(!(this.nodelist=dd.quickFilter(_79))){
+this.nodelist=(new dd.Template(_79,true)).nodelist;
+}
+this._pool[_79]=this.nodelist;
+}
+this.contents="";
+},{_pool:{},render:function(_7a,_7b){
+var key=this.key;
+var _7c=this.nodelist.dummyRender(_7a);
+if(dd.BOOLS[key]){
+_7c=!(_7c=="false"||_7c=="undefined"||!_7c);
+}
+if(_7c!==this.contents){
+this.contents=_7c;
+return _7b.setAttribute(key,_7c);
+}
+return _7b;
+},unrender:function(_7d,_7e){
+this.contents="";
+return _7e.remove(this.key);
+},clone:function(_7f){
+return new this.constructor(this.key,this.value);
+}});
+dd._DomTextNode=dojo.extend(function(str){
+this.contents=document.createTextNode(str);
+this.upcoming=str;
+},{set:function(_80){
+this.upcoming=_80;
+return this;
+},render:function(_81,_82){
+if(this.contents.data!=this.upcoming){
+var old=this.contents.data;
+this.contents.data=this.upcoming;
+_82.onChangeData&&_82.onChangeData(this.contents,old,this.upcoming);
+}
+return _82.concat(this.contents);
+},unrender:function(_83,_84){
+return _84.remove(this.contents);
+},isEmpty:function(){
+return !dojo.trim(this.contents.data);
+},clone:function(){
+return new this.constructor(this.contents.data);
+}});
+dd._DomParser=dojo.extend(function(_85){
+this.contents=_85;
+},{i:0,parse:function(_86){
+var _87={};
+var _88=this.contents;
+if(!_86){
+_86=[];
+}
+for(var i=0;i<_86.length;i++){
+_87[_86[i]]=true;
+}
+var _89=new dd._DomNodeList();
+while(this.i<_88.length){
+var _8a=_88[this.i++];
+var _8b=_8a[0];
+var _8c=_8a[1];
+if(_8b==dd.TOKEN_CUSTOM){
+_89.push(_8c);
+}else{
+if(_8b==dd.TOKEN_CHANGE){
+var _8d=new dd.ChangeNode(_8c,_8a[2],_8a[3]);
+_8c[_8d.attr]=_8d;
+_89.push(_8d);
+}else{
+if(_8b==dd.TOKEN_ATTR){
+var fn=_1.getTag("attr:"+_8a[2],true);
+if(fn&&_8a[3]){
+if(_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){
+_8c.setAttribute(_8a[2],"");
+}
+_89.push(fn(null,new dd.Token(_8b,_8a[2]+" "+_8a[3])));
+}else{
+if(dojo.isString(_8a[3])){
+if(_8a[2]=="style"||_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){
+_89.push(new dd.AttributeNode(_8a[2],_8a[3]));
+}else{
+if(dojo.trim(_8a[3])){
+try{
+dojo.attr(_8c,_8a[2],_8a[3]);
+}
+catch(e){
+}
+}
+}
+}
+}
+}else{
+if(_8b==dd.TOKEN_NODE){
+var fn=_1.getTag("node:"+_8c.tagName.toLowerCase(),true);
+if(fn){
+_89.push(fn(null,new dd.Token(_8b,_8c),_8c.tagName.toLowerCase()));
+}
+_89.push(new dd._DomNode(_8c));
+}else{
+if(_8b==dd.TOKEN_VAR){
+_89.push(new dd._DomVarNode(_8c));
+}else{
+if(_8b==dd.TOKEN_TEXT){
+_89.push(new dd._DomTextNode(_8c.data||_8c));
+}else{
+if(_8b==dd.TOKEN_BLOCK){
+if(_87[_8c]){
+--this.i;
+return _89;
+}
+var cmd=_8c.split(/\s+/g);
+if(cmd.length){
+cmd=cmd[0];
+var fn=_1.getTag(cmd);
+if(typeof fn!="function"){
+throw new Error("Function not found for "+cmd);
+}
+var tpl=fn(this,new dd.Token(_8b,_8c));
+if(tpl){
+_89.push(tpl);
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+if(_86.length){
+throw new Error("Could not find closing tag(s): "+_86.toString());
+}
+return _89;
+},next_token:function(){
+var _8e=this.contents[this.i++];
+return new dd.Token(_8e[0],_8e[1]);
+},delete_first_token:function(){
+this.i++;
+},skip_past:function(_8f){
+return dd._Parser.prototype.skip_past.call(this,_8f);
+},create_variable_node:function(_90){
+return new dd._DomVarNode(_90);
+},create_text_node:function(_91){
+return new dd._DomTextNode(_91||"");
+},getTemplate:function(loc){
+return new dd.DomTemplate(_2.getTemplate(loc));
+}});
+})();
+}
diff --git a/js/dojo/dojox/dtl/ext-dojo/NodeList.js b/js/dojo/dojox/dtl/ext-dojo/NodeList.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/ext-dojo/NodeList.js
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){
+dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]=true;
+dojo.provide("dojox.dtl.ext-dojo.NodeList");
+dojo.require("dojox.dtl._base");
+dojo.extend(dojo.NodeList,{dtl:function(_1,_2){
+var d=dojox.dtl;
+var _3=this;
+var _4=function(_5,_6){
+var _7=_5.render(new d._Context(_6));
+_3.forEach(function(_8){
+_8.innerHTML=_7;
+});
+};
+d.text._resolveTemplateArg(_1).addCallback(function(_9){
+_1=new d.Template(_9);
+d.text._resolveContextArg(_2).addCallback(function(_a){
+_4(_1,_a);
+});
+});
+return this;
+}});
+}
diff --git a/js/dojo/dojox/dtl/render/dom.js b/js/dojo/dojox/dtl/render/dom.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/render/dom.js
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.render.dom"]){
+dojo._hasResource["dojox.dtl.render.dom"]=true;
+dojo.provide("dojox.dtl.render.dom");
+dojo.require("dojox.dtl.Context");
+dojo.require("dojox.dtl.dom");
+dojox.dtl.render.dom.Render=function(_1,_2){
+this._tpl=_2;
+this.domNode=dojo.byId(_1);
+};
+dojo.extend(dojox.dtl.render.dom.Render,{setAttachPoint:function(_3){
+this.domNode=_3;
+},render:function(_4,_5,_6){
+if(!this.domNode){
+throw new Error("You cannot use the Render object without specifying where you want to render it");
+}
+this._tpl=_5=_5||this._tpl;
+_6=_6||_5.getBuffer();
+_4=_4||new dojox.dtl.Context();
+var _7=_5.render(_4,_6).getParent();
+if(!_7){
+throw new Error("Rendered template does not have a root node");
+}
+if(this.domNode!==_7){
+this.domNode.parentNode.replaceChild(_7,this.domNode);
+this.domNode=_7;
+}
+}});
+}
diff --git a/js/dojo/dojox/dtl/tag/date.js b/js/dojo/dojox/dtl/tag/date.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/dtl/tag/date.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.date"]){
+dojo._hasResource["dojox.dtl.tag.date"]=true;
+dojo.provide("dojox.dtl.tag.date");
+dojo.require("dojox.dtl._base");
+dojo.require("dojox.dtl.utils.date");
+dojox.dtl.tag.date.NowNode=function(_1,_2){
+this._format=_1;
+this.format=new dojox.dtl.utils.date.DateFormat(_1);
+this.contents=_2;
+};
+dojo.extend(dojox.dtl.tag.date.NowNode,{render:function(_3,_4){
+this.contents.set(this.format.format(new Date()));
+return this.contents.render(_3,_4);
+},unrender:function(_5,_6){
+return this.contents.unrender(_5,_6);
+},clone:function(_7){
+return new this.constructor(this._format,this.contents.clone(_7));
+}});
+dojox.dtl.tag.date.now=function(_8,_9){
+var _a=_9.split_contents();
+if(_a.length!=2){
+throw new Error("'now' statement takes one argument");
+}
+return new dojox.dtl.tag.date.NowNode(_a[1].slice(1,-1),_8.create_text_node());
+};
+}
diff --git a/js/dojo/dojox/editor/README b/js/dojo/dojox/editor/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/README
@@ -0,0 +1,203 @@
+-------------------------------------------------------------------------------
+dojox.editor
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 9/14/2009
+-------------------------------------------------------------------------------
+Project state:
+experimental, beta, stable
+-------------------------------------------------------------------------------
+Credits
+ Mike Wilcox - Author
+ Jared Jurkiewicz - Author (PrettyPrint, PageBreak, ShowBlockNodes,
+ Preview, Save, ToolbarLineBreak, InsertEntity,
+ NormalizeIndentOutdent, Breadcrumb, FindReplace)
+ Dustin Machi - Technical Assistance
+-------------------------------------------------------------------------------
+Project description
+
+Space for extensions and additional plugins for dijit.Editor. The project
+currently contains the following plugins:
+
+dojox.editor.plugins.TablePlugins:
+ Status: Experimental.
+ The Table Plugins provide a mechanism for editing tables withing the
+ dijit.Editor. This plugin is experimental and does not work correctly
+ in all dojo supported browsers.
+
+dojox.editor.plugins.UploadImage:
+ Status: Experimental.
+ The UploadImage plugin makes use of the dojox upload widgets to provide
+ a mechanism to upload images to your server for use in the editor.
+
+dojox.editor.plugins.PrettyPrint:
+ Status: Supported (stable).
+ The PrettyPrint plugin provides a mechanism by which the output from
+ editor.getValue()/editor.attr("value") is nicely formatted. Optional
+ format parameters are how many spaces to indent by (default is tab),
+ the maximum text line length (not including indent), and what
+ characters in text strings should be encoded to their &<enc>;
+ representation.
+
+dojox.editor.plugins.PageBreak:
+ Status: Supported (stable).
+ A simple plugin that allows you to insert 'page breaks' into the doc
+ being edited. These page break styles will then cause the document
+ to break to another page when printed.
+
+dojox.editor.plugins.ShowBlockNodes:
+ Status: Supported (stable).
+ A simple plugin that allows you to toggle on and off a CSS 'view' of
+ how the page is laid out in terms of the block nodes used for its
+ formatting.
+
+dojox.editor.plugins.Save:
+ Status: Supported (beta).
+ A simple plugin that allows you to POST the content of the editor back
+ to a URL.
+
+dojox.editor.plugins.Preview:
+ Status: Supported (beta).
+ A simple plugin that allows you to display the content of the editor
+ in a new window and apply a set of styles to it so you can see how
+ content will look with various styles applied. It is likely this
+ plugin will still evolve a bit.
+
+dojox.editor.plugins.ToolbarLineBreak:
+ Status: Supported (stable).
+ An extremely simple plugin that allows you to 'linebreak' the dijit toolbar so that really long
+ toolbars for editor (lots of plugins enabled), can be broken up into multiple rows.
+
+dojox.editor.plugins.InsertEntity:
+ Status: Experimental (unsupported).
+ A plugin that enables the ability to insert HTML/XML entity characters
+ into a page. These are often called 'symbols'. The set it provides are the
+ basic latin (8859) set and a portion of greek symbols common to mathematics.
+ It has been marked experimental as it is likely this plugin will evolve a bit.
+
+dojox.editor.plugins.NormalizeIndentOutdent:
+ Status: Experimental (unsupported).
+ A plugin that normalizes the behavior of indent/outdent to use margin styles instead
+ of <blockquote> tags. Also fixes indent/outdent of lists to work properly. This is new
+ and has been tested, but not extensively. Therefore it is currently classed as experimental.
+
+dojox.editor.plugins.Breadcrumb:
+ Status: Experimental (unsupported).
+ A plugin that adds a breadcrumb toolbar to the bottom of the editor. Useful for seeing
+ where you aren and what operations you can perform. This is new and has been tested, but not
+ extensively. Therefore it is currently classed as experimental.
+
+dojox.editor.plugins.FindReplace:
+ Status: Experimental (unsupported).
+ A plugin that adds a togglable Find/Replace toolbar to the editor. Useful for searching
+ and replacing text strings in the editor content. Only works on FF, IE, and WebKit. No Opera
+ support. This is new and has been tested, but not extensively. Therefore it is currently
+ classed as experimental.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+dijit
+dojox.form
+dojox.html.format
+
+-------------------------------------------------------------------------------
+Documentation
+
+The plugins directory contains extensions which work with dijit.Editor.
+
+See also:
+ http://docs.dojocampus.org/dojox/editor/plugins/TablePlugins
+ http://docs.dojocampus.org/dojox/editor/plugins/PrettyPrint
+ http://docs.dojocampus.org/dojox/editor/plugins/PageBreak
+ http://docs.dojocampus.org/dojox/editor/plugins/ShowBlockNodes
+ http://docs.dojocampus.org/dojox/editor/plugins/Preview
+ http://docs.dojocampus.org/dojox/editor/plugins/Save
+ http://docs.dojocampus.org/dojox/editor/plugins/ToolbarLineBreak
+ http://docs.dojocampus.org/dojox/editor/plugins/InsertEntity
+ http://docs.dojocampus.org/dojox/editor/plugins/NormalizeIndentOutdent
+ http://docs.dojocampus.org/dojox/editor/plugins/Breadcrumb
+ http://docs.dojocampus.org/dojox/editor/plugins/FindReplace
+
+-------------------------------------------------------------------------------
+Plugin Installation instructions
+
+Get dojo and dijit from svn. Include the Editor and plugins in your page:
+
+dojo.require("dijit.Editor");
+
+For the TablePlugins:
+ dojo.require("dojox.editor.plugins.TablePlugins");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/editorPlugins.css" type="text/css" rel="stylesheet" />
+
+For the UploadImage plugin:
+ dojo.require("dojox.editor.plugins.UploadImage");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/editorPlugins.css" type="text/css" rel="stylesheet" />
+ <link href="[path]dojox/form/resources/FileInput.css" type="text/css" rel="stylesheet" />
+
+For the PrettyPrint plugin:
+ dojo.require("dojox.editor.plugins.PrettyPrint");
+ and CSS:
+ No CSS required.
+
+For the PageBreak plugin:
+ dojo.require("dojox.editor.plugins.PageBreak");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/PageBreak.css" type="text/css" rel="stylesheet" />
+
+For the ShowBlockNodes plugin:
+ dojo.require("dojox.editor.plugins.ShowBockNodes");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/ShowBlockNodes.css" type="text/css" rel="stylesheet" />
+
+For the Preview plugin:
+ dojo.require("dojox.editor.plugins.Preview");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/Preview.css" type="text/css" rel="stylesheet" />
+
+For the Save plugin:
+ dojo.require("dojox.editor.plugins.Save");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/Save.css" type="text/css" rel="stylesheet" />
+
+For the ToolbarLineBreak plugin:
+ dojo.require("dojox.editor.plugins.ToolbarLineBreak");
+ and CSS:
+ No CSS required.
+
+For the InsertEntity plugin:
+ dojo.require("dojox.editor.plugins.InsertEntity");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/InsertEntity.css" type="text/css" rel="stylesheet" />
+
+
+For the NormalizeIndentOutdent plugin:
+ dojo.require("dojox.editor.plugins.NormalizeIndentOutdent");
+ and CSS:
+ No CSS required.
+
+For the Breadcrumb plugin:
+ dojo.require("dojox.editor.plugins.Breadcrumb");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/Breadcrumb.css" type="text/css" rel="stylesheet" />
+
+For the FindReplace plugin:
+ dojo.require("dojox.editor.plugins.FindReplace");
+ and CSS:
+ <link href="[path]dojox/editor/plugins/resources/css/FindReplace.css" type="text/css" rel="stylesheet" />
+
+See tests for examples:
+ dojox/editor/tests/editorTablePlugs.html
+ dojox/editor/tests/editorUploadPlug.html
+ dojox/editor/tests/editorPrettyPrint.html
+ dojox/editor/tests/editorPageBreak.html
+ dojox/editor/tests/editorShowBlockNodes.html
+ dojox/editor/tests/editorPreview.html
+ dojox/editor/tests/editorSave.html
+ dojox/editor/tests/editorToolbarLineBreak.html
+ dojox/editor/tests/editorInsertEntity.html
+ dojox/editor/tests/editorNormalizeIndentOutdent.html
+ dojox/editor/tests/editorBreadcrumb.html
+ dojox/editor/tests/editorFindReplace.html
diff --git a/js/dojo/dojox/editor/plugins/Breadcrumb.js b/js/dojo/dojox/editor/plugins/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/Breadcrumb.js
@@ -0,0 +1,235 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Breadcrumb"]){
+dojo._hasResource["dojox.editor.plugins.Breadcrumb"]=true;
+dojo.provide("dojox.editor.plugins.Breadcrumb");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.range");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.Button");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit.Menu");
+dojo.require("dijit.MenuItem");
+dojo.require("dijit.MenuSeparator");
+dojo.experimental("dojox.editor.plugins.Breadcrumb");
+dojo.requireLocalization("dojox.editor.plugins","Breadcrumb",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins._BreadcrumbMenuTitle",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<tr><td dojoAttachPoint=\"title\" colspan=\"4\" class=\"dijitToolbar\" style=\"font-weight: bold; padding: 3px;\"></td></tr>",menuTitle:"",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+var _1=this.id+"_text";
+dijit.setWaiState(this.domNode,"labelledby",_1);
+},_setMenuTitleAttr:function(_2){
+this.title.innerHTML=_2;
+},_getMenuTitleAttr:function(_3){
+return this.title.innerHTML;
+}});
+dojo.declare("dojox.editor.plugins.Breadcrumb",dijit._editor._Plugin,{_menu:null,breadcrumbBar:null,setEditor:function(_4){
+this.editor=_4;
+this._buttons=[];
+this.breadcrumbBar=new dijit.Toolbar();
+dojo.style(this.breadcrumbBar.domNode,"height","1.5em");
+var _5=dojo.i18n.getLocalization("dojox.editor.plugins","Breadcrumb");
+this._titleTemplate=_5.nodeActions;
+dojo.place(this.breadcrumbBar.domNode,this.editor.iframe,"after");
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this._menu=new dijit.Menu({});
+dojo.addClass(this.breadcrumbBar.domNode,"dojoxEditorBreadcrumbArrow");
+var _6=this;
+var _7=new dijit.form.ComboButton({showLabel:true,label:"body",_selNode:_4.editNode,dropDown:this._menu,onClick:dojo.hitch(this,function(){
+this._menuTarget=_4.editNode;
+this._selectContents();
+})});
+this._menuTitle=new dojox.editor.plugins._BreadcrumbMenuTitle({menuTitle:_5.nodeActions});
+this._selCMenu=new dijit.MenuItem({label:_5.selectContents,onClick:dojo.hitch(this,this._selectContents)});
+this._delCMenu=new dijit.MenuItem({label:_5.deleteContents,onClick:dojo.hitch(this,this._deleteContents)});
+this._selEMenu=new dijit.MenuItem({label:_5.selectElement,onClick:dojo.hitch(this,this._selectElement)});
+this._delEMenu=new dijit.MenuItem({label:_5.deleteElement,onClick:dojo.hitch(this,this._deleteElement)});
+this._moveSMenu=new dijit.MenuItem({label:_5.moveStart,onClick:dojo.hitch(this,this._moveCToStart)});
+this._moveEMenu=new dijit.MenuItem({label:_5.moveEnd,onClick:dojo.hitch(this,this._moveCToEnd)});
+this._menu.addChild(this._menuTitle);
+this._menu.addChild(this._selCMenu);
+this._menu.addChild(this._delCMenu);
+this._menu.addChild(new dijit.MenuSeparator({}));
+this._menu.addChild(this._selEMenu);
+this._menu.addChild(this._delEMenu);
+this._menu.addChild(new dijit.MenuSeparator({}));
+this._menu.addChild(this._moveSMenu);
+this._menu.addChild(this._moveEMenu);
+_7._ddConnect=dojo.connect(_7,"openDropDown",dojo.hitch(this,function(){
+this._menuTarget=_7._selNode;
+this._menuTitle.attr("menuTitle",dojo.string.substitute(this._titleTemplate,{"nodeName":"&lt;body&gt;"}));
+this._selEMenu.attr("disabled",true);
+this._delEMenu.attr("disabled",true);
+this._selCMenu.attr("disabled",false);
+this._delCMenu.attr("disabled",false);
+this._moveSMenu.attr("disabled",false);
+this._moveEMenu.attr("disabled",false);
+}));
+this.breadcrumbBar.addChild(_7);
+this.connect(this.editor,"onNormalizedDisplayChanged","updateState");
+}));
+this.breadcrumbBar.startup();
+},_selectContents:function(){
+this.editor.focus();
+if(this._menuTarget){
+var _8=this._menuTarget.tagName.toLowerCase();
+switch(_8){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+break;
+default:
+try{
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]);
+dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[this._menuTarget]);
+this.editor.onDisplayChanged();
+}
+catch(e){
+}
+}
+}
+},_deleteContents:function(){
+if(this._menuTarget){
+this.editor.beginEditing();
+this._selectContents();
+dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]);
+this.editor.endEditing();
+this._updateBreadcrumb();
+this.editor.onDisplayChanged();
+}
+},_selectElement:function(){
+this.editor.focus();
+if(this._menuTarget){
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]);
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[this._menuTarget]);
+this.editor.onDisplayChanged();
+}
+},_deleteElement:function(){
+if(this._menuTarget){
+this.editor.beginEditing();
+this._selectElement();
+dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]);
+this.editor.endEditing();
+this._updateBreadcrumb();
+this.editor.onDisplayChanged();
+}
+},_moveCToStart:function(){
+this.editor.focus();
+if(this._menuTarget){
+this._selectContents();
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[true]);
+}
+},_moveCToEnd:function(){
+this.editor.focus();
+if(this._menuTarget){
+this._selectContents();
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[false]);
+}
+},_updateBreadcrumb:function(){
+var ed=this.editor;
+if(ed.window){
+var _9=dijit.range.getSelection(ed.window);
+if(_9&&_9.rangeCount>0){
+var _a=_9.getRangeAt(0);
+var _b=dojo.withGlobal(ed.window,"getSelectedElement",dijit._editor.selection)||_a.startContainer;
+var _c=[];
+if(_b&&_b.ownerDocument===ed.document){
+while(_b&&_b!==ed.editNode){
+if(_b.nodeType===1){
+_c.push({type:_b.tagName.toLowerCase(),node:_b});
+}
+_b=_b.parentNode;
+}
+_c=_c.reverse();
+while(this._buttons.length){
+var db=this._buttons.pop();
+dojo.disconnect(db._ddConnect);
+this.breadcrumbBar.removeChild(db);
+}
+this._buttons=[];
+var i;
+var _d=this;
+for(i=0;i<_c.length;i++){
+var bc=_c[i];
+var b=new dijit.form.ComboButton({showLabel:true,label:bc.type,_selNode:bc.node,dropDown:this._menu,onClick:function(){
+_d._menuTarget=this._selNode;
+_d._selectContents();
+}});
+b._ddConnect=dojo.connect(b,"openDropDown",dojo.hitch(b,function(){
+_d._menuTarget=this._selNode;
+var _e=_d._menuTarget.tagName.toLowerCase();
+var _f=dojo.string.substitute(_d._titleTemplate,{"nodeName":"&lt;"+_e+"&gt;"});
+_d._menuTitle.attr("menuTitle",_f);
+switch(_e){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+_d._selCMenu.attr("disabled",true);
+_d._delCMenu.attr("disabled",true);
+_d._moveSMenu.attr("disabled",true);
+_d._moveEMenu.attr("disabled",true);
+_d._selEMenu.attr("disabled",false);
+_d._delEMenu.attr("disabled",false);
+break;
+default:
+_d._selCMenu.attr("disabled",false);
+_d._delCMenu.attr("disabled",false);
+_d._selEMenu.attr("disabled",false);
+_d._delEMenu.attr("disabled",false);
+_d._moveSMenu.attr("disabled",false);
+_d._moveEMenu.attr("disabled",false);
+}
+}));
+this._buttons.push(b);
+this.breadcrumbBar.addChild(b);
+}
+if(dojo.isIE){
+this.breadcrumbBar.domNode.className=this.breadcrumbBar.domNode.className;
+}
+}
+}
+}
+},updateState:function(){
+if(dojo.style(this.editor.iframe,"display")==="none"){
+dojo.style(this.breadcrumbBar.domNode,"display","none");
+}else{
+if(dojo.style(this.breadcrumbBar.domNode,"display")==="none"){
+dojo.style(this.breadcrumbBar.domNode,"display","block");
+}
+this._updateBreadcrumb();
+}
+},destroy:function(){
+if(this.breadcrumbBar){
+this.breadcrumbBar.destroy();
+this.breadcrumbBar=null;
+}
+this._buttons=null;
+delete this.editor.breadcrumbBar;
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _10=o.args.name.toLowerCase();
+if(_10==="breadcrumb"){
+o.plugin=new dojox.editor.plugins.Breadcrumb({});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/EntityPalette.js b/js/dojo/dojox/editor/plugins/EntityPalette.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/EntityPalette.js
@@ -0,0 +1,158 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.EntityPalette"]){
+dojo._hasResource["dojox.editor.plugins.EntityPalette"]=true;
+dojo.provide("dojox.editor.plugins.EntityPalette");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","latinEntities",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.EntityPalette");
+dojo.declare("dojox.editor.plugins.EntityPalette",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dojoxEntityPalette\">\n"+"\t<table>\n"+"\t\t<tbody>\n"+"\t\t\t<tr>\n"+"\t\t\t\t<td>\n"+"\t\t\t\t\t<table class=\"dojoxEntityPaletteTable\" waiRole=\"grid\" tabIndex=\"${tabIndex}\">\n"+"\t\t\t\t\t\t<tbody dojoAttachPoint=\"tableNode\"></tbody>\n"+"\t\t\t\t\t</table>\n"+"\t\t\t\t</td>\n"+"\t\t\t</tr>\n"+"\t\t\t<tr>\n"+"\t\t\t\t<td>\n"+"\t\t\t\t\t<table dojoAttachPoint=\"previewPane\" class=\"dojoxEntityPalettePreviewTable\">\n"+"\t\t\t\t\t\t<tbody>\n"+"\t\t\t\t\t \t<tr>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\">Preview</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\" dojoAttachPoint=\"codeHeader\">Code</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\" dojoAttachPoint=\"entityHeader\">Name</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\">Description</th>\n"+"\t\t\t\t\t\t\t</tr>\n"+"\t\t\t\t\t\t\t<tr>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetailEntity\" dojoAttachPoint=\"previewNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"codeNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"entityNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"descNode\"></td>\n"+"\t\t\t\t\t\t\t</tr>\n"+"\t\t\t\t\t\t</tbody>\n"+"\t\t\t\t\t</table>\n"+"\t\t\t\t</td>\n"+"\t\t\t</tr>\n"+"\t\t</tbody>\n"+"\t</table>\n"+"</div>",defaultTimeout:500,timeoutChangeRate:0.9,showPreview:true,showCode:false,showEntityName:false,palette:"latin",value:null,_currentFocus:0,_xDim:null,_yDim:null,tabIndex:"0",_created:false,postCreate:function(){
+if(!this._created){
+this._created=true;
+this.domNode.style.position="relative";
+this._cellNodes=[];
+this.entities={};
+this.entities[this.palette]=dojo.i18n.getLocalization("dojox.editor.plugins","latinEntities");
+var _1=this.entities[this.palette];
+var _2=0;
+var _3;
+for(_3 in _1){
+_2++;
+}
+var _4=Math.floor(Math.sqrt(_2));
+var _5=_4;
+var _6=0;
+var _7=null;
+var _8;
+dojo.style(this.codeHeader,"display",this.showCode?"":"none");
+dojo.style(this.codeNode,"display",this.showCode?"":"none");
+dojo.style(this.entityHeader,"display",this.showEntityName?"":"none");
+dojo.style(this.entityNode,"display",this.showEntityName?"":"none");
+for(_3 in _1){
+var _9=_6%_5===0;
+if(_9){
+_7=dojo.create("tr",{tabIndex:"-1"});
+}
+var _a="&"+_3+";";
+_8=dojo.create("td",{innerHTML:_a,tabIndex:"-1","class":"dojoxEntityPaletteCell"},_7);
+dojo.forEach(["Dijitclick","MouseEnter","Focus","Blur"],function(_b){
+this.connect(_8,"on"+_b.toLowerCase(),"_onCell"+_b);
+},this);
+if(_9){
+dojo.place(_7,this.tableNode);
+}
+dijit.setWaiRole(_8,"gridcell");
+_8.index=this._cellNodes.length;
+this._cellNodes.push({node:_8,html:_a});
+_6++;
+}
+var _c=_4-(_2%_4);
+while(_c>0){
+_8=dojo.create("td",{innerHTML:"",tabIndex:"-1","class":"dojoxEntityPaletteNullCell"},_7);
+_c--;
+}
+this._xDim=_4;
+this._yDim=_5;
+this.connect(this.tableNode,"onfocus","_onTableNodeFocus");
+var _d={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:1,LEFT_ARROW:-1};
+for(var _e in _d){
+this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[_e],ctrlKey:false,altKey:false,shiftKey:false},this,function(){
+var _f=_d[_e];
+return function(_10){
+this._navigateByKey(_f,_10);
+};
+}(),this.timeoutChangeRate,this.defaultTimeout));
+}
+if(!this.showPreview){
+dojo.style(this.previewNode,"display","none");
+}
+}
+},focus:function(){
+this._focusFirst();
+},onChange:function(_11){
+},_focusFirst:function(){
+this._currentFocus=0;
+var _12=this._cellNodes[this._currentFocus].node;
+setTimeout(function(){
+dijit.focus(_12);
+},25);
+},_onTableNodeFocus:function(evt){
+if(evt.target===this.tableNode){
+this._focusFirst();
+}
+},_onFocus:function(){
+dojo.attr(this.tableNode,"tabIndex","-1");
+},_onBlur:function(){
+this._removeCellHighlight(this._currentFocus);
+dojo.attr(this.tableNode,"tabIndex",this.tabIndex);
+},_onCellDijitclick:function(evt){
+var _13=evt.currentTarget;
+if(this._currentFocus!=_13.index){
+this._currentFocus=_13.index;
+setTimeout(function(){
+dijit.focus(_13);
+},0);
+}
+this._selectEntity(_13);
+dojo.stopEvent(evt);
+},_onCellMouseEnter:function(evt){
+var _14=evt.currentTarget;
+this._setCurrent(_14);
+setTimeout(function(){
+dijit.focus(_14);
+},0);
+},_onCellFocus:function(evt){
+this._setCurrent(evt.currentTarget);
+},_setCurrent:function(_15){
+this._removeCellHighlight(this._currentFocus);
+this._currentFocus=_15.index;
+dojo.addClass(_15,"dojoxEntityPaletteCellHighlight");
+if(this.showPreview){
+this._displayDetails(_15);
+}
+},_displayDetails:function(_16){
+var _17=dojo.filter(this._cellNodes,function(_18){
+return _18.node==_16;
+});
+if(_17.length>0){
+var _19=_17[0].html;
+var _1a=_19.substr(1,_19.length-2);
+this.previewNode.innerHTML=_16.innerHTML;
+this.codeNode.innerHTML="&amp;#"+parseInt(_16.innerHTML.charCodeAt(0),10)+";";
+this.entityNode.innerHTML="&amp;"+_1a+";";
+this.descNode.innerHTML=this.entities[this.palette][_1a].replace("\n","<br>");
+}else{
+this.previewNode.innerHTML="";
+this.codeNode.innerHTML="";
+this.entityNode.innerHTML="";
+this.descNode.innerHTML="";
+}
+},_onCellBlur:function(evt){
+this._removeCellHighlight(this._currentFocus);
+},_removeCellHighlight:function(_1b){
+dojo.removeClass(this._cellNodes[_1b].node,"dojoxEntityPaletteCellHighlight");
+},_selectEntity:function(_1c){
+var _1d=dojo.filter(this._cellNodes,function(_1e){
+return _1e.node==_1c;
+});
+if(_1d.length>0){
+this.onChange(this.value=_1d[0].html);
+}
+},_navigateByKey:function(_1f,_20){
+if(_20==-1){
+return;
+}
+var _21=this._currentFocus+_1f;
+if(_21<this._cellNodes.length&&_21>-1){
+var _22=this._cellNodes[_21].node;
+_22.focus();
+}
+}});
+}
diff --git a/js/dojo/dojox/editor/plugins/FindReplace.js b/js/dojo/dojox/editor/plugins/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/FindReplace.js
@@ -0,0 +1,289 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.FindReplace"]){
+dojo._hasResource["dojox.editor.plugins.FindReplace"]=true;
+dojo.provide("dojox.editor.plugins.FindReplace");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dijit.Menu");
+dojo.require("dijit.CheckedMenuItem");
+dojo.require("dojox.editor.plugins.ToolbarLineBreak");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.requireLocalization("dojox.editor.plugins","FindReplace",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.FindReplace");
+dojo.declare("dojox.editor.plugins._FindReplaceTextBox",[dijit._Widget,dijit._Templated],{textId:"",label:"",widget:null,widgetsInTemplate:true,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline findReplaceTextBox'>"+"<label class='dijitLeft dijitInline' for='${textId}'>${label}</label>"+"<input dojoType='dijit.form.TextBox' required=false intermediateChanges='true'"+"tabIndex='-1' id='${textId}' dojoAttachPoint='textBox' value='' style='width: 20em;'/>"+"</span>",postMixInProperties:function(){
+this.inherited(arguments);
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.textId=this.id+"_text";
+this.inherited(arguments);
+},postCreate:function(){
+this.textBox.attr("value","");
+this.disabled=this.textBox.attr("disabled");
+this.connect(this.textBox,"onChange","onChange");
+},_setValueAttr:function(_1){
+this.value=_1;
+this.textBox.attr("value",_1);
+},focus:function(){
+this.textBox.focus();
+},_setDisabledAttr:function(_2){
+this.disabled=_2;
+this.textBox.attr("disabled",_2);
+},onChange:function(_3){
+this.value=_3;
+}});
+dojo.declare("dojox.editor.plugins._FindReplaceCheckBox",[dijit._Widget,dijit._Templated],{checkId:"",label:"",widget:null,widgetsInTemplate:true,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline findReplaceCheckBox'>"+"<input dojoType='dijit.form.CheckBox' required=false "+"tabIndex='-1' id='${checkId}' dojoAttachPoint='checkBox' value=''/>"+"<label class='dijitLeft dijitInline' for='${checkId}'>${label}</label>"+"</span>",postMixInProperties:function(){
+this.inherited(arguments);
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.checkId=this.id+"_check";
+this.inherited(arguments);
+},postCreate:function(){
+this.checkBox.attr("checked",false);
+this.disabled=this.checkBox.attr("disabled");
+this.checkBox.isFocusable=function(){
+return false;
+};
+},_setValueAttr:function(_4){
+this.checkBox.attr("value",_4);
+},_getValueAttr:function(){
+return this.checkBox.attr("value");
+},focus:function(){
+this.checkBox.focus();
+},_setDisabledAttr:function(_5){
+this.disabled=_5;
+this.checkBox.attr("disabled",_5);
+}});
+dojo.declare("dojox.editor.plugins.FindReplace",[dijit._editor._Plugin],{buttonClass:dijit.form.ToggleButton,iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+var _6=dojo.i18n.getLocalization("dojox.editor.plugins","FindReplace");
+this.button=new dijit.form.ToggleButton({label:_6["findReplace"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"FindReplace",tabIndex:"-1",onChange:dojo.hitch(this,"_toggleFindReplace")});
+if(dojo.isOpera){
+this.button.attr("disabled",true);
+}
+this.connect(this.button,"attr",dojo.hitch(this,function(_7,_8){
+if(_7==="disabled"){
+this._toggleFindReplace((!_8&&this._displayed),true);
+}
+}));
+},setEditor:function(_9){
+this.editor=_9;
+this._initButton();
+},toggle:function(){
+this.button.attr("checked",!this.button.attr("checked"));
+},_toggleFindReplace:function(_a,_b){
+if(_a&&!dojo.isOpera){
+dojo.style(this._frToolbar.domNode,"display","block");
+if(!_b){
+this._displayed=true;
+}
+}else{
+dojo.style(this._frToolbar.domNode,"display","none");
+if(!_b){
+this._displayed=false;
+}
+}
+this.editor.resize();
+},setToolbar:function(_c){
+this.inherited(arguments);
+if(!dojo.isOpera){
+var _d=dojo.i18n.getLocalization("dojox.editor.plugins","FindReplace");
+this._frToolbar=new dijit.Toolbar();
+dojo.style(this._frToolbar.domNode,"display","none");
+dojo.place(this._frToolbar.domNode,_c.domNode,"after");
+this._frToolbar.startup();
+this._caseSensitive=new dojox.editor.plugins._FindReplaceCheckBox({label:_d["matchCase"]});
+this._backwards=new dojox.editor.plugins._FindReplaceCheckBox({label:_d["backwards"]});
+this._replaceAll=new dojox.editor.plugins._FindReplaceCheckBox({label:_d["replaceAll"]});
+this._findField=new dojox.editor.plugins._FindReplaceTextBox({label:_d.findLabel});
+this._frToolbar.addChild(this._findField);
+this._findButton=new dijit.form.Button({label:_d["findButton"],showLabel:true,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"FindRun"});
+this._frToolbar.addChild(this._findButton);
+this._frToolbar.addChild(this._caseSensitive);
+this._frToolbar.addChild(this._backwards);
+this._frToolbar.addChild(new dojox.editor.plugins._ToolbarLineBreak());
+this._replaceField=new dojox.editor.plugins._FindReplaceTextBox({label:_d.replaceLabel});
+this._frToolbar.addChild(this._replaceField);
+this._replaceButton=new dijit.form.Button({label:_d["replaceButton"],showLabel:true,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ReplaceRun"});
+this._frToolbar.addChild(this._replaceButton);
+this._frToolbar.addChild(this._replaceAll);
+this._findButton.attr("disabled",true);
+this._replaceButton.attr("disabled",true);
+this.connect(this._findField,"onChange","_checkButtons");
+this.connect(this._replaceField,"onChange","_checkButtons");
+this.connect(this._findButton,"onClick","_find");
+this.connect(this._replaceButton,"onClick","_replace");
+this._replDialog=new dijit.TooltipDialog();
+this._replDialog.startup();
+this._replDialog.attr("content","");
+this._dialogTemplate=_d.replaceDialogText;
+}
+},_checkButtons:function(){
+var _e=this._findField.attr("value");
+var _f=this._replaceField.attr("value");
+if(_e){
+this._findButton.attr("disabled",false);
+}else{
+this._findButton.attr("disabled",true);
+}
+if(_e&&_f&&_e!==_f){
+this._replaceButton.attr("disabled",false);
+}else{
+this._replaceButton.attr("disabled",true);
+}
+},_find:function(){
+var txt=this._findField.attr("value");
+if(txt){
+var _10=this._caseSensitive.attr("value");
+var _11=this._backwards.attr("value");
+return this._findText(txt,_10,_11);
+}
+return false;
+},_replace:function(){
+var ed=this.editor;
+ed.focus();
+var txt=this._findField.attr("value");
+var _12=this._replaceField.attr("value");
+var _13=0;
+if(txt){
+if(this._replaceDialogTimeout){
+clearTimeout(this._replaceDialogTimeout);
+this._replaceDialogTimeout=null;
+dijit.popup.close(this._replDialog);
+}
+var _14=this._replaceAll.attr("value");
+var _15=this._caseSensitive.attr("value");
+var _16=this._backwards.attr("value");
+var _17=dojo.withGlobal(ed.window,"getSelectedText",dijit._editor.selection,[null]);
+if(dojo.isMoz){
+txt=dojo.trim(txt);
+_17=dojo.trim(_17);
+}
+var _18=this._filterRegexp(txt,!_15);
+if(_17&&_18.test(_17)){
+ed.execCommand("inserthtml",_12);
+_13++;
+}
+if(_14){
+var _19=this._findText(txt,_15,_16);
+var _1a=function(){
+ed.execCommand("inserthtml",_12);
+_13++;
+_19=this._findText(txt,_15,_16);
+if(_19){
+setTimeout(dojo.hitch(this,_1a),10);
+}else{
+this._replDialog.attr("content",dojo.string.substitute(this._dialogTemplate,{"0":""+_13}));
+dijit.popup.open({popup:this._replDialog,around:this._replaceButton.domNode});
+this._replaceDialogTimeout=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this._replaceDialogTimeout);
+this._replaceDialogTimeout=null;
+dijit.popup.close(this._replDialog);
+}),5000);
+}
+};
+if(_19){
+var _1b=dojo.hitch(this,_1a);
+_1b();
+}
+}
+}
+},_findText:function(txt,_1c,_1d){
+var ed=this.editor;
+var win=ed.window;
+var _1e=false;
+if(txt){
+if(win.find){
+_1e=win.find(txt,_1c,_1d,false,false,false,false);
+}else{
+var doc=ed.document;
+if(doc.selection){
+this.editor.focus();
+var _1f=doc.body.createTextRange();
+var _20=doc.selection?doc.selection.createRange():null;
+if(_20){
+if(_1d){
+_1f.setEndPoint("EndToStart",_20);
+}else{
+_1f.setEndPoint("StartToEnd",_20);
+}
+}
+var _21=_1c?4:0;
+if(_1d){
+_21=_21|1;
+}
+_1e=_1f.findText(txt,null,_21);
+if(_1e){
+_1f.select();
+}
+}
+}
+}
+return _1e;
+},_filterRegexp:function(_22,_23){
+var rxp="";
+var c=null;
+for(var i=0;i<_22.length;i++){
+c=_22.charAt(i);
+switch(c){
+case "\\":
+rxp+=c;
+i++;
+rxp+=_22.charAt(i);
+break;
+case "$":
+case "^":
+case "/":
+case "+":
+case ".":
+case "|":
+case "(":
+case ")":
+case "{":
+case "}":
+case "[":
+case "]":
+rxp+="\\";
+default:
+rxp+=c;
+}
+}
+rxp="^"+rxp+"$";
+if(_23){
+return new RegExp(rxp,"mi");
+}else{
+return new RegExp(rxp,"m");
+}
+},destroy:function(){
+this.inherited(arguments);
+if(this._replaceDialogTimeout){
+clearTimeout(this._replaceDialogTimeout);
+this._replaceDialogTimeout=null;
+dijit.popup.close(this._replDialog);
+}
+if(this._frToolbar){
+this._frToolbar.destroyRecursive();
+this._frToolbar=null;
+}
+if(this._replDialog){
+this._replDialog.destroyRecursive();
+this._replDialog=null;
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _24=o.args.name.toLowerCase();
+if(_24==="findreplace"){
+o.plugin=new dojox.editor.plugins.FindReplace({});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/InsertEntity.js b/js/dojo/dojox/editor/plugins/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/InsertEntity.js
@@ -0,0 +1,50 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.InsertEntity"]){
+dojo._hasResource["dojox.editor.plugins.InsertEntity"]=true;
+dojo.provide("dojox.editor.plugins.InsertEntity");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dojox.editor.plugins.EntityPalette");
+dojo.require("dojox.html.entities");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","InsertEntity",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.InsertEntity",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this.dropDown=new dojox.editor.plugins.EntityPalette({showCode:this.showCode,showEntityName:this.showEntityName});
+this.connect(this.dropDown,"onChange",function(_1){
+this.button.closeDropDown();
+this.editor.focus();
+this.editor.execCommand("inserthtml",_1);
+});
+var _2=dojo.i18n.getLocalization("dojox.editor.plugins","InsertEntity");
+this.button=new dijit.form.DropDownButton({label:_2["insertEntity"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"InsertEntity",tabIndex:"-1",dropDown:this.dropDown});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+this.editor.addKeyHandler("s",true,true,dojo.hitch(this,function(){
+this.button.openDropDown();
+this.dropDown.focus();
+}));
+_3.contentPreFilters.push(this._preFilterEntities);
+_3.contentPostFilters.push(this._postFilterEntities);
+},_preFilterEntities:function(s){
+return dojox.html.entities.decode(s,dojox.html.entities.latin);
+},_postFilterEntities:function(s){
+return dojox.html.entities.encode(s,dojox.html.entities.latin);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _4=o.args.name?o.args.name.toLowerCase():"";
+if(_4==="insertentity"){
+o.plugin=new dojox.editor.plugins.InsertEntity({showCode:("showCode" in o.args)?o.args.showCode:false,showEntityName:("showEntityName" in o.args)?o.args.showEntityName:false});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js b/js/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js
@@ -0,0 +1,640 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.NormalizeIndentOutdent"]){
+dojo._hasResource["dojox.editor.plugins.NormalizeIndentOutdent"]=true;
+dojo.provide("dojox.editor.plugins.NormalizeIndentOutdent");
+dojo.require("dijit._editor._Plugin");
+dojo.experimental("dojox.editor.plugins.NormalizeIndentOutdent");
+dojo.declare("dojox.editor.plugins.NormalizeIndentOutdent",dijit._editor._Plugin,{indentBy:40,indentUnits:"px",setEditor:function(_1){
+this.editor=_1;
+_1._indentImpl=dojo.hitch(this,this._indentImpl);
+_1._outdentImpl=dojo.hitch(this,this._outdentImpl);
+if(!_1._indentoutdent_queryCommandEnabled){
+_1._indentoutdent_queryCommandEnabled=_1.queryCommandEnabled;
+}
+_1.queryCommandEnabled=dojo.hitch(this,this._queryCommandEnabled);
+_1.customUndo=true;
+},_queryCommandEnabled:function(_2){
+var c=_2.toLowerCase();
+var ed,_3,_4,_5,_6,_7;
+var _8="marginLeft";
+if(!this._isLtr()){
+_8="marginRight";
+}
+if(c==="indent"){
+ed=this.editor;
+_3=dijit.range.getSelection(ed.window);
+if(_3&&_3.rangeCount>0){
+_4=_3.getRangeAt(0);
+_5=_4.startContainer;
+while(_5&&_5!==ed.document&&_5!==ed.editNode){
+_6=this._getTagName(_5);
+if(_6==="li"){
+_7=_5.previousSibling;
+while(_7&&_7.nodeType!==1){
+_7=_7.previousSibling;
+}
+if(_7&&this._getTagName(_7)==="li"){
+return true;
+}else{
+return false;
+}
+}else{
+if(this._isIndentableElement(_6)){
+return true;
+}
+}
+_5=_5.parentNode;
+}
+if(this._isRootInline(_4.startContainer)){
+return true;
+}
+}
+}else{
+if(c==="outdent"){
+ed=this.editor;
+_3=dijit.range.getSelection(ed.window);
+if(_3&&_3.rangeCount>0){
+_4=_3.getRangeAt(0);
+_5=_4.startContainer;
+while(_5&&_5!==ed.document&&_5!==ed.editNode){
+_6=this._getTagName(_5);
+if(_6==="li"){
+return this.editor._indentoutdent_queryCommandEnabled(_2);
+}else{
+if(this._isIndentableElement(_6)){
+var _9=_5.style?_5.style[_8]:"";
+if(_9){
+_9=this._convertIndent(_9);
+if(_9/this.indentBy>=1){
+return true;
+}
+}
+return false;
+}
+}
+_5=_5.parentNode;
+}
+if(this._isRootInline(_4.startContainer)){
+return false;
+}
+}
+}else{
+return this.editor._indentoutdent_queryCommandEnabled(_2);
+}
+}
+return false;
+},_indentImpl:function(_a){
+var ed=this.editor;
+var _b=dijit.range.getSelection(ed.window);
+if(_b&&_b.rangeCount>0){
+var _c=_b.getRangeAt(0);
+var _d=_c.startContainer;
+var _e,_f,end,div;
+if(_c.startContainer===_c.endContainer){
+if(this._isRootInline(_c.startContainer)){
+_f=_c.startContainer;
+while(_f&&_f.parentNode!==ed.editNode){
+_f=_f.parentNode;
+}
+while(_f&&_f.previousSibling&&(this._isTextElement(_f)||(_f.nodeType===1&&this._isInlineFormat(this._getTagName(_f))))){
+_f=_f.previousSibling;
+}
+if(_f&&_f.nodeType===1&&!this._isInlineFormat(this._getTagName(_f))){
+_f=_f.nextSibling;
+}
+if(_f){
+div=ed.document.createElement("div");
+dojo.place(div,_f,"after");
+div.appendChild(_f);
+end=div.nextSibling;
+while(end&&(this._isTextElement(end)||(end.nodeType===1&&this._isInlineFormat(this._getTagName(end))))){
+div.appendChild(end);
+end=div.nextSibling;
+}
+this._indentElement(div);
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[div]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}else{
+while(_d&&_d!==ed.document&&_d!==ed.editNode){
+_e=this._getTagName(_d);
+if(_e==="li"){
+this._indentList(_d);
+return;
+}else{
+if(this._isIndentableElement(_e)){
+this._indentElement(_d);
+return;
+}
+}
+_d=_d.parentNode;
+}
+}
+}else{
+var _10;
+_f=_c.startContainer;
+end=_c.endContainer;
+while(_f&&this._isTextElement(_f)&&_f.parentNode!==ed.editNode){
+_f=_f.parentNode;
+}
+while(end&&this._isTextElement(end)&&end.parentNode!==ed.editNode){
+end=end.parentNode;
+}
+if(end===ed.editNode||end===ed.document.body){
+_10=_f;
+while(_10.nextSibling&&this._inSelection(_10,_c)){
+_10=_10.nextSibling;
+}
+end=_10;
+if(end===ed.editNode||end===ed.document.body){
+_e=this._getTagName(_f);
+if(_e==="li"){
+this._indentList(_f);
+}else{
+if(this._isIndentableElement(_e)){
+this._indentElement(_f);
+}else{
+if(this._isTextElement(_f)||this._isInlineFormat(_e)){
+div=ed.document.createElement("div");
+dojo.place(div,_f,"after");
+var _11=_f;
+while(_11&&(this._isTextElement(_11)||(_11.nodeType===1&&this._isInlineFormat(this._getTagName(_11))))){
+div.appendChild(_11);
+_11=div.nextSibling;
+}
+this._indentElement(div);
+}
+}
+}
+return;
+}
+}
+end=end.nextSibling;
+_10=_f;
+while(_10&&_10!==end){
+if(_10.nodeType===1){
+_e=this._getTagName(_10);
+if(dojo.isIE){
+if(_e==="p"&&this._isEmpty(_10)){
+_10=_10.nextSibling;
+continue;
+}
+}
+if(_e==="li"){
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+this._indentList(_10);
+}else{
+if(!this._isInlineFormat(_e)&&this._isIndentableElement(_e)){
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+_10=this._indentElement(_10);
+}else{
+if(this._isInlineFormat(_e)){
+if(!div){
+div=ed.document.createElement("div");
+dojo.place(div,_10,"after");
+div.appendChild(_10);
+_10=div;
+}else{
+div.appendChild(_10);
+_10=div;
+}
+}
+}
+}
+}else{
+if(this._isTextElement(_10)){
+if(!div){
+div=ed.document.createElement("div");
+dojo.place(div,_10,"after");
+div.appendChild(_10);
+_10=div;
+}else{
+div.appendChild(_10);
+_10=div;
+}
+}
+}
+_10=_10.nextSibling;
+}
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+}
+}
+},_indentElement:function(_12){
+var _13="marginLeft";
+if(!this._isLtr()){
+_13="marginRight";
+}
+var tag=this._getTagName(_12);
+if(tag==="ul"||tag==="ol"){
+var div=this.editor.document.createElement("div");
+dojo.place(div,_12,"after");
+div.appendChild(_12);
+_12=div;
+}
+var _14=_12.style?_12.style[_13]:"";
+if(_14){
+_14=this._convertIndent(_14);
+_14=(parseInt(_14,10)+this.indentBy)+this.indentUnits;
+}else{
+_14=this.indentBy+this.indentUnits;
+}
+dojo.style(_12,_13,_14);
+return _12;
+},_outdentElement:function(_15){
+var _16="marginLeft";
+if(!this._isLtr()){
+_16="marginRight";
+}
+var _17=_15.style?_15.style[_16]:"";
+if(_17){
+_17=this._convertIndent(_17);
+if(_17-this.indentBy>0){
+_17=(parseInt(_17,10)-this.indentBy)+this.indentUnits;
+}else{
+_17="";
+}
+dojo.style(_15,_16,_17);
+}
+},_outdentImpl:function(_18){
+var ed=this.editor;
+var sel=dijit.range.getSelection(ed.window);
+if(sel&&sel.rangeCount>0){
+var _19=sel.getRangeAt(0);
+var _1a=_19.startContainer;
+var tag;
+if(_19.startContainer===_19.endContainer){
+while(_1a&&_1a!==ed.document&&_1a!==ed.editNode){
+tag=this._getTagName(_1a);
+if(tag==="li"){
+return this._outdentList(_1a);
+}else{
+if(this._isIndentableElement(tag)){
+return this._outdentElement(_1a);
+}
+}
+_1a=_1a.parentNode;
+}
+ed.document.execCommand("outdent",false,_18);
+}else{
+var _1b=_19.startContainer;
+var end=_19.endContainer;
+while(_1b&&_1b.nodeType===3){
+_1b=_1b.parentNode;
+}
+while(end&&end.nodeType===3){
+end=end.parentNode;
+}
+end=end.nextSibling;
+var _1c=_1b;
+while(_1c&&_1c!==end){
+if(_1c.nodeType===1){
+tag=this._getTagName(_1c);
+if(tag==="li"){
+this._outdentList(_1c);
+}else{
+if(this._isIndentableElement(tag)){
+this._outdentElement(_1c);
+}
+}
+}
+_1c=_1c.nextSibling;
+}
+}
+}
+return null;
+},_indentList:function(_1d){
+var ed=this.editor;
+var _1e,li;
+var _1f=_1d.parentNode;
+var _20=_1d.previousSibling;
+while(_20&&_20.nodeType!==1){
+_20=_20.previousSibling;
+}
+var _21=null;
+var tg=this._getTagName(_1f);
+if(tg==="ol"){
+_21="ol";
+}else{
+if(tg==="ul"){
+_21="ul";
+}
+}
+if(_21){
+if(_20&&_20.tagName.toLowerCase()=="li"){
+var _22;
+if(_20.childNodes){
+var i;
+for(i=0;i<_20.childNodes.length;i++){
+var n=_20.childNodes[i];
+if(n.nodeType===3){
+if(dojo.trim(n.nodeValue)){
+if(_22){
+break;
+}
+}
+}else{
+if(n.nodeType===1&&!_22){
+if(_21===n.tagName.toLowerCase()){
+_22=n;
+}
+}else{
+break;
+}
+}
+}
+}
+if(_22){
+_22.appendChild(_1d);
+}else{
+_1e=ed.document.createElement(_21);
+dojo.style(_1e,{paddingTop:"0px",paddingBottom:"0px"});
+li=ed.document.createElement("li");
+dojo.style(li,{listStyleImage:"none",listStyleType:"none"});
+_20.appendChild(_1e);
+_1e.appendChild(_1d);
+}
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[_1d]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}
+},_outdentList:function(_23){
+var ed=this.editor;
+var _24=_23.parentNode;
+var _25=null;
+var tg=_24.tagName?_24.tagName.toLowerCase():"";
+var li;
+if(tg==="ol"){
+_25="ol";
+}else{
+if(tg==="ul"){
+_25="ul";
+}
+}
+var _26=_24.parentNode;
+var _27=this._getTagName(_26);
+if(_27==="li"||_27==="ol"||_27==="ul"){
+if(_27==="ol"||_27==="ul"){
+var _28=_24.previousSibling;
+while(_28&&(_28.nodeType!==1||(_28.nodeType===1&&this._getTagName(_28)!=="li"))){
+_28=_28.previousSibling;
+}
+if(_28){
+_28.appendChild(_24);
+_26=_28;
+}else{
+li=_23;
+var _29=_23;
+while(li.previousSibling){
+li=li.previousSibling;
+if(li.nodeType===1&&this._getTagName(li)==="li"){
+_29=li;
+}
+}
+if(_29!==_23){
+dojo.place(_29,_24,"before");
+_29.appendChild(_24);
+_26=_29;
+}else{
+li=ed.document.createElement("li");
+dojo.place(li,_24,"before");
+li.appendChild(_24);
+_26=li;
+}
+dojo.style(_24,{paddingTop:"0px",paddingBottom:"0px"});
+}
+}
+var _2a=_23.previousSibling;
+while(_2a&&_2a.nodeType!==1){
+_2a=_2a.previousSibling;
+}
+var _2b=_23.nextSibling;
+while(_2b&&_2b.nodeType!==1){
+_2b=_2b.nextSibling;
+}
+if(!_2a){
+dojo.place(_23,_26,"after");
+_23.appendChild(_24);
+}else{
+if(!_2b){
+dojo.place(_23,_26,"after");
+}else{
+var _2c=ed.document.createElement(_25);
+dojo.style(_2c,{paddingTop:"0px",paddingBottom:"0px"});
+_23.appendChild(_2c);
+while(_23.nextSibling){
+_2c.appendChild(_23.nextSibling);
+}
+dojo.place(_23,_26,"after");
+}
+}
+if(_24&&this._isEmpty(_24)){
+_24.parentNode.removeChild(_24);
+}
+if(_26&&this._isEmpty(_26)){
+_26.parentNode.removeChild(_26);
+}
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[_23]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}else{
+ed.document.execCommand("outdent",false,null);
+}
+},_isEmpty:function(_2d){
+if(_2d.childNodes){
+var _2e=true;
+var i;
+for(i=0;i<_2d.childNodes.length;i++){
+var n=_2d.childNodes[i];
+if(n.nodeType===1){
+if(this._getTagName(n)==="p"){
+if(!dojo.trim(n.innerHTML)){
+continue;
+}
+}
+_2e=false;
+break;
+}else{
+if(this._isTextElement(n)){
+var nv=dojo.trim(n.nodeValue);
+if(nv&&nv!=="&nbsp;"&&nv!==" "){
+_2e=false;
+break;
+}
+}else{
+_2e=false;
+break;
+}
+}
+}
+return _2e;
+}else{
+return true;
+}
+},_isIndentableElement:function(tag){
+switch(tag){
+case "p":
+case "div":
+case "h1":
+case "h2":
+case "h3":
+case "center":
+case "table":
+case "ul":
+case "ol":
+return true;
+default:
+return false;
+}
+},_convertIndent:function(_2f){
+var _30=12;
+_2f=_2f+"";
+_2f=_2f.toLowerCase();
+var _31=(_2f.indexOf("px")>0)?"px":(_2f.indexOf("em")>0)?"em":"px";
+_2f=_2f.replace(/(px;?|em;?)/gi,"");
+if(_31==="px"){
+if(this.indentUnits==="em"){
+_2f=Math.ceil(_2f/_30);
+}
+}else{
+if(this.indentUnits==="px"){
+_2f=_2f*_30;
+}
+}
+return _2f;
+},_isLtr:function(){
+var _32=this.editor.document.body;
+return dojo.withGlobal(this.editor.window,function(){
+var cs=dojo.getComputedStyle(_32);
+return cs?cs.direction=="ltr":true;
+});
+},_isInlineFormat:function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "img":
+case "small":
+return true;
+default:
+return false;
+}
+},_getTagName:function(_33){
+var tag="";
+if(_33&&_33.nodeType===1){
+tag=_33.tagName?_33.tagName.toLowerCase():"";
+}
+return tag;
+},_isRootInline:function(_34){
+var ed=this.editor;
+if(this._isTextElement(_34)&&_34.parentNode===ed.editNode){
+return true;
+}else{
+if(_34.nodeType===1&&this._isInlineFormat(_34)&&_34.parentNode===ed.editNode){
+return true;
+}else{
+if(this._isTextElement(_34)&&this._isInlineFormat(this._getTagName(_34.parentNode))){
+_34=_34.parentNode;
+while(_34&&_34!==ed.editNode&&this._isInlineFormat(this._getTagName(_34))){
+_34=_34.parentNode;
+}
+if(_34===ed.editNode){
+return true;
+}
+}
+}
+}
+return false;
+},_isTextElement:function(_35){
+if(_35&&_35.nodeType===3||_35.nodeType===4){
+return true;
+}
+return false;
+},_inSelection:function(_36,_37){
+if(_36&&_37){
+var _38;
+var doc=this.editor.document;
+if(_37.compareBoundaryPoints&&doc.createRange){
+try{
+_38=doc.createRange();
+_38.setStart(_36,0);
+if(_37.compareBoundaryPoints(_37.START_TO_END,_38)===1){
+return true;
+}
+}
+catch(e){
+}
+}else{
+if(doc.selection){
+_37=doc.selection.createRange();
+try{
+_38=_36.ownerDocument.body.createControlRange();
+if(_38){
+_38.addElement(_36);
+}
+}
+catch(e1){
+try{
+_38=_36.ownerDocument.body.createTextRange();
+_38.moveToElementText(_36);
+}
+catch(e2){
+}
+}
+if(_37&&_38){
+if(_37.compareEndPoints("EndToStart",_38)===1){
+return true;
+}
+}
+}
+}
+}
+return false;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _39=o.args.name.toLowerCase();
+if(_39==="normalizeindentoutdent"){
+o.plugin=new dojox.editor.plugins.NormalizeIndentOutdent({indentBy:("indentBy" in o.args)?(o.args.indentBy>0?o.args.indentBy:40):40,indentUnits:("indentUnits" in o.args)?(o.args.indentUnits.toLowerCase()=="em"?"em":"px"):"px"});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/PageBreak.js b/js/dojo/dojox/editor/plugins/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/PageBreak.js
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.PageBreak"]){
+dojo._hasResource["dojox.editor.plugins.PageBreak"]=true;
+dojo.provide("dojox.editor.plugins.PageBreak");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","PageBreak",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.PageBreak",dijit._editor._Plugin,{useDefaultCommand:false,iconClassPrefix:"dijitAdditionalEditorIcon",_unbreakableNodes:["li","ul","ol"],_pbContent:"<hr style='page-break-after: always;' class='dijitEditorPageBreak'>",_initButton:function(){
+var ed=this.editor;
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","PageBreak");
+this.button=new dijit.form.Button({label:_1["pageBreak"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"PageBreak",tabIndex:"-1",onClick:dojo.hitch(this,"_insertPageBreak")});
+ed.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+ed.addKeyHandler(dojo.keys.ENTER,true,true,dojo.hitch(this,this._insertPageBreak));
+if(dojo.isWebKit||dojo.isOpera){
+this.connect(this.editor,"onKeyDown",dojo.hitch(this,function(e){
+if((e.keyCode===dojo.keys.ENTER)&&e.ctrlKey&&e.shiftKey){
+this._insertPageBreak();
+}
+}));
+}
+}));
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_style:function(){
+if(!this._styled){
+this._styled=true;
+var _3=this.editor.document;
+var _4=".dijitEditorPageBreak {\n"+"\tborder-top-style: solid;\n"+"\tborder-top-width: 3px;\n"+"\tborder-top-color: #585858;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-width: 1px;\n"+"\tborder-bottom-color: #585858;\n"+"\tborder-left-style: solid;\n"+"\tborder-left-width: 1px;\n"+"\tborder-left-color: #585858;\n"+"\tborder-right-style: solid;\n"+"\tborder-right-width: 1px;\n"+"\tborder-right-color: #585858;\n"+"\tcolor: #A4A4A4;\n"+"\tbackground-color: #A4A4A4;\n"+"\theight: 10px;\n"+"\tpage-break-after: always;\n"+"\tpadding: 0px 0px 0px 0px;\n"+"}\n\n"+"@media print {\n"+"\t.dijitEditorPageBreak { page-break-after: always; "+"background-color: rgba(0,0,0,0); color: rgba(0,0,0,0); "+"border: 0px none rgba(0,0,0,0); display: hidden; "+"width: 0px; height: 0px;}\n"+"}";
+if(!dojo.isIE){
+var _5=_3.createElement("style");
+_5.appendChild(_3.createTextNode(_4));
+_3.getElementsByTagName("head")[0].appendChild(_5);
+}else{
+var ss=_3.createStyleSheet("");
+ss.cssText=_4;
+}
+}
+},_insertPageBreak:function(){
+try{
+if(!this._styled){
+this._style();
+}
+if(this._allowBreak()){
+this.editor.execCommand("inserthtml",this._pbContent);
+}
+}
+catch(e){
+console.warn(e);
+}
+},_allowBreak:function(){
+var ed=this.editor;
+var _6=ed.document;
+var _7=ed._sCall("getSelectedElement",null)||ed._sCall("getParentElement",null);
+while(_7&&_7!==_6.body&&_7!==_6.html){
+if(ed._sCall("isTag",[_7,this._unbreakableNodes])){
+return false;
+}
+_7=_7.parentNode;
+}
+return true;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _8=o.args.name.toLowerCase();
+if(_8==="pagebreak"){
+o.plugin=new dojox.editor.plugins.PageBreak({});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/PrettyPrint.js b/js/dojo/dojox/editor/plugins/PrettyPrint.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/PrettyPrint.js
@@ -0,0 +1,51 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.PrettyPrint"]){
+dojo._hasResource["dojox.editor.plugins.PrettyPrint"]=true;
+dojo.provide("dojox.editor.plugins.PrettyPrint");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojox.html.format");
+dojo.declare("dojox.editor.plugins.PrettyPrint",dijit._editor._Plugin,{indentBy:-1,lineLength:-1,useDefaultCommand:false,entityMap:null,_initButton:function(){
+delete this.command;
+},setToolbar:function(_1){
+},setEditor:function(_2){
+this.inherited(arguments);
+var _3=this;
+this.editor.onLoadDeferred.addCallback(function(){
+_3.editor._prettyprint_getValue=_3.editor.getValue;
+_3.editor.getValue=function(){
+var _4=_3.editor._prettyprint_getValue(arguments);
+return dojox.html.format.prettyPrint(_4,_3.indentBy,_3.lineLength,_3.entityMap,_3.xhtml);
+};
+_3.editor._prettyprint_endEditing=_3.editor._endEditing;
+_3.editor._prettyprint_onBlur=_3.editor._onBlur;
+_3.editor._endEditing=function(_5){
+var v=_3.editor._prettyprint_getValue(true);
+_3.editor._undoedSteps=[];
+_3.editor._steps.push({text:v,bookmark:_3.editor._getBookmark()});
+};
+_3.editor._onBlur=function(e){
+this.inherited("_onBlur",arguments);
+var _6=_3.editor._prettyprint_getValue(true);
+if(_6!=_3.editor.savedContent){
+_3.editor.onChange(_6);
+_3.editor.savedContent=_6;
+}
+};
+});
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _7=o.args.name.toLowerCase();
+if(_7==="prettyprint"){
+o.plugin=new dojox.editor.plugins.PrettyPrint({indentBy:("indentBy" in o.args)?o.args.indentBy:-1,lineLength:("lineLength" in o.args)?o.args.lineLength:-1,entityMap:("entityMap" in o.args)?o.args.entityMap:dojox.html.entities.html.concat([["¢","cent"],["£","pound"],["€","euro"],["¥","yen"],["©","copy"],["§","sect"],["…","hellip"],["®","reg"]]),xhtml:("xhtml" in o.args)?o.args.xhtml:false});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/Preview.js b/js/dojo/dojox/editor/plugins/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/Preview.js
@@ -0,0 +1,53 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Preview"]){
+dojo._hasResource["dojox.editor.plugins.Preview"]=true;
+dojo.provide("dojox.editor.plugins.Preview");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Preview",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Preview",dijit._editor._Plugin,{useDefaultCommand:false,styles:"",stylesheets:null,iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this._nlsResources=dojo.i18n.getLocalization("dojox.editor.plugins","Preview");
+this.button=new dijit.form.Button({label:this._nlsResources["preview"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Preview",tabIndex:"-1",onClick:dojo.hitch(this,"_preview")});
+},setEditor:function(_1){
+this.editor=_1;
+this._initButton();
+},_preview:function(){
+try{
+var _2=this.editor.attr("value");
+var _3="\t\t<meta http-equiv='Content-Type' content='text/html; charset='UTF-8'>\n";
+var i;
+if(this.stylesheets){
+for(i=0;i<this.stylesheets.length;i++){
+_3+="\t\t<link rel='stylesheet' type='text/css' href='"+this.stylesheets[i]+"'>\n";
+}
+}
+if(this.styles){
+_3+=("\t\t<style>"+this.styles+"</style>\n");
+}
+_2="<html>\n\t<head>\n"+_3+"\t</head>\n\t<body>\n"+_2+"\n\t</body>\n</html>";
+var _4=window.open("javascript: ''",this._nlsResources["preview"],"status=1,menubar=0,location=0,toolbar=0");
+_4.document.open();
+_4.document.write(_2);
+_4.document.close();
+}
+catch(e){
+console.warn(e);
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _5=o.args.name.toLowerCase();
+if(_5==="preview"){
+o.plugin=new dojox.editor.plugins.Preview({styles:("styles" in o.args)?o.args.styles:"",stylesheets:("stylesheets" in o.args)?o.args.stylesheets:null});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/Save.js b/js/dojo/dojox/editor/plugins/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/Save.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Save"]){
+dojo._hasResource["dojox.editor.plugins.Save"]=true;
+dojo.provide("dojox.editor.plugins.Save");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Save",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Save",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",url:"",logResults:true,_initButton:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","Save");
+this.button=new dijit.form.Button({label:_1["save"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Save",tabIndex:"-1",onClick:dojo.hitch(this,"_save")});
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_save:function(){
+var _3=this.editor.attr("value");
+this.save(_3);
+},save:function(_4){
+var _5={"Content-Type":"text/html"};
+if(this.url){
+var _6={url:this.url,postData:_4,headers:_5,handleAs:"text"};
+this.button.attr("disabled",true);
+var _7=dojo.xhrPost(_6);
+_7.addCallback(dojo.hitch(this,this.onSuccess));
+_7.addErrback(dojo.hitch(this,this.onError));
+}else{
+}
+},onSuccess:function(_8,_9){
+this.button.attr("disabled",false);
+if(this.logResults){
+}
+},onError:function(_a,_b){
+this.button.attr("disabled",false);
+if(this.logResults){
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _c=o.args.name.toLowerCase();
+if(_c==="save"){
+o.plugin=new dojox.editor.plugins.Save({url:("url" in o.args)?o.args.url:"",logResults:("logResults" in o.args)?o.args.logResults:true});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/ShowBlockNodes.js
@@ -0,0 +1,94 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.ShowBlockNodes"]){
+dojo._hasResource["dojox.editor.plugins.ShowBlockNodes"]=true;
+dojo.provide("dojox.editor.plugins.ShowBlockNodes");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","ShowBlockNodes",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.ShowBlockNodes",dijit._editor._Plugin,{useDefaultCommand:false,iconClassPrefix:"dijitAdditionalEditorIcon",_styled:false,_initButton:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","ShowBlockNodes");
+this.button=new dijit.form.ToggleButton({label:_1["showBlockNodes"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ShowBlockNodes",tabIndex:"-1",onChange:dojo.hitch(this,"_showBlocks")});
+this.editor.addKeyHandler(dojo.keys.F9,true,true,dojo.hitch(this,this.toggle));
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},toggle:function(){
+this.button.attr("checked",!this.button.attr("checked"));
+},_showBlocks:function(_3){
+var _4=this.editor.document;
+if(!this._styled){
+try{
+this._styled=true;
+var _5="";
+var _6=["div","p","ul","ol","table","h1","h2","h3","h4","h5","h6","pre","dir","center","blockquote","form","fieldset","address","object","pre","hr","ins","noscript","li","map","button","dd","dt"];
+var _7="@media screen {\n"+"\t.editorShowBlocks {TAG} {\n"+"\t\tbackground-image: url({MODURL}/images/blockelems/{TAG}.gif);\n"+"\t\tbackground-repeat: no-repeat;\n"+"\t\tbackground-position: top left;\n"+"\t\tborder-width: 1px;\n"+"\t\tborder-style: dashed;\n"+"\t\tborder-color: #D0D0D0;\n"+"\t\tpadding-top: 15px;\n"+"\t\tpadding-left: 15px;\n"+"\t}\n"+"}\n";
+dojo.forEach(_6,function(_8){
+_5+=_7.replace(/\{TAG\}/gi,_8);
+});
+var _9=dojo.moduleUrl(dojox._scopeName,"editor/plugins/resources").toString();
+if(!(_9.match(/^https?:\/\//i))&&!(_9.match(/^file:\/\//i))){
+var _a;
+if(_9.charAt(0)==="/"){
+var _b=dojo.doc.location.protocol;
+var _c=dojo.doc.location.host;
+_a=_b+"//"+_c;
+}else{
+_a=this._calcBaseUrl(dojo.global.location.href);
+}
+if(_a[_a.length-1]!=="/"&&_9.charAt(0)!=="/"){
+_a+="/";
+}
+_9=_a+_9;
+}
+_5=_5.replace(/\{MODURL\}/gi,_9);
+if(!dojo.isIE){
+var _d=_4.createElement("style");
+_d.appendChild(_4.createTextNode(_5));
+_4.getElementsByTagName("head")[0].appendChild(_d);
+}else{
+var ss=_4.createStyleSheet("");
+ss.cssText=_5;
+}
+}
+catch(e){
+console.warn(e);
+}
+}
+if(_3){
+dojo.addClass(this.editor.editNode,"editorShowBlocks");
+}else{
+dojo.removeClass(this.editor.editNode,"editorShowBlocks");
+}
+},_calcBaseUrl:function(_e){
+var _f=null;
+if(_e!==null){
+var _10=_e.indexOf("?");
+if(_10!=-1){
+_e=_e.substring(0,_10);
+}
+_10=_e.lastIndexOf("/");
+if(_10>0&&_10<_e.length){
+_f=_e.substring(0,_10);
+}else{
+_f=_e;
+}
+}
+return _f;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _11=o.args.name.toLowerCase();
+if(_11==="showblocknodes"){
+o.plugin=new dojox.editor.plugins.ShowBlockNodes();
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/Smiley.js b/js/dojo/dojox/editor/plugins/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/Smiley.js
@@ -0,0 +1,41 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Smiley"]){
+dojo._hasResource["dojox.editor.plugins.Smiley"]=true;
+dojo.provide("dojox.editor.plugins.Smiley");
+dojo.experimental("dojox.editor.plugins.Smiley");
+dojo.require("dojo.i18n");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.require("dijit.form.DropDownButton");
+dojo.require("dojox.editor.plugins._SmileyPalette");
+dojo.requireLocalization("dojox.editor.plugins","Smiley",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Smiley",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this.dropDown=new dojox.editor.plugins._SmileyPalette();
+this.connect(this.dropDown,"onChange",function(_1){
+this.button.closeDropDown();
+this.editor.focus();
+this.editor.execCommand("inserthtml",_1);
+});
+var _2=dojo.i18n.getLocalization("dojox.editor.plugins","Smiley");
+this.button=new dijit.form.DropDownButton({label:_2.smiley,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Smiley",tabIndex:"-1",dropDown:this.dropDown});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+},_preFilterEntities:function(s){
+},_postFilterEntities:function(s){
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+if(o.args.name==="smiley"){
+o.plugin=new dojox.editor.plugins.Smiley();
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/TablePlugins.js b/js/dojo/dojox/editor/plugins/TablePlugins.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/TablePlugins.js
@@ -0,0 +1,601 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.TablePlugins"]){
+dojo._hasResource["dojox.editor.plugins.TablePlugins"]=true;
+dojo.provide("dojox.editor.plugins.TablePlugins");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit.Menu");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","TableDialog",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.TablePlugins");
+dojo.declare("dojox.editor.plugins.GlobalTableHandler",dijit._editor._Plugin,{tablesConnected:false,currentlyAvailable:false,alwaysAvailable:false,availableCurrentlySet:false,initialized:false,tableData:null,shiftKeyDown:false,editorDomNode:null,undoEnabled:dojo.isIE,doMixins:function(){
+dojo.mixin(this.editor,{getAncestorElement:function(_1){
+return dojo.withGlobal(this.window,"getAncestorElement",dijit._editor.selection,[_1]);
+},hasAncestorElement:function(_2){
+return true;
+return dojo.withGlobal(this.window,"hasAncestorElement",dijit._editor.selection,[_2]);
+},selectElement:function(_3){
+dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_3]);
+},byId:function(id){
+return dojo.withGlobal(this.window,"byId",dojo,[id]);
+},query:function(_4,_5,_6){
+var ar=dojo.withGlobal(this.window,"query",dojo,[_4,_5]);
+return (_6)?ar[0]:ar;
+}});
+},initialize:function(_7){
+if(this.initialized){
+return;
+}
+this.initialized=true;
+this.editor=_7;
+_7.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.editorDomNode=this.editor.editNode||this.editor.iframe.document.body.firstChild;
+dojo.connect(this.editorDomNode,"mouseup",this.editor,"onClick");
+dojo.connect(this.editor,"onDisplayChanged",this,"checkAvailable");
+this.doMixins();
+this.connectDraggable();
+}));
+},getTableInfo:function(_8){
+if(_8){
+this._tempStoreTableData(false);
+}
+if(this.tableData){
+return this.tableData;
+}
+var tr,_9,td,_a,_b,_c,_d,_e;
+td=this.editor.getAncestorElement("td");
+if(td){
+tr=td.parentNode;
+}
+_b=this.editor.getAncestorElement("table");
+_a=dojo.query("td",_b);
+_a.forEach(function(d,i){
+if(td==d){
+_d=i;
+}
+});
+_9=dojo.query("tr",_b);
+_9.forEach(function(r,i){
+if(tr==r){
+_e=i;
+}
+});
+_c=_a.length/_9.length;
+var o={tbl:_b,td:td,tr:tr,trs:_9,tds:_a,rows:_9.length,cols:_c,tdIndex:_d,trIndex:_e,colIndex:_d%_c};
+this.tableData=o;
+this._tempStoreTableData(500);
+return this.tableData;
+},connectDraggable:function(){
+if(!dojo.isIE){
+return;
+}
+this.editorDomNode.ondragstart=dojo.hitch(this,"onDragStart");
+this.editorDomNode.ondragend=dojo.hitch(this,"onDragEnd");
+},onDragStart:function(){
+var e=window.event;
+if(!e.srcElement.id){
+e.srcElement.id="tbl_"+(new Date().getTime());
+}
+},onDragEnd:function(){
+var e=window.event;
+var _f=e.srcElement;
+var id=_f.id;
+var win=this.editor.window;
+if(_f.tagName.toLowerCase()=="table"){
+setTimeout(function(){
+var _10=dojo.withGlobal(win,"byId",dojo,[id]);
+dojo.removeAttr(_10,"align");
+},100);
+}
+},checkAvailable:function(){
+if(this.availableCurrentlySet){
+return this.currentlyAvailable;
+}
+if(!this.editor){
+return false;
+}
+if(this.alwaysAvailable){
+return true;
+}
+this.currentlyAvailable=this.editor.hasAncestorElement("table");
+if(this.currentlyAvailable){
+this.connectTableKeys();
+}else{
+this.disconnectTableKeys();
+}
+this._tempAvailability(500);
+dojo.publish("available",[this.currentlyAvailable]);
+return this.currentlyAvailable;
+},_prepareTable:function(tbl){
+var tds=this.editor.query("td",tbl);
+if(!tds[0].id){
+tds.forEach(function(td,i){
+if(!td.id){
+td.id="tdid"+i+this.getTimeStamp();
+}
+},this);
+}
+return tds;
+},getTimeStamp:function(){
+return Math.floor(new Date().getTime()*1e-8);
+},_tempStoreTableData:function(_11){
+if(_11===true){
+}else{
+if(_11===false){
+this.tableData=null;
+}else{
+if(_11===undefined){
+console.warn("_tempStoreTableData must be passed an argument");
+}else{
+setTimeout(dojo.hitch(this,function(){
+this.tableData=null;
+}),_11);
+}
+}
+}
+},_tempAvailability:function(_12){
+if(_12===true){
+this.availableCurrentlySet=true;
+}else{
+if(_12===false){
+this.availableCurrentlySet=false;
+}else{
+if(_12===undefined){
+console.warn("_tempAvailability must be passed an argument");
+}else{
+this.availableCurrentlySet=true;
+setTimeout(dojo.hitch(this,function(){
+this.availableCurrentlySet=false;
+}),_12);
+}
+}
+}
+},connectTableKeys:function(){
+if(this.tablesConnected){
+return;
+}
+this.tablesConnected=true;
+var _13=(this.editor.iframe)?this.editor.document:this.editor.editNode;
+this.cnKeyDn=dojo.connect(_13,"onkeydown",this,"onKeyDown");
+this.cnKeyUp=dojo.connect(_13,"onkeyup",this,"onKeyUp");
+dojo.connect(_13,"onkeypress",this,"onKeyUp");
+},disconnectTableKeys:function(){
+dojo.disconnect(this.cnKeyDn);
+dojo.disconnect(this.cnKeyUp);
+this.tablesConnected=false;
+},onKeyDown:function(evt){
+var key=evt.keyCode;
+if(key==16){
+this.shiftKeyDown=true;
+}
+if(key==9){
+var o=this.getTableInfo();
+o.tdIndex=(this.shiftKeyDown)?o.tdIndex-1:tabTo=o.tdIndex+1;
+if(o.tdIndex>=0&&o.tdIndex<o.tds.length){
+this.editor.selectElement(o.tds[o.tdIndex]);
+this.currentlyAvailable=true;
+this._tempAvailability(true);
+this._tempStoreTableData(true);
+this.stopEvent=true;
+}else{
+this.stopEvent=false;
+this.onDisplayChanged();
+}
+if(this.stopEvent){
+dojo.stopEvent(evt);
+}
+}
+},onKeyUp:function(evt){
+var key=evt.keyCode;
+if(key==16){
+this.shiftKeyDown=false;
+}
+if(key==37||key==38||key==39||key==40){
+this.onDisplayChanged();
+}
+if(key==9&&this.stopEvent){
+dojo.stopEvent(evt);
+}
+},onDisplayChanged:function(){
+this.currentlyAvailable=false;
+this._tempStoreTableData(false);
+this._tempAvailability(false);
+this.checkAvailable();
+}});
+tablePluginHandler=new dojox.editor.plugins.GlobalTableHandler();
+dojo.declare("dojox.editor.plugins.TablePlugins",dijit._editor._Plugin,{iconClassPrefix:"editorIcon",useDefaultCommand:false,buttonClass:dijit.form.Button,commandName:"",label:"",alwaysAvailable:false,undoEnabled:false,constructor:function(){
+switch(this.commandName){
+case "colorTableCell":
+this.buttonClass=dijit.form.DropDownButton;
+this.dropDown=new dijit.ColorPalette();
+this.connect(this.dropDown,"onChange",function(_14){
+this.modTable(null,_14);
+});
+break;
+case "modifyTable":
+this.buttonClass=dijit.form.Button;
+this.modTable=this.launchModifyDialog;
+break;
+case "insertTable":
+this.alwaysAvailable=true;
+this.buttonClass=dijit.form.Button;
+this.modTable=this.launchInsertDialog;
+break;
+case "tableContextMenu":
+this.connect(this,"setEditor",function(_15){
+_15.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this._createContextMenu();
+}));
+this.button.domNode.style.display="none";
+});
+break;
+}
+dojo.subscribe("available",this,"onDisplayChanged");
+},onDisplayChanged:function(_16){
+if(!this.alwaysAvailable){
+this.available=_16;
+this.button.attr("disabled",!this.available);
+}
+},setEditor:function(){
+this.inherited(arguments);
+this.onEditorLoaded();
+},onEditorLoaded:function(){
+tablePluginHandler.initialize(this.editor);
+},_createContextMenu:function(){
+var _17=dojo.isMoz?this.editor.editNode:this.editorDomNode;
+var _18=new dijit.Menu({targetNodeIds:[_17],id:"progMenu",contextMenuForWindow:dojo.isIE});
+var _19=dijit.MenuItem;
+var _1a=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+_18.addChild(new _19({label:_1a.selectTableLabel,onClick:dojo.hitch(this,"selectTable")}));
+_18.addChild(new dijit.MenuSeparator());
+_18.addChild(new _19({label:_1a.insertTableRowBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableRowBefore")}));
+_18.addChild(new _19({label:_1a.insertTableRowAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableRowAfter")}));
+_18.addChild(new _19({label:_1a.insertTableColumnBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnBefore")}));
+_18.addChild(new _19({label:_1a.insertTableColumnAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnAfter")}));
+_18.addChild(new dijit.MenuSeparator());
+_18.addChild(new _19({label:_1a.deleteTableRowLabel,onClick:dojo.hitch(this,"modTable","deleteTableRow")}));
+_18.addChild(new _19({label:_1a.deleteTableColumnLabel,onClick:dojo.hitch(this,"modTable","deleteTableColumn")}));
+_18._openMyself=function(e){
+if(!tablePluginHandler.checkAvailable()){
+return;
+}
+if(this.leftClickToOpen&&e.button>0){
+return;
+}
+dojo.stopEvent(e);
+var x,y;
+if(dojo.isIE){
+x=e.x;
+y=e.y;
+}else{
+x=e.screenX;
+y=e.screenY+25;
+}
+var _1b=this;
+var _1c=dijit.getFocus(this);
+function _1d(){
+dijit.focus(_1c);
+dijit.popup.close(_1b);
+};
+var res=dijit.popup.open({popup:this,x:x,y:y,onExecute:_1d,onCancel:_1d,orient:this.isLeftToRight()?"L":"R"});
+var v=dijit.getViewport();
+if(res.y+res.h>v.h){
+if(e.screenY-res.h>=0){
+y=e.screenY-res.h;
+}else{
+y=0;
+}
+dijit.popup.close(this);
+res=dijit.popup.open({popup:this,x:x,y:y,onExecute:_1d,onCancel:_1d,orient:this.isLeftToRight()?"L":"R"});
+}
+this.focus();
+this._onBlur=function(){
+this.inherited("_onBlur",arguments);
+dijit.popup.close(this);
+};
+};
+this.menu=_18;
+},selectTable:function(){
+var o=this.getTableInfo();
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[o.tbl]);
+},launchInsertDialog:function(){
+var w=new dojox.editor.plugins.EditorTableDialog({});
+w.show();
+var c=dojo.connect(w,"onBuildTable",this,function(obj){
+dojo.disconnect(c);
+var res=this.editor.execCommand("inserthtml",obj.htmlText);
+});
+},launchModifyDialog:function(){
+var o=this.getTableInfo();
+var w=new dojox.editor.plugins.EditorModifyTableDialog({table:o.tbl});
+w.show();
+this.connect(w,"onSetTable",function(_1e){
+var o=this.getTableInfo();
+dojo.attr(o.td,"bgcolor",_1e);
+});
+},_initButton:function(){
+this.command=this.commandName;
+this.label=this.editor.commands[this.command]=this._makeTitle(this.command);
+this.inherited(arguments);
+delete this.command;
+if(this.commandName!="colorTableCell"){
+this.connect(this.button.domNode,"click","modTable");
+}
+if(this.commandName=="tableContextMenu"){
+this.button.domNode.display="none";
+}
+this.onDisplayChanged(false);
+},modTable:function(cmd,_1f){
+this.begEdit();
+var o=this.getTableInfo();
+var sw=(dojo.isString(cmd))?cmd:this.commandName;
+var r,c,i;
+var _20=false;
+switch(sw){
+case "insertTableRowBefore":
+r=o.tbl.insertRow(o.trIndex);
+for(i=0;i<o.cols;i++){
+c=r.insertCell(-1);
+c.innerHTML="&nbsp;";
+}
+break;
+case "insertTableRowAfter":
+r=o.tbl.insertRow(o.trIndex+1);
+for(i=0;i<o.cols;i++){
+c=r.insertCell(-1);
+c.innerHTML="&nbsp;";
+}
+break;
+case "insertTableColumnBefore":
+o.trs.forEach(function(r){
+c=r.insertCell(o.colIndex);
+c.innerHTML="&nbsp;";
+});
+_20=true;
+break;
+case "insertTableColumnAfter":
+o.trs.forEach(function(r){
+c=r.insertCell(o.colIndex+1);
+c.innerHTML="&nbsp;";
+});
+_20=true;
+break;
+case "deleteTableRow":
+o.tbl.deleteRow(o.trIndex);
+break;
+case "deleteTableColumn":
+o.trs.forEach(function(tr){
+tr.deleteCell(o.colIndex);
+});
+_20=true;
+break;
+case "colorTableCell":
+var tds=this.getSelectedCells(o.tbl);
+dojo.forEach(tds,function(td){
+dojo.style(td,"backgroundColor",_1f);
+});
+break;
+case "modifyTable":
+break;
+case "insertTable":
+break;
+}
+if(_20){
+this.makeColumnsEven();
+}
+this.endEdit();
+},begEdit:function(){
+if(tablePluginHandler.undoEnabled){
+if(this.editor.customUndo){
+this.editor.beginEditing();
+}else{
+this.valBeforeUndo=this.editor.getValue();
+}
+}
+},endEdit:function(){
+if(tablePluginHandler.undoEnabled){
+if(this.editor.customUndo){
+this.editor.endEditing();
+}else{
+var _21=this.editor.getValue();
+this.editor.setValue(this.valBeforeUndo);
+this.editor.replaceValue(_21);
+}
+this.editor.onDisplayChanged();
+}
+},makeColumnsEven:function(){
+setTimeout(dojo.hitch(this,function(){
+var o=this.getTableInfo(true);
+var w=Math.floor(100/o.cols);
+o.tds.forEach(function(d){
+dojo.attr(d,"width",w+"%");
+});
+}),10);
+},getTableInfo:function(_22){
+return tablePluginHandler.getTableInfo(_22);
+},_makeTitle:function(str){
+var s=str.split(""),ns=[];
+dojo.forEach(str,function(c,i){
+if(c.charCodeAt(0)<91&&i>0&&ns[i-1].charCodeAt(0)!=32){
+ns.push(" ");
+}
+if(i==0){
+c=c.toUpperCase();
+}
+ns.push(c);
+});
+return ns.join("");
+},getSelectedCells:function(){
+var _23=[];
+var tbl=this.getTableInfo().tbl;
+var tds=tablePluginHandler._prepareTable(tbl);
+var e=this.editor;
+var r;
+if(!dojo.isIE){
+r=dijit.range.getSelection(e.window);
+var _24=false;
+var _25=false;
+if(r.anchorNode&&r.anchorNode.tagName&&r.anchorNode.tagName.toLowerCase()=="tr"){
+var trs=dojo.query("tr",tbl);
+var _26=[];
+trs.forEach(function(tr,i){
+if(!_24&&(tr==r.anchorNode||tr==r.focusNode)){
+_26.push(tr);
+_24=true;
+if(r.anchorNode==r.focusNode){
+_25=true;
+}
+}else{
+if(_24&&!_25){
+_26.push(tr);
+if(tr==r.anchorNode||tr==r.focusNode){
+_25=true;
+}
+}
+}
+});
+dojo.forEach(_26,function(tr){
+_23=_23.concat(dojo.query("td",tr));
+},this);
+}else{
+tds.forEach(function(td,i){
+if(!_24&&(td.id==r.anchorNode.parentNode.id||td.id==r.focusNode.parentNode.id)){
+_23.push(td);
+_24=true;
+if(r.anchorNode.parentNode.id==r.focusNode.parentNode.id){
+_25=true;
+}
+}else{
+if(_24&&!_25){
+_23.push(td);
+if(td.id==r.focusNode.parentNode.id||td.id==r.anchorNode.parentNode.id){
+_25=true;
+}
+}
+}
+});
+}
+}
+if(dojo.isIE){
+r=document.selection.createRange();
+var str=r.htmlText.match(/id=\w*/g);
+dojo.forEach(str,function(a){
+var id=a.substring(3,a.length);
+_23.push(e.byId(id));
+},this);
+}
+return _23;
+}});
+dojo.provide("dojox.editor.plugins.EditorTableDialog");
+dojo.require("dijit.Dialog");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.editor.plugins.EditorTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,templateString:dojo.cache("dojox.editor.plugins","resources/insertTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${insertTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n <table class=\"etdTable\"><tr>\n <td class=\"left\">\n <span dojoAttachPoint=\"selectRow\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n <label>${rows}</label>\n </td><td class=\"right\">\n <span dojoAttachPoint=\"selectCol\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n <label>${columns}</label>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n <label>${tableWidth}</label>\n </td><td>\n <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"percent\">${percent}</option>\n <option value=\"pixels\">${pixels}</option>\n </select></td></tr>\n <tr><td>\n <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n <label>${borderThickness}</label></td>\n <td>\n ${pixels}\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellPadding}</label></td>\n <td class=\"cellpad\"></td></tr><tr><td>\n <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellSpacing}</label>\n </td><td class=\"cellspace\"></td></tr></table>\n <div class=\"dialogButtonContainer\">\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onInsert\">${buttonInsert}</div>\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){
+var _27=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+dojo.mixin(this,_27);
+this.inherited(arguments);
+},postCreate:function(){
+dojo.addClass(this.domNode,this.baseClass);
+this.inherited(arguments);
+},onInsert:function(){
+var _28=this.selectRow.attr("value")||1,_29=this.selectCol.attr("value")||1,_2a=this.selectWidth.attr("value"),_2b=this.selectWidthType.attr("value"),_2c=this.selectBorder.attr("value"),pad=this.selectPad.attr("value"),_2d=this.selectSpace.attr("value"),_2e="tbl_"+(new Date().getTime()),t="<table id=\""+_2e+"\"width=\""+_2a+((_2b=="percent")?"%":"")+"\" border=\""+_2c+"\" cellspacing=\""+_2d+"\" cellpadding=\""+pad+"\">\n";
+for(var r=0;r<_28;r++){
+t+="\t<tr>\n";
+for(var c=0;c<_29;c++){
+t+="\t\t<td width=\""+(Math.floor(100/_29))+"%\">&nbsp;</td>\n";
+}
+t+="\t</tr>\n";
+}
+t+="</table>";
+this.onBuildTable({htmlText:t,id:_2e});
+this.hide();
+},onBuildTable:function(_2f){
+}});
+dojo.provide("dojox.editor.plugins.EditorModifyTableDialog");
+dojo.require("dijit.ColorPalette");
+dojo.declare("dojox.editor.plugins.EditorModifyTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,table:null,tableAtts:{},templateString:dojo.cache("dojox.editor.plugins","resources/modifyTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${modifyTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n <table class=\"etdTable\">\n <tr><td class=\"left\">\n <span class=\"colorSwatchBtn\" dojoAttachPoint=\"backgroundCol\"></span>\n <label>${backgroundColor}</label>\n </td><td class=\"right\">\n <span class=\"colorSwatchBtn\" dojoAttachPoint=\"borderCol\"></span>\n <label>${borderColor}</label>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n <label>${borderThickness}</label>\n </td><td>\n ${pixels}\n </td></tr><tr><td>\n <select class=\"floatDijit\" dojoAttachPoint=\"selectAlign\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"default\">${default}</option>\n <option value=\"left\">${left}</option>\n <option value=\"center\">${center}</option>\n <option value=\"right\">${right}</option>\n </select>\n <label>${align}</label>\n </td><td></td></tr><tr><td>\n <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n <label>${tableWidth}</label>\n </td><td>\n <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n <option value=\"percent\">${percent}</option>\n <option value=\"pixels\">${pixels}</option>\n </select>\n </td></tr><tr><td>\n <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellPadding}</label></td>\n <td class=\"cellpad\"></td></tr><tr><td>\n <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n <label>${cellSpacing}</label>\n </td><td class=\"cellspace\"></td></tr>\n </table>\n <div class=\"dialogButtonContainer\">\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onSet\">${buttonSet}</div>\n <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){
+var _30=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+dojo.mixin(this,_30);
+this.inherited(arguments);
+},postCreate:function(){
+dojo.addClass(this.domNode,this.baseClass);
+this.inherited(arguments);
+this.connect(this.borderCol,"click",function(){
+var div=document.createElement("div");
+var w=new dijit.ColorPalette({},div);
+dijit.popup.open({popup:w,around:this.borderCol});
+this.connect(w,"onChange",function(_31){
+dijit.popup.close(w);
+this.setBrdColor(_31);
+});
+});
+this.connect(this.backgroundCol,"click",function(){
+var div=document.createElement("div");
+var w=new dijit.ColorPalette({},div);
+dijit.popup.open({popup:w,around:this.backgroundCol});
+this.connect(w,"onChange",function(_32){
+dijit.popup.close(w);
+this.setBkColor(_32);
+});
+});
+this.setBrdColor(dojo.attr(this.table,"bordercolor"));
+this.setBkColor(dojo.attr(this.table,"bgcolor"));
+var w=dojo.attr(this.table,"width");
+var p="pixels";
+if(w.indexOf("%")>-1){
+p="percent";
+w=w.replace(/%/,"");
+}
+this.selectWidth.attr("value",w);
+this.selectWidthType.attr("value",p);
+this.selectBorder.attr("value",dojo.attr(this.table,"border"));
+this.selectPad.attr("value",dojo.attr(this.table,"cellpadding"));
+this.selectSpace.attr("value",dojo.attr(this.table,"cellspacing"));
+this.selectAlign.attr("value",dojo.attr(this.table,"align"));
+},setBrdColor:function(_33){
+this.brdColor=_33;
+dojo.style(this.borderCol,"backgroundColor",_33);
+},setBkColor:function(_34){
+this.bkColor=_34;
+dojo.style(this.backgroundCol,"backgroundColor",_34);
+},onSet:function(){
+dojo.attr(this.table,"bordercolor",this.brdColor);
+dojo.attr(this.table,"bgcolor",this.bkColor);
+dojo.attr(this.table,"width",(this.selectWidth.attr("value")+((this.selectWidthType.attr("value")=="pixels")?"":"%")));
+dojo.attr(this.table,"border",this.selectBorder.attr("value"));
+dojo.attr(this.table,"cellpadding",this.selectPad.attr("value"));
+dojo.attr(this.table,"cellspacing",this.selectSpace.attr("value"));
+dojo.attr(this.table,"align",this.selectAlign.attr("value"));
+this.hide();
+},onSetTable:function(_35){
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+if(o.args&&o.args.command){
+var cmd=o.args.command.charAt(0).toLowerCase()+o.args.command.substring(1,o.args.command.length);
+switch(cmd){
+case "insertTableRowBefore":
+case "insertTableRowAfter":
+case "insertTableColumnBefore":
+case "insertTableColumnAfter":
+case "deleteTableRow":
+case "deleteTableColumn":
+case "colorTableCell":
+case "modifyTable":
+case "insertTable":
+case "tableContextMenu":
+o.plugin=new dojox.editor.plugins.TablePlugins({commandName:cmd});
+break;
+}
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/ToolbarLineBreak.js b/js/dojo/dojox/editor/plugins/ToolbarLineBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/ToolbarLineBreak.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.ToolbarLineBreak"]){
+dojo._hasResource["dojox.editor.plugins.ToolbarLineBreak"]=true;
+dojo.provide("dojox.editor.plugins.ToolbarLineBreak");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._editor._Plugin");
+dojo.declare("dojox.editor.plugins._ToolbarLineBreak",[dijit._Widget,dijit._Templated],{templateString:"<span class='dijit dijitReset'><br></span>",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _1=o.args.name.toLowerCase();
+if(_1==="||"||_1==="toolbarlinebreak"){
+o.plugin=new dijit._editor._Plugin({button:new dojox.editor.plugins._ToolbarLineBreak()});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/UploadImage.js b/js/dojo/dojox/editor/plugins/UploadImage.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/UploadImage.js
@@ -0,0 +1,58 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.UploadImage"]){
+dojo._hasResource["dojox.editor.plugins.UploadImage"]=true;
+dojo.provide("dojox.editor.plugins.UploadImage");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojox.form.FileUploader");
+dojo.experimental("dojox.editor.plugins.UploadImage");
+dojo.declare("dojox.editor.plugins.UploadImage",dijit._editor._Plugin,{tempImageUrl:"",iconClassPrefix:"editorIcon",useDefaultCommand:false,uploadUrl:"",button:null,label:"Upload",setToolbar:function(_1){
+this.button.destroy();
+this.createFileInput();
+_1.addChild(this.button);
+},_initButton:function(){
+this.command="uploadImage";
+this.editor.commands[this.command]="Upload Image";
+this.inherited("_initButton",arguments);
+delete this.command;
+},createFileInput:function(){
+var _2=dojo.create("span",{innerHTML:"."},document.body);
+dojo.style(_2,{width:"40px",height:"20px",paddingLeft:"8px",paddingRight:"8px"});
+this.button=new dojox.form.FileUploader({isDebug:true,uploadUrl:this.uploadUrl,uploadOnChange:true,selectMultipleFiles:false,baseClass:"dojoxEditorUploadNorm",hoverClass:"dojoxEditorUploadHover",activeClass:"dojoxEditorUploadActive",disabledClass:"dojoxEditorUploadDisabled"},_2);
+this.connect(this.button,"onChange","insertTempImage");
+this.connect(this.button,"onComplete","onComplete");
+},onComplete:function(_3,_4,_5){
+_3=_3[0];
+var _6=dojo.withGlobal(this.editor.window,"byId",dojo,[this.currentImageId]);
+var _7;
+if(this.downloadPath){
+_7=this.downloadPath+_3.name;
+}else{
+_7=_3.file;
+}
+_6.src=_7;
+dojo.attr(_6,"_djrealurl",_7);
+if(_3.width){
+_6.width=_3.width;
+_6.height=_3.height;
+}
+},insertTempImage:function(){
+this.currentImageId="img_"+(new Date().getTime());
+var _8="<img id=\""+this.currentImageId+"\" src=\""+this.tempImageUrl+"\" width=\"32\" height=\"32\"/>";
+this.editor.execCommand("inserthtml",_8);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "uploadImage":
+o.plugin=new dojox.editor.plugins.UploadImage({url:o.args.url});
+}
+});
+}
diff --git a/js/dojo/dojox/editor/plugins/_SmileyPalette.js b/js/dojo/dojox/editor/plugins/_SmileyPalette.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/_SmileyPalette.js
@@ -0,0 +1,129 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins._SmileyPalette"]){
+dojo._hasResource["dojox.editor.plugins._SmileyPalette"]=true;
+dojo.provide("dojox.editor.plugins._SmileyPalette");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Smiley",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins._SmileyPalette");
+dojo.declare("dojox.editor.plugins._SmileyPalette",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dojoxEntityPalette\">\n"+"<table>\n"+"<tbody>\n"+"<tr>\n"+"<td>\n"+"<table class=\"dojoxEntityPaletteTable\" waiRole=\"grid\" tabIndex=\"${tabIndex}\">\n"+"<tbody dojoAttachPoint=\"tableNode\"></tbody>\n"+"</table>\n"+"</td>\n"+"</tr>\n"+"</tbody>\n"+"</table>\n"+"</div>",defaultTimeout:500,timeoutChangeRate:0.9,smileys:{emoticonSmile:":-)",emoticonLaughing:"lol",emoticonWink:";-)",emoticonGrin:":-D",emoticonCool:"8-)",emoticonAngry:":-@",emoticonHalf:":-/",emoticonEyebrow:"/:)",emoticonFrown:":-(",emoticonShy:":-$",emoticonGoofy:":-S",emoticonOops:":-O",emoticonTongue:":-P",emoticonIdea:"(i)",emoticonYes:"(y)",emoticonNo:"(n)",emoticonAngel:"0:-)",emoticonCrying:":'("},value:null,_currentFocus:0,_xDim:null,_yDim:null,tabIndex:"0",_created:false,postCreate:function(){
+if(!this._created){
+this._created=true;
+this.domNode.style.position="relative";
+this._cellNodes=[];
+var _1=0;
+var _2;
+for(_2 in this.smileys){
+_1++;
+}
+var _3=Math.floor(Math.sqrt(_1));
+var _4=_3;
+var _5=0;
+var _6=null;
+var _7;
+for(_2 in this.smileys){
+var _8=_5%_4===0;
+if(_8){
+_6=dojo.create("tr",{tabIndex:"-1"});
+}
+var _9=this.smileys[_2],_a=dojo.i18n.getLocalization("dojox.editor.plugins","Smiley")[_2];
+_7=dojo.create("td",{tabIndex:"-1","class":"dojoxEntityPaletteCell"},_6);
+var _b=dojo.create("img",{src:dojo.moduleUrl("dojox.editor.plugins","resources/emoticons/"+_2+".gif"),"class":"dojoxSmileyPaletteImg dojoxSmiley"+_2.charAt(0).toUpperCase()+_2.substring(1),title:_a,alt:_a},_7);
+dojo.forEach(["Dijitclick","MouseEnter","Focus","Blur"],function(_c){
+this.connect(_7,"on"+_c.toLowerCase(),"_onCell"+_c);
+},this);
+if(_8){
+dojo.place(_6,this.tableNode);
+}
+dijit.setWaiRole(_7,"gridcell");
+_7.index=this._cellNodes.length;
+this._cellNodes.push({node:_7,html:"<span class='"+_2+"'>"+this.smileys[_2]+"</span>"});
+_5++;
+}
+var _d=_3-(_1%_3);
+while(_d>0){
+_7=dojo.create("td",{innerHTML:"",tabIndex:"-1","class":"dojoxEntityPaletteNullCell"},_6);
+_d--;
+}
+this._xDim=_3;
+this._yDim=_4;
+this.connect(this.tableNode,"onfocus","_onTableNodeFocus");
+var _e={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:1,LEFT_ARROW:-1};
+for(var _f in _e){
+this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[_f],ctrlKey:false,altKey:false,shiftKey:false},this,function(){
+var _10=_e[_f];
+return function(_11){
+this._navigateByKey(_10,_11);
+};
+}(),this.timeoutChangeRate,this.defaultTimeout));
+}
+}
+},focus:function(){
+this._focusFirst();
+},onChange:function(_12){
+},_focusFirst:function(){
+this._currentFocus=0;
+var _13=this._cellNodes[this._currentFocus].node;
+setTimeout(function(){
+dijit.focus(_13);
+},25);
+},_onTableNodeFocus:function(evt){
+if(evt.target===this.tableNode){
+this._focusFirst();
+}
+},_onFocus:function(){
+dojo.attr(this.tableNode,"tabIndex","-1");
+},_onBlur:function(){
+this._removeCellHighlight(this._currentFocus);
+dojo.attr(this.tableNode,"tabIndex",this.tabIndex);
+},_onCellDijitclick:function(evt){
+var _14=evt.currentTarget;
+if(this._currentFocus!=_14.index){
+this._currentFocus=_14.index;
+setTimeout(function(){
+dijit.focus(_14);
+},0);
+}
+this._selectEntity(_14);
+dojo.stopEvent(evt);
+},_onCellMouseEnter:function(evt){
+var _15=evt.currentTarget;
+this._setCurrent(_15);
+setTimeout(function(){
+dijit.focus(_15);
+},0);
+},_onCellFocus:function(evt){
+this._setCurrent(evt.currentTarget);
+},_setCurrent:function(_16){
+this._removeCellHighlight(this._currentFocus);
+this._currentFocus=_16.index;
+dojo.addClass(_16,"dojoxEntityPaletteCellHighlight");
+},_onCellBlur:function(evt){
+this._removeCellHighlight(this._currentFocus);
+},_removeCellHighlight:function(_17){
+dojo.removeClass(this._cellNodes[_17].node,"dojoxEntityPaletteCellHighlight");
+},_selectEntity:function(_18){
+var _19=dojo.filter(this._cellNodes,function(_1a){
+return _1a.node==_18;
+});
+if(_19.length>0){
+this.onChange(this.value=_19[0].html);
+}
+},_navigateByKey:function(_1b,_1c){
+if(_1c==-1){
+return;
+}
+var _1d=this._currentFocus+_1b;
+if(_1d<this._cellNodes.length&&_1d>-1){
+var _1e=this._cellNodes[_1d].node;
+_1e.focus();
+}
+}});
+}
diff --git a/js/dojo/dojox/editor/plugins/nls/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Select contents","deleteElement":"Delete element","moveEnd":"Move cursor to end","deleteContents":"Delete contents","nodeActions":"${nodeName} Actions","selectElement":"Select element","moveStart":"Move cursor to start"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Backwards","findReplace":"Toggle Find/Replace","replaceAll":"All Occurances","replaceDialogText":"Replaced ${0} occurances.","replaceButton":"Replace","findButton":"Find","findLabel":"Find what:","matchCase":"Match Case","replaceLabel":"Replace with:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Insert Symbol"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Page Break"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/Preview.js b/js/dojo/dojox/editor/plugins/nls/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Preview"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/Save.js b/js/dojo/dojox/editor/plugins/nls/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/Save.js
@@ -0,0 +1,1 @@
+({"save":"Save"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Show HTML Block Elements"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/Smiley.js b/js/dojo/dojox/editor/plugins/nls/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"laughing","emoticonCool":"cool","emoticonTongue":"tongue","emoticonCrying":"crying","emoticonOops":"oops","emoticonFrown":"frown","emoticonAngry":"angry","emoticonShy":"shy","emoticonNo":"no","emoticonAngel":"angel","smiley":"Insert Emoticon","emoticonIdea":"idea","emoticonEyebrow":"eyebrow","emoticonSmile":"smile","emoticonWink":"wink","emoticonYes":"yes","emoticonGrin":"grin","emoticonGoofy":"goofy","emoticonHalf":"half"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Set","insertTableTitle":"Insert Table","insertTableRowAfterLabel":"Add Row After","center":"center","deleteTableColumnLabel":"Delete Column","right":"right","insertTableColumnBeforeLabel":"Add Column Before","tableWidth":"Table Width:","buttonInsert":"Insert","default":"default","align":"Align:","insertTableRowBeforeLabel":"Add Row Before","cellSpacing":"Cell Spacing:","pixels":"pixels","selectTableLabel":"Select Table","rows":"Rows:","modifyTableTitle":"Modify Table","cellPadding":"Cell Padding:","deleteTableRowLabel":"Delete Row","backgroundColor":"Background Color:","insertTableColumnAfterLabel":"Add Column After","left":"left","borderThickness":"BorderThickness","columns":"Columns:","percent":"percent","borderColor":"Border Color:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ar/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/ar/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ar/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"تحديد","insertTableTitle":"‏ادراج جدول‏","insertTableRowAfterLabel":"اضافة صف بعد","center":"توسيط","deleteTableColumnLabel":"حذف عمود","right":"لليمين","insertTableColumnBeforeLabel":"اضافة عمود قبل","tableWidth":"عرض الجدول:","buttonInsert":"‏ادراج‏","default":"المفترض","align":"محاذاة:","insertTableRowBeforeLabel":"اضافة صف قبل","cellSpacing":"تباعد الخانة:","pixels":"عنصر صورة","selectTableLabel":"تحديد جدول","rows":"الصفوف:","modifyTableTitle":"تعديل جدول","cellPadding":"ملء الخانة:","deleteTableRowLabel":"حذف صف","backgroundColor":"لون الخلفية:","insertTableColumnAfterLabel":"اضافة عمود بعد","left":"لليسار","borderThickness":"سمك الحدود","columns":"الأعمدة:","percent":"نسبة مئوية","borderColor":"لون الحدود:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ca/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/ca/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ca/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Defineix","insertTableTitle":"Insereix taula","insertTableRowAfterLabel":"Afegeix fila després","center":"centrat","deleteTableColumnLabel":"Suprimeix columna","right":"dreta","insertTableColumnBeforeLabel":"Afegeix columna abans","tableWidth":"Amplada de taula:","buttonInsert":"Insereix","default":"default","align":"Alinea:","insertTableRowBeforeLabel":"Afegeix fila abans","cellSpacing":"Espaiat de cel·la:","pixels":"píxels","selectTableLabel":"Selecciona taula","rows":"Files:","modifyTableTitle":"Modifica taula","cellPadding":"Emplenat de cel·la:","deleteTableRowLabel":"Suprimeix fila","backgroundColor":"Color de fons:","insertTableColumnAfterLabel":"Afegeix columna després","left":"esquerra","borderThickness":"Gruix del contorn","columns":"Columnes:","percent":"percentatge","borderColor":"Color del contorn"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Vybrat obsah","deleteElement":"Odstranit prvek","moveEnd":"Přesunout ukazatel na konec","deleteContents":"Odstranit obsah","nodeActions":"Akce uzlu ${nodeName}","selectElement":"Vybrat prvek","moveStart":"Přesunout ukazatel na začátek"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/cs/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"V opačném směru","findReplace":"Přepnout hledání/nahrazování","replaceAll":"Všechny výskyty","replaceDialogText":"Počet nahrazených výskytů: ${0}. ","replaceButton":"Nahradit","findButton":"Najít","findLabel":"Hledaný řetězec:","matchCase":"S rozlišením velkých a malých písmen","replaceLabel":"Nahrazující řetězec:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Vložit symbol"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/cs/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Zalomení stránky"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/Preview.js b/js/dojo/dojox/editor/plugins/nls/cs/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Náhled"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/Save.js b/js/dojo/dojox/editor/plugins/nls/cs/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/Save.js
@@ -0,0 +1,1 @@
+({"save":"Uložit"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Zobrazit prvky bloku kódu HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/Smiley.js b/js/dojo/dojox/editor/plugins/nls/cs/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"smích","emoticonCool":"skvělé","emoticonTongue":"jazyk","emoticonCrying":"pláč","emoticonOops":"ouha","emoticonFrown":"zamračení","emoticonAngry":"hněv","emoticonShy":"stud","emoticonNo":"ne","emoticonAngel":"anděl","smiley":"Vložit emotikonu","emoticonIdea":"nápad","emoticonEyebrow":"obočí","emoticonSmile":"úsměv","emoticonWink":"mrknutí","emoticonYes":"ano","emoticonGrin":"úšklebek","emoticonGoofy":"potrhlost","emoticonHalf":"polovina"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/cs/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Nastavit","insertTableTitle":"Vložit tabulku","insertTableRowAfterLabel":"Přidat řádek za","center":"střed","deleteTableColumnLabel":"Odstranit sloupec","right":"vpravo","insertTableColumnBeforeLabel":"Přidat sloupec před","tableWidth":"Šířka tabulky:","buttonInsert":"Vložit","default":"výchozí","align":"Zarovnat:","insertTableRowBeforeLabel":"Přidat řádek před","cellSpacing":"Odstup buněk:","pixels":"pixelů","selectTableLabel":"Vybrat tabulku","rows":"Řádky:","modifyTableTitle":"Upravit tabulku","cellPadding":"Okraj buňky:","deleteTableRowLabel":"Odstranit řádek","backgroundColor":"Barva pozadí:","insertTableColumnAfterLabel":"Přidat sloupec za","left":"vlevo","borderThickness":"TloušťkaOhraničení","columns":"Sloupce:","percent":"procent","borderColor":"Barva ohraničení:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/cs/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/cs/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/cs/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"menší než nebo rovno","prod":"n-ární součin\nznak součin","zwj":"spojení, nulová šířka","mdash":"dlouhá pomlčka","frasl":"lomítko u zlomků","upsih":"symbol řeckého písmena ypsilon se zahnutým háčkem","prop":"úměrné","middot":"tečka uprostřed","hellip":"vodorovná výpustka\ntři tečky","eta":"malé řecké písmeno éta","iacute":"malé písmeno i s čárkou","yen":"znak yen\nznak yuan","rlm":"značka směru zprava doleva","macr":"nadtržítko","ldquo":"levé uvozovky","Icirc":"velké písmeno I se stříškou","OElig":"slitek OE, velký","hArr":"dvojitá šipka doleva a doprava","eth":"malé písmeno eth","divide":"znak dělení","chi":"malé řecké písmeno chí","eacute":"malé písmeno e s čárkou","icirc":"malé písmeno i se stříškou","iexcl":"obrácený vykřičník","ETH":"velké písmeno ETH","acute":"čárka nahoře","crarr":"šipka dolů zahnutá doleva\nnávrat vozíku, konec řádku","mu":"malé řecké písmeno mí","AElig":"velké písmeno AE\nslitek AE, velký","aacute":"malé písmeno a s čárkou","lambda":"malé řecké písmeno lambda","THORN":"velké písmeno THORN","asymp":"téměř rovno\nasymptotické k","fnof":"malé písmeno f se zahnutým háčkem\nfunkce\nflorin","lang":"levá lomená závorka","cup":"sjednocení\noblouk vypouklý dolů","ne":"není rovno","Sigma":"velké řecké písmeno sigma","oelig":"slitek oe, malý","cent":"znak cent","ni":"obsahuje jako člena","dagger":"křížek","permil":"znak promile","Omicron":"velké řecké písmeno omikrón","sigma":"malé řecké písmeno sigma","euro":"znak euro","Yacute":"velké písmeno Y s čárkou","thorn":"malé písmeno thorn","lceil":"levá horní celá část","Ograve":"velké písmeno O s obrácenou čárkou","rarr":"šipka doprava","nu":"malé řecké písmeno ný","emsp":"široká mezera","Theta":"velké řecké písmeno théta","lArr":"dvojitá šipka doleva","tau":"malé řecké písmeno tau","aelig":"malé písmeno ae\nslitek ae, malý","ccedil":"malé písmeno c se spodním háčkem","Ntilde":"velké písmeno N s vlnovkou","cong":"přibližně rovno","Uacute":"velké písmeno U s čárkou","theta":"malé řecké písmeno théta","darr":"šipka dolů","Uuml":"velké písmeno U s přehláskou","bdquo":"dolní uvozovky","Aring":"velké písmeno A s kroužkem nahoře","sigmaf":"malé řecké písmeno koncové sigma","pound":"znak libra","uArr":"dvojitá šipka nahoru","sub":"podmnožina","aring":"malé písmeno a s kroužkem nahoře","sdot":"operátor tečka","thinsp":"zúžená mezera","or":"logický operátor nebo\nklín s hrotem dolů","Eacute":"velké písmeno E s čárkou","shy":"spojovník\nrozdělovník","curren":"znak měna","loz":"kosočtverec","not":"znak negace","tilde":"malá vlnovka","sum":"n-ární součet","spades":"piky","Psi":"velké řecké písmeno psí","ndash":"krátká pomlčka","sup":"nadmnožina","atilde":"malé písmeno a s vlnovkou","clubs":"kříže\ntrojlístek","uuml":"malé písmeno u s přehláskou","Aacute":"velké písmeno A s čárkou","rsaquo":"pravá šipka","otimes":"znak násobení v kroužku\nvektorový součin","lfloor":"levá dolní celá část","zwnj":"zákaz spojení, nulová šířka","sim":"operátor tilda\nzměna podle\npodobné","Iota":"velké řecké písmeno jóta","Iacute":"velké písmeno I s čárkou","pi":"malé řecké písmeno pí","ordf":"indikátor ženského rodu","frac12":"jednoduchý zlomek jedna polovina\nzlomek jedna polovina","frac14":"jednoduchý zlomek jedna čtvrtina\nzlomek jedna čtvrtina","alefsym":"symbol alef\nprvní transfinitní kardinál","bull":"odrážka\nmalý černý kroužek","deg":"znak stupeň","ordm":"indikátor mužského rodu","epsilon":"malé řecké písmeno epsilon","equiv":"shodné s","Dagger":"dvojitý křížek","brvbar":"přerušená čára\npřerušená svislá čára","harr":"šipka doleva a doprava","ugrave":"malé písmeno u s obrácenou čárkou","oslash":"malé písmeno o s přeškrtnutím","Yuml":"velké písmeno Y s přehláskou","hearts":"srdce\nvalentýn","Xi":"velké řecké písmeno ksí","Prime":"dvojitá čárka nahoře\nsekundy\npalce","iota":"malé řecké písmeno jóta","Ccedil":"velké písmeno C se spodním háčkem","Lambda":"velké řecké písmeno lambda","raquo":"dvojitá pravá šipka","Phi":"velké řecké písmeno fí","prime":"čárka nahoře\nminuty\nstopy","nsub":"není podmnožinou","copy":"znak copyright","yuml":"malé písmeno y s přehláskou","Rho":"velké řecké písmeno ró","Ucirc":"velké písmeno U se stříškou","Kappa":"velké řecké písmeno kappa","ucirc":"malé písmeno u se stříškou","sbquo":"dolní apostrof","igrave":"malé písmeno i s obrácenou čárkou","reg":"znak registrováno\nznak registrovaná ochranná známka","infin":"nekonečno","iquest":"obrácený otazník\notočený otazník","circ":"stříška, modifikátor písmen","kappa":"malé řecké písmeno kappa","lrm":"značka směru zleva doprava","Atilde":"velké písmeno A s vlnovkou","larr":"šipka doleva","frac34":"jednoduchý zlomek tři čtvrtiny\nzlomek tři čtvrtiny","oacute":"malé písmeno o s čárkou","rsquo":"pravý apostrof","egrave":"malé písmeno e s obrácenou čárkou","oline":"nadtržítko\npruh","Mu":"velké řecké písmeno mí","exist":"existuje","cap":"průnik\noblouk vypouklý nahoru","and":"logický operátor a\nklín s hrotem nahoru","Ouml":"velké písmeno O s přehláskou","agrave":"malé písmeno a s obrácenou čárkou","uarr":"šipka nahoru","ang":"úhel","Zeta":"velké řecké písmeno zéta","scaron":"malé písmeno s s háčkem","Gamma":"velké řecké písmeno gama","isin":"prvek množiny","Auml":"velké písmeno A s přehláskou","empty":"prázdná množina\nnulová množina\nprůměr","gamma":"malé řecké písmeno gama","para":"znak konec odstavce","ge":"větší než nebo rovno","psi":"malé řecké písmeno psí","Alpha":"velké řecké písmeno alfa","Nu":"velké řecké písmeno ný","ouml":"malé písmeno o s přehláskou","zeta":"malé řecké písmeno zéta","alpha":"malé řecké písmeno alfa","part":"parciální diferenciál","auml":"malé písmeno a s přehláskou","Ugrave":"velké písmeno U s obrácenou čárkou","Oslash":"velké písmeno O s přeškrtnutím","Epsilon":"velké řecké písmeno epsilon","int":"integrál","Omega":"velké řecké písmeno ómega","perp":"kolmice\nortogonální k\nkolmé na","uml":"vodorovná dvojtečka\npřehláska","upsilon":"malé řecké písmeno ypsilon","lowast":"operátor hvězdička","omega":"malé řecké písmeno ómega","otilde":"malé písmeno o s vlnovkou","Egrave":"velké písmeno E s obrácenou čárkou","phi":"malé řecké písmeno fí","ensp":"úzká mezera","Euml":"velké písmeno E s přehláskou","cedil":"cedilla\nspodní háček","laquo":"dvojitá levá šipka","forall":"pro všechny","thetasym":"symbol malého řeckého písmena théta","Agrave":"velké písmeno A s obrácenou čárkou","szlig":"malé písmeno ostré s","Pi":"velké řecké písmeno pí","rho":"malé řecké písmeno ró","trade":"znak ochranná známka","Igrave":"velké písmeno I s obrácenou čárkou","minus":"znak minus","Beta":"velké řecké písmeno beta","Ocirc":"velké písmeno O se stříškou","rdquo":"pravé uvozovky","Eta":"velké řecké písmeno éta","rfloor":"pravá dolní celá část","Oacute":"velké písmeno O s čárkou","euml":"malé písmeno e s přehláskou","oplus":"znak plus v kroužku\npřímý součet","ocirc":"malé písmeno o se stříškou","radic":"druhá odmocnina","Chi":"velké řecké písmeno chí","notin":"není prvkem množiny","sect":"znak paragraf","Acirc":"velké písmeno A se stříškou","lsquo":"levý apostrof","beta":"malé řecké písmeno beta","piv":"řecký symbol pí","sup1":"1, horní index","Scaron":"velké písmeno S s háčkem","sup2":"2, horní index\ndruhá mocnina\nplošná míra","acirc":"malé písmeno a se stříškou","sube":"podmnožina nebo shodné s","sup3":"3, horní index\ntřetí mocnina\nkrychlová míra","real":"velké písmeno R, švabach\nsymbol reálné části","Iuml":"velké písmeno I s přehláskou","rang":"pravá lomená závorka","lsaquo":"levá šipka","nabla":"nabla\nzpětná diference","omicron":"malé řecké písmeno omikrón","there4":"a proto","plusmn":"znak plus-minus\nznak plus nebo minus","rceil":"pravá horní celá část","micro":"znak mikro","rArr":"dvojitá šipka doprava","Delta":"velké řecké písmeno delta","iuml":"malé písmeno i s přehláskou","Tau":"velké řecké písmeno tau","times":"znak násobení","yacute":"malé písmeno y s čárkou","ograve":"malé písmeno o s obrácenou čárkou","delta":"malé řecké písmeno delta","Ecirc":"velké písmeno E se stříškou","dArr":"dvojitá šipka dolů","ntilde":"malé písmeno n s vlnovkou","diams":"káry","uacute":"malé písmeno u s čárkou","Otilde":"velké písmeno O s vlnovkou","ecirc":"malé písmeno e se stříškou","Upsilon":"velké řecké písmeno ypsilon","image":"velké písmeno I, švabach\nimaginární část","supe":"nadmnožina nebo shodné s","xi":"malé řecké písmeno ksí","weierp":"stylizované velké písmeno P\npotenční množina\nWeierstrassovo písmeno p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/da/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/da/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/da/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Definér","insertTableTitle":"Indsæt tabel","insertTableRowAfterLabel":"Tilføj række efter","center":"centreret","deleteTableColumnLabel":"Slet kolonne","right":"højre","insertTableColumnBeforeLabel":"Tilføj kolonne før","tableWidth":"Tabelbredde:","buttonInsert":"Indsæt","default":"standard","align":"Justér:","insertTableRowBeforeLabel":"Tilføj række før","cellSpacing":"Celleafstand:","pixels":"pixel","selectTableLabel":"Markér tabel","rows":"Rækker:","modifyTableTitle":"Revidér tabel","cellPadding":"Cellemargen:","deleteTableRowLabel":"Slet række","backgroundColor":"Baggrundsfarve:","insertTableColumnAfterLabel":"Tilføj kolonne efter","left":"venstre","borderThickness":"Kanttykkelse","columns":"Kolonner:","percent":"percent","borderColor":"Kantfarve:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Inhalt auswählen","deleteElement":"Element löschen","moveEnd":"Cursor an Ende verschieben","deleteContents":"Inhalt löschen","nodeActions":"Aktionen für ${nodeName}","selectElement":"Element auswählen","moveStart":"Cursor an Anfang verschieben"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/de/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Zurück","findReplace":"Suchen/Ersetzen","replaceAll":"Alle Vorkommen","replaceDialogText":"Es wurden ${0} Vorkommen ersetzt.","replaceButton":"Ersetzen","findButton":"Suchen","findLabel":"Suchbegriff:","matchCase":"Groß- und Kleinschreibung abgleichen","replaceLabel":"Ersetzen durch:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/de/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Symbol einfügen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/de/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Seitenumbruch"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/Preview.js b/js/dojo/dojox/editor/plugins/nls/de/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Vorschau"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/Save.js b/js/dojo/dojox/editor/plugins/nls/de/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/Save.js
@@ -0,0 +1,1 @@
+({"save":"Speichern"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"HTML-Blockelemente anzeigen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/Smiley.js b/js/dojo/dojox/editor/plugins/nls/de/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"Lachen","emoticonCool":"Cool","emoticonTongue":"Zunge","emoticonCrying":"Weinen","emoticonOops":"Hoppla","emoticonFrown":"Stirnrunzeln","emoticonAngry":"Zornig","emoticonShy":"Schüchtern","emoticonNo":"Nein","emoticonAngel":"Engel","smiley":"Emoticon einfügen","emoticonIdea":"Idee","emoticonEyebrow":"Hochgezogene Augenbraue","emoticonSmile":"Lächeln","emoticonWink":"Augenzwinkern","emoticonYes":"Ja","emoticonGrin":"Grinsen","emoticonGoofy":"Albern","emoticonHalf":"Halb"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/de/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Festlegen","insertTableTitle":"Tabelle einfügen","insertTableRowAfterLabel":"Zeile unterhalb einfügen","center":"Mitte","deleteTableColumnLabel":"Spalte löschen","right":"Rechts","insertTableColumnBeforeLabel":"Spalte oberhalb einfügen","tableWidth":"Tabellenbreite:","buttonInsert":"Einfügen","default":"Standard","align":"Ausrichten:","insertTableRowBeforeLabel":"Zeile oberhalb einfügen","cellSpacing":"Zellenabstand:","pixels":"Pixel","selectTableLabel":"Tabelle auswählen","rows":"Zeilen:","modifyTableTitle":"Tabelle ändern","cellPadding":"Zellenrandbreite:","deleteTableRowLabel":"Zeile löschen","backgroundColor":"Hintergrundfarbe:","insertTableColumnAfterLabel":"Spalte unterhalb einfügen","left":"Links","borderThickness":"Randbreite","columns":"Spalten:","percent":"Prozent","borderColor":"Randfarbe:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/de/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/de/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/de/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"Kleiner-gleich","prod":"unäres Produkt\nProduktzeichen","zwj":"Verbinder mit Nullbreite","mdash":"Gedankenstrich von der Länge des Buchstabens m","frasl":"Schrägstrich für Bruch","upsih":"Griechisches Upsilon mit Haken","prop":"proportional zu","middot":"Multiplikationszeichen\nGeorgisches Komma\nGriechisches Multiplikationszeichen","hellip":"Auslassung\nDrei kleine Punkte","eta":"Griechischer Kleinbuchstabe Eta","iacute":"Kleinbuchstabe i mit Aktut","yen":"Yen-ZeichenNyuan-Zeichen","rlm":"Rechts-Links-Markierung","macr":"Makron\nLeerzeichen mit Makron\nÜberstrich\nQuerstrich über dem Buchstaben","ldquo":"Linkes doppeltes Anführungszeichen","Icirc":"Großbuchstabe I mit Zirkumflex","OElig":"Ligatur aus Großbuchstaben O und E","hArr":"Doppelter Rechts-Links-Pfeil","eth":"Kleines eth","divide":"Divisionszeichen","chi":"Griechischer Kleinbuchstabe Chi","eacute":"Kleinbuchstabe e mit Aktut","icirc":"Kleinbuchstabe i mit Zirkumflex","iexcl":"Umgekehrtes Ausrufezeichen","ETH":"Großes ETH","acute":"Akut\nsLeerzeichen mit Akut","crarr":"Abwärtspfeil, der nach links abknickt\nZeilenumbruch","mu":"Griechischer Kleinbuchstabe My","AElig":"Großes AE\nLigatur aus Großbuchstaben A und E","aacute":"Kleinbuchstabe a mit Aktut","lambda":"Griechischer Kleinbuchstabe Lambda","THORN":"Großes THORN","asymp":"Ungefähr gleich mit\nasymptotisch","fnof":"Kleines mit Haken\nFunction\nFlorin","lang":"Linke spitze Klammer","cup":"Vereinigungsmenge\nCup","ne":"Nicht gleich mit","Sigma":"Griechischer Großbuchstabe Sigma","oelig":"Ligatur aus Kleinbuchstaben o und e","cent":"Cent-Zeichen","ni":"Enthält als Member","dagger":"Kreuzzeichen","permil":"Promillezeichen","Omicron":"Griechischer Großbuchstabe Omicron","sigma":"Griechischer Kleinbuchstabe Sigma","euro":"Euro-Zeichen","Yacute":"Großbuchstabe Y mit Akut","thorn":"Kleines thorn","lceil":"Linke Ecke oben\nAPL upstile","Ograve":"Großbuchstabe O mit Gravis","rarr":"Rechtspfeil","nu":"Griechischer Kleinbuchstabe Ny","emsp":"Leerschritt von der Breite des Buchstaben m","Theta":"Griechischer Großbuchstabe Theta","lArr":"Doppelter Linkspfeil","tau":"Griechischer Kleinbuchstabe Tau","aelig":"Kleines ae\nLigatur aus Kleinbuchstaben a und e","ccedil":"Kleinbuchstabe c mit Cedilla","Ntilde":"Großbuchstabe N mit Tilde","cong":"Etwa gleich mit","Uacute":"Großbuchstabe U mit Akut","theta":"Griechischer Kleinbuchstabe Theta","darr":"Abwärtspfeil","Uuml":"Großbuchstabe U mit Trema","bdquo":"Doppeltes, gekrümmtes Anführungszeichen unten","Aring":"Großes A mit Ring darüber\nLateinischer Großbuchstabe A mit Ring darüber","sigmaf":"Griechischer Kleinbuchstabe Sigma am Wortende","pound":"Nummernzeichen","uArr":"Doppelter Aufwärtspfeil","sub":"Teil von","aring":"Kleines a mit Ring darüber\nKleinbuchstabe a mit Ring","sdot":"Punktoperator","thinsp":"Schmaler Leerschritt","or":"Logisches Oder\nv-förmig","Eacute":"Großbuchstabe E mit Akut","shy":"Veränderlicher Silbentrennstrich\nbedingter Trennstrich","curren":"Währungssymbol","loz":"Raute","not":"Nicht-Zeichen","tilde":"kleine Tilde","sum":"unäre Summation","spades":"Schwarzes Pik (Kartenspiel)","Psi":"Griechischer Großbuchstabe Psi","ndash":"Gedankenstrich von der Länge des Buchstabens n","sup":"Obermenge von","atilde":"Kleinbuchstabe a mit Tilde","clubs":"Schwarzes Kreuz (Kartenspiel)\nKleeblatt","uuml":"Kleinbuchstabe u mit Trema","Aacute":"Großbuchstabe A mit Akut","rsaquo":"Einfaches rechtes Anführungszeichen","otimes":"Multiplikationszeichen mit Kreis\nVektorprodukt","lfloor":"Linke Ecke unten\nAPL downstile","zwnj":"Nichtverbinder mit Nullbreite","sim":"Tilde (Operator)\nvariiert mit\nähnlich wie","Iota":"Griechischer Großbuchstabe Iota","Iacute":"Großbuchstabe I mit Akut","pi":"Griechischer Kleinbuchstabe Pi","ordf":"Weibliches Ordinalzeichen","frac12":"Bruch 1 durch 2\nEinhalb","frac14":"Bruch 1 durch 4\nEin Viertel","alefsym":"Alef-Symbol\nerste Transfinite Kardinalzahl","bull":"Rundes Aufzählungszeichen\nSchwarzer kleiner Kreis","deg":"Gradzeichen","ordm":"Männliches Ordinalzeichen","epsilon":"Griechischer Kleinbuchstabe Epsilon","equiv":"Identisch mit","Dagger":"Doppelkreuzzeichen","brvbar":"Unterbrochener Balken\nUnterbrochener vertikaler Balken","harr":"Links-Rechts-Pfeil","ugrave":"Kleinbuchstabe u mit Gravis","oslash":"Kleines o mit Schrägstrich\nKleiner dänisch-norwegischer Umlaut ö","Yuml":"Großbuchstabe Y mit Trema","hearts":"Schwarzes Herz (Kartenspiel)\nValentine","Xi":"Griechischer Großbuchstabe Xi","Prime":"Doppelter Prime\nSekunden\nZoll","iota":"Griechischer Kleinbuchstabe Iota","Ccedil":"Großbuchstabe C mit Cedilla","Lambda":"Griechischer Großbuchstabe Lambda","raquo":"Doppelte, winklige Anführungszeichen, die nach rechts weisen\nRechtes französisches Anführungszeichen","Phi":"Griechischer Großbuchstabe Phi","prime":"Prime\nMinuten\nFuß","nsub":"Kein Teil von","copy":"Copyrightzeichen","yuml":"Kleinbuchstabe y mit Trema","Rho":"Griechischer Großbuchstabe Rho","Ucirc":"Großbuchstabe U mit Zirkumflex","Kappa":"Griechischer Großbuchstabe Kappa","ucirc":"Kleinbuchstabe u mit Zirkumflex","sbquo":"Einfaches, gekrümmtes Anführungszeichen unten","igrave":"Kleinbuchstabe i mit Gravis","reg":"Registrierte Handelsmarke\nregistriertes Markenzeichen","infin":"Unendlich","iquest":"Umgekehrtes Fragezeichen\nFragezeichen auf dem Kopf","circ":"Zirkumflex, Akzent","kappa":"Griechischer Kleinbuchstabe Kappa","lrm":"Links-Rechts-Markierung","Atilde":"Großbuchstabe A mit Tilde","larr":"Linkspfeil","frac34":"Bruch 3 durch 4\nDreiviertel","oacute":"Kleinbuchstabe o mit Aktut","rsquo":"Rechtes einfaches Anführungszeichen","egrave":"Kleinbuchstabe e mit Gravis","oline":"Hochgestellter Querstrich\nLeerzeichen mit Oberstrich","Mu":"Griechischer Großbuchstabe My","exist":"Es existiert","cap":"Schnittpunkt\nHütchen","and":"Logisches Und\nKeil","Ouml":"Lateinischer Großbuchstabe O mit Trema","agrave":"Kleines a mit Gravis\nKleinbuchstabe a mit Gravis","uarr":"Aufwärtspfeil","ang":"Winkel","Zeta":"Griechischer Großbuchstabe Zeta","scaron":"Kleinbuchstabe s mit Caron","Gamma":"Griechischer Großbuchstabe Gamma","isin":"Element von","Auml":"Großbuchstabe A mit Trema","empty":"Leermenge\nNullmenge\nDurchmesser","gamma":"Griechischer Kleinbuchstabe Gamma","para":"Pilcrow-Zeichen (engl.)\nAbsatzzeichen","ge":"Größer-gleich","psi":"Griechischer Kleinbuchstabe Psi","Alpha":"Griechischer Großbuchstabe Alpha","Nu":"Griechischer Großbuchstabe Ny","ouml":"Kleinbuchstabe o mit Gravis","zeta":"Griechischer Kleinbuchstabe Zeta","alpha":"Griechischer Kleinbuchstabe Alpha","part":"Partielle Differenzialgleichung","auml":"Kleinbuchstabe a mit Trema","Ugrave":"Großbuchstabe U mit Gravis","Oslash":"Großes O mit Schrägstrich\nGroßer dänisch-norwegischer Umlaut ö","Epsilon":"Griechischer Großbuchstabe Epsilon","int":"Integral","Omega":"Griechischer Großbuchstabe Omega","perp":"Senkrecht\nSenkrecht zu\nLotrecht","uml":"Trema\nLeerzeichen mit Trema","upsilon":"Griechischer Kleinbuchstabe Upsilon","lowast":"Sternoperator","omega":"Griechischer Kleinbuchstabe Omega","otilde":"Kleinbuchstabe o mit Tilde","Egrave":"Großbuchstabe E mit Gravis","phi":"Griechischer Kleinbuchstabe Phi","ensp":"Leerschritt von der Breite des Buchstaben n","Euml":"Großbuchstabe E mit Trema","cedil":"Cedilla\nLeerzeichen mit Cedilla","laquo":"Doppelte, winklige Anführungszeichen, die nach links weisenlinke französische Anführungszeichen","forall":"Für alle","thetasym":"Griechischer Kleinbuchstabe Theta (Symbol)","Agrave":"Großes A mit Gravis\nGroßbuchstabe A mit Gravis","szlig":"Scharfes s\nEsszett","Pi":"Griechischer Großbuchstabe Pi","rho":"Griechischer Kleinbuchstabe Rho","trade":"Markenzeichen","Igrave":"Großbuchstabe I mit Gravis","minus":"Minuszeichen","Beta":"Griechischer Großbuchstabe Beta","Ocirc":"Großbuchstabe O mit Zirkumflex","rdquo":"Rechtes doppeltes Anführungszeichen","Eta":"Griechischer Großbuchstabe Eta","rfloor":"Rechte Ecke unten","Oacute":"Großbuchstabe O mit Akut","euml":"Kleinbuchstabe e mit Trema","oplus":"Pluszeichen mit Kreis\ndirekte Summe","ocirc":"Kleinbuchstabe o mit Zirkumflex","radic":"Quadratwurzel\nWurzelzeichen","Chi":"Griechischer Großbuchstabe Chi","notin":"Kein Element von","sect":"Abschnittszeichen","Acirc":"Großbuchstabe A mit Zirkumflex","lsquo":"Linkes einfaches Anführungszeichen","beta":"Griechischer Kleinbuchstabe Beta","piv":"Griechisches Pi-Symbol","sup1":"Hochgestellte Eins\nHoch 1","Scaron":"Großbuchstabe S mit Caron","sup2":"Hochgestellte Zwei\nHoch 2\nzum Quadrat","acirc":"Kleinbuchstabe a mit Zirkumflex","sube":"Teilmenge oder gleich mit","sup3":"Hochgestellte Drei\nHoch 3\nKubik","real":"Großes R in Frakturschrift\nRealteilsymbol","Iuml":"Großbuchstabe I mit Trema","rang":"Rechte spitze Klammer","lsaquo":"Einfaches linkes Anführungszeichen","nabla":"Nabla\nAbsteigende Differenz","omicron":"Griechischer Kleinbuchstabe Omicron","there4":"Deshalb","plusmn":"Plus-Minus-Zeichen\nPlus-oder-Minus-Zeichen","rceil":"Rechte Ecke oben","micro":"Micro-Zeichen","rArr":"Doppelter Rechtspfeil","Delta":"Griechischer Großbuchstabe Delta","iuml":"Kleinbuchstabe i mit Trema","Tau":"Griechischer Großbuchstabe Tau","times":"Multiplikationszeichen","yacute":"Kleinbuchstabe y mit Aktut","ograve":"Kleinbuchstabe o mit Gravis","delta":"Griechischer Kleinbuchstabe Delta","Ecirc":"Großbuchstabe E mit Zirkumflex","dArr":"Doppelter Abwärtspfeil","ntilde":"Kleinbuchstabe n mit Tilde","diams":"Schwarzes Karo (Kartenspiel)","uacute":"Kleinbuchstabe u mit Aktut","Otilde":"Lateinischer Großbuchstabe O mit Tilde","ecirc":"Kleinbuchstabe e mit Zirkumflex","Upsilon":"Griechischer Großbuchstabe Upsilon","image":"Großes I in Frakturschrift\nImaginärteil","supe":"Obermenge oder gleich mit","xi":"Griechischer Kleinbuchstabe Xi","weierp":"Kleines p in Schreibschrift\nPotenz\nWeierstrass'sche Ellipsen-Funktion"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/el/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/el/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/el/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Ορισμός","insertTableTitle":"Εισαγωγή πίνακα","insertTableRowAfterLabel":"Προσθήκη γραμμής μετά","center":"κέντρο","deleteTableColumnLabel":"Διαγραφή στήλης","right":"δεξιά","insertTableColumnBeforeLabel":"Προσθήκη στήλης πριν","tableWidth":"Πλάτος πίνακα:","buttonInsert":"Εισαγωγή","default":"προεπιλογή","align":"Στοίχιση:","insertTableRowBeforeLabel":"Προσθήκη γραμμής πριν","cellSpacing":"Απόσταση κελιών","pixels":"εικονοστοιχεία","selectTableLabel":"Επιλογή πίνακα","rows":"Γραμμές:","modifyTableTitle":"Τροποποίηση πίνακα","cellPadding":"Περιθώριο κελιών:","deleteTableRowLabel":"Διαγραφή γραμμής","backgroundColor":"Χρώμα φόντου:","insertTableColumnAfterLabel":"Προσθήκη στήλης μετά","left":"αριστερά","borderThickness":"Πάχος περιγράμματος","columns":"Στήλες:","percent":"ποσοστό","borderColor":"Χρώμα περιγράμματος:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Seleccionar contenido","deleteElement":"Suprimir elemento","moveEnd":"Mover cursor al final","deleteContents":"Suprimir contenido","nodeActions":"Acciones de ${nodeName}","selectElement":"Seleccionar elemento","moveStart":"Mover cursor al inicio"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/es/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Hacia atrás","findReplace":"Conmutar Buscar/Sustituir","replaceAll":"Todas las apariciones","replaceDialogText":"Se han sustituido ${0} apariciones.","replaceButton":"Sustituir","findButton":"Buscar","findLabel":"Buscar:","matchCase":"Coincidir mayúsculas y minúsculas","replaceLabel":"Sustituir por:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/es/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Insertar símbolo"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/es/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Salto de página"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/Preview.js b/js/dojo/dojox/editor/plugins/nls/es/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Previsualización"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/Save.js b/js/dojo/dojox/editor/plugins/nls/es/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/Save.js
@@ -0,0 +1,1 @@
+({"save":"Guardar"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Mostrar elementos de bloque HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/Smiley.js b/js/dojo/dojox/editor/plugins/nls/es/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"risa","emoticonCool":"guay","emoticonTongue":"burlón","emoticonCrying":"llorando","emoticonOops":"lo siento","emoticonFrown":"ceño fruncido","emoticonAngry":"enfadado","emoticonShy":"tímido","emoticonNo":"no","emoticonAngel":"ángel","smiley":"Insertar emoticono","emoticonIdea":"idea","emoticonEyebrow":"ceja levantada","emoticonSmile":"sonrisa","emoticonWink":"guiño","emoticonYes":"sí","emoticonGrin":"carcajada","emoticonGoofy":"patoso","emoticonHalf":"escéptico"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/es/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Establecer","insertTableTitle":"Insertar tabla","insertTableRowAfterLabel":"Añadir fila después","center":"centro","deleteTableColumnLabel":"Suprimir columna","right":"derecha","insertTableColumnBeforeLabel":"Añadir columna antes","tableWidth":"Ancho de tabla:","buttonInsert":"Insertar","default":"default","align":"Alinear:","insertTableRowBeforeLabel":"Añadir fila antes","cellSpacing":"Espaciado de celda:","pixels":"píxeles","selectTableLabel":"Seleccionar tabla","rows":"Filas:","modifyTableTitle":"Modificar tabla","cellPadding":"Relleno de celda:","deleteTableRowLabel":"Suprimir fila","backgroundColor":"Color de fondo:","insertTableColumnAfterLabel":"Añadir columna después","left":"izquierda","borderThickness":"Ancho de borde","columns":"Columnas:","percent":"por ciento","borderColor":"Color de borde:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/es/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/es/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/es/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"menor o igual que","prod":"productoria\nmultiplicatoria","zwj":"conector de anchura cero","mdash":"guión largo","frasl":"barra de fracción","upsih":"símbolo de letra ípsilon griega con gancho","prop":"proporcional","middot":"punto medio\ncoma georgiana\npunto medio griego","hellip":"puntos suspensivos","eta":"letra eta griega minúscula","iacute":"letra i latina minúscula con acento agudo","yen":"símbolo del yen\nsímbolo de yuan","rlm":"marca de derecha a izquierda","macr":"macrón\ndiacrítico largo\nlínea superior\nbarra superior APL","ldquo":"comillas dobles abiertas","Icirc":"letra I latina mayúscula con acento circunflejo","OElig":"ligadura de OE latinas mayúsculas","hArr":"doble flecha izquierda-derecha","eth":"letra eth latina minúscula","divide":"signo de división","chi":"letra chi griega minúscula","eacute":"letra e latina minúscula con acento agudo","icirc":"letra i latina minúscula con acento circunflejo","iexcl":"signo de exclamación inicial","ETH":"letra ETH latina mayúscula","acute":"acento agudo\nagudo de espaciado","crarr":"flecha esquinada abajo a la izquierda\nretorno de carro","mu":"letra mu griega minúscula","AElig":"diptongo AE latinas mayúsculas\nligadura de AE latinas mayúsculas","aacute":"letra a latina minúscula con acento agudo","lambda":"letra lambda griega minúscula","THORN":"letra THORN latina mayúscula","asymp":"parecido\ncasi igual a","fnof":"letra f latina minúscula con gancho\nfunción\nflorín","lang":"corchete angular hacia la izquierda","cup":"unión\nconjuntos","ne":"no igual a","Sigma":"letra sigma griega mayúscula","oelig":"ligadura de oe latinas minúsculas","cent":"símbolo de centavos","ni":"está incluido","dagger":"daga","permil":"signo de por mil","Omicron":"letra ómicron griega mayúscula","sigma":"letra sigma griega minúscula","euro":"signo del euro","Yacute":"letra Y latina mayúscula con acento agudo","thorn":"letra thorn latina minúscula","lceil":"parte superior de corchete abierto","Ograve":"letra O latina mayúscula con acento grave","rarr":"flecha a la derecha","nu":"letra nu griega minúscula","emsp":"espacio largo","Theta":"letra theta griega mayúscula","lArr":"doble flecha a la izquierda","tau":"letra tau griega minúscula","aelig":"Diptongo ae latinas minúsculas\nligadura de ae latinas minúsculas","ccedil":"letra c latina minúscula con cedilla","Ntilde":"letra N latina mayúscula con virgulilla\nletra N latina mayúscula con tilde\nletra Ñ latina mayúscula","cong":"aproximadamente igual a","Uacute":"letra U latina mayúscula con acento agudo","theta":"letra theta griega minúscula","darr":"flecha hacia abajo","Uuml":"letra U latina mayúscula con diéresis","bdquo":"comillas dobles inferiores","Aring":"letra A latina mayúscula con anillo encima\nletra A latina mayúscula con anillo","sigmaf":"letra sigma final griega minúscula","pound":"símbolo libra esterlina","uArr":"doble flecha hacia arriba","sub":"subconjunto de","aring":"letra a latina minúscula con anillo encima\nletra a latina minúscula con anillo","sdot":"operador punto","thinsp":"espacio estrecho","or":"o lógico\nuve","Eacute":"letra E latina mayúscula con acento agudo","shy":"signo de guión corto","curren":"símbolo monetario","loz":"rombo","not":"signo de negación","tilde":"tilde pequeña","sum":"sumatoria","spades":"palo de picas","Psi":"letra psi griega mayúscula","ndash":"guión","sup":"superconjunto de","atilde":"letra a latina minúscula con virgulilla\nletra a latina minúscula con tilde","clubs":"palo de tréboles","uuml":"letra u latina minúscula con diéresis","Aacute":"letra A latina mayúscula con acento agudo","rsaquo":"comilla simple angular cerrada","otimes":"cruz en círculo\nproducto vectorial","lfloor":"parte inferior de corchete abierto","zwnj":"separador de anchura cero","sim":"operador de tilde\nno lógico\nparecido a","Iota":"letra iota griega mayúscula","Iacute":"letra I latina mayúscula con acento agudo","pi":"letra pi griega minúscula","ordf":"indicador de ordinal femenino","frac12":"fracción de medio vulgar\nfracción de medio","frac14":"fracción de cuarto vulgar\nfracción de cuarto","alefsym":"símbolo alef\nprimer número transfinito","bull":"viñeta\ncírculo negro pequeño","deg":"signo de grados","ordm":"indicador de ordinal masculino","epsilon":"letra épsilon griega minúscula","equiv":"idéntico a","Dagger":"daga doble","brvbar":"barra dividida\nbarra vertical dividida","harr":"flecha izquierda-derecha","ugrave":"letra u latina minúscula con acento grave","oslash":"letra o latina minúscula con barra\nletra o latina minúscula con barra inclinada","Yuml":"letra Y latina mayúscula con diéresis","hearts":"palo de corazones","Xi":"letra xi griega mayúscula","Prime":"símbolo primo doble\nsegundos\npulgadas","iota":"letra iota griega minúscula","Ccedil":"letra C latina mayúscula con cedilla","Lambda":"letra lambda griega mayúscula","raquo":"comillas dobles en ángulo a la derecha","Phi":"letra phi griega mayúscula","prime":"símbolo primo\nminutos\npies","nsub":"no un subconjunto de","copy":"símbolo de copyright","yuml":"letra y latina minúscula con diéresis","Rho":"letra rho griega mayúscula","Ucirc":"letra U latina mayúscula con acento circunflejo","Kappa":"letra kappa griega mayúscula","ucirc":"letra u latina minúscula con acento circunflejo","sbquo":"comilla simple inferior","igrave":"letra i latina minúscula con acento grave","reg":"símbolo de registrado\nsímbolo de marca registrada","infin":"infinito","iquest":"signo de interrogación inicial\nsigno de apertura de interrogación","circ":"acento circunflejo","kappa":"letra kappa griega minúscula","lrm":"marca de izquierda a derecha","Atilde":"letra A latina mayúscula con virgulilla\nletra A latina mayúscula con tilde","larr":"flecha a la izquierda","frac34":"fracción de tres cuartos vulgar\nfracción de tres cuartos","oacute":"letra o latina minúscula con acento agudo","rsquo":"comilla simple cerrada","egrave":"letra e latina minúscula con acento grave","oline":"sobrelínea\nsobre la letra","Mu":"letra mu griega mayúscula","exist":"existe","cap":"intersección\nconjuntos","and":"y lógico\ncuña","Ouml":"letra O latina mayúscula con diéresis","agrave":"letra a latina minúscula con acento grave\nletra a latina minúscula grave","uarr":"flecha hacia arriba","ang":"ángulo","Zeta":"letra zeta griega mayúscula","scaron":"letra s latina minúscula con anticircunflejo","Gamma":"letra gamma griega mayúscula","isin":"pertenece","Auml":"letra A latina mayúscula con diéresis","empty":"conjunto vacío\nconjunto nulo\ndiámetro","gamma":"letra gamma griega minúscula","para":"signo de párrafo","ge":"mayor o igual que","psi":"letra psi griega minúscula","Alpha":"letra alpha griega mayúscula","Nu":"letra nu griega mayúscula","ouml":"letra o latina minúscula con diéresis","zeta":"letra zeta griega minúscula","alpha":"letra alpha griega minúscula","part":"derivada parcial","auml":"letra a latina minúscula con diéresis","Ugrave":"letra U latina mayúscula con acento grave","Oslash":"letra O latina mayúscula con barra\nletra O latina mayúscula con barra inclinada","Epsilon":"letra épsilon griega mayúscula","int":"integral","Omega":"letra omega griega mayúscula","perp":"ortogonal a\nperpendicular","uml":"diéresis\ndiéresis de espaciado","upsilon":"letra ípsilon griega minúscula","lowast":"operador asterisco","omega":"letra omega griega minúscula","otilde":"letra o latina minúscula con virgulilla\nletra o latina minúscula con tilde","Egrave":"letra E latina mayúscula con acento grave","phi":"letra phi griega minúscula","ensp":"espacio","Euml":"letra E latina mayúscula con acento diéresis","cedil":"cedilla\ncedilla de espaciado","laquo":"comillas dobles en ángulo a la izquierda","forall":"para todo","thetasym":"símbolo de letra theta griega minúscula","Agrave":"letra A latina mayúscula con acento grave\nletra A latina mayúscula grave","szlig":"letra s fuerte latina minúscula\nEszet","Pi":"letra pi griega mayúscula","rho":"letra rho griega minúscula","trade":"símbolo de marca registrada","Igrave":"letra I latina mayúscula con acento grave","minus":"signo menos","Beta":"letra beta griega mayúscula","Ocirc":"letra O latina mayúscula con acento circunflejo","rdquo":"comillas dobles cerradas","Eta":"letra eta griega mayúscula","rfloor":"parte inferior de corchete abierto","Oacute":"letra O latina mayúscula con acento agudo","euml":"letra e latina minúscula con diéresis","oplus":"más en círculo\nsuma directa","ocirc":"letra o latina minúscula con acento circunflejo","radic":"raíz cuadrada\nsigno radical","Chi":"letra chi griega mayúscula","notin":"no pertenece","sect":"signo de sección","Acirc":"letra A latina mayúscula con acento circunflejo","lsquo":"comilla simple abierta","beta":"letra beta griega minúscula","piv":"símbolo pi griego","sup1":"superíndice uno\nsuperíndice de dígito uno","Scaron":"letra S latina mayúscula con anticircunflejo","sup2":"superíndice dos\nsuperíndice de dígito dos\nelevado al cuadrado","acirc":"letra a latina minúscula con acento circunflejo","sube":"subconjunto de o igual a","sup3":"superíndice tres\nsuperíndice de dígito tres\nelevado al cubo","real":"letra R mayúscula\nnúmeros reales","Iuml":"letra I latina mayúscula con diéresis","rang":"corchete angular hacia la derecha","lsaquo":"comilla simple angular abierta","nabla":"nabla\ngradiente","omicron":"letra ómicron griega minúscula","there4":"por lo tanto","plusmn":"signo de más-menos\nsigno de más o menos","rceil":"parte superior de corchete cerrado","micro":"signo de micro","rArr":"doble flecha a la derecha","Delta":"letra delta griega mayúscula","iuml":"letra i latina minúscula con diéresis","Tau":"letra tau griega mayúscula","times":"signo de multiplicación","yacute":"letra y latina minúscula con acento agudo","ograve":"letra o latina minúscula con acento grave","delta":"letra delta griega minúscula","Ecirc":"letra E latina mayúscula con acento circunflejo","dArr":"doble flecha hacia abajo","ntilde":"letra n latina minúscula con virgulilla\nletra n latina minúscula con tilde","diams":"palo de diamantes","uacute":"letra u latina minúscula con acento agudo","Otilde":"letra O latina mayúscula con virgulilla\nletra O latina mayúscula con tilde","ecirc":"letra e latina minúscula con acento circunflejo","Upsilon":"letra ípsilon griega mayúscula","image":"letra I mayúscula\nnúmeros imaginarios","supe":"superconjunto de o igual a","xi":"letra xi griega minúscula","weierp":"letra P mayúscula cursiva"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fi/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/fi/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fi/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Aseta","insertTableTitle":"Lisää taulukko","insertTableRowAfterLabel":"Lisää rivi jälkeen","center":"keskitetty","deleteTableColumnLabel":"Poista sarake","right":"oikea","insertTableColumnBeforeLabel":"Lisää sarake ennen","tableWidth":"Taulukon leveys:","buttonInsert":"Lisää","default":"oletus","align":"Tasaus:","insertTableRowBeforeLabel":"Lisää rivi ennen","cellSpacing":"Solujen väli:","pixels":"kuvapistettä","selectTableLabel":"Valitse taulukko","rows":"Rivit:","modifyTableTitle":"Muokkaa taulukkoa","cellPadding":"Solun täyttö:","deleteTableRowLabel":"Poista rivi","backgroundColor":"Taustaväri:","insertTableColumnAfterLabel":"Lisää sarake jälkeen","left":"vasen","borderThickness":"Kehyksen paksuus","columns":"Sarakkeet:","percent":"prosenttia","borderColor":"Kehyksen väri:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Sélection de contenus","deleteElement":"Suppression d'un élément","moveEnd":"Déplacer le curseur vers la fin","deleteContents":"Suppression de contenus","nodeActions":"Actions ${nodeName}","selectElement":"Sélection d'un élément","moveStart":"Déplacer le curseur vers le début"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/fr/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Vers l'arrière","findReplace":"Rechercher/Remplacer","replaceAll":"Toutes les occurrences","replaceDialogText":"${0} occurrence(s) remplacée(s).","replaceButton":"Remplacer","findButton":"Rechercher","findLabel":"Que rechercher :","matchCase":"Respecter la casse","replaceLabel":"Remplacer par :"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Insertion d'un symbole"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/fr/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Saut de page"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/Preview.js b/js/dojo/dojox/editor/plugins/nls/fr/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Aperçu"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/Save.js b/js/dojo/dojox/editor/plugins/nls/fr/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/Save.js
@@ -0,0 +1,1 @@
+({"save":"Sauvegarder"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Affichage des éléments de bloc HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/Smiley.js b/js/dojo/dojox/editor/plugins/nls/fr/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"rire","emoticonCool":"calme","emoticonTongue":"langue","emoticonCrying":"pleurs","emoticonOops":"oops","emoticonFrown":"froncement de sourcils","emoticonAngry":"colère","emoticonShy":"timide","emoticonNo":"non","emoticonAngel":"ange","smiley":"Insérer une émoticône","emoticonIdea":"idée","emoticonEyebrow":"sourcils","emoticonSmile":"sourire","emoticonWink":"clin d'oeil","emoticonYes":"oui","emoticonGrin":"sourire large","emoticonGoofy":"dingo","emoticonHalf":"demi"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/fr/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Définir","insertTableTitle":"Insertion d'une table","insertTableRowAfterLabel":"Ajouter une ligne après","center":"au centre","deleteTableColumnLabel":"Supprimer une colonne","right":"à droite","insertTableColumnBeforeLabel":"Ajouter une colonne avant","tableWidth":"Largeur de la table :","buttonInsert":"Insérer","default":"valeur par défaut","align":"Aligner :","insertTableRowBeforeLabel":"Ajouter une ligne avant","cellSpacing":"Espacement des cellules :","pixels":"pixels","selectTableLabel":"Sélection d'une table","rows":"Lignes :","modifyTableTitle":"Modification d'une table","cellPadding":"Remplissage des cellules","deleteTableRowLabel":"Supprimer une ligne","backgroundColor":"Couleur d'arrière-plan :","insertTableColumnAfterLabel":"Ajouter une colonne après","left":"à gauche","borderThickness":"Epaisseur de la bordure","columns":"Colonnes :","percent":"pourcentage","borderColor":"Couleur de la bordure :"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/fr/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/fr/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/fr/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"inférieur ou égal à","prod":"produit n-aire\nsigne produit","zwj":"liant sans chasse","mdash":"tiret cadratin","frasl":"barre de fraction","upsih":"Greek - upsilon avec symbole de crochet","prop":"proportionnel à","middot":"point médian\nvirgule géorgiennea\npoint médian grec","hellip":"points de suspension\ntrois points de conduite","eta":"Grec - eta minuscule","iacute":"Latin - i minuscule avec accent aigu","yen":"signe yen\nsigne yuan","rlm":"marque de droite à gauche","macr":"macron\nmacron d'espacement\nligne supérieure\nbarre supérieure APL","ldquo":"guillemet double gauche","Icirc":"Latin - I majuscule avec accent circonflexe","OElig":"Latin - Ligature OE majuscule","hArr":"flèche double vers la gauche","eth":"Latin - eth minuscule","divide":"signe division","chi":"Grec - chi minuscule","eacute":"Latin - e minuscule avec accent aigu","icirc":"Latin - i minuscule avec accent circonflexe","iexcl":"point d'exclamation inversé","ETH":"Latin - ETH majuscule","acute":"accent aigu\naccent aigu d'espacement","crarr":"flèche vers le bas avec coin vers la gauche\nretour chariot","mu":"Grec - mu minuscule","AElig":"Latin - AE majuscule\nLatin - AE majuscule (ligature)","aacute":"Latin - a minuscule avec accent aigu","lambda":"Grec - lambda minuscule","THORN":"Latin THORN majuscule","asymp":"presque égal à\nasymptotique à","fnof":"Latin - f minuscule avec crochet\nfonction\nflorin","lang":"chevron vers la gauche","cup":"union\ncup","ne":"différente de","Sigma":"Grec - sigma majuscule","oelig":"Latin - Ligature oe minuscule","cent":"signe cent","ni":"contient comme membre","dagger":"obèle","permil":"signe pour-mille","Omicron":"Grec - omicron majuscule","sigma":"Grec - sigma minuscule","euro":"signe euro","Yacute":"Latin - Y majuscule avec accent aigu","thorn":"Latin - thorn minuscule","lceil":"plafond à gauche\nmontant APL","Ograve":"Latin - O majuscule avec accent grave","rarr":"flèche vers la droite","nu":"Grec - nu minuscule","emsp":"espace cadratin","Theta":"Grec - theta majuscule","lArr":"flèche double vers la gauche","tau":"Grec - tau minuscule","aelig":"Latin - AE minuscule\nLatin - AE minuscule (ligature)","ccedil":"Latin - c minuscule avec cédille","Ntilde":"Latin - N majuscule avec tilde","cong":"approximativement égal à","Uacute":"Latin - U majuscule avec accent aigu","theta":"Grec - theta minuscule","darr":"flèche vers le bas","Uuml":"Latin - U majuscule avec tréma","bdquo":"guillemet double fermant bas","Aring":"Latin - A majuscule rond en chef\nLatin - A majuscule rond","sigmaf":"Grec - sigma final minuscule","pound":"signe livre sterling","uArr":"flèche double vers le haut","sub":"sous-ensemble de","aring":"Latin - a minuscule rond en chef\nLatin - a minuscule rond","sdot":"point","thinsp":"espace fin","or":"ou logique\nvee","Eacute":"Latin - E majuscule avec accent aigu","shy":"trait d'union conditionnel\ntiret conditionnel","curren":"signe devise","loz":"losange","not":"signe non","tilde":"petit tilde","sum":"somme n-aire","spades":"pic noir","Psi":"Grec - psi majuscule","ndash":"tiret demi-cadratin","sup":"sur-ensemble de","atilde":"Latin - a minuscule avec tilde","clubs":"trèfle noir","uuml":"Latin - u minuscule avec tréma","Aacute":"Latin - A majuscule avec accent aigu","rsaquo":"guillemet simple orienté vers la droite","otimes":"signe multiplié entouré\nproduit vectoriel","lfloor":"plancher à gauche\ndescendant APL","zwnj":"antiliant sans chasse","sim":"tilde\nvarie en fonction de\nsimilaire à","Iota":"Grec - iota majuscule","Iacute":"Latin - I majuscule avec accent aigu","pi":"Grec - pi minuscule","ordf":"indicateur ordinal féminin","frac12":"fraction commune un demi\nfraction un demi","frac14":"fraction commune un quart\nfraction un quart","alefsym":"symbole alef\npremier cardinal transfini","bull":"puce\npetit cercle noir","deg":"signe degré","ordm":"indicateur ordinal masculin","epsilon":"Grec - epsilon minuscule","equiv":"identique à","Dagger":"double obèle","brvbar":"barre interrompue\nbarre verticale interrompue","harr":"flèche vers la gauche et la droite","ugrave":"Latin - u minuscule avec accent grave","oslash":"Latin - o minuscule barré\nLatin - Ensemble vide minuscule","Yuml":"Latin - Y majuscule avec tréma","hearts":"coeur noir\nvalentine","Xi":"Grec - xi majuscule","Prime":"double apostrophe\nsecondes\npouces","iota":"Grec - iota minuscule","Ccedil":"Latin - C majuscule avec cédille","Lambda":"Grec - lambda majuscule","raquo":"guillemets ouvrants","Phi":"Grec - phi majuscule","prime":"apostrophe\nminutes\npieds","nsub":"non sous-ensemble de","copy":"signe de droit d'auteur","yuml":"Latin - y minuscule avec tréma","Rho":"Grec - rho majuscule","Ucirc":"Latin - U majuscule avec accent circonflexe","Kappa":"Grec - kappa majuscule","ucirc":"Latin - u minuscule avec accent circonflexe","sbquo":"guillemet simple fermant bas","igrave":"Latin - i minuscule avec accent grave","reg":"signe enregistré\nmarque commerciale enregistrée","infin":"infinité","iquest":"point d'interrogation inversé\npoint d'interrogation retourné","circ":"accent circonflexe de lettre modificateur","kappa":"Grec - kappa minuscule","lrm":"marque de gauche à droite","Atilde":"Latin - A majuscule avec tilde","larr":"flèche vers la gauche","frac34":"fraction commune trois quarts\nfraction trois quarts","oacute":"Latin - o minuscule avec accent aigu","rsquo":"guillemet simple fermant","egrave":"Latin - e minuscule avec accent grave","oline":"surligné\nbarre supérieure d'espacement","Mu":"Grec - mu majuscule","exist":"il existe","cap":"intersection\ncap","and":"et logique\nwedge","Ouml":"Latin - O majuscule avec tréma","agrave":"Latin - a minuscule avec accent grave\nLatin - a minuscule accent grave","uarr":"flèche vers le haut","ang":"angle","Zeta":"Grec - zeta majuscule","scaron":"Latin - s minuscule avec caron","Gamma":"Grec - gamma majuscule","isin":"élément de","Auml":"Latin - A majuscule avec tréma","empty":"ensemble vide\nensemble null\ndiamètre","gamma":"Grec - gamma minuscule","para":"symbole de paragraphe","ge":"supérieur ou égal à","psi":"Grec - psi minuscule","Alpha":"Grec - alpha majuscule","Nu":"Grec - nu majuscule","ouml":"Latin - o minuscule avec tréma","zeta":"Grec - zeta minuscule","alpha":"Grec - alpha minuscule","part":"différentiel partiel","auml":"Latin - a minuscule avec tréma","Ugrave":"Latin - U majuscule avec accent grave","Oslash":"Latin - O majuscule barré\nLatin - Ensemble vide","Epsilon":"Grec - epsilon majuscule","int":"intégrale","Omega":"Grec - omega majuscule","perp":"orthogonal à\nperpendiculaire","uml":"tréma\ntréma d'espacement","upsilon":"Grec - upsilon minuscule","lowast":"astérisque","omega":"Grec - omega minuscule","otilde":"Latin - o minuscule avec tilde","Egrave":"Latin - E majuscule avec accent grave","phi":"Grec - phi minuscule","ensp":"espace demi-cadratin","Euml":"Latin - E majuscule avec tréma","cedil":"cédille\ncédille d'espacement","laquo":"guillemets fermants","forall":"pour tous","thetasym":"Grec - theta minuscule","Agrave":"Latin - A majuscule avec accent grave\nLatin - A majuscule accent grave","szlig":"Latin - s dur minuscule\nss","Pi":"Grec - pi majuscule","rho":"Grec - rho minuscule","trade":"signe de marque commerciale","Igrave":"Latin - I majuscule avec accent grave","minus":"signe moins","Beta":"Grec - beta majuscule","Ocirc":"Latin - O majuscule avec accent circonflexe","rdquo":"guillemet double droit","Eta":"Grec - eta majuscule","rfloor":"plancher à droite","Oacute":"Latin - O majuscule avec accent aigu","euml":"Latin - e minuscule avec tréma","oplus":"plus entouré\nsomme directe","ocirc":"Latin - o minuscule avec accent circonflexe","radic":"racine carrée\nsigne radical","Chi":"Grec - chi majuscule","notin":"non élément de","sect":"signe section","Acirc":"Latin - A majuscule avec accent circonflexe","lsquo":"guillemet simple ouvrant","beta":"Grec - beta minuscule","piv":"Greek - symbole pi","sup1":"exposant un\npuissance un","Scaron":"Latin - S majuscule avec caron","sup2":"exposant deux\npuissance deux\ncarré","acirc":"Latin - a minuscule avec accent circonflexe","sube":"sous-ensemble de ou égal à","sup3":"exposant trois\npuissance trois\ncube","real":"R majuscule noir\npartie réelle","Iuml":"Latin - I majuscule avec tréma","rang":"chevron vers la droite","lsaquo":"guillemet simple orienté vers la gauche","nabla":"nabla\ndifférence arrière","omicron":"Grec - omicron minuscule","there4":"donc","plusmn":"signe plus-moins\nsigne plus-ou-moins","rceil":"plafond à droite","micro":"signe micro","rArr":"flèche double vers la droite","Delta":"Grec - delta majuscule","iuml":"Latin - i minuscule avec tréma","Tau":"Grec - tau majuscule","times":"signe multiplication","yacute":"Latin - y minuscule avec accent aigu","ograve":"Latin - o minuscule avec accent grave","delta":"Grec - delta minuscule","Ecirc":"Latin - E majuscule avec accent circonflexe","dArr":"flèche double vers le bas","ntilde":"Latin - n minuscule avec tilde","diams":"carreau noir","uacute":"Latin - u minuscule avec accent aigu","Otilde":"Latin - O majuscule avec tilde","ecirc":"Latin - e minuscule avec accent circonflexe","Upsilon":"Grec - upsilon majuscule","image":"I majuscule noir\npartie imaginaire","supe":"sur-ensemble de ou égal à","xi":"Grec - xi minuscule","weierp":"P majuscule scripte\nensemble de puissances\nfonction elliptique de Weierstrass"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/he/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/he/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/he/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"הגדרה","insertTableTitle":"הוספת טבלה","insertTableRowAfterLabel":"הוספת שורה אחרי","center":"מרכז","deleteTableColumnLabel":"מחיקת עמודה","right":"שמאל","insertTableColumnBeforeLabel":"הוספת עמודה לפני","tableWidth":"רוחב טבלה:","buttonInsert":"הוספה","default":"ברירת מחדל","align":"יישור:","insertTableRowBeforeLabel":"הוספת שורה לפני","cellSpacing":"ריווח תאים:","pixels":"פיקסלים","selectTableLabel":"בחירת טבלה","rows":"שורות:","modifyTableTitle":"שינוי טבלה","cellPadding":"ריפוד תאים:","deleteTableRowLabel":"מחיקת שורה","backgroundColor":"צבע רקע:","insertTableColumnAfterLabel":"הוספת עמודה אחרי","left":"ימין","borderThickness":"עובי גבול","columns":"עמודות:","percent":"אחוז","borderColor":"צבע גבול:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Tartalom kiválasztása","deleteElement":"Elem törlése","moveEnd":"Kurzor mozgatása a végére","deleteContents":"Tartalom törlése","nodeActions":"${nodeName} műveletek","selectElement":"Elem kiválasztása","moveStart":"Kurzor mozgatása az elejére"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/hu/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Visszafelé","findReplace":"Keresés/Csere váltása","replaceAll":"Minden előfordulás","replaceDialogText":"${0} előfordulás cseréje megtörtént. ","replaceButton":"Csere","findButton":"Keresés","findLabel":"Keresés: ","matchCase":"Kis- és nagybetűk egyeztetése","replaceLabel":"Csere: "})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Szimbólum beszúrása"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/hu/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Oldaltörés"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/Preview.js b/js/dojo/dojox/editor/plugins/nls/hu/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Előzetes"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/Save.js b/js/dojo/dojox/editor/plugins/nls/hu/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/Save.js
@@ -0,0 +1,1 @@
+({"save":"Mentés"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"HTML blokk elemek megjelenítése"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/Smiley.js b/js/dojo/dojox/editor/plugins/nls/hu/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"nevetés","emoticonCool":"laza","emoticonTongue":"nyelv","emoticonCrying":"sírás","emoticonOops":"hoppá","emoticonFrown":"rosszallás","emoticonAngry":"mérges","emoticonShy":"szégyenlős","emoticonNo":"nem","emoticonAngel":"angyal","smiley":"Hangulatjel beszúrása","emoticonIdea":"ötlet","emoticonEyebrow":"szemöldök","emoticonSmile":"mosoly","emoticonWink":"kacsintás","emoticonYes":"igen","emoticonGrin":"vigyor","emoticonGoofy":"ostoba","emoticonHalf":"fél"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/hu/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Beállítás","insertTableTitle":"Táblázat beszúrása","insertTableRowAfterLabel":"Sor hozzáadása utána","center":"középre","deleteTableColumnLabel":"Oszlop törlése","right":"jobbra","insertTableColumnBeforeLabel":"Oszlop hozzáadása előtte","tableWidth":"Táblázat szélessége: ","buttonInsert":"Beszúrás","default":"alapértelmezett","align":"Igazítás: ","insertTableRowBeforeLabel":"Sor hozzáadása előtte","cellSpacing":"Cella térköz: ","pixels":"képpont","selectTableLabel":"Táblázat kijelölése","rows":"Sorok: ","modifyTableTitle":"Táblázat módosítása","cellPadding":"Cellakitöltés: ","deleteTableRowLabel":"Sor törlése ","backgroundColor":"Háttérszín: ","insertTableColumnAfterLabel":"Oszlop hozzáadása utána","left":"balra","borderThickness":"Szegély vastagsága ","columns":"Oszlopok: ","percent":"százalék","borderColor":"Szegélyszín: "})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/hu/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/hu/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/hu/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"kisebb vagy egyenlő","prod":"n-tagú Descartes szorzat\nszorzatjel","zwj":"nem törhető üres jel","mdash":"m kötőjel","frasl":"tört osztásjel","upsih":"Görög üpszilon horog szimbólummal ","prop":"arányos ","middot":"középső pont\nGregorián vessző\nGörög középső pont","hellip":"vízszintes hármaspont\nbevezető hármas pont","eta":"Görög kis éta betű","iacute":"Latin kis i betű éles ékezettel","yen":"jen jel\nyuan jel","rlm":"jobbról balra jel","macr":"föléhúzás jel\nAPL felülhúzás","ldquo":"bal dupla idézőjel","Icirc":"Latin kalapos nagy I betű ","OElig":"Latin nagy OE ikerbetű ","hArr":"balra-jobbra mutató dupla nyíl","eth":"Latin kis eth betű ","divide":"osztásjel ","chi":"Görög kis khí betű ","eacute":"Latin kis e betű éles ékezettel","icirc":"Latin kalapos kis i betű ","iexcl":"fordított felkiáltójel","ETH":"Latin nagy ETH betű ","acute":"hegyes ékezet\nkalapos ékezet","crarr":"lefelé mutató nyíl bal oldalon sarokkal\nsoremelés","mu":"Görög kis mű betű ","AElig":"Latin nagy AE\nLatin nagy AE ikerbetű ","aacute":"Latin kis a betű éles ékezettel","lambda":"Görög kis lambda betű ","THORN":"Latin nagy THORN betű ","asymp":"majdnem egyenlő\naszimptotikus","fnof":"Latin kis f horoggal\nfüggvény\nforint","lang":"balra mutató hegyes zárójel","cup":"unió","ne":"nem egyenlő","Sigma":"Görög nagy szigma betű ","oelig":"Latin kis oe ikerbetű ","cent":"cent jel","ni":"tagként tartalmazza ","dagger":"kereszt","permil":"ezrelékjel","Omicron":"Görög nagy omikron betű ","sigma":"Görög kis szigma betű ","euro":"euro jel","Yacute":"Latin nagy Y betű éles ékezettel","thorn":"Latin kis thorn betű ","lceil":"bal szögletes zárójel felső sarok\nAPL felső keret","Ograve":"Latin nagy O betű tompa ékezettel","rarr":"jobbra mutató nyíl","nu":"Görög kis nű betű ","emsp":"m szóköz","Theta":"Görög nagy théta betű ","lArr":"balra mutató dupla nyíl","tau":"Görög kis taú betű ","aelig":"Latin kis ae betű\nLatin kis ae ikerbetű ","ccedil":"Latin kis c betű cedillel ","Ntilde":"Latin hullámvonalas nagy N betű","cong":"megközelítőleg egyenlő","Uacute":"Latin nagy U betű éles ékezettel","theta":"Görög kis théta betű ","darr":"lefelé mutató nyíl","Uuml":"Latin kétpontos nagy U betű","bdquo":"alsó 9-es dupla idézőjel","Aring":"Latin nagy A betű felül körrel\nLatin nagy A betű felső körrel","sigmaf":"Görög kis szigma betű utolsó helyen","pound":"font jel","uArr":"felfelé mutató dupla nyíl","sub":"részhalmaza","aring":"Latin kis a betű felül körrel\nLatin kis a betű felső körrel","sdot":"pont operátor","thinsp":"szűk szóköz","or":"logikai vagy\nv-alak","Eacute":"Latin nagy E betű éles ékezettel","shy":"lágy kötőjel\nfeltételes kötőjel","curren":"pénznem jel","loz":"rombusz","not":"nem jel","tilde":"kis hullám","sum":"n-tagú összegzés","spades":"fekete pikk kártyajel ","Psi":"Görög nagy pszí betű ","ndash":"n kötőjel","sup":"bővített halmaza ","atilde":"Latin hullámvonalas kis a betű","clubs":"fekete treff kártyjel\nlóhere","uuml":"Latin kétpontos kis u betű","Aacute":"Latin nagy A betű éles ékezettel","rsaquo":"szimpla jobbra mutató hegyes idézőjel","otimes":"bekarikázott x\nvektor szorzat","lfloor":"bal szögletes zárójel alsó sarok\nAPL alsó keret","zwnj":"törhető üres jel","sim":"hullám operátor\nváltakozik\nhasonló","Iota":"Görög nagy iota betű ","Iacute":"Latin nagy I betű éles ékezettel","pi":"Görög kis pí betű ","ordf":"nőnemű sorszámnév jelzése a felső indexben","frac12":"közönséges fél tört\nfél","frac14":"közönséges egynegyed tört\nnegyed","alefsym":"alef szimbólum\nelső transzfinit pozitív egész szám","bull":"pont felsorolásjel\nkis fekete kör","deg":"fok jel","ordm":"hímnemű sorszámnév jelzése a felső indexben","epsilon":"Görög kis epszilon betű","equiv":"azonos","Dagger":"dupla kereszt ","brvbar":"megszakított vonal\nmegszakított függőleges vonal","harr":"balra-jobbra mutató nyíl","ugrave":"Latin kis u betű tompa ékezettel","oslash":"Latin áthúzott kis o betű\nLatin kis o betű osztásjellel","Yuml":"Latin kétpontos nagy Y betű ","hearts":"fekete kör kártyajel\nszívalak","Xi":"Görög nagy kszí betű ","Prime":"dupla egyenes idézőjel\nmásodperc\nhüvelyk","iota":"Görög kis ióta betű ","Ccedil":"Latin nagy C betű cedillel ","Lambda":"Görög nagy lambda betű ","raquo":"jobbra mutató dupla hegyes idézőjel\njobbra mutató belső idézőjel","Phi":"Görög nagy fí betű ","prime":"szimpla egyenes idézőjel\nperc\nláb","nsub":"nem részhalmaza","copy":"copyright jel","yuml":"Latin kétpontos kis y ","Rho":"Görög nagy ró betű ","Ucirc":"Latin kalapos nagy U betű ","Kappa":"Görög nagy kappa betű ","ucirc":"Latin kalapos kis u betű ","sbquo":"alsó 9-es szimpla idézőjel","igrave":"Latin kis i betű tompa ékezettel","reg":"védjegy jel\nbejegyzett védjegy jel","infin":"végtelen","iquest":"fordított kérdőjel\nmegfordított kérdőjel","circ":"betűt módosító kalap ékezet","kappa":"Görög kis kappa betű ","lrm":"balról jobbra jel","Atilde":"Latin hullámvonalas nagy A betű","larr":"balra mutató nyíl","frac34":"közönséges háromnegyed tört\nháromnegyed","oacute":"Latin kis o betű éles ékezettel","rsquo":"jobb szimpla idézőjel","egrave":"Latin kis e betű tompa ékezettel","oline":"felső vonal\nfelülvonás","Mu":"Görög nagy mű betű ","exist":"létezik","cap":"metszet","and":"logikai és\nék","Ouml":"Latin kétpontos nagy O betű","agrave":"Latin kis a betű tompa ékezettel\nTompa ékezetes latin kis a betű","uarr":"felfelé mutató nyíl","ang":"szög","Zeta":"Görög nagy dzéta betű ","scaron":"Latin kis s betű csónakkal","Gamma":"Görög nagy gamma betű","isin":"eleme ","Auml":"Latin kétpontos nagy A betű","empty":"üres halmaz\nnull halmaz\nátmérő","gamma":"Görög kis gamma betű","para":"sorvége jel\nbekezdés jel","ge":"nagyobb vagy egyenlő","psi":"Görög kis pszí betű ","Alpha":"Görög nagy alfa betű","Nu":"Görög nagy nű betű ","ouml":"Latin kétpontos kis o betű","zeta":"Görög kis dzéta betű ","alpha":"Görög kis alfa betű","part":"részleges differenciál","auml":"Latin kétpontos kis a betű","Ugrave":"Latin nagy U betű tompa ékezettel","Oslash":"Latin áthúzott nagy O betű\nLatin nagy O betű osztásjellel","Epsilon":"Görög nagy epszilon betű","int":"integrál","Omega":"Görög nagy ómega betű ","perp":"merőleges\nortogonális","uml":"dupla ékezet\numlaut","upsilon":"Görög kis üpszilon betű ","lowast":"csillag operátor","omega":"Görög kis ómega betű ","otilde":"Latin hullámvonalas kis o betű","Egrave":"Latin nagy E betű tompa ékezettel","phi":"Görög kis fí betű ","ensp":"n szóköz","Euml":"Latin kétpontos nagy E betű","cedil":"cedill\nbalra hajló alsó hurok","laquo":"balra mutató dupla hegyes idézőjel\nbalra mutató belső idézőjel ","forall":"minden\nfordított nagy A betű","thetasym":"Görög kis théta betű szimbólum ","Agrave":"Latin nagy A betű tompa ékezettel\nTompa ékezetes latin nagy A betű","szlig":"Latin kis sharfes s\neszett","Pi":"Görög nagy pi betű ","rho":"Görög kis ró betű ","trade":"védjegy jel","Igrave":"Latin nagy I betű tompa ékezettel","minus":"mínusz jel","Beta":"Görög nagy béta betű ","Ocirc":"Latin kalapos nagy O betű ","rdquo":"jobb dupla idézőjel","Eta":"Görög nagy éta betű ","rfloor":"jobb szögletes zárójel alsó sarok","Oacute":"Latin nagy O betű éles ékezettel","euml":"Latin kétpontos kis e betű","oplus":"bekarikázott plusz jel\nközvetlen összeg","ocirc":"Latin kalapos kis o betű ","radic":"négyzetgyök\nnégyzetgyök jel","Chi":"Görög nagy khí betű ","notin":"nem eleme ","sect":"paragrafusjel","Acirc":"Latin kalapos nagy A betű ","lsquo":"bal szimpla idézőjel","beta":"Görög kis béta betű ","piv":"Görög pí szimbólum ","sup1":"1 a felső indexben\nfelső indexbe írt egyes számjegy","Scaron":"Latin nagy S betű csónakkal","sup2":"2 felső indexben\nfelső indexbe írt kettes számjegy\nnégyzetre emelés","acirc":"Latin kalapos kis a betű ","sube":"részhalmaza vagy egyenlő","sup3":"3 felső indexben\nfelső indexbe írt hármas számjegy\nköbre emelés","real":"megtört nagy R\nvalós rész szimbólum","Iuml":"Latin kétpontos nagy I betű","rang":"jobbra mutató hegyes zárójel","lsaquo":"szimpla balra mutató hegyes idézőjel","nabla":"nabla\nfordított különbség","omicron":"Görög kis omikron betű ","there4":"ezért","plusmn":"plus-mínusz jel\nplusz-vagy-mínusz jel","rceil":"jobb szögletes zárójel felső sarok","micro":"mikro jel","rArr":"jobbra mutató dupla nyíl ","Delta":"Görög nagy delta betű ","iuml":"Latin kétpontos kis i betű","Tau":"Görög nagy tau betű ","times":"szorzásjel","yacute":"Latin kis y éles ékezettel","ograve":"Latin kis o betű tompa ékezettel","delta":"Görög kis delta betű ","Ecirc":"Latin kalapos nagy E betű ","dArr":"lefelé mutató dupla nyíl","ntilde":"Latin hullámvonalas kis n betű","diams":"fekete káró káryajel","uacute":"Latin kis u betű éles ékezettel","Otilde":"Latin hullámvonalas nagy O betű","ecirc":"Latin kalapos kis e betű ","Upsilon":"Görög nagy üpszilon betű ","image":"megtört nagy I\nképzetes (imaginárius) rész","supe":"bővített halmaza vagy egyenlő","xi":"Görög kis kszí betű ","weierp":"írott nagy P\nhatványhalmaz\nWeierstrass p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Seleziona contenuto","deleteElement":"Elimina elemento","moveEnd":"Sposta il cursore per terminare","deleteContents":"Elimina contenuto","nodeActions":"Azioni ${nodeName}","selectElement":"Seleziona elemento","moveStart":"Sposta il cursore per iniziare"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/it/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Indietro","findReplace":"Mostra/Nascondi Trova/Sostituisci","replaceAll":"Tutte le occorrenze","replaceDialogText":"Occorrenze sostituite: ${0}.","replaceButton":"Sostituisci","findButton":"Trova","findLabel":"Trova:","matchCase":"Maiuscole/minuscole","replaceLabel":"Sostituisci con:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/it/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Inserisci simbolo"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/it/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Interruzione di pagina"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/Preview.js b/js/dojo/dojox/editor/plugins/nls/it/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Anteprima"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/Save.js b/js/dojo/dojox/editor/plugins/nls/it/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/Save.js
@@ -0,0 +1,1 @@
+({"save":"Salva"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Mostra elementi blocco HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/Smiley.js b/js/dojo/dojox/editor/plugins/nls/it/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"risata","emoticonCool":"figo","emoticonTongue":"linguaccia","emoticonCrying":"in lacrime","emoticonOops":"ops","emoticonFrown":"triste","emoticonAngry":"arrabbiato","emoticonShy":"timido","emoticonNo":"no","emoticonAngel":"angelo","smiley":"Inserisci emoticon","emoticonIdea":"idea","emoticonEyebrow":"sopracciglia","emoticonSmile":"sorriso","emoticonWink":"occhiolino","emoticonYes":"yes","emoticonGrin":"ghigno","emoticonGoofy":"sciocco","emoticonHalf":"metà"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/it/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Imposta","insertTableTitle":"Inserisci tabella","insertTableRowAfterLabel":"Inserisci riga dopo","center":"centro","deleteTableColumnLabel":"Elimina colonna","right":"destra","insertTableColumnBeforeLabel":"Aggiungi colonna prima","tableWidth":"Larghezza tabella:","buttonInsert":"Inserisci","default":"predefinito","align":"Allinea:","insertTableRowBeforeLabel":"Inserisci riga prima","cellSpacing":"Spaziatura celle:","pixels":"pixel","selectTableLabel":"Seleziona tabella","rows":"Righe:","modifyTableTitle":"Modifica tabella","cellPadding":"Riempimento cella:","deleteTableRowLabel":"Elimina riga","backgroundColor":"Colore sfondo:","insertTableColumnAfterLabel":"Aggiungi colonna dopo","left":"sinistra","borderThickness":"Spessore bordo","columns":"Colonne:","percent":"percento","borderColor":"Colore bordo:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/it/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/it/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/it/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"minore di o uguale a","prod":"prodotto n-ario\nsegno di prodotto","zwj":"congiuntore di larghezza zero","mdash":"trattino em","frasl":"barra obliqua di frazione","upsih":"simbolo della upsilon greca con uncino","prop":"proporzionale a","middot":"punto in mezzo\nvirgola georgiana\npunto centrale greco","hellip":"puntini di sospensione\ntre puntini di guida","eta":"lettera greca minuscola eta","iacute":"lettera latina i minuscola con accento acuto","yen":"simbolo dello yen\nsimbolo dello yuan","rlm":"segno da-destra-a-sinistra","macr":"macron\nmacron con spaziatura\nlinea orizzontale superiore\nbarra sovrapposta APL","ldquo":"virgolette doppie sinistre","Icirc":"lettera latina I maiuscola con accento circonflesso","OElig":"legatura latina OE maiuscola","hArr":"doppia freccia sinistra destra","eth":"lettera latina eth minuscola","divide":"segno di divisione","chi":"lettera greca minuscola chi","eacute":"lettera latina e minuscola con accento acuto","icirc":"lettera latina i minuscola con accento circonflesso","iexcl":"punto esclamativo capovolto","ETH":"lettera latina ETH maiuscola","acute":"accento acuto\nacuto con spaziatura","crarr":"freccia verso il basso con angolo a sinistra\nritorno a capo","mu":"lettera greca minuscola mu","AElig":"lettera latina AE maiuscola\nlegatura latina maiuscola AE","aacute":"lettera latina a minuscola con accento acuto","lambda":"lettera greca minuscola lambda","THORN":"lettera latina THORN maiuscola","asymp":"quasi uguale a\nasintotico a","fnof":"f latina minuscola con uncino\nfunzione\nfiorino","lang":"parentesi angolare sinistra","cup":"unione\ncoppa","ne":"non uguale a","Sigma":"lettera greca maiuscola sigma","oelig":"legatura latina oe minuscola","cent":"simbolo del centesimo","ni":"contiene come membro","dagger":"croce latina","permil":"segno di per mille","Omicron":"lettera greca maiuscola omicron","sigma":"lettera greca minuscola sigma","euro":"simbolo dell'euro","Yacute":"lettera latina Y maiuscola con accento acuto","thorn":"lettera latina thorn minuscola","lceil":"soffitto sinistro\ngradino in su APL","Ograve":"lettera latina O maiuscola con accento grave","rarr":"freccia verso destra","nu":"lettera greca minuscola nu","emsp":"spazio em","Theta":"lettera greca maiuscola theta","lArr":"doppia freccia verso sinistra","tau":"lettera greca minuscola tau","aelig":"lettera latina ae minuscola\nlegatura latina minuscola ae","ccedil":"lettera latina c minuscola con cediglia","Ntilde":"lettera latina N maiuscola con tilde","cong":"approssimativamente uguale a","Uacute":"lettera latina U maiuscola con accento acuto","theta":"lettera greca minuscola theta","darr":"freccia verso il basso","Uuml":"lettera latina U maiuscola con dieresi","bdquo":"virgolette doppie in basso a destra","Aring":"lettera latina A maiuscola con sormontata da anello\nlettera latina A maiuscola anellata","sigmaf":"lettera greca minuscola sigma finale","pound":"simbolo della sterlina","uArr":"doppia freccia verso l'alto","sub":"sottoinsieme di","aring":"lettera latina a minuscola sormontata da anello\nlettera latina a minuscola anellata","sdot":"operatore punto","thinsp":"spazio finissimo","or":"o logico\nvi","Eacute":"lettera latina E maiuscola con accento acuto","shy":"trattino debole\ntrattino discrezionale","curren":"simbolo di valuta","loz":"losanga","not":"simbolo di negazione","tilde":"tilde piccola","sum":"sommatoria n-aria","spades":"seme di picche nero","Psi":"lettera greca maiuscola psi","ndash":"trattino en","sup":"sovrainsieme di","atilde":"lettera latina a minuscola con tilde","clubs":"seme di fiori nero\ntrifoglio","uuml":"lettera latina u minuscola con dieresi","Aacute":"lettera latina A maiuscola con accento acuto","rsaquo":"virgoletta angolare singola rivolta a destra","otimes":"per cerchiato\nprodotto vettoriale","lfloor":"pavimento sinistro\ngradino in giù APL","zwnj":"non-congiuntore di larghezza zero","sim":"operatore tilde\nvaria con\nsimile a","Iota":"lettera greca maiuscola iota","Iacute":"lettera latina I maiuscola con accento acuto","pi":"lettera greca minuscola pi","ordf":"indicatore ordinale femminile","frac12":"frazione semplice un mezzo\nfrazione un mezzo","frac14":"frazione semplice un quarto\nfrazione un quarto","alefsym":"simbolo alef\nprimo cardinale transfinito","bull":"pallino\npiccolo cerchio nero","deg":"simbolo dei gradi","ordm":"indicatore ordinale maschile","epsilon":"lettera greca minuscola epsilon","equiv":"identico a","Dagger":"croce latina doppia","brvbar":"barra interrotta\nbarra verticale interrotta","harr":"freccia sinistra destra","ugrave":"lettera latina u minuscola con accento grave","oslash":"lettera latina o minuscola con barra obliqua\nlettera latina o minuscola barrata","Yuml":"lettera latina Y maiuscola con dieresi","hearts":"seme di cuori nero\ninnamorato","Xi":"lettera greca maiuscola xi","Prime":"doppio apice\nsecondi\npollici","iota":"lettera greca minuscola iota","Ccedil":"lettera latina C maiuscola con cediglia","Lambda":"lettera greca maiuscola lambda","raquo":"virgolette doppie angolari indicanti a destra\n guillemet indicante a destra","Phi":"lettera greca maiuscola phi","prime":"apice\nminuti\npiedi","nsub":"non un sottoinsieme di","copy":"simbolo del copyright","yuml":"lettera latina y minuscola con dieresi","Rho":"lettera greca maiuscola rho","Ucirc":"lettera latina U maiuscola con accento circonflesso","Kappa":"lettera greca maiuscola kappa","ucirc":"lettera latina u minuscola con accento circonflesso","sbquo":"virgoletta singola in basso a destra","igrave":"lettera latina i minuscola con accento grave","reg":"simbolo di registrazione\nsimbolo di marchio registrato","infin":"infinito","iquest":"punto interrogativo invertito\npunto interrogativo rovesciato","circ":"lettera modificatrice accento circonflesso","kappa":"lettera greca minuscola kappa","lrm":"segno da-sinistra-a-destra","Atilde":"lettera latina A maiuscola con tilde","larr":"freccia verso sinistra","frac34":"frazione semplice tre quarti\nfrazione tre quarti","oacute":"lettera latina o minuscola con accento acuto","rsquo":"virgoletta destra singola","egrave":"lettera latina e minuscola con accento grave","oline":"linea sopra\noverscore con spazio","Mu":"lettera greca maiuscola mu","exist":"esiste","cap":"intersezione\nberretto","and":"and logico\ncuneo","Ouml":"lettera latina O maiuscola con dieresi","agrave":"lettera latina a minuscola con accento grave\nlettera latina a minuscola grave","uarr":"freccia verso l'alto","ang":"angolo","Zeta":"lettera greca maiuscola zeta","scaron":"lettera latina s minuscola con caron","Gamma":"lettera greca maiuscola gamma","isin":"elemento di","Auml":"lettera latina A maiuscola con dieresi","empty":"insieme vuoto\ninsieme nullo\ndiametro","gamma":"lettera greca minuscola gamma","para":"simbolo pilcrow\nsimbolo di paragrafo","ge":"maggiore di o uguale a","psi":"lettera greca minuscola psi","Alpha":"lettera greca maiuscola alpha","Nu":"lettera greca maiuscola nu","ouml":"lettera latina o minuscola con dieresi","zeta":"lettera greca minuscola zeta","alpha":"lettera greca maiuscola alpha","part":"differenziale parziale","auml":"lettera latina a minuscola con dieresi","Ugrave":"lettera latina U maiuscola con accento grave","Oslash":"lettera latina O maiuscola con barra obliqua\nlettera latina O maiuscola barrata","Epsilon":"lettera greca maiuscola epsilon","int":"integrale","Omega":"lettera greca maiuscola omega","perp":"puntina in su\nortogonale a\nperpendicolare","uml":"dieresi\ndieresi con spazio","upsilon":"lettera greca minuscola upsilon","lowast":"operatore asterisco","omega":"lettera greca minuscola omega","otilde":"lettera latina o minuscola con tilde","Egrave":"lettera latina E maiuscola con accento grave","phi":"lettera greca minuscola phi","ensp":"spazio en","Euml":"lettera latina E maiuscola con dieresi","cedil":"cediglia\ncediglia con spazio","laquo":"virgolette doppie angolari indicanti a sinistra\nguillemet indicante a sinistra","forall":"per tutti","thetasym":"simbolo della lettera greca minuscola theta","Agrave":"lettera latina A maiuscola con accento grave\nlettera latina A maiuscola grave","szlig":"lettera latina s minuscola sonora\nesse-zeta","Pi":"lettera greca maiuscola pi","rho":"lettera greca minuscola rho","trade":"simbolo di marchio commerciale","Igrave":"lettera latina I maiuscola con accento grave","minus":"segno meno","Beta":"lettera greca maiuscola beta","Ocirc":"lettera latina O maiuscola con accento circonflesso","rdquo":"virgolette doppie destre","Eta":"lettera greca maiuscola eta","rfloor":"pavimento destro","Oacute":"lettera latina O maiuscola con accento acuto","euml":"lettera latina e minuscola con dieresi","oplus":"più cerchiato\nsomma diretta","ocirc":"lettera latina o minuscola con accento circonflesso","radic":"radice quadrata\nsegno di radice","Chi":"lettera greca maiuscola chi","notin":"non un elemento di","sect":"simbolo di sezione","Acirc":"lettera latina A maiuscola con accento circonflesso","lsquo":"virgoletta sinistra singola","beta":"lettera greca minuscola beta","piv":"simbolo di pi greco","sup1":"esponente uno\nnumero uno in esponente","Scaron":"lettera latina S maiuscola con caron","sup2":"esponente due\nnumero due in esponente\nal quadrato","acirc":"lettera latina a minuscola con accento circonflesso","sube":"sottoinsieme di o uguale a","sup3":"esponente tre\nnumero tre in esponente\nal cubo","real":"R maiuscola gotica\nsimbolo di elemento reale","Iuml":"lettera latina I maiuscola con dieresi","rang":"parentesi angolare destra","lsaquo":"virgoletta angolare singola rivolta a sinistra","nabla":"nabla\ndifferenza retrograda","omicron":"lettera greca minuscola omicron","there4":"pertanto","plusmn":"segno più-meno\nsegno più o meno","rceil":"soffitto destro","micro":"simbolo di micro","rArr":"doppia freccia verso destra","Delta":"lettera greca maiuscola delta","iuml":"lettera latina i minuscola con dieresi","Tau":"lettera greca maiuscola tau","times":"segno di moltiplicazione","yacute":"lettera latina y minuscola con accento acuto","ograve":"lettera latina o minuscola con accento grave","delta":"lettera greca minuscola delta","Ecirc":"lettera latina E maiuscola con accento circonflesso","dArr":"doppia freccia verso il basso","ntilde":"lettera latina n minuscola con tilde","diams":"seme di quadri nero","uacute":"lettera latina u minuscola con accento acuto","Otilde":"lettera latina O maiuscola con tilde","ecirc":"lettera latina e minuscola con accento circonflesso","Upsilon":"lettera greca maiuscola upsilon","image":"I maiuscola gotica\nelemento immaginario","supe":"sovrainsieme di o uguale a","xi":"lettera greca minuscola xi","weierp":"P maiuscola scritta a mano\ninsieme potenza\np di Weierstrass"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"内容の選択","deleteElement":"要素の削除","moveEnd":"終了するためにカーソルを移動","deleteContents":"内容の削除","nodeActions":"${nodeName} アクション","selectElement":"要素の選択","moveStart":"開始するためにカーソルを移動"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/ja/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"後方","findReplace":"検索/置換の切り替え","replaceAll":"すべてのオカレンス","replaceDialogText":"${0} 個のオカレンスを置換しました。","replaceButton":"置換","findButton":"検索","findLabel":"検索内容:","matchCase":"大/小文字を区別","replaceLabel":"次で置換:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"記号の挿入"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/ja/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"改ページ"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/Preview.js b/js/dojo/dojox/editor/plugins/nls/ja/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"プレビュー"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/Save.js b/js/dojo/dojox/editor/plugins/nls/ja/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/Save.js
@@ -0,0 +1,1 @@
+({"save":"保存"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"HTML ブロック要素の表示"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/Smiley.js b/js/dojo/dojox/editor/plugins/nls/ja/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"笑い","emoticonCool":"無愛想","emoticonTongue":"舌を出す","emoticonCrying":"泣く","emoticonOops":"おっと","emoticonFrown":"眉をひそめる","emoticonAngry":"怒り","emoticonShy":"はにかんだ","emoticonNo":"いいえ","emoticonAngel":"エンジェル","smiley":"顔文字の挿入","emoticonIdea":"アイデア","emoticonEyebrow":"眉毛","emoticonSmile":"微笑","emoticonWink":"ウィンク","emoticonYes":"はい","emoticonGrin":"笑顔","emoticonGoofy":"おろかな","emoticonHalf":"半分"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/ja/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"設定","insertTableTitle":"テーブルの挿入","insertTableRowAfterLabel":"行を後に追加","center":"中央","deleteTableColumnLabel":"列の削除","right":"右","insertTableColumnBeforeLabel":"列を前に追加","tableWidth":"テーブルの幅:","buttonInsert":"挿入","default":"default","align":"位置合わせ","insertTableRowBeforeLabel":"行を前に追加","cellSpacing":"セル間隔:","pixels":"ピクセル","selectTableLabel":"テーブルの選択","rows":"行","modifyTableTitle":"テーブルの変更","cellPadding":"セル余白:","deleteTableRowLabel":"行の削除","backgroundColor":"背景色:","insertTableColumnAfterLabel":"列を後に追加","left":"左","borderThickness":"ボーダー線幅","columns":"列","percent":"パーセント","borderColor":"ボーダー色:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ja/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/ja/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ja/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"小さいか等しい","prod":"n 乗\n積符号","zwj":"結合ありで幅ゼロ","mdash":"em ダッシュ","frasl":"分数のスラッシュ","upsih":"ギリシャ語のフック記号付きユプシロン","prop":"比例","middot":"中間ドット\nグルジア語のコンマ\nギリシャ語の中間ドット","hellip":"水平省略符号\n3 つのドット・リーダー","eta":"ギリシャ語の小文字イータ","iacute":"ラテン語の揚音付き小文字 i","yen":"円記号\n元記号","rlm":"右から左へのマーク","macr":"長音記号\n間隔長音記号\n上線\nAPL 上線","ldquo":"左二重引用符","Icirc":"ラテン語の曲折アクセント記号付き大文字 I","OElig":"ラテン語の大文字の合字 OE","hArr":"左右二重矢印","eth":"ラテン語の小文字 eth","divide":"除算記号","chi":"ギリシャ語の小文字カイ","eacute":"ラテン語の揚音付き小文字 e","icirc":"ラテン語の曲折アクセント記号付き小文字 i","iexcl":"逆感嘆符","ETH":"ラテン語の大文字 ETH","acute":"揚音アクセント\n間隔揚音","crarr":"角が左向きの下矢印復帰","mu":"ギリシャ語の小文字ミュー","AElig":"ラテン語の大文字 AE\nラテン語の大文字の合字 AE","aacute":"ラテン語の揚音付き小文字 a","lambda":"ギリシャ語の小文字ラムダ","THORN":"ラテン語の大文字 THORN","asymp":"ほぼ等しい\n漸近","fnof":"ラテン語のフック付き小文字 f\n関数\nフロリン","lang":"左角括弧","cup":"和集合カップ形","ne":"等しくない","Sigma":"ギリシャ語の大文字シグマ","oelig":"ラテン語の小文字の合字 oe","cent":"セント記号","ni":"メンバーとして含まれる","dagger":"剣標","permil":"パーミル記号","Omicron":"ギリシャ語の大文字オミクロン","sigma":"ギリシャ語の小文字シグマ","euro":"ユーロ記号","Yacute":"ラテン語の揚音付き大文字 Y","thorn":"ラテン語の小文字 thorn","lceil":"左上限\nAPL 上限","Ograve":"ラテン語の抑音付き大文字 O","rarr":"右矢印","nu":"ギリシャ語の小文字ニュー","emsp":"em スペース","Theta":"ギリシャ語の大文字シータ","lArr":"左二重矢印","tau":"ギリシャ語の小文字タウ","aelig":"ラテン語の小文字 ae\nラテン語の小文字の合字 ae","ccedil":"ラテン語のセディーユ付き小文字 c","Ntilde":"ラテン語の波形記号付き大文字 N","cong":"おおよそ等しい","Uacute":"ラテン語の揚音付き大文字 U","theta":"ギリシャ語の小文字シータ","darr":"下矢印","Uuml":"ラテン語の分音符号付き大文字 U","bdquo":"二重下付き右引用符","Aring":"ラテン語の上リング付き大文字 A\nラテン語のリング付き大文字 A","sigmaf":"ギリシャ語の小文字ファイナルシグマ","pound":"ポンド記号","uArr":"上二重矢印","sub":"左辺は右辺の部分集合","aring":"ラテン語の上リング付き小文字 a\nラテン語のリング付き小文字 a","sdot":"ドット演算子","thinsp":"薄いスペース","or":"論理和\nV 字形","Eacute":"ラテン語の揚音付き大文字 E","shy":"ソフト・ハイフン\n任意ハイフン","curren":"通貨記号","loz":"ひし形","not":"否定記号","tilde":"小文字の波形記号","sum":"n 回加算","spades":"トランプの黒のスペードの組","Psi":"ギリシャ語の大文字プシー","ndash":"en ダッシュ","sup":"左辺は右辺を包含する","atilde":"ラテン語の波形記号付き小文字 a","clubs":"トランプの黒のクラブの組\nシャムロック","uuml":"ラテン語の分音符号付き小文字 u","Aacute":"ラテン語の揚音付き大文字 A","rsaquo":"単一右角引用符","otimes":"ベクトル積\nベクトル積","lfloor":"左下限\nAPL 下限","zwnj":"結合なしで幅ゼロ","sim":"チルド演算子\n多様性\n類似性","Iota":"ギリシャ語の大文字イオタ","Iacute":"ラテン語の揚音付き大文字 I","pi":"ギリシャ語の小文字パイ","ordf":"女性序数標識","frac12":"分数の 2 分の 1\n分数の 2 分の 1","frac14":"分数の 4 分の 1\n分数の 4 分の 1","alefsym":"アレフ記号\n1 番目の超限基数","bull":"黒丸\n黒い小さな円","deg":"角度記号","ordm":"男性序数標識","epsilon":"ギリシャ語の小文字イプシロン","equiv":"同一","Dagger":"二重剣標","brvbar":"破線バー\n破線垂直バー","harr":"左右矢印","ugrave":"ラテン語の抑音付き小文字 u","oslash":"ラテン語の斜線付き小文字 o\nラテン語のスラッシュ付き小文字 o","Yuml":"ラテン語の分音符号付き大文字 Y","hearts":"トランプの黒のハートの組\nバレンタイン","Xi":"ギリシャ語の大文字クシー","Prime":"二重プライム記号\n秒\nインチ","iota":"ギリシャ語の小文字イオタ","Ccedil":"ラテン語のセディーユ付き大文字 C","Lambda":"ギリシャ語の大文字ラムダ","raquo":"右二重角引用符\n右ギュメ","Phi":"ギリシャ語の大文字ファイ","prime":"プライム記号\n分\nフィート","nsub":"部分集合でない","copy":"著作権記号","yuml":"ラテン語の分音符号付き小文字 y","Rho":"ギリシャ語の大文字ロー","Ucirc":"ラテン語の曲折アクセント記号付き大文字 U","Kappa":"ギリシャ語の大文字カッパ","ucirc":"ラテン語の曲折アクセント記号付き小文字 u","sbquo":"単一下付き右引用符","igrave":"ラテン語の抑音付き小文字 i","reg":"登録記号\n登録商標","infin":"無限","iquest":"逆疑問符\n反転疑問符","circ":"修飾文字の曲折アクセント記号アクセント","kappa":"ギリシャ語の小文字カッパ","lrm":"左から右へのマーク","Atilde":"ラテン語の波形記号付き大文字 A","larr":"左矢印","frac34":"分数の 4 分の 3\n分数の 4 分の 3","oacute":"ラテン語の揚音付き小文字 o","rsquo":"右単一引用符","egrave":"ラテン語の抑音付き小文字 e","oline":"上線\n間隔上線","Mu":"ギリシャ語の大文字ミュー","exist":"存在","cap":"集合の積\nキャップ形","and":"論理積\nくさび形","Ouml":"ラテン語の分音符号付き大文字 O","agrave":"ラテン語の抑音付き小文字 a\nラテン語の抑音付き小文字 a","uarr":"上矢印","ang":"角度","Zeta":"ギリシャ語の大文字ゼータ","scaron":"ラテン語のキャロン付き小文字 s","Gamma":"ギリシャ語の大文字ガンマ","isin":"右辺の要素である","Auml":"ラテン語の分音符号付き大文字 A","empty":"空集合\nヌル集合\n直径","gamma":"ギリシャ語の小文字ガンマ","para":"段落記号\n段落記号","ge":"大きいか等しい","psi":"ギリシャ語の小文字プシー","Alpha":"ギリシャ語の大文字アルファ","Nu":"ギリシャ語の大文字ニュー","ouml":"ラテン語の分音符号付き小文字 o","zeta":"ギリシャ語の小文字ゼータ","alpha":"ギリシャ語の小文字アルファ","part":"偏微分","auml":"ラテン語の分音符号付き小文字 a","Ugrave":"ラテン語の抑音付き大文字 U","Oslash":"ラテン語の斜線付き大文字 O\nラテン語のスラッシュ付き大文字 O","Epsilon":"ギリシャ語の大文字イプシロン","int":"積分","Omega":"ギリシャ語の大文字オメガ","perp":"直角\n直交\n垂直","uml":"分音符号\n間隔分音符号","upsilon":"ギリシャ語の小文字ユプシロン","lowast":"アスタリスク演算子","omega":"ギリシャ語の小文字オメガ","otilde":"ラテン語の波形記号付き小文字 o","Egrave":"ラテン語の抑音付き大文字 E","phi":"ギリシャ語の小文字ファイ","ensp":"en スペース","Euml":"ラテン語の分音符号付き大文字 E","cedil":"セディーユ\n間隔セディーユ","laquo":"左二重角引用符\n左ギュメ","forall":"すべてについて","thetasym":"ギリシャ語の小文字シータ記号","Agrave":"ラテン語の抑音付き大文字 A\nラテン語の抑音付き大文字 A","szlig":"ラテン語の小文字のシャープ s\n s 字形","Pi":"ギリシャ語の大文字パイ","rho":"ギリシャ語の小文字ロー","trade":"商標","Igrave":"ラテン語の抑音付き大文字 I","minus":"減算記号","Beta":"ギリシャ語の大文字ベータ","Ocirc":"ラテン語の曲折アクセント記号付き大文字 O","rdquo":"右二重引用符","Eta":"ギリシャ語の大文字イータ","rfloor":"右下限","Oacute":"ラテン語の揚音付き大文字 O","euml":"ラテン語の分音符号付き小文字 e","oplus":"ベクトル和\n直和","ocirc":"ラテン語の曲折アクセント記号付き小文字 o","radic":"平方根\nルート記号","Chi":"ギリシャ語の大文字カイ","notin":"右辺の要素でない","sect":"セクション記号","Acirc":"ラテン語の曲折アクセント記号付き大文字 A","lsquo":"左単一引用符","beta":"ギリシャ語の小文字ベータ","piv":"ギリシャ語のパイ記号","sup1":"上付き文字 1\n上付き文字数字 1","Scaron":"ラテン語のキャロン付き大文字 S","sup2":"上付き文字 2\n上付き文字数字 2\n平方","acirc":"ラテン語の曲折アクセント記号付き小文字 a","sube":"部分集合または等しい","sup3":"上付き文字 3\n上付き文字数字 3\n立方","real":"ドイツ字体の大文字 R\n実数部記号","Iuml":"ラテン語の分音符号付き大文字 I","rang":"右角括弧","lsaquo":"単一左角引用符","nabla":"ナブラ\n後方の差分","omicron":"ギリシャ語の小文字オミクロン","there4":"したがって","plusmn":"正符号\n正または負符号","rceil":"右上限","micro":"マイクロ記号","rArr":"右二重矢印","Delta":"ギリシャ語の大文字デルタ","iuml":"ラテン語の分音符号付き小文字 i","Tau":"ギリシャ語の大文字タウ","times":"乗算記号","yacute":"ラテン語の揚音付き小文字 y","ograve":"ラテン語の抑音付き小文字 o","delta":"ギリシャ語の小文字デルタ","Ecirc":"ラテン語の曲折アクセント記号付き大文字 E","dArr":"下二重矢印","ntilde":"ラテン語の波形記号付き小文字 n","diams":"トランプの黒のダイヤモンドの組","uacute":"ラテン語の揚音付き小文字 u","Otilde":"ラテン語の波形記号付き大文字 O","ecirc":"ラテン語の曲折アクセント記号付き小文字 e","Upsilon":"ギリシャ語の大文字ユプシロン","image":"ドイツ字体の大文字 I\n虚数部","supe":"包含集合または等しい","xi":"ギリシャ語の小文字クシー","weierp":"添え字の大文字 P\n累乗集合\nWeierstrass p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"컨텐츠 선택","deleteElement":"요소 삭제","moveEnd":"커서를 이동하여 종료","deleteContents":"컨텐츠 삭제","nodeActions":"${nodeName} 조치","selectElement":"요소 선택","moveStart":"커서를 이동하여 시작"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/ko/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"뒤로","findReplace":"토글 찾기/바꾸기","replaceAll":"모두 바꾸기","replaceDialogText":"${0}개를 바꿨습니다.","replaceButton":"바꾸기","findButton":"찾기","findLabel":"찾을 문자열:","matchCase":"대소문자 일치","replaceLabel":"바꿀 대상:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"기호 삽입"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/ko/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"페이지 나누기"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/Preview.js b/js/dojo/dojox/editor/plugins/nls/ko/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"미리보기"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/Save.js b/js/dojo/dojox/editor/plugins/nls/ko/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/Save.js
@@ -0,0 +1,1 @@
+({"save":"저장"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"HTML 블록 요소 표시"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/Smiley.js b/js/dojo/dojox/editor/plugins/nls/ko/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"하하","emoticonCool":"멋진데","emoticonTongue":"메롱","emoticonCrying":"울음","emoticonOops":"어머나","emoticonFrown":"불만","emoticonAngry":"화남","emoticonShy":"부끄러움","emoticonNo":"아니오","emoticonAngel":"천사","smiley":"이모티콘 삽입","emoticonIdea":"아이디어","emoticonEyebrow":"글쎄","emoticonSmile":"미소","emoticonWink":"윙크","emoticonYes":"예","emoticonGrin":"씨익","emoticonGoofy":"바보","emoticonHalf":"고민 중"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/ko/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"설정","insertTableTitle":"테이블 삽입","insertTableRowAfterLabel":"사후 행 추가","center":"가운데","deleteTableColumnLabel":"열 삭제","right":"오른쪽","insertTableColumnBeforeLabel":"사전 열 추가","tableWidth":"테이블 너비:","buttonInsert":"삽입","default":"기본값","align":"맞추기:","insertTableRowBeforeLabel":"사전 행 추가","cellSpacing":"셀 간격:","pixels":"픽셀","selectTableLabel":"테이블 선택","rows":"행:","modifyTableTitle":"테이블 수정","cellPadding":"셀 채우기:","deleteTableRowLabel":"행 삭제","backgroundColor":"배경색:","insertTableColumnAfterLabel":"사후 열 추가","left":"왼쪽","borderThickness":"테두리 굵기","columns":"열:","percent":"백분율","borderColor":"테두리 색:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ko/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/ko/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ko/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"적거나 같다","prod":"n-ary product\n결과 기호","zwj":"제로 너비 조이너","mdash":"em 대시","frasl":"분수 사선","upsih":"그리스 upsilon에 고리 기호","prop":"비례","middot":"중앙 점\n중앙 점\n중앙 점","hellip":"수평 세 점\n수평 세 점","eta":"그리스소문자 eta","iacute":"라틴소문자 i 액센트","yen":"엔화 기호\n엔화 기호","rlm":"오른쪽에서 왼쪽으로 표시","macr":"장음 기호\n장음 기호\n장음 기호\n장음 기호","ldquo":"왼쪽 이중 따옴표","Icirc":"라틴대문자 I 위 꺾음 표시","OElig":"라틴대문자 ligature OE","hArr":"좌우 이중 화살표","eth":"라틴소문자 eth","divide":"나눗셈 기호","chi":"그리스소문자 chi","eacute":"라틴소문자 e 위 액센트","icirc":"라틴소문자 i 위 꺾음 표시","iexcl":"거꾸로 느낌표","ETH":"라틴대문자 ETH","acute":"양음 액센트\n양음 액센트","crarr":"캐리지 리턴\n캐리지 리턴]","mu":"그리스소문자 mu","AElig":"라틴대문자 AE\n라틴대문자 AE","aacute":"라틴소문자 a 위 액센트","lambda":"그리스소문자 lambda","THORN":"라틴대문자 THORN","asymp":"거의 같다\n거의 같다","fnof":"라틴소문자 f에 고리 첨부\n라틴소문자 f에 고리 첨부\n라틴소문자 f에 고리 첨부","lang":"왼쪽 열린 각도","cup":"유니온\n컵","ne":"같지 않다","Sigma":"그리스대문자 sigma","oelig":"라틴소문자 ligature oe","cent":"센트 기호","ni":"멤버로 포함","dagger":"dagger","permil":"퍼밀 기호","Omicron":"그리스대문자 omicron","sigma":"그리스소문자 sigma","euro":"euro 기호","Yacute":"라틴대문자 Y 위 액센트","thorn":"라틴소문자 thorn","lceil":"왼쪽 씰링\nAPL 업스타일","Ograve":"라틴대문자 O 위 역액센트","rarr":"오른쪽 화살표","nu":"그리스소문자 nu","emsp":"em 공간","Theta":"그리스대문자 theta","lArr":"왼쪽 이중 화살표","tau":"그리스소문자 tau","aelig":"라틴소문자 ae\n라틴소문자 ae","ccedil":"라틴소문자 c 갈고리형 부호","Ntilde":"라틴대문자 N 위 물결 표시","cong":"대략 같다","Uacute":"라틴대문자 U 위 액센트","theta":"그리스소문자 theta","darr":"아래쪽 화살표","Uuml":"라틴대문자 U 위 두점 표시","bdquo":"이중 바닥 따옴표","Aring":"라틴대문자 A 위 원 표시\n라틴대문자 A 위 원 표시","sigmaf":"그리스소문자 final sigma","pound":"파운드 기호","uArr":"위쪽 이중 화살표","sub":"부분 집합","aring":"라틴소문자 a 위 원 표시\n라틴소문자 a 위 원 표시","sdot":"도트 연산자","thinsp":"씬 공간","or":"논리적 or\nvee","Eacute":"라틴대문자 E 위 액센트","shy":"부드러운 하이픈\n부드러운 하이픈","curren":"통화 기호","loz":"마름모","not":"not 기호","tilde":"소문자 위 물결 표시","sum":"n-ary 합","spades":"블랙 스페이드","Psi":"그리스대문자 psi","ndash":"en 대시 ","sup":"상위 집합","atilde":"라틴소문자 a 위 물결 표시","clubs":"블랙 크로버\n블랙 크로버","uuml":"라틴소문자 u 위 두점 표시","Aacute":"라틴대문자 A 위 액센트","rsaquo":"단일 오른쪽으로 각 따옴","otimes":"circled times\nvector product","lfloor":"왼쪽 플로어\nAPL 다운스타일","zwnj":"제로 너비 비조이너","sim":"물결 표시\n물결 표시\n유사함","Iota":"그리스대문자 iota","Iacute":"라틴대문자 I 위 액센트","pi":"그리스소문자 pi","ordf":"줄 위의 소문자 a","frac12":"이분의 일\n이분의 일","frac14":"사분의 일\n사분의 일","alefsym":"alef 기호\nalef 기호","bull":"검은 원\n검은 원","deg":"도 기호","ordm":"줄 위의 작은 원","epsilon":"그리스소문자 epsilon","equiv":"합동, 같다","Dagger":"이중 dagger","brvbar":"수직 바\n수직 바","harr":"좌우 화살표","ugrave":"라틴소문자 u 위 역액센트","oslash":"라틴소문자 o 슬래시 첨부\n라틴소문자 o 슬래시 첨부","Yuml":"라틴대문자 Y 위 두점 표시","hearts":"블랙 하트\n블랙 하트","Xi":"그리스대문자 xi","Prime":"이중 프라임\n초\n인치","iota":"그리스소문자 iota","Ccedil":"라틴대문자 C 갈고리형 부호","Lambda":"그리스대문자 lambda","raquo":"이중 꺾어 닫음\n이중 꺾어 닫음","Phi":"그리스대문자 phi","prime":"프라임\n분\n피트","nsub":"부분 집합이 아님","copy":"저작권","yuml":"라틴소문자 y 위 두점 표시","Rho":"그리스대문자 rho","Ucirc":"라틴대문자 U 위 꺾음 표시","Kappa":"그리스대문자 kappa","ucirc":"라틴소문자 u 위 꺾음 표시","sbquo":"단일 바닥 따옴표","igrave":"라틴소문자 i 위 역액센트","reg":"등록 상표 기호\n등록 상표 기호","infin":"무한대","iquest":"거꾸로 물음표\n거꾸로 물음표","circ":"위 꺾기","kappa":"그리스소문자 kappa","lrm":"왼쪽에서 오른쪽으로 표시","Atilde":"라틴대문자 A 위 물결 표시","larr":"왼쪽 화살표","frac34":"사분의 삼\n사분의 삼","oacute":"라틴소문자 o 위 액센트","rsquo":"오른쪽 단일 따옴표","egrave":"라틴소문자 e 위 역액센트","oline":"윗 줄\n윗 줄","Mu":"그리스대문자 mu","exist":"존재","cap":"inter 항목\n모자","and":"논리적 and\nwedge","Ouml":"라틴대문자 O 위 두점 표시","agrave":"라틴소문자 a 위 역액센트\n라틴소문자 a 위 역액센트","uarr":"위쪽 화살표","ang":"각도","Zeta":"그리스대문자 zeta","scaron":"라틴소문자 s 위 v 표","Gamma":"그리스대문자 gamma","isin":"..의 요소","Auml":"라틴대문자 A 위 두점 표시","empty":"없음\n널\n직경","gamma":"그리스소문자 gamma","para":"문단 기호\n문단 기호","ge":"크거나 같다","psi":"그리스소문자 psi","Alpha":"그리스대문자 alpha","Nu":"그리스대문자 nu","ouml":"라틴소문자 o 위 두점 표시","zeta":"그리스소문자 zeta","alpha":"그리스소문자 alpha","part":"부분적으로 다름","auml":"라틴소문자 a 위 두점 표시","Ugrave":"라틴대문자 U 위 역액센트","Oslash":"라틴대문자 O 슬래시 첨부","Epsilon":"그리스대문자 epsilon","int":"인티그랄","Omega":"그리스대문자 omega","perp":"수직\n수직\n수직","uml":"두점 표시\n두점 표시","upsilon":"그리스소문자 upsilon","lowast":"별표 연산자","omega":"그리스소문자 omega","otilde":"라틴소문자 o 위 물결 표시","Egrave":"라틴대문자 E 위 역액센트","phi":"그리스소문자 phi","ensp":"en 공간","Euml":"라틴대문자 E 위 두점 표시","cedil":"갈고리형 부호\n갈고리형 부호","laquo":"이중 꺾어 열음\n이중 꺾어 열음","forall":"거꾸로 A","thetasym":"그리스소문자 theta symbol","Agrave":"라틴대문자 A 위 역액센트\n라틴대문자 A 위 역액센트","szlig":"라틴소문자 sharp\n라틴소문자 sharp","Pi":"그리스대문자 pi","rho":"그리스소문자 rho","trade":"TM(trade mark) 기호","Igrave":"라틴대문자 I 위 역액센트","minus":"마이너스 기호","Beta":"그리스대문자 beta","Ocirc":"라틴대문자 O 위 꺾음 표시","rdquo":"오른쪽 이중 따옴표","Eta":"그리스대문자 eta","rfloor":"오른쪽 플로어","Oacute":"라틴대문자 O 위 액센트","euml":"라틴소문자 e 위 두점 표시","oplus":"circled plus\ndirect sum","ocirc":"라틴소문자 o 위 꺾음 표시","radic":"제곱근 기호\n근호","Chi":"그리스대문자 chi","notin":"..의 요소가 아님","sect":"섹션 기호","Acirc":"라틴대문자 A 위 꺾음 표시","lsquo":"왼쪽 단일 따옴표","beta":"그리스소문자 beta","piv":"그리스 pi symbol","sup1":"위첨자 1\n위첨자 1","Scaron":"라틴대문자 S 위 v 표 ","sup2":"위첨자 2\n위첨자 2\n위첨자 2","acirc":"라틴소문자 a 위 꺾음 표시","sube":"부분 집합이거나 같다","sup3":"위첨자 3\n위첨자 3\n위첨자 3","real":"검정 글자 대문자 R\n검정 글자 대문자 R","Iuml":"라틴대문자 I 위 두점 표시","rang":"오른쪽 열린 각도","lsaquo":"단일 왼쪽으로 각 따옴","nabla":"역 삼각형\n역 삼각형","omicron":"그리스소문자 omicron","there4":"따라서","plusmn":"플러스 마이너스\n플러스 마이너스","rceil":"오른쪽 씰링","micro":"마이크로 기호","rArr":"오른쪽 이중 화살표","Delta":"그리스대문자 delta","iuml":"라틴소문자 i 위 두점 표시","Tau":"그리스대문자 tau","times":"곱셈 기호","yacute":"라틴소문자 y 위 액센트","ograve":"라틴소문자 o 위 역액센트","delta":"그리스소문자 delta","Ecirc":"라틴대문자 E 위 꺾음 표시","dArr":"아래쪽 이중 화살표","ntilde":"라틴소문자 n 위 물결 표시","diams":"블랙 다이아몬드","uacute":"라틴소문자 u 위 액센트","Otilde":"라틴대문자 O 위 물결 표시","ecirc":"라틴소문자 e 위 꺾음 표시","Upsilon":"그리스대문자 upsilon","image":"검정 글자 대문자 I\n검정 글자 대문자 I","supe":"상위 집합이거나 같다","xi":"그리스소문자 xi","weierp":"script 대문자 P\nscript 대문자 P\nscript 대문자 P"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"less-than or equal to","prod":"n-ary product\nproduct sign","zwj":"zero width joiner","mdash":"em dash","frasl":"fraction slash","upsih":"Greek upsilon with hook symbol","prop":"proportional to","middot":"middle dot\nGeorgian comma\nGreek middle dot","hellip":"horizontal ellipsis\nthree dot leader","eta":"Greek small letter eta","iacute":"Latin small letter i with acute","yen":"yen sign\nyuan sign","rlm":"right-to-left mark","macr":"macron\nspacing macron\noverline\nAPL overbar","ldquo":"left double quotation mark","Icirc":"Latin capital letter I with circumflex","OElig":"Latin capital ligature OE","hArr":"left right double arrow","eth":"Latin small letter eth","divide":"division sign","chi":"Greek small letter chi","eacute":"Latin small letter e with acute","icirc":"Latin small letter i with circumflex","iexcl":"inverted exclamation mark","ETH":"Latin capital letter ETH","acute":"acute accent\nspacing acute","crarr":"downwards arrow with corner leftwards\ncarriage return","mu":"Greek small letter mu","AElig":"Latin capital letter AE\nLatin capital ligature AE","aacute":"Latin small letter a with acute","lambda":"Greek small letter lambda","THORN":"Latin capital letter THORN","asymp":"almost equal to\nasymptotic to","fnof":"Latin small f with hook\nfunction\nflorin","lang":"left-pointing angle bracket","cup":"union\ncup","ne":"not equal to","Sigma":"Greek capital letter sigma","oelig":"Latin small ligature oe","cent":"cent sign","ni":"contains as member","dagger":"dagger","permil":"per mille sign","Omicron":"Greek capital letter omicron","sigma":"Greek small letter sigma","euro":"euro sign","Yacute":"Latin capital letter Y with acute","thorn":"Latin small letter thorn","lceil":"left ceiling\nAPL upstile","Ograve":"Latin capital letter O with grave","rarr":"rightwards arrow","nu":"Greek small letter nu","emsp":"em space","Theta":"Greek capital letter theta","lArr":"leftwards double arrow","tau":"Greek small letter tau","aelig":"Latin small letter ae\nLatin small ligature ae","ccedil":"Latin small letter c with cedilla","Ntilde":"Latin capital letter N with tilde","cong":"approximately equal to","Uacute":"Latin capital letter U with acute","theta":"Greek small letter theta","darr":"downwards arrow","Uuml":"Latin capital letter U with diaeresis","bdquo":"double low-9 quotation mark","Aring":"Latin capital letter A with ring above\nLatin capital letter A ring","sigmaf":"Greek small letter final sigma","pound":"pound sign","uArr":"upwards double arrow","sub":"subset of","aring":"Latin small letter a with ring above\nLatin small letter a ring","sdot":"dot operator","thinsp":"thin space","or":"logical or\nvee","Eacute":"Latin capital letter E with acute","shy":"soft hyphen\ndiscretionary hyphen","curren":"currency sign","loz":"lozenge","not":"not sign","tilde":"small tilde","sum":"n-ary sumation","spades":"black spade suit","Psi":"Greek capital letter psi","ndash":"en dash","sup":"superset of","atilde":"Latin small letter a with tilde","clubs":"black club suit\nshamrock","uuml":"Latin small letter u with diaeresis","Aacute":"Latin capital letter A with acute","rsaquo":"single right-pointing angle quotation mark","otimes":"circled times\nvector product","lfloor":"left floor\nAPL downstile","zwnj":"zero width non-joiner","sim":"tilde operator\nvaries with\nsimilar to","Iota":"Greek capital letter iota","Iacute":"Latin capital letter I with acute","pi":"Greek small letter pi","ordf":"feminine ordinal indicator","frac12":"vulgar fraction one half\nfraction one half","frac14":"vulgar fraction one quarter\nfraction one quarter","alefsym":"alef symbol\nfirst transfinite cardinal","bull":"bullet\nblack small circle","deg":"degree sign","ordm":"masculine ordinal indicator","epsilon":"Greek small letter epsilon","equiv":"identical to","Dagger":"double dagger","brvbar":"broken bar\nbroken vertical bar","harr":"left right arrow","ugrave":"Latin small letter u with grave","oslash":"Latin small letter o with stroke\nLatin small letter o slash","Yuml":"Latin capital letter Y with diaeresis","hearts":"black heart suit\nvalentine","Xi":"Greek capital letter xi","Prime":"double prime\nseconds\ninches","iota":"Greek small letter iota","Ccedil":"Latin capital letter C with cedilla","Lambda":"Greek capital letter lambda","raquo":"right-pointing double angle quotation mark\nright pointing guillemet","Phi":"Greek capital letter phi","prime":"prime\nminutes\nfeet","nsub":"not a subset of","copy":"copyright sign","yuml":"Latin small letter y with diaeresis","Rho":"Greek capital letter rho","Ucirc":"Latin capital letter U with circumflex","Kappa":"Greek capital letter kappa","ucirc":"Latin small letter u with circumflex","sbquo":"single low-9 quotation mark","igrave":"Latin small letter i with grave","reg":"registered sign\nregistered trade mark sign","infin":"infinity","iquest":"inverted question mark\nturned question mark","circ":"modifier letter circumflex accent","kappa":"Greek small letter kappa","lrm":"left-to-right mark","Atilde":"Latin capital letter A with tilde","larr":"leftwards arrow","frac34":"vulgar fraction three quarters\nfraction three quarters","oacute":"Latin small letter o with acute","rsquo":"right single quotation mark","egrave":"Latin small letter e with grave","oline":"overline\nspacing overscore","Mu":"Greek capital letter mu","exist":"there exists","cap":"intersection\ncap","and":"logical and\nwedge","Ouml":"Latin capital letter O with diaeresis","agrave":"Latin small letter a with grave\nLatin small letter a grave","uarr":"upwards arrow","ang":"angle","Zeta":"Greek capital letter zeta","scaron":"Latin small letter s with caron","Gamma":"Greek capital letter gamma","isin":"element of","Auml":"Latin capital letter A with diaeresis","empty":"empty set\nnull set\ndiameter","gamma":"Greek small letter gamma","para":"pilcrow sign\nparagraph sign","ge":"greater-than or equal to","psi":"Greek small letter psi","Alpha":"Greek capital letter alpha","Nu":"Greek capital letter nu","ouml":"Latin small letter o with diaeresis","zeta":"Greek small letter zeta","alpha":"Greek small letter alpha","part":"partial differential","auml":"Latin small letter a with diaeresis","Ugrave":"Latin capital letter U with grave","Oslash":"Latin capital letter O with stroke\nLatin capital letter O slash","Epsilon":"Greek capital letter epsilon","int":"integral","Omega":"Greek capital letter omega","perp":"up tack\northogonal to\nperpendicular","uml":"diaeresis\nspacing diaeresis","upsilon":"Greek small letter upsilon","lowast":"asterisk operator","omega":"Greek small letter omega","otilde":"Latin small letter o with tilde","Egrave":"Latin capital letter E with grave","phi":"Greek small letter phi","ensp":"en space","Euml":"Latin capital letter E with diaeresis","cedil":"cedilla\nspacing cedilla","laquo":"left-pointing double angle quotation mark\nleft pointing guillemet","forall":"for all","thetasym":"Greek small letter theta symbol","Agrave":"Latin capital letter A with grave\nLatin capital letter A grave","szlig":"Latin small letter sharp s\ness-zed","Pi":"Greek capital letter pi","rho":"Greek small letter rho","trade":"trade mark sign","Igrave":"Latin capital letter I with grave","minus":"minus sign","Beta":"Greek capital letter beta","Ocirc":"Latin capital letter O with circumflex","rdquo":"right double quotation mark","Eta":"Greek capital letter eta","rfloor":"right floor","Oacute":"Latin capital letter O with acute","euml":"Latin small letter e with diaeresis","oplus":"circled plus\ndirect sum","ocirc":"Latin small letter o with circumflex","radic":"square root\nradical sign","Chi":"Greek capital letter chi","notin":"not an element of","sect":"section sign","Acirc":"Latin capital letter A with circumflex","lsquo":"left single quotation mark","beta":"Greek small letter beta","piv":"Greek pi symbol","sup1":"superscript one\nsuperscript digit one","Scaron":"Latin capital letter S with caron","sup2":"superscript two\nsuperscript digit two\nsquared","acirc":"Latin small letter a with circumflex","sube":"subset of or equal to","sup3":"superscript three\nsuperscript digit three\ncubed","real":"blackletter capital R\nreal part symbol","Iuml":"Latin capital letter I with diaeresis","rang":"right-pointing angle bracket","lsaquo":"single left-pointing angle quotation mark","nabla":"nabla\nbackward difference","omicron":"Greek small letter omicron","there4":"therefore","plusmn":"plus-minus sign\nplus-or-minus sign","rceil":"right ceiling","micro":"micro sign","rArr":"rightwards double arrow","Delta":"Greek capital letter delta","iuml":"Latin small letter i with diaeresis","Tau":"Greek capital letter tau","times":"multiplication sign","yacute":"Latin small letter y with acute","ograve":"Latin small letter o with grave","delta":"Greek small letter delta","Ecirc":"Latin capital letter E with circumflex","dArr":"downwards double arrow","ntilde":"Latin small letter n with tilde","diams":"black diamond suit","uacute":"Latin small letter u with acute","Otilde":"Latin capital letter O with tilde","ecirc":"Latin small letter e with circumflex","Upsilon":"Greek capital letter upsilon","image":"blackletter capital I\nimaginary part","supe":"superset of or equal to","xi":"Greek small letter xi","weierp":"script capital P\npower set\nWeierstrass p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/nb/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/nb/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/nb/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Definer","insertTableTitle":"Sett inn tabell","insertTableRowAfterLabel":"Legg til rad etter","center":"midtstill","deleteTableColumnLabel":"Slett kolonne","right":"høyre","insertTableColumnBeforeLabel":"Legg til kolonne foran","tableWidth":"Tabellbredde:","buttonInsert":"Sett inn","default":"standard","align":"Juster:","insertTableRowBeforeLabel":"Legg til rad foran","cellSpacing":"Celleavstand:","pixels":"piksler","selectTableLabel":"Velg tabell","rows":"Rader:","modifyTableTitle":"Endre tabell","cellPadding":"Celleutfylling:","deleteTableRowLabel":"Slett rad","backgroundColor":"Bakgrunnsfarge:","insertTableColumnAfterLabel":"Legg til kolonne etter","left":"venstre","borderThickness":"Kanttykkelse","columns":"Kolonner:","percent":"prosent","borderColor":"Kantlinjefarge:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/nl/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/nl/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/nl/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Instellen","insertTableTitle":"Tabel invoegen","insertTableRowAfterLabel":"Rij onder toevoegen","center":"gecentreerd","deleteTableColumnLabel":"Kolom wissen","right":"rechts","insertTableColumnBeforeLabel":"Kolom voor toevoegen","tableWidth":"Tabelbreedte:","buttonInsert":"invoegen","default":"standaard","align":"Uitlijnen","insertTableRowBeforeLabel":"Rij boven toevoegen","cellSpacing":"Celspatiëring:","pixels":"pixels","selectTableLabel":"Tabel selecteren","rows":"Rijen","modifyTableTitle":"Tabel wijzigen","cellPadding":"Celopvulling:","deleteTableRowLabel":"Rij wissen","backgroundColor":"Achtergrondkleur:","insertTableColumnAfterLabel":"Kolom achter toevoegen","left":"links","borderThickness":"Randdikte","columns":"Kolommen","percent":"percent","borderColor":"Randkleur"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Zaznacz treść","deleteElement":"Usuń element","moveEnd":"Przenieś kursor na koniec","deleteContents":"Usuń treść","nodeActions":"${nodeName} - działania","selectElement":"Zaznacz element","moveStart":"Przenieś kursor na początek"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/pl/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Do tyłu","findReplace":"Przełącz znajdowanie/zastępowanie","replaceAll":"Wszystkie wystąpienia","replaceDialogText":"Zastąpione wystąpienia: ${0}.","replaceButton":"Zastąp","findButton":"Znajdź","findLabel":"Znajdź:","matchCase":"Uwzględniaj wielkość liter","replaceLabel":"Zastąp przez:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Wstaw symbol"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/pl/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Podział strony"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/Preview.js b/js/dojo/dojox/editor/plugins/nls/pl/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Podgląd"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/Save.js b/js/dojo/dojox/editor/plugins/nls/pl/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/Save.js
@@ -0,0 +1,1 @@
+({"save":"Zapisz"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Pokaż elementy bloków HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/Smiley.js b/js/dojo/dojox/editor/plugins/nls/pl/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"śmiech","emoticonCool":"na luzie","emoticonTongue":"język","emoticonCrying":"płacz","emoticonOops":"oj","emoticonFrown":"niezadowolenie","emoticonAngry":"złość","emoticonShy":"nieśmiałość","emoticonNo":"Nie","emoticonAngel":"anioł","smiley":"Wstaw emotikon","emoticonIdea":"pomysł","emoticonEyebrow":"brew","emoticonSmile":"uśmiech","emoticonWink":"mrugnięcie","emoticonYes":"Tak","emoticonGrin":"szeroki uśmiech","emoticonGoofy":"niezdarność","emoticonHalf":"niesmak"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/pl/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Ustaw","insertTableTitle":"Wstawianie tabeli","insertTableRowAfterLabel":"Dodaj wiersz po","center":"środek","deleteTableColumnLabel":"Usuń kolumnę","right":"prawa strona","insertTableColumnBeforeLabel":"Dodaj kolumnę przed","tableWidth":"Szerokość tabeli:","buttonInsert":"Wstaw","default":"domyślna","align":"Wyrównanie:","insertTableRowBeforeLabel":"Dodaj wiersz przed","cellSpacing":"Odstępy między komórkami:","pixels":"piksle","selectTableLabel":"Wybierz tabelę","rows":"Wiersze:","modifyTableTitle":"Modyfikowanie tabeli","cellPadding":"Dopełnianie komórek:","deleteTableRowLabel":"Usuń wiersz","backgroundColor":"Kolor tła:","insertTableColumnAfterLabel":"Dodaj kolumnę po","left":"lewa strona","borderThickness":"Grubość ramki","columns":"Kolumny:","percent":"procent","borderColor":"Kolor ramki:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pl/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/pl/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pl/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"mniejsze niż lub równe","prod":"iloczyn n elementów\nznak iloczynu","zwj":"łącznik o zerowej szerokości","mdash":"pauza","frasl":"kreska ułamkowa","upsih":"grecka litera ipsylon z symbolem haczyka","prop":"proporcjonalnie do","middot":"kropka środkowa\ngruziński przecinek\ngrecka kropka środkowa","hellip":"wielokropek\ntrzy kropki","eta":"grecka mała litera eta","iacute":"łacińska mała litera i z akcentem ostrym","yen":"znak jena\nznak yuana","rlm":"znacznik zapisu od prawej do lewej","macr":"makron\nmakron rozdzielający\nnadkreślenie\nkreska górna APL","ldquo":"lewy podwójny cudzysłów","Icirc":"łacińska wielka litera I z daszkiem","OElig":"łacińska ligatura wielkich liter OE","hArr":"podwójna strzałka w lewo i w prawo","eth":"łacińska mała litera eth","divide":"znak dzielenia","chi":"grecka mała litera chi","eacute":"łacińska mała litera e z akcentem ostrym","icirc":"łacińska mała litera i z daszkiem","iexcl":"odwrócony wykrzyknik","ETH":"łacińska wielka litera ETH","acute":"akcent ostry\nodstęp ostry","crarr":"strzałka w dół z rogiem w lewo\npowrót karetki","mu":"grecka mała litera my","AElig":"łacińska wielka litera AE\nłacińska ligatura wielkich liter AE","aacute":"łacińska mała litera a z akcentem ostrym","lambda":"grecka mała litera lambda","THORN":"łacińska wielka litera THORN","asymp":"prawie równa się\nasymptotyczne do","fnof":"łacińska mała litera f z haczykiem\nfunkcja\nfloren","lang":"lewy nawias trójkątny","cup":"suma zbiorów\nfiliżanka","ne":"nie równa się","Sigma":"grecka wielka litera sigma","oelig":"łacińska ligatura małych liter oe","cent":"znak centa","ni":"zawiera","dagger":"krzyżyk","permil":"promile","Omicron":"grecka wielka litera omikron","sigma":"grecka mała litera sigma","euro":"znak euro","Yacute":"łacińska wielka litera Y z akcentem ostrym","thorn":"łacińska mała litera thorn","lceil":"lewy sufit\nhaczyk górny APL","Ograve":"łacińska wielka litera O z akcentem ciężkim","rarr":"strzałka w prawo","nu":"grecka mała litera ni","emsp":"spacja długa","Theta":"grecka wielka litera theta","lArr":"podwójna strzałka w lewo","tau":"grecka mała litera tau","aelig":"łacińska mała litera ae\nłacińska ligatura małych liter ae","ccedil":"łacińska mała litera c z cedillą","Ntilde":"łacińska wielka litera N z tyldą","cong":"równa się w przybliżeniu","Uacute":"łacińska wielka litera U z akcentem ostrym","theta":"grecka mała litera theta","darr":"strzałka w dół","Uuml":"łacińska wielka litera U z diarezą","bdquo":"podwójny cudzysłów dolny","Aring":"łacińska wielka litera A z pierścieniem powyżej\nłacińska wielka litera A z pierścieniem","sigmaf":"grecka mała litera końcowa sigma","pound":"znak funta","uArr":"podwójna strzałka w górę","sub":"jest podzbiorem","aring":"łacińska mała litera a z pierścieniem powyżej\nłacińska mała litera a z pierścieniem","sdot":"operator kropka","thinsp":"spacja krótka","or":"suma logiczna\nlitera v","Eacute":"łacińska wielka litera E z akcentem ostrym","shy":"łącznik miękki\nłącznik opcjonalny","curren":"znak waluty","loz":"romb","not":"znak negacji","tilde":"mała tylda","sum":"suma n elementów","spades":"symbol pik","Psi":"grecka wielka litera psi","ndash":"półpauza","sup":"jest nadzbiorem","atilde":"łacińska mała litera a z tyldą","clubs":"symbol trefl\nkoniczyna","uuml":"łacińska mała litera u z diarezą","Aacute":"łacińska wielka litera A z akcentem ostrym","rsaquo":"pojedynczy prawy cudzysłów trójkątny","otimes":"znak mnożenia w okręgu\niloczyn wektorów","lfloor":"lewa podłoga\nhaczyk dolny APL","zwnj":"symbol rozdzielający o zerowej szerokości","sim":"operator tylda\nzmienia się w granicach\nokoło","Iota":"grecka wielka litera jota","Iacute":"łacińska wielka litera I z akcentem ostrym","pi":"grecka mała litera phi","ordf":"znak liczby rodzaju żeńskiego","frac12":"znak ułamka jedna druga\nułamek jedna druga","frac14":"znak ułamka jedna czwarta\nułamek jedna czwarta","alefsym":"znak alef\npoczątkowa liczba porządkowa","bull":"znacznik podpunktu\nmałe czarne kółko","deg":"znak stopni","ordm":"znak liczby rodzaju męskiego","epsilon":"grecka mała litera epsilon","equiv":"takie same jak","Dagger":"podwójny krzyżyk","brvbar":"przerwana kreska\nprzerwana pionowa kreska","harr":"strzałka w lewo i w prawo","ugrave":"łacińska mała litera u z akcentem ciężkim","oslash":"łacińska mała litera o z przekreśleniem\nłacińska mała litera o z ukośnikiem","Yuml":"łacińska wielka litera Y z diarezą","hearts":"symbol kier\nserce","Xi":"grecka wielka litera ksi","Prime":"bis\nsekundy\ncale","iota":"grecka mała litera jota","Ccedil":"łacińska wielka litera C z cedillą","Lambda":"grecka wielka litera lambda","raquo":"prawy cudzysłów trójkątny\nprawy guillemet","Phi":"grecka wielka litera phi","prime":"prim\nminuty\nstopy","nsub":"nie jest podzbiorem","copy":"znak praw autorskich","yuml":"łacińska mała litera y z diarezą","Rho":"grecka wielka litera rho","Ucirc":"łacińska wielka litera U z daszkiem","Kappa":"grecka wielka litera kappa","ucirc":"łacińska mała litera u z daszkiem","sbquo":"pojedynczy cudzysłów dolny","igrave":"łacińska mała litera i z akcentem ciężkim","reg":"symbol zastrzeżenia\nsymbol zastrzeżonego znaku towarowego","infin":"nieskończoność","iquest":"odwrócony znak zapytania\nodwrotny znak zapytania","circ":"modyfikator litery - akcent w formie daszka","kappa":"grecka mała litera kappa","lrm":"znacznik zapisu od lewej do prawej","Atilde":"łacińska wielka litera A z tyldą","larr":"strzałka w lewo","frac34":"znak ułamka trzy czwarte\nułamek trzy czwarte","oacute":"łacińska mała litera o z akcentem ostrym","rsquo":"prawy pojedynczy cudzysłów","egrave":"łacińska mała litera e z akcentem ciężkim","oline":"nadkreślenie\nnadkreślenie tworzące odstęp","Mu":"grecka wielka litera my","exist":"istnieje","cap":"część wspólna zbiorów\nczepek","and":"iloczyn logiczny\nklin","Ouml":"łacińska wielka litera O z diarezą","agrave":"łacińska mała litera a z symbolem gravis\nłacińska mała litera a z akcentem ciężkim","uarr":"strzałka w górę","ang":"kąt","Zeta":"grecka wielka litera dzeta","scaron":"łacińska mała litera s z daszkiem odwróconym","Gamma":"grecka wielka litera gamma","isin":"należy do","Auml":"łacińska wielka litera A z diarezą","empty":"zbiór pusty\nzbiór miary zero\nśrednica","gamma":"grecka mała litera gamma","para":"znak pilcrow\nznak akapitu","ge":"większe niż lub równe","psi":"grecka mała litera psi","Alpha":"grecka wielka litera alfa","Nu":"grecka wielka litera ni","ouml":"łacińska mała litera o z diarezą","zeta":"grecka mała litera dzeta","alpha":"grecka wielka litera alfa","part":"pochodna cząstkowa","auml":"łacińska mała litera a z diarezą","Ugrave":"łacińska wielka litera U z akcentem ciężkim","Oslash":"łacińska wielka litera O z przekreśleniem\nłacińska wielka litera O z ukośnikiem","Epsilon":"grecka wielka litera epsilon","int":"całka","Omega":"grecka wielka litera omega","perp":"odwrócona litera T\nprostopadłe do\nprostopadłe","uml":"diereza\ndiereza rozdzielająca","upsilon":"grecka mała litera ipsylon","lowast":"operator gwiazdka","omega":"grecka mała litera omega","otilde":"łacińska mała litera o z tyldą","Egrave":"łacińska wielka litera E z akcentem ciężkim","phi":"grecka mała litera phi","ensp":"spacja średnia","Euml":"łacińska wielka litera E z diarezą","cedil":"cedilla\nodstęp cedilla","laquo":"lewy cudzysłów trójkątny\nlewy guillemet","forall":"dla każdego","thetasym":"grecka mała litera theta (symbol)","Agrave":"łacińska wielka litera A z symbolem gravis\nłacińska wielka litera A z akcentem ciężkim","szlig":"łacińska mała litera ostre s\ness-zed","Pi":"grecka wielka litera pi","rho":"grecka mała litera rho","trade":"symbol znaku zastrzeżonego","Igrave":"łacińska wielka litera I z akcentem ciężkim","minus":"znak minus","Beta":"grecka wielka litera beta","Ocirc":"łacińska wielka litera O z daszkiem","rdquo":"prawy podwójny cudzysłów","Eta":"grecka wielka litera eta","rfloor":"prawa podłoga","Oacute":"łacińska wielka litera O z akcentem ostrym","euml":"łacińska mała litera e z diarezą","oplus":"znak plus w okręgu\nsuma bezpośrednia","ocirc":"łacińska mała litera o z daszkiem","radic":"pierwiastek kwadratowy\nznak pierwiastka","Chi":"grecka wielka litera chi","notin":"nie należy do","sect":"znak sekcji","Acirc":"łacińska wielka litera A z daszkiem","lsquo":"lewy pojedynczy cudzysłów","beta":"grecka mała litera beta","piv":"grecki symbol pi","sup1":"indeks górny jeden\ncyfra jeden w indeksie górnym","Scaron":"łacińska wielka litera S z daszkiem odwróconym","sup2":"indeks górny dwa\ncyfra dwa w indeksie górnym\nkwadrat","acirc":"łacińska mała litera a z daszkiem","sube":"jest podzbiorem lub równa się","sup3":"indeks górny trzy\ncyfra trzy w indeksie górnym\nsześcian","real":"gotycka wielka litera R\nsymbol części rzeczywistej liczby zespolonej","Iuml":"łacińska wielka litera I z diarezą","rang":"prawy nawias trójkątny","lsaquo":"pojedynczy lewy cudzysłów trójkątny","nabla":"nabla\nkoneksja","omicron":"grecka mała litera omikron","there4":"dlatego","plusmn":"znak plus-minus\nznak zakresu wartości przybliżonej","rceil":"prawy sufit","micro":"znak mikro","rArr":"podwójna strzałka w prawo","Delta":"grecka wielka litera delta","iuml":"łacińska mała litera i z diarezą","Tau":"grecka wielka litera tau","times":"znak mnożenia","yacute":"łacińska mała litera y z akcentem ostrym","ograve":"łacińska mała litera o z akcentem ciężkim","delta":"grecka mała litera delta","Ecirc":"łacińska wielka litera E z daszkiem","dArr":"podwójna strzałka w dół","ntilde":"łacińska mała litera n z tyldą","diams":"symbol karo","uacute":"łacińska mała litera u z akcentem ostrym","Otilde":"łacińska wielka litera O z tyldą","ecirc":"łacińska mała litera e z daszkiem","Upsilon":"grecka wielka litera ipsylon","image":"gotycka wielka litera I\nczęść urojona liczby zespolonej","supe":"jest nadzbiorem lub równa się","xi":"grecka mała litera ksi","weierp":"odręcznie pisana wielka litera P\nzbiór potęgowy\nP Weierstrassa"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Definir","insertTableTitle":"Inserir tabela","insertTableRowAfterLabel":"Adicionar linha depois","center":"centro","deleteTableColumnLabel":"Eliminar coluna","right":"direita","insertTableColumnBeforeLabel":"Adicionar coluna antes","tableWidth":"Largura da tabela:","buttonInsert":"Inserir","default":"predefinição","align":"Alinhar:","insertTableRowBeforeLabel":"Adicionar linha antes","cellSpacing":"Espaçamento de células:","pixels":"píxeis","selectTableLabel":"Seleccionar tabela","rows":"Linhas:","modifyTableTitle":"Modificar tabela","cellPadding":"Preenchimento de células:","deleteTableRowLabel":"Eliminar linha","backgroundColor":"Cor de segundo plano:","insertTableColumnAfterLabel":"Adicionar coluna depois","left":"esquerda","borderThickness":"Espessura do contorno","columns":"Colunas:","percent":"percentagem","borderColor":"Cor do contorno:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Selecionar Conteúdo","deleteElement":"Excluir Elemento","moveEnd":"Mover Cursor para o Final","deleteContents":"Excluir Conteúdo","nodeActions":"${nodeName} Ações","selectElement":"Selecionar Elemento","moveStart":"Mover Cursor para o Início"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/pt/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Retroceder","findReplace":"Comutar Localizar/Substituir","replaceAll":"Todas as Ocorrências","replaceDialogText":"${0} ocorrências substituídas.","replaceButton":"Substituir","findButton":"Localizar","findLabel":"Localizar:","matchCase":"Caso de Correspondência","replaceLabel":"Substituir por:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Inserir Símbolo"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/pt/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Quebra de Página"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/Preview.js b/js/dojo/dojox/editor/plugins/nls/pt/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Visualização"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/Save.js b/js/dojo/dojox/editor/plugins/nls/pt/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/Save.js
@@ -0,0 +1,1 @@
+({"save":"Salvar"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Mostrar Elementos de Bloco HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/Smiley.js b/js/dojo/dojox/editor/plugins/nls/pt/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"gargalhando","emoticonCool":"legal","emoticonTongue":"mostrando a língua","emoticonCrying":"chorando","emoticonOops":"surpreso","emoticonFrown":"sobrancelhas franzidas","emoticonAngry":"bravo","emoticonShy":"envergonhado","emoticonNo":"não","emoticonAngel":"angelical","smiley":"Inserir Emoticon","emoticonIdea":"ideia","emoticonEyebrow":"sarcástico","emoticonSmile":"sorriso","emoticonWink":"piscando","emoticonYes":"sim","emoticonGrin":"sorriso largo","emoticonGoofy":"tonto","emoticonHalf":"confuso"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/pt/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Configurar","insertTableTitle":"Inserir Tabela","insertTableRowAfterLabel":"Incluir Linha Depois","center":"centro","deleteTableColumnLabel":"Excluir Coluna","right":"direita","insertTableColumnBeforeLabel":"Incluir Coluna Antes","tableWidth":"Largura da Tabela:","buttonInsert":"Inserir","default":"default","align":"Alinhar:","insertTableRowBeforeLabel":"Incluir Linha Antes","cellSpacing":"Espaçamento de Célula:","pixels":"pixels","selectTableLabel":"Selecionar Tabela","rows":"Linhas:","modifyTableTitle":"Modificar Tabela","cellPadding":"Preenchimento de Célula:","deleteTableRowLabel":"Excluir Linha","backgroundColor":"Cor do Plano de Fundo:","insertTableColumnAfterLabel":"Incluir Coluna Depois","left":"esquerda","borderThickness":"Grossura da Borda","columns":"Colunas:","percent":"percentual","borderColor":"Cor da Borda:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/pt/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/pt/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/pt/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"menor ou igual a","prod":"produto de n elementos\nsímbolo de produto","zwj":"conector de largura zero","mdash":"travessão","frasl":"barra de fração","upsih":"Símbolo da letra grega upsilon com gancho","prop":"proporcional a","middot":"ponto mediano\nvírgula georgiana\nponto mediano grego","hellip":"reticências horizontais\ntrês pontos","eta":"Letra grega minúscula eta","iacute":"Letra latina minúscula i com acento agudo","yen":"símbolo de ienesímbolo de yuan","rlm":"marca da direita para a esquerda","macr":"macron\nmacron de espaçamento\nlinha sobreposta\nbarra superior de APL","ldquo":"aspas duplas inferior à esquerda","Icirc":"Letra latina maiúscula I com acento circunflexo","OElig":"Ligação latina maiúscula OE","hArr":"seta dupla para esquerda e direita","eth":"Letra latina minúscula eth","divide":"símbolo de divisão","chi":"Letra grega minúscula chi","eacute":"Letra latina minúscula e com acento agudo","icirc":"Letra latina minúscula i com acento circunflexo","iexcl":"ponto de exclamação invertido","ETH":"Letra latina maiúscula ETH","acute":"acento agudo\nacento agudo para espaçamento","crarr":"seta para baixo com curva para esquerda\nretorno de texto","mu":"Letra grega minúscula miu","AElig":"Letra latina maiúscula AE\nLetra latina maiúscula AE","aacute":"Letra latina minúscula a com acento agudo","lambda":"Letra grega minúscula lambda","THORN":"Letra latina maiúscula THORN","asymp":"quase igual a\nassintótico a","fnof":"Letra latina minúscula f com gancho\nfunção\nflorim","lang":"sinal de maior e menor para esquerda","cup":"união\nreunião","ne":"diferente de","Sigma":"Letra grega maiúscula sigma","oelig":"Ligação latina minúscula oe","cent":"símbolo de centavo","ni":"contém","dagger":"cruz","permil":"símbolo por mil","Omicron":"Letra grega maiúscula ómicron","sigma":"Letra grega minúscula sigma","euro":"símbolo de euro","Yacute":"Letra latina maiúscula Y com acento agudo","thorn":"Letra latina minúscula thorn","lceil":"chave em L com o canto voltado para cima à esquerda\nAPL com o canto voltado para cima","Ograve":"Letra latina maiúscula O com acento grave","rarr":"seta para direita","nu":"Letra grega minúscula nu","emsp":"espaço duplo","Theta":"Letra grega maiúscula teta","lArr":"seta dupla para esquerda","tau":"Letra grega minúscula tau","aelig":"Letra latina minúscula ae\nLetra latina minúscula ae contraída","ccedil":"Letra latina minúscula c com cedilha","Ntilde":"Letra latina maiúscula N com til","cong":"aproximadamente igual a","Uacute":"Letra latina maiúscula U com acento agudo","theta":"Letra grega minúscula teta","darr":"seta para baixo","Uuml":"Letra latina maiúscula U com trema","bdquo":"aspas duplas inferiores à direita","Aring":"Letra latina maiúscula A com círculo em cima\nLetra latina maiúscula A com círculo","sigmaf":"Letra grega minúscula sigma final","pound":"símbolo de libra","uArr":"seta dupla para cima","sub":"está contido em","aring":"Letra latina minúscula a com círculo em cima\nLetra latina minúscula a com círculo","sdot":"ponto de multiplicação","thinsp":"espaço estreito","or":"'ou' lógico\nvee","Eacute":"Letra latina maiúscula E com acento agudo","shy":"hífen reformatável\nhífen discricionário","curren":"símbolo de moeda","loz":"losango","not":"nenhum símbolo","tilde":"til pequeno","sum":"somatório de n elementos","spades":"símbolo de espadas","Psi":"Letra grega maiúscula psi","ndash":"traço","sup":"contém","atilde":"Letra latina minúscula a com til","clubs":"símbolo de paus\ntrevo","uuml":"Letra latina minúscula u com trema","Aacute":"Letra latina maiúscula A com acento agudo","rsaquo":"aspa latina de abertura","otimes":"símbolo de vezes circulado\nproduto dos vetores","lfloor":"chave em L com o canto voltado para baixo à esquerda\nAPL com o canto voltado para baixo","zwnj":"separador de largura zero","sim":"operador til\nvaria com\nigual a","Iota":"Letra grega maiúscula iota","Iacute":"Letra latina maiúscula I com acento agudo","pi":"Letra grega minúscula pi","ordf":"indicador ordinal feminino","frac12":"fração de um meio\nfração de um meio","frac14":"fração de um quarto\nfração de um quarto","alefsym":"símbolo alef\nprimeiro cardinal transfinito","bull":"marcador\npequeno círculo preto","deg":"símbolo de grau","ordm":"indicador ordinal masculino","epsilon":"Letra grega minúscula épsilon","equiv":"idêntico a","Dagger":"cruz dupla","brvbar":"barra interrompida\nbarra vertical de interrompida","harr":"seta para esquerda e direita","ugrave":"Letra latina minúscula u com acento grave","oslash":"Letra latina minúscula o traçada\nLetra latina minúscula o cortada com barra","Yuml":"Letra latina maiúscula Y com trema","hearts":"coração negro\nsímbolo de copas","Xi":"Letra grega maiúscula ksi","Prime":"linha dupla\nsegundos\npolegadas","iota":"Letra grega minúscula iota","Ccedil":"Letra latina maiúscula C com cedilha","Lambda":"Letra grega maiúscula lambda","raquo":"aspas latinas duplas de abertura\nsímbolo de citação direito","Phi":"Letra grega maiúscula fi","prime":"linha simples\nminutos\npés","nsub":"não está contido em","copy":"símbolo de copyright","yuml":"Letra latina minúscula y com trema","Rho":"Letra grega maiúscula rô","Ucirc":"Letra latina maiúscula U com acento circunflexo","Kappa":"Letra grega maiúscula capa","ucirc":"Letra latina minúscula u com acento circunflexo","sbquo":"aspas simples inferior à direita","igrave":"Letra latina minúscula i com acento grave","reg":"símbolo de marca registrada\nsímbolo de marca comercial registrada","infin":"infinito","iquest":"ponto de interrogação invertido\nponto de interrogação invertido","circ":"Acento circunflexo","kappa":"Letra grega minúscula capa","lrm":"marca da esquerda para a direita","Atilde":"Letra latina maiúscula A com til","larr":"seta para esquerda","frac34":"fração de três quartos\nfração de três quartos","oacute":"Letra latina minúscula o com acento agudo","rsquo":"aspas simples à direita","egrave":"Letra latina minúscula e com acento grave","oline":"linha sobreposta\nlinha superior para espaçamento","Mu":"Letra grega maiúscula miu","exist":"existe pelo menos","cap":"intersecção\nintersecção","and":"'e' lógico\nwedge","Ouml":"Letra latina maiúscula O com trema","agrave":"Letra latina minúscula a com acento grave\nletra latina minúscula a com acento grave","uarr":"seta para cima","ang":"ângulo","Zeta":"Letra grega maiúscula zeta","scaron":"Letra latina minúscula s com caron","Gamma":"Letra grega maiúscula gama","isin":"pertence a","Auml":"Letra latina maiúscula A com trema","empty":"conjunto vazio\nconjunto nulo\ndiâmetro","gamma":"Letra grega minúscula gama","para":"símbolo pé-de-mosca\nsímbolo de parágrafo","ge":"maior ou igual a","psi":"Letra grega minúscula psi","Alpha":"Letra grega maiúscula alfa","Nu":"Letra grega maiúscula nu","ouml":"Letra latina minúscula o com trema","zeta":"Letra grega minúscula zeta","alpha":"Letra grega minúscula alfa","part":"diferença parcial","auml":"Letra latina minúscula a com trema","Ugrave":"Letra latina maiúscula U com acento grave","Oslash":"Letra latina maiúscula O traçada\nLetra latina maiúscula O cortada com barra","Epsilon":"Letra grega maiúscula épsilon","int":"integral","Omega":"Letra grega maiúscula ômega","perp":"up tack\nortogonal a\nperpendicular","uml":"trema\ntrema de espaçamento","upsilon":"Letra grega minúscula upsilon","lowast":"asterisco","omega":"Letra grega minúscula ômega","otilde":"Letra latina minúscula o com til","Egrave":"Letra latina maiúscula E com acento grave","phi":"Letra grega minúscula fi","ensp":"espaço simples","Euml":"Letra latina maiúscula E com trema","cedil":"cedilha\ncedilha para espaçamento","laquo":"aspas latinas duplas de encerramento\nsímbolo de citação esquerdo","forall":"para todos","thetasym":"Símbolo da letra grega minúscula teta","Agrave":"Letra latina maiúscula A com acento grave\nletra latina maiúscula A com acento grave","szlig":"Letra latina minúscula scharfes S\ness-zed","Pi":"Letra grega maiúscula pi","rho":"Letra grega minúscula rô","trade":"símbolo de marca registrada","Igrave":"Letra latina maiúscula I com acento grave","minus":"sinal de menos","Beta":"Letra grega maiúscula beta","Ocirc":"Letra latina maiúscula O com acento circunflexo","rdquo":"aspas duplas à direita","Eta":"Letra grega maiúscula eta","rfloor":"chave em L com o canto voltado para baixo à direita","Oacute":"Letra latina maiúscula O com acento agudo","euml":"Letra latina minúscula e com trema","oplus":"círculo mais\nsoma direta","ocirc":"Letra latina minúscula o com acento circunflexo","radic":"raiz quadrada\nsímbolo de radical","Chi":"Letra grega maiúscula chi","notin":"não pertence a","sect":"símbolo de seção","Acirc":"Letra latina maiúscula A com acento circunflexo","lsquo":"aspas simples à esquerda","beta":"Letra grega minúscula beta","piv":"Símbolo grego pi","sup1":"um sobrescrito\ndígito um sobrescrito","Scaron":"Letra latina maiúscula S com caron","sup2":"dois sobrescrito\ndígito dois sobrescrito\nraiz quadrada","acirc":"Letra latina minúscula a com acento circunflexo","sube":"está contido ou é igual a","sup3":"três sobrescrito\ndígito três sobrescrito\nraiz cúbica","real":"letra R maiúscula gótica\nsímbolo da parte real","Iuml":"Letra latina maiúscula I com trema","rang":"sinal de maior e menor para direita","lsaquo":"aspa latina de encerramento","nabla":"nabla\ngradiente","omicron":"Letra grega minúscula ómicron","there4":"para isso","plusmn":"símbolo de mais e menos\nsímbolo de mais ou menos","rceil":"chave em L com o canto voltado para cima à direita","micro":"símbolo de micro","rArr":"seta dupla para direita","Delta":"Letra grega maiúscula delta","iuml":"Letra latina minúscula i com trema","Tau":"Letra grega maiúscula tau","times":"símbolo de multiplicação","yacute":"Letra latina minúscula y com acento agudo","ograve":"Letra latina minúscula o com acento grave","delta":"Letra grega minúscula delta","Ecirc":"Letra latina maiúscula E com acento circunflexo","dArr":"seta dupla para baixo","ntilde":"Letra latina minúscula n com til","diams":"diamante negro","uacute":"Letra latina minúscula u com acento agudo","Otilde":"Letra latina maiúscula O com til","ecirc":"Letra latina minúscula e com acento circunflexo","Upsilon":"Letra grega maiúscula upsilon","image":"letra I maiúscula gótica\nparte imaginária","supe":"contém ou é igual a","xi":"Letra grega minúscula ksi","weierp":"P maiúsculo cursivo\npotência\np de Weierstrass"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"Выбрать содержимое","deleteElement":"Удалить элемент","moveEnd":"Поместить курсор в конец","deleteContents":"Удалить содержимое","nodeActions":"${nodeName}: действия","selectElement":"Выбрать элемент","moveStart":"Поместить курсор в начало"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/ru/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"Назад","findReplace":"Переключатель Поиск/Замена","replaceAll":"Все вхождения","replaceDialogText":"Заменено ${0} вхождений.","replaceButton":"Заменить","findButton":"Найти","findLabel":"Найти:","matchCase":"С учетом регистра","replaceLabel":"Заменить на:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"Вставить символ"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/ru/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"Разделитель страниц"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/Preview.js b/js/dojo/dojox/editor/plugins/nls/ru/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"Предварительный просмотр"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/Save.js b/js/dojo/dojox/editor/plugins/nls/ru/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/Save.js
@@ -0,0 +1,1 @@
+({"save":"Сохранить"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"Показать элементы блока HTML"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/Smiley.js b/js/dojo/dojox/editor/plugins/nls/ru/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"смех","emoticonCool":"здорово","emoticonTongue":"насмешка","emoticonCrying":"плачь","emoticonOops":"уупс","emoticonFrown":"хмурый вид","emoticonAngry":"злость","emoticonShy":"застенчивость","emoticonNo":"нет","emoticonAngel":"ангел","smiley":"Вставить значок настроения","emoticonIdea":"есть идея","emoticonEyebrow":"удивление","emoticonSmile":"улыбка","emoticonWink":"подмигивание","emoticonYes":"да","emoticonGrin":"усмешка","emoticonGoofy":"глупый","emoticonHalf":"половина"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/ru/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Задать","insertTableTitle":"Вставить таблицу","insertTableRowAfterLabel":"Добавить строку после","center":"по центру","deleteTableColumnLabel":"Удалить столбец","right":"по правому краю","insertTableColumnBeforeLabel":"Добавить столбец перед","tableWidth":"Ширина таблицы:","buttonInsert":"Вставить","default":"по умолчанию","align":"Выровнять:","insertTableRowBeforeLabel":"Добавить строку перед","cellSpacing":"Расстояние между ячейками:","pixels":"пикселов","selectTableLabel":"Выбрать таблицу","rows":"Строк:","modifyTableTitle":"Изменить таблицу","cellPadding":"Отступ внутри ячеек:","deleteTableRowLabel":"Удалить строку","backgroundColor":"Цвет фона:","insertTableColumnAfterLabel":"Добавить столбец после","left":"по левому краю","borderThickness":"Толщина рамки","columns":"Столбцов:","percent":"процентов","borderColor":"Цвет рамки:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/ru/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/ru/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/ru/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"меньше или равно","prod":"n-арное произведение\nсимвол произведения","zwj":"соединитель нулевой ширины","mdash":"тире длины M","frasl":"косая черта","upsih":"греческий ипсилон с хвостиком","prop":"пропорционально","middot":"средняя точка\nзапятая в грузинском\nсредняя точка в греческом","hellip":"многоточие\nтри точки","eta":"греческая строчная буква эта","iacute":"латинская строчная буква i с акутом","yen":"символ иены\nсимвол юаня","rlm":"знак справа-налево","macr":"знак долготы\nзнак долготы с интервалом\nверхняя черта\nнадчеркивание APL","ldquo":"левая двойная кавычка","Icirc":"латинская прописная буква I с циркумфлексом","OElig":"латинская прописная лигатура OE","hArr":"двойная стрелка влево-вправо","eth":"латинская строчная буква eth","divide":"знак деления","chi":"греческая строчная буква хи","eacute":"латинская строчная буква e с акутом","icirc":"латинская строчная буква i с циркумфлексом","iexcl":"инвертированный восклицательный знак","ETH":"латинская прописная буква ETH","acute":"знак акут\nакут с интервалом","crarr":"стрелка вниз с углом вправо\nвозврат каретки","mu":"греческая строчная буква мю","AElig":"латинская прописная буква AE\nлатинская прописная лигатура AE","aacute":"латинская строчная буква a с акутом","lambda":"греческая строчная буква лямбда","THORN":"латинская прописная буква THORN","asymp":"почти равно\nасимптотично","fnof":"латинская строчная буква f с хвостиком\nфункция\nфлорин","lang":"левая угловая скобка","cup":"объединение\nчашечка","ne":"не равно","Sigma":"греческая прописная буква сигма","oelig":"латинская строчная лигатура oe","cent":"символ цента","ni":"содержит в качестве элемента","dagger":"крест","permil":"знак промилле","Omicron":"греческая прописная буква омикрон","sigma":"греческая строчная буква сигма","euro":"символ евро","Yacute":"латинская прописная буква Y с акутом","thorn":"латинская строчная буква thorn","lceil":"левая скобка округления вверх\nAPL upstile","Ograve":"латинская прописная буква O с грависом","rarr":"стрелка вправо","nu":"греческая строчная буква ню","emsp":"пробел длины M","Theta":"греческая прописная буква тета","lArr":"двойная стрелка влево","tau":"греческая строчная буква тау","aelig":"латинская строчная буква ae\nлатинская строчная лигатура ae","ccedil":"латинская строчная буква c с седилью","Ntilde":"латинская прописная буква N с тильдой","cong":"приблизительно равно","Uacute":"латинская прописная буква U с акутом","theta":"греческая строчная буква тета","darr":"стрелка вниз","Uuml":"латинская прописная буква U с тремой","bdquo":"двойная нижняя кавычка","Aring":"латинская прописная буква A с кружком сверху\nлатинская прописная буква A с кружком","sigmaf":"греческая строчная конечная сигма","pound":"символ фунта стерлингов","uArr":"двойная стрелка вверх","sub":"подмножество","aring":"латинская строчная буква a с кружком сверху\nлатинская строчная a с кружком","sdot":"оператор точка","thinsp":"узкий пробел","or":"логическое ИЛИ\nклин вниз","Eacute":"латинская прописная буква E с акутом","shy":"мягкий перенос\nвозможный перенос","curren":"символ денежной единицы","loz":"ромб","not":"знак отрицания","tilde":"малая тильда","sum":"n-арное суммирование","spades":"пики","Psi":"греческая прописная буква пси","ndash":"тире длины N","sup":"включает в себя","atilde":"латинская строчная буква a с тильдой","clubs":"крести\nтрилистник","uuml":"латинская строчная буква u с тремой","Aacute":"латинская прописная буква A с акутом","rsaquo":"одинарная правая угловая кавычка","otimes":"умножение в круге\nвекторное произведение","lfloor":"левая скобка округления вниз\nAPL downstile","zwnj":"разделитель нулевой ширины","sim":"оператор тильда\nизменяться с\nподобно","Iota":"греческая прописная буква йота","Iacute":"латинская прописная буква I с акутом","pi":"греческая строчная буква пи","ordf":"индикатор женского рода","frac12":"дробь одна вторая\nодна вторая","frac14":"дробь одна четвертая\nодна четверть","alefsym":"буква Алеф\nкардинальное число","bull":"маркер списка\nчерный маленький кружок","deg":"символ градусов","ordm":"индикатор мужского рода","epsilon":"греческая строчная буква эпсилон","equiv":"идентично","Dagger":"двойной крест","brvbar":"прерывистая черта\nвертикальная прерывистая черта","harr":"стрелка влево-вправо","ugrave":"латинская строчная буква u с грависом","oslash":"латинская строчная буква o перечеркнутая\nлатинская строчная буква o с вертикальной чертой","Yuml":"латинская прописная буква Y с тремой","hearts":"червы\nвалентинка","Xi":"греческая прописная буква кси","Prime":"двойной штрих\nсекунды\nдюймы","iota":"греческая строчная буква йота","Ccedil":"латинская прописная буква C с седилью","Lambda":"греческая прописная буква лямбда","raquo":"правая двойная угловая кавычка\nправая кавычка","Phi":"греческая прописная буква фи","prime":"штрих\nминуты\nфуты","nsub":"не является подмножеством","copy":"символ авторских прав","yuml":"латинская строчная буква y с тремой","Rho":"греческая прописная буква ро","Ucirc":"латинская прописная буква U с циркумфлексом","Kappa":"греческая прописная буква каппа","ucirc":"латинская строчная буква u с циркумфлексом","sbquo":"одиночная нижняя кавычка","igrave":"латинская строчная буква i с грависом","reg":"символ Зарегистрирован\nсимвол зарегистрированного товарного знака","infin":"бесконечность","iquest":"инвертированный знак вопроса\nперевернутый знак вопроса","circ":"надстрочный знак циркумфлекс","kappa":"греческая строчная буква каппа","lrm":"знак слева-направо","Atilde":"латинская прописная буква A с тильдой","larr":"стрелка влево","frac34":"дробь три четверти\nтри четверти","oacute":"латинская строчная буква o с акутом","rsquo":"правая одинарная кавычка","egrave":"латинская строчная буква e с грависом","oline":"верхняя черта\nнадчеркивание с интервалом","Mu":"греческая прописная буква мю","exist":"существует","cap":"пересечение\nшапочка","and":"логическое И\nклин вверх","Ouml":"латинская прописная буква O с тремой","agrave":"латинская строчная буква a с грависом\nлатинская строчная a с грависом","uarr":"стрелка вверх","ang":"угол","Zeta":"греческая прописная буква дзета","scaron":"латинская строчная буква s с галочкой","Gamma":"греческая прописная буква гамма","isin":"является элементом","Auml":"латинская прописная буква A с тремой","empty":"пустой набор\nпустое множество\nдиаметр","gamma":"греческая строчная буква гамма","para":"символ абзаца\nсимвол параграфа","ge":"больше или равно","psi":"греческая строчная буква пси","Alpha":"греческая прописная буква альфа","Nu":"греческая прописная буква ню","ouml":"латинская строчная буква o с тремой","zeta":"греческая строчная буква дзета","alpha":"греческая строчная буква альфа","part":"частичный дифференциал","auml":"латинская строчная буква a с тремой","Ugrave":"латинская прописная буква U с грависом","Oslash":"латинская прописная буква O перечеркнутая\nлатинская прописная буква O с вертикальной чертой","Epsilon":"греческая прописная буква эпсилон","int":"интеграл","Omega":"греческая прописная буква омега","perp":"перевернутый гвоздь\nортогонально к\nперпендикулярно","uml":"трема\nтрема с интервалом","upsilon":"греческая строчная буква ипсилон","lowast":"оператор звездочка","omega":"греческая строчная буква омега","otilde":"латинская строчная буква o с тильдой","Egrave":"латинская прописная буква E с грависом","phi":"греческая строчная буква фи","ensp":"пробел длины N","Euml":"латинская прописная буква E с тремой","cedil":"седиль\nседиль с интервалом","laquo":"левые двойный угловые кавычки\nлевые кавычки","forall":"для всех","thetasym":"греческая символьная тета","Agrave":"латинская прописная буква A с грависом","szlig":"латинская строчная заостренная s\nэсцэт","Pi":"греческая прописная буква пи","rho":"греческая строчная буква ро","trade":"символ товарного знака","Igrave":"латинская прописная буква I с грависом","minus":"знак минуса","Beta":"греческая прописная буква бета","Ocirc":"латинская прописная буква O с циркумфлексом","rdquo":"правая двойная кавычка","Eta":"греческая прописная буква эта","rfloor":"правая скобка округления вниз","Oacute":"латинская прописная буква O с акутом","euml":"латинская строчная буква e с тремой","oplus":"плюс в круге\nпрямая сумма","ocirc":"латинская строчная буква o с циркумфлексом","radic":"квадратный корень\nзнак корня","Chi":"греческая прописная буква хи","notin":"не является элементом","sect":"символ раздела","Acirc":"латинская прописная буква A с циркумфлексом","lsquo":"левая одинарная кавычка","beta":"греческая строчная буква бета","piv":"греческая символьная пи","sup1":"верхний индекс один\nверхний индекс с цифрой один","Scaron":"латинская прописная буква S с галочкой","sup2":"верхний индекс два\nверхний индекс с цифрой два\nвозведение в квадрат","acirc":"латинская строчная буква a с циркумфлексом","sube":"является подмножеством или эквивалентно","sup3":"верхний индекс три\nверхний индекс с цифрой три\nвозведение в куб","real":"черная прописная R\nвещественная часть","Iuml":"латинская прописная буква I с тремой","rang":"правая угловая скобка","lsaquo":"одинарная левая угловая кавычка","nabla":"оператор набла\nразностное отношение назад","omicron":"греческая строчная буква омикрон","there4":"следовательно","plusmn":"символ плюс-минус\nсимвол плюса или минуса","rceil":"правая скобка округления вверх","micro":"знак микро","rArr":"двойная стрелка вправо","Delta":"греческая прописная буква дельта","iuml":"латинская строчная буква i с тремой","Tau":"греческая прописная буква тау","times":"знак умножения","yacute":"латинская строчная буква y с акутом","ograve":"латинская строчная буква o с грависом","delta":"греческая строчная буква дельта","Ecirc":"латинская прописная буква E с циркумфлексом","dArr":"двойная стрелка вниз","ntilde":"латинская строчная буква n с тильдой","diams":"бубны","uacute":"латинская строчная буква u с акутом","Otilde":"латинская прописная буква O с тильдой","ecirc":"латинская строчная буква e с циркумфлексом","Upsilon":"греческая прописная буква ипсилон","image":"черная прописная I\nмнимая часть","supe":"включает в себя или эквивалентно","xi":"греческая строчная буква хи","weierp":"рукописная прописная P\nстепенное множество\nфункции Вейерштрасса"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/sk/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/sk/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/sk/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Nastaviť","insertTableTitle":"Vložiť tabuľku","insertTableRowAfterLabel":"Pridať riadok za","center":"na stred","deleteTableColumnLabel":"Vymazať stĺpec","right":"vpravo","insertTableColumnBeforeLabel":"Pridať stĺpec pred","tableWidth":"Šírka tabuľky:","buttonInsert":"Vložiť","default":"štandardne","align":"Zarovnať:","insertTableRowBeforeLabel":"Pridať riadok pred","cellSpacing":"Rozstupy buniek:","pixels":"pixely","selectTableLabel":"Vybrať tabuľku","rows":"Riadky:","modifyTableTitle":"Upraviť tabuľku","cellPadding":"Odsadenie obsahu buniek:","deleteTableRowLabel":"Vymazať riadok","backgroundColor":"Farba pozadia:","insertTableColumnAfterLabel":"Pridať stĺpec za","left":"vľavo","borderThickness":"Hrúbka rámčeka","columns":"Stĺpce:","percent":"percentá","borderColor":"Farba rámčeka:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/sl/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/sl/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/sl/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Nastavi","insertTableTitle":"Vstavi tabelo","insertTableRowAfterLabel":"Dodaj vrstico za","center":"na sredini","deleteTableColumnLabel":"Izbriši stolpec","right":"desno","insertTableColumnBeforeLabel":"Dodaj stolpec pred","tableWidth":"Širina tabele:","buttonInsert":"Vstavi","default":"privzeto","align":"Poravnaj:","insertTableRowBeforeLabel":"Dodaj vrstico pred","cellSpacing":"Razmik med celicami:","pixels":"pikslov","selectTableLabel":"Izberi tabelo","rows":"Vrstice:","modifyTableTitle":"Spremeni tabelo","cellPadding":"Odmik celic:","deleteTableRowLabel":"Izbriši vrstico","backgroundColor":"Barva ozadja:","insertTableColumnAfterLabel":"Dodaj stolpec za","left":"levo","borderThickness":"Debelina obrobe","columns":"Stolpci:","percent":"odstotkov","borderColor":"Barva obrobe:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/sv/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/sv/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/sv/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Ange","insertTableTitle":"Infoga tabell","insertTableRowAfterLabel":"Lägg till rad efter","center":"centrera","deleteTableColumnLabel":"Ta bort kolumn","right":"högerjustera","insertTableColumnBeforeLabel":"Lägg till kolumn före","tableWidth":"Tabellbredd:","buttonInsert":"Infoga","default":"standard","align":"Justera:","insertTableRowBeforeLabel":"Lägg till rad före","cellSpacing":"Cellavstånd:","pixels":"bildpunkter","selectTableLabel":"Välj tabell","rows":"Rader:","modifyTableTitle":"Ändra tabell","cellPadding":"Cellutfyllnad:","deleteTableRowLabel":"Ta bort rad","backgroundColor":"Bakgrundsfärg:","insertTableColumnAfterLabel":"Lägg till kolumn efter","left":"vänsterjustera","borderThickness":"Ramtjocklek","columns":"Kolumner:","percent":"%","borderColor":"Ramfärg:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/th/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/th/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/th/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"ตั้งค่า","insertTableTitle":"แทรกตาราง","insertTableRowAfterLabel":"เพิ่มแถวหลัง","center":"กึ่งกลาง","deleteTableColumnLabel":"ลบคอลัมน์","right":"ขวา","insertTableColumnBeforeLabel":"เพิ่มคอลัมน์ก่อน","tableWidth":"ความกว้างของตาราง:","buttonInsert":"แทรก","default":"ดีฟอลต์","align":"จัดตำแหน่ง:","insertTableRowBeforeLabel":"เพิ่มแถวก่อน","cellSpacing":"ระยะห่างเซลล์:","pixels":"พิกเซล","selectTableLabel":"เลือกตาราง","rows":"แถว:","modifyTableTitle":"ปรับเปลี่ยนตาราง","cellPadding":"ส่วนเสริมเซลล์:","deleteTableRowLabel":"ลบแถว","backgroundColor":"สีพื้นหลัง:","insertTableColumnAfterLabel":"เพิ่มคอลัมน์หลัง","left":"ซ้าย","borderThickness":"ความหนาเส้นขอบ","columns":"คอลัมน์:","percent":"เปอร์เซ็นต์","borderColor":"สีเส้นขอบ:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/tr/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/tr/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/tr/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"Ayarla","insertTableTitle":"Tablo Ekle","insertTableRowAfterLabel":"Satırı Arkasına Ekle","center":"orta","deleteTableColumnLabel":"Sütunu Sil","right":"sağ","insertTableColumnBeforeLabel":"Sütunu Önüne Ekle","tableWidth":"Tablo Genişliği","buttonInsert":"Ekle","default":"varsayılan","align":"Hizala:","insertTableRowBeforeLabel":"Satırı Önüne Ekle","cellSpacing":"Hücre Aralığı:","pixels":"piksel","selectTableLabel":"Tablo Seç","rows":"Satırlar:","modifyTableTitle":"Tabloyu Değiştir","cellPadding":"Hücre Doldurma:","deleteTableRowLabel":"Satırı Sil","backgroundColor":"Arka Plan Rengi:","insertTableColumnAfterLabel":"Sütunu Arkasına Ekle","left":"sol","borderThickness":"Kenarlık Kalınlığı","columns":"Sütunlar:","percent":"yüzde","borderColor":"Kenarlık Rengi: "})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"選取內容","deleteElement":"刪除元素","moveEnd":"將游標移到末尾","deleteContents":"刪除內容","nodeActions":"${nodeName} 動作","selectElement":"選取元素","moveStart":"將游標移到開頭"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"向後","findReplace":"切換尋找/取代","replaceAll":"所有出現位置","replaceDialogText":"取代了 ${0} 項。","replaceButton":"取代","findButton":"尋找","findLabel":"尋找目標:","matchCase":"大小寫相符","replaceLabel":"取代為:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"插入符號"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"分頁"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"預覽"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/Save.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/Save.js
@@ -0,0 +1,1 @@
+({"save":"儲存"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"顯示 HTML 區塊元素"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"大笑","emoticonCool":"酷","emoticonTongue":"吐舌頭","emoticonCrying":"哭泣","emoticonOops":"哎喲","emoticonFrown":"皺眉","emoticonAngry":"生氣","emoticonShy":"羞怯","emoticonNo":"不對","emoticonAngel":"守護神","smiley":"插入表情符號","emoticonIdea":"思考","emoticonEyebrow":"揚眉","emoticonSmile":"微笑","emoticonWink":"眨眼","emoticonYes":"對","emoticonGrin":"露齒而笑","emoticonGoofy":"傻了","emoticonHalf":"左右為難"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"設定","insertTableTitle":"插入表格","insertTableRowAfterLabel":"在後面新增一個列","center":"置中","deleteTableColumnLabel":"刪除欄","right":"靠右","insertTableColumnBeforeLabel":"在前面新增一個直欄","tableWidth":"表格寬度:","buttonInsert":"插入","default":"預設值","align":"對齊:","insertTableRowBeforeLabel":"在前面新增一個列","cellSpacing":"資料格間距:","pixels":"像素","selectTableLabel":"選取表格","rows":"列:","modifyTableTitle":"修改表格","cellPadding":"資料格行距:","deleteTableRowLabel":"刪除列","backgroundColor":"背景顏色:","insertTableColumnAfterLabel":"在後面新增一個直欄","left":"靠左","borderThickness":"邊框寬度","columns":"欄:","percent":"百分比","borderColor":"邊框顏色:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"小於或等於","prod":"n 元積\n積符號","zwj":"零寬連字符","mdash":"長破折號","frasl":"分數斜線","upsih":"帶鉤的希臘文 upsilon 符號","prop":"成比例","middot":"中點號\n中心點\n希臘中點","hellip":"水平省略號\n三個點開頭","eta":"希臘文小寫字母 η","iacute":"帶揚音符的拉丁文小寫字母 i","yen":"日圓符號\n人民幣符號","rlm":"從右到左標記","macr":"長音符\n間隔長音符\n上線\nAPL 上線","ldquo":"左雙引號","Icirc":"帶抑揚音符的拉丁文大寫字母 I","OElig":"拉丁文大寫連字 OE","hArr":"左右雙箭頭","eth":"拉丁文小寫字母 eth","divide":"除號","chi":"希臘文小寫字母 χ","eacute":"帶揚音符的拉丁文小寫字母 e","icirc":"帶抑揚音符的拉丁文小寫字母 i","iexcl":"倒感歎號","ETH":"拉丁文大寫字母 ETH","acute":"揚音符\n揚音符","crarr":"有向左轉的角的向下箭頭\n換行符號","mu":"希臘文小寫字母 μ","AElig":"拉丁文大寫字母 AE\n拉丁文大寫連字 AE","aacute":"帶揚音符的拉丁文小寫字母 a","lambda":"希臘文小寫字母 λ","THORN":"拉丁文大寫字母 THORN","asymp":"幾乎等於\n近似於","fnof":"帶短畫的拉丁文小寫 f\n函數\n弗洛林幣","lang":"左角括弧","cup":"併集\n杯狀","ne":"不等於","Sigma":"希臘文大寫字母 Σ","oelig":"拉丁文小寫連字 oe","cent":"英分","ni":"包含","dagger":"單劍註釋符號","permil":"千分號","Omicron":"希臘文大寫字母 Ο","sigma":"希臘文小寫字母 σ","euro":"歐元符號","Yacute":"帶揚音符的拉丁文大寫字母 Y","thorn":"拉丁文小寫字母 thorn","lceil":"左上限\nAPL 頂","Ograve":"帶抑音符的拉丁文大寫字母 O","rarr":"向右箭頭","nu":"希臘文小寫字母 ν","emsp":"長破折號間距","Theta":"希臘文大寫字母 Θ","lArr":"向左雙箭頭","tau":"希臘文小寫字母 τ","aelig":"拉丁文小寫字母 ae\n拉丁文小寫連字 ae","ccedil":"帶軟音符號的拉丁文小寫字母 c","Ntilde":"帶顎化符的拉丁文大寫字母 N","cong":"約等於","Uacute":"帶揚音符的拉丁文大寫字母 U","theta":"希臘文小寫字母 θ","darr":"向下箭頭","Uuml":"帶分音符的拉丁文大寫字母 U","bdquo":"9 形下標雙引號","Aring":"帶上圓圈的拉丁文大寫字母 A\n帶上圓圈的拉丁文大寫字母 A","sigmaf":"希臘文小寫字母 final sigma","pound":"英鎊","uArr":"向上雙箭頭","sub":"子集","aring":"帶上圓圈的拉丁文 a\n帶上圓圈的拉丁文 a","sdot":"點運算子","thinsp":"薄間距","or":"邏輯 OR\nV 形符號","Eacute":"帶揚音符的拉丁文大寫字母 E","shy":"軟連字號\n自由選定的連字號","curren":"貨幣符號","loz":"菱形","not":"非符號","tilde":"小波狀符號","sum":"n 元和","spades":"黑色黑桃","Psi":"希臘文大寫字母 Ψ","ndash":"短破折號","sup":"超集","atilde":"帶顎化符的拉丁文小寫字母 a","clubs":"黑色梅花\n三葉草","uuml":"帶分音符的拉丁文小寫字母 u","Aacute":"帶揚音符的拉丁文大寫字母 A","rsaquo":"右尖單角引號","otimes":"帶圓圈的乘號\n向量積","lfloor":"左下限\nAPL 底","zwnj":"零寬非連字符","sim":"波狀符號運算子\n偏離\n近似","Iota":"希臘文大寫字母 Ι","Iacute":"帶揚音符的拉丁文大寫字母 I","pi":"希臘文小寫字母 π","ordf":"陰性序數指示符","frac12":"普通分數二分之一\n分數二分之一","frac14":"普通分數四分之一\n分數四分之一","alefsym":"alef 符號\n第一個超窮基數","bull":"項目符號\n黑色小圓圈","deg":"度號","ordm":"陽性序數指示符","epsilon":"希臘文小寫字母 ε","equiv":"完全相等","Dagger":"雙劍註釋符號","brvbar":"斷開的豎線\n斷開的垂直線","harr":"左右箭頭","ugrave":"帶抑音符的拉丁文小寫字母 u","oslash":"帶斜線的拉丁文小寫字母 O\n帶斜線的小寫字母 o","Yuml":"帶分音符的拉丁文大寫字母 Y","hearts":"黑色紅桃\n心形","Xi":"希臘文大寫字母 Ξ","Prime":"雙撇號\n秒\n英吋","iota":"希臘文小寫字母 ι","Ccedil":"帶軟音符號的拉丁文大寫字母 C","Lambda":"希臘文大寫字母 Λ","raquo":"右尖雙角引號\n右尖雙引號","Phi":"希臘文大寫字母 Φ","prime":"撇號\n分鐘\n英呎","nsub":"非子集","copy":"著作權符號","yuml":"帶分音符的拉丁文小寫字母 y","Rho":"希臘文大寫字母 Ρ","Ucirc":"帶抑揚音符的拉丁文大寫字母 U","Kappa":"希臘文大寫字母 Κ","ucirc":"帶抑揚音符的拉丁文小寫字母 u","sbquo":"9 形下標單引號","igrave":"帶抑音符的拉丁文小寫字母 i","reg":"已註冊符號\n註冊商標符號","infin":"無限","iquest":"顛倒的問號\n倒轉的問號","circ":"修飾元字母抑揚音符","kappa":"希臘文小寫字母 κ","lrm":"從左到右標記","Atilde":"帶顎化符的拉丁文大寫字母 A","larr":"向左箭頭","frac34":"普通分數四分之三\n分數四分之三","oacute":"帶揚音符的拉丁文小寫字母 o","rsquo":"右單引號","egrave":"帶抑音符的拉丁文小寫字母 e","oline":"上線\n間隔上線","Mu":"希臘文大寫字母 Μ","exist":"存在","cap":"交集\n蓋狀","and":"邏輯 AND\n楔形符號","Ouml":"帶分音符的拉丁文大寫字母 O","agrave":"帶抑音符的拉丁文小寫字母 a\n帶抑音符的拉丁文小寫字母 a","uarr":"向上箭頭","ang":"角符號","Zeta":"希臘文大寫字母 Ζ","scaron":"帶倒折音的拉丁文小寫字母 s","Gamma":"希臘文大寫字母 Γ","isin":"屬於","Auml":"帶分音符的拉丁文大寫字母 A","empty":"空集\n空集\n直徑","gamma":"希臘文小寫字母 γ","para":"¶ 符號\n段落符號","ge":"大於或等於","psi":"希臘文小寫字母 ψ","Alpha":"希臘文大寫字母 Α","Nu":"希臘文大寫字母 Ν","ouml":"帶分音符的拉丁文小寫字母 o","zeta":"希臘文小寫字母 ζ","alpha":"希臘文小寫字母 α","part":"偏微分","auml":"帶分音符的拉丁文小寫字母 a","Ugrave":"帶抑音符的拉丁文大寫字母 U","Oslash":"帶斜線的拉丁文大寫字母 O\n帶斜線的大寫字母 O","Epsilon":"希臘文大寫字母 Ε","int":"整數的","Omega":"希臘文大寫字母 Ω","perp":"向上的釘子\n垂直於\n垂線","uml":"分音符號\n元音分音","upsilon":"希臘文小寫字母 υ","lowast":"星號運算子","omega":"希臘文小寫字母 ω","otilde":"帶顎化符的拉丁文小寫字母 o","Egrave":"帶抑音符的拉丁文大寫字母 E","phi":"希臘文小寫字母 φ","ensp":"短破折號間距","Euml":"帶分音符的拉丁文大寫字母 E","cedil":"軟音符號\n間距軟音符號","laquo":"左尖雙角引號\n左尖雙引號","forall":"全部","thetasym":"希臘文小寫字母 theta 符號","Agrave":"帶抑音符的拉丁文大寫字母 A\n帶抑音符的拉丁文大寫字母 A","szlig":"拉丁文小寫字母 sharp s\ness-zed","Pi":"希臘文大寫字母 Π","rho":"希臘文小寫字母 ρ","trade":"商標符號","Igrave":"帶抑音符的拉丁文大寫字母 I","minus":"減號","Beta":"希臘文大寫字母 Β","Ocirc":"帶抑揚音符的拉丁文大寫字母 O","rdquo":"右雙引號","Eta":"希臘文大寫字母 Η","rfloor":"右下限","Oacute":"帶揚音符的拉丁文大寫字母 O","euml":"帶分音符的拉丁文小寫字母 e","oplus":"帶圓圈的加號\n直和","ocirc":"帶抑揚音符的拉丁文小寫字母 o","radic":"平方根\n根號","Chi":"希臘文大寫字母 Χ","notin":"不屬於","sect":"小節符號","Acirc":"帶抑揚音符的拉丁文大寫字母 A","lsquo":"左單引號","beta":"希臘文小寫字母 β","piv":"希臘文 pi 符號","sup1":"上標 1\n上標數字 1","Scaron":"帶倒折音的拉丁文大寫字母 S","sup2":"上標 2\n上標數字 2\n平方","acirc":"帶抑揚音符的拉丁文小寫字母 a","sube":"子集或等於","sup3":"上標 3\n上標數字 3\n立方","real":"黑色大寫字母 R\n實數部分符號","Iuml":"帶分音符的拉丁文大寫字母 I","rang":"右角括弧","lsaquo":"左尖單角引號","nabla":"倒三角算子\n反向差分","omicron":"希臘文小寫字母 ο","there4":"因此","plusmn":"加減符號\n正負號","rceil":"右上限","micro":"µ 符號","rArr":"向右雙箭頭","Delta":"希臘文大寫字母 Δ","iuml":"帶分音符的拉丁文小寫字母 i","Tau":"希臘文大寫字母 Τ","times":"乘號","yacute":"帶揚音符的拉丁文小寫字母 y","ograve":"帶抑音符的拉丁文小寫字母 o","delta":"希臘文小寫字母 δ","Ecirc":"帶抑揚音符的拉丁文大寫字母 E","dArr":"向下雙箭頭","ntilde":"帶顎化符的拉丁文小寫字母 n","diams":"黑色方塊","uacute":"帶揚音符的拉丁文小寫字母 u","Otilde":"帶顎化符的拉丁文大寫字母O","ecirc":"帶抑揚音符的拉丁文小寫字母 e","Upsilon":"希臘文大寫字母 Υ","image":"黑色大寫字母 I\n虛數部分","supe":"超集或等於","xi":"希臘文小寫字母 ξ","weierp":"Script 大寫 P\n冪集\nWeierstrass p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js b/js/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js
@@ -0,0 +1,1 @@
+({"selectContents":"选择内容","deleteElement":"删除元素","moveEnd":"将光标移至结尾","deleteContents":"删除内容","nodeActions":"${nodeName} 操作","selectElement":"选择元素","moveStart":"将光标移至开头"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/FindReplace.js b/js/dojo/dojox/editor/plugins/nls/zh/FindReplace.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/FindReplace.js
@@ -0,0 +1,1 @@
+({"backwards":"向后","findReplace":"切换“查找/替换”","replaceAll":"所有出现位置","replaceDialogText":"已替换 ${0} 个出现位置。","replaceButton":"替换","findButton":"查找","findLabel":"查找对象:","matchCase":"大小写匹配","replaceLabel":"替换为:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js b/js/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js
@@ -0,0 +1,1 @@
+({"insertEntity":"插入符号"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/PageBreak.js b/js/dojo/dojox/editor/plugins/nls/zh/PageBreak.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/PageBreak.js
@@ -0,0 +1,1 @@
+({"pageBreak":"换页符"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/Preview.js b/js/dojo/dojox/editor/plugins/nls/zh/Preview.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/Preview.js
@@ -0,0 +1,1 @@
+({"preview":"预览"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/Save.js b/js/dojo/dojox/editor/plugins/nls/zh/Save.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/Save.js
@@ -0,0 +1,1 @@
+({"save":"保存"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js b/js/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js
@@ -0,0 +1,1 @@
+({"showBlockNodes":"显示 HTML 块元素"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/Smiley.js b/js/dojo/dojox/editor/plugins/nls/zh/Smiley.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/Smiley.js
@@ -0,0 +1,1 @@
+({"emoticonLaughing":"大笑","emoticonCool":"酷","emoticonTongue":"吐舌","emoticonCrying":"哭泣","emoticonOops":"oops","emoticonFrown":"皱眉","emoticonAngry":"愤怒","emoticonShy":"害羞","emoticonNo":"摇头","emoticonAngel":"天使","smiley":"插入表情图标","emoticonIdea":"思考","emoticonEyebrow":"挑眉","emoticonSmile":"微笑","emoticonWink":"眨眼","emoticonYes":"点头","emoticonGrin":"咧着嘴笑","emoticonGoofy":"傻了","emoticonHalf":"左右为难"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/TableDialog.js b/js/dojo/dojox/editor/plugins/nls/zh/TableDialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/TableDialog.js
@@ -0,0 +1,1 @@
+({"buttonSet":"设置","insertTableTitle":"插入表","insertTableRowAfterLabel":"在之后添加行","center":"中间对齐","deleteTableColumnLabel":"删除列","right":"右边对齐","insertTableColumnBeforeLabel":"在之前添加列","tableWidth":"表宽度:","buttonInsert":"插入","default":"缺省值","align":"对齐:","insertTableRowBeforeLabel":"在之前添加行","cellSpacing":"单元格间距:","pixels":"像素","selectTableLabel":"选择表","rows":"行:","modifyTableTitle":"修改表","cellPadding":"单元格边距:","deleteTableRowLabel":"删除行","backgroundColor":"背景色:","insertTableColumnAfterLabel":"在之后添加列","left":"左边对齐","borderThickness":"边框厚度","columns":"列:","percent":"百分比","borderColor":"边框色:"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/nls/zh/latinEntities.js b/js/dojo/dojox/editor/plugins/nls/zh/latinEntities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/nls/zh/latinEntities.js
@@ -0,0 +1,1 @@
+({"le":"小于或等于","prod":"N 元积\n积符号","zwj":"零宽度连字符","mdash":"长破折号","frasl":"分数斜杠","upsih":"带挂钩符号的希腊字母 upsilon","prop":"成比例","middot":"中心点\n乔治逗号\n希腊中心点","hellip":"水平省略号\n三个点组成的标题","eta":"希腊小写字母 η","iacute":"带锐音符的拉丁小写字母 i","yen":"日元符号/人民币符号","rlm":"从右向左标记","macr":"长音符号\n间隔长音符号\n破折号\nAPL 破折号","ldquo":"左双引号","Icirc":"带抑扬符的拉丁大写字母 I","OElig":"拉丁大写连字 OE","hArr":"左右向双箭头","eth":"拉丁小写字母 eth","divide":"除号","chi":"希腊小写字母 χ","eacute":"带锐音符的拉丁小写字母 e","icirc":"带抑扬符的拉丁小写字母 i","iexcl":"反感叹号","ETH":"拉丁大写字母 ETH","acute":"锐音符\n间隔锐音符","crarr":"回车符\n回车符","mu":"希腊小写字母 μ","AElig":"拉丁大写字母 AE\n拉丁大写连字 AE","aacute":"带锐音符的拉丁小写字母 a","lambda":"希腊小写字母 λ","THORN":"拉丁大写字母 THORN","asymp":"几乎等于\n渐近","fnof":"带挂钩符号的拉丁小写 f\n分数\nflorin","lang":"左尖括号","cup":"并集n\n杯状","ne":"不等于","Sigma":"希腊大写字母 Σ","oelig":"拉丁小写连字 oe","cent":"分币符号","ni":"作为成员包含","dagger":"剑号","permil":"千分率符号","Omicron":"希腊大写字母 Ο","sigma":"希腊小写字母 σ","euro":"欧元符号","Yacute":"带锐音符的拉丁大写字母 Y","thorn":"拉丁小写字母 thorn","lceil":"左上限\nAPL 顶","Ograve":"带重音符的拉丁大写字母 O","rarr":"向右箭头","nu":"希腊小写字母 ν","emsp":"双倍间距","Theta":"希腊大写字母 Θ","lArr":"向左双箭头","tau":"希腊小写字母 τ","aelig":"拉丁小写字母 ae\n拉丁小写连字 ae","ccedil":"带软音符的拉丁小写字母 c","Ntilde":"带颚化音的拉丁大写字母 N","cong":"约等于","Uacute":"带锐音符的拉丁大写字母 U","theta":"希腊小写字母 θ","darr":"向下箭头","Uuml":"带分音符的拉丁大写字母 U","bdquo":"低双引号","Aring":"带上圆圈的拉丁大写字母 A\n带圆圈的拉丁大写字母 A","sigmaf":"希腊小写字母 final sigma","pound":"英镑符号","uArr":"向上双箭头","sub":"...的子集","aring":"带上圆圈的拉丁小写字母 a\n带圆圈的拉丁小写字母 a","sdot":"点运算符","thinsp":"窄空格","or":"逻辑或\n V 字形","Eacute":"带锐音符的拉丁大写字母 E","shy":"软连字符\n自由选定连字符","curren":"货币符号","loz":"菱形","not":"非符号","tilde":"小颚化音符号","sum":"N 元和","spades":"黑色桃形","Psi":"希腊大写字母 Ψ","ndash":"短破折号","sup":"...的超集","atilde":"带颚化音的拉丁小写字母 a","clubs":"黑色梅花形\n三叶草","uuml":"带分音符的拉丁小写字母 u","Aacute":"带锐音符的拉丁大写字母 A","rsaquo":"右尖括号","otimes":"带圆圈的乘号\n向量积","lfloor":"左下限\nAPL 底","zwnj":"零宽度非连字符","sim":"颚化音运算符\n偏离\n相似","Iota":"希腊大写字母 Ι","Iacute":"带锐音符的拉丁大写字母 I","pi":"希腊小写字母 π","ordf":"阴性序数指示符","frac12":"普通二分之一\n二分之一","frac14":"普通四分之一\n四分之一","alefsym":"alef 符号\n第一个超限基数","bull":"子弹符号\n黑色小圆圈","deg":"度符号","ordm":"阳性序数指示符","epsilon":"希腊小写字母 ε","equiv":"完全相等","Dagger":"双剑号","brvbar":"横向虚线\n纵向虚线","harr":"向左上箭头","ugrave":"带重音符的拉丁小写字母 u","oslash":"带竖线的拉丁小写字母 o\n带斜杠的拉丁小写字母 o","Yuml":"带分音符的拉丁大写字母 Y","hearts":"黑色心形\n心形","Xi":"希腊大写字母 Ξ","Prime":"秒符号\n秒\n寸","iota":"希腊小写字母 ι","Ccedil":"带软音符的拉丁大写字母 C","Lambda":"希腊大写字母 Λ","raquo":"右双尖括号\n右双尖括号","Phi":"希腊大写字母 Φ","prime":"分钟符号\n分钟\n尺","nsub":"不是...的子集","copy":"版权符号","yuml":"带分音符的拉丁小写字母 y","Rho":"希腊大写字母 Ρ","Ucirc":"带抑扬符的拉丁大写字母 U","Kappa":"希腊大写字母 Κ","ucirc":"带抑扬符的拉丁小写字母 u","sbquo":"低单引号","igrave":"带重音符的拉丁小写字母 i","reg":"注册符号\n注册商标符号","infin":"无限","iquest":"倒问号\n倒问号","circ":"修饰符字母抑扬符重音符","kappa":"希腊小写字母 κ","lrm":"从左向右标记","Atilde":"带颚化音的拉丁大写字母 A","larr":"向左箭头","frac34":"普通四分之三\n四分之三","oacute":"带锐音符的拉丁小写字母 o","rsquo":"右单引号","egrave":"带重音符的拉丁小写字母 e","oline":"顶线\n间隔顶线","Mu":"希腊大写字母 Μ","exist":"存在","cap":"交集\n盖状","and":"逻辑和\n尖三角形","Ouml":"带分音符的拉丁大写字母 O","agrave":"带重音符的拉丁小写字母 a\n带重音符的拉丁小写字母 a","uarr":"向上箭头","ang":"角度","Zeta":"希腊大写字母 Ζ","scaron":"带倒折音的拉丁小写字母 s","Gamma":"希腊大写字母 Γ","isin":"...的元素","Auml":"带分音符的拉丁大写字母 A","empty":"空集\n空集\n直径","gamma":"希腊小写字母 γ","para":"段落符号\n段落符号","ge":"大于或等于","psi":"希腊小写字母 ψ","Alpha":"希腊大写字母 Α","Nu":"希腊大写字母 Ν","ouml":"带分音符的拉丁小写字母 o","zeta":"希腊小写字母 ζ","alpha":"希腊小写字母 α","part":"部分差分","auml":"带分音符的拉丁小写字母 a","Ugrave":"带重音符的拉丁大写字母 U","Oslash":"带竖线的拉丁大写字母 O\n带斜杠的拉丁大写字母 O","Epsilon":"希腊大写字母 Ε","int":"整数","Omega":"希腊大写字母 Ω","perp":"倒 T\n正交于\n垂直","uml":"分音符\n间隔分音符","upsilon":"希腊小写字母 υ","lowast":"星号运算符","omega":"希腊小写字母 ω","otilde":"带颚化音的拉丁小写字母 o","Egrave":"带重音符的拉丁大写字母 E","phi":"希腊小写字母 φ","ensp":"单倍间距","Euml":"带分音符的拉丁大写字母 E","cedil":"软音符\n间隔软音符","laquo":"左双尖括号\n左双尖括号","forall":"全部","thetasym":"希腊小写字母 theta 符号","Agrave":"带重音符的拉丁大写字母 A\n带重音符的拉丁大写字母 A","szlig":"拉丁小写字母 sharp s\ness-zed","Pi":"希腊大写字母 Π","rho":"希腊小写字母 ρ","trade":"商标符号","Igrave":"带重音符的拉丁大写字母 I","minus":"负号","Beta":"希腊大写字母 Β","Ocirc":"带抑扬符的拉丁大写字母 O","rdquo":"右双引号","Eta":"希腊大写字母 Η","rfloor":"右下限","Oacute":"带锐音符的拉丁大写字母 O","euml":"带分音符的拉丁小写字母 e","oplus":"带圆圈的加号\n异或","ocirc":"带抑扬符的拉丁小写字母 o","radic":"平方根\n根号","Chi":"希腊大写字母 Χ","notin":"不是...的元素","sect":"小节符号","Acirc":"带抑扬符的拉丁大写字母 A","lsquo":"左单引号","beta":"希腊小写字母 β","piv":"希腊 pi 符号","sup1":"上标 1\n上标数字 1","Scaron":"带倒折音的拉丁大写字母 S","sup2":"上标 2\n上标数字 2\n平方","acirc":"带抑扬符的拉丁小写字母 a","sube":"...的子集或等于","sup3":"上标 3\n上标数字 3\n立方","real":"黑色大写字母 R\n实部符号","Iuml":"带分音符的拉丁大写字母 I","rang":"右尖括号","lsaquo":"左尖括号","nabla":"劈形算符\n后向差分","omicron":"希腊小写字母 ο","there4":"因此","plusmn":"正负号\n正号或负号","rceil":"右上限","micro":"μ 符号","rArr":"向右双箭头","Delta":"希腊大写字母 Δ","iuml":"带分音符的拉丁小写字母 i","Tau":"希腊大写字母 Τ","times":"乘号","yacute":"带锐音符的拉丁小写字母 y","ograve":"带重音符的拉丁小写字母 o","delta":"希腊小写字母 δ","Ecirc":"带抑扬符的拉丁大写字母 E","dArr":"向下双箭头","ntilde":"带颚化音的拉丁小写字母 n","diams":"黑色菱形","uacute":"带锐音符的拉丁小写字母 u","Otilde":"带颚化音的拉丁大写字母 O","ecirc":"带抑扬符的拉丁小写字母 e","Upsilon":"希腊大写字母 Υ","image":"黑色大写字母 I\n虚部符号","supe":"...的超集或等于","xi":"希腊小写字母 ξ","weierp":"脚本大写 P\n幂集\nWeierstrass p"})
\ No newline at end of file
diff --git a/js/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css b/js/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css
@@ -0,0 +1,10 @@
+.dojoxEditorBreadcrumbArrow .dijitDownArrowButton {
+ width: 10px;
+}
+.dojoxEditorBreadcrumbArrow .dijitArrowButtonInner {
+ background-image: url(../icons/breadcrumbDown.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 8px;
+ height: 8px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/FindReplace.css b/js/dojo/dojox/editor/plugins/resources/css/FindReplace.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/FindReplace.css
@@ -0,0 +1,59 @@
+.dijitAdditionalEditorIconFindReplace {
+ background-image: url(../icons/findReplace.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconFindReplace {
+ background-image: url(../icons/findReplaceDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitAdditionalEditorIconFindRun {
+ background-image: url(../icons/findIcon.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.dijitAdditionalEditorIconReplaceRun {
+ background-image: url(../icons/replaceIcon.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.dijitDisabled .dijitAdditionalEditorIconFindRun {
+ background-image: url(../icons/findIconDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.dijitDisabled .dijitAdditionalEditorIconReplaceRun {
+ background-image: url(../icons/replaceIconDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.findReplaceCheckBox {
+ padding-left: 10px;
+ padding-right: 10px;
+ text-align: center;
+}
+.findReplaceTextBox {
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/InsertEntity.css b/js/dojo/dojox/editor/plugins/resources/css/InsertEntity.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/InsertEntity.css
@@ -0,0 +1,80 @@
+.dijitAdditionalEditorIconInsertEntity {
+ background-image: url(../icons/insertEntity.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconInsertEntity {
+ background-image: url(../icons/insertEntityDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dojoxEntityPalette {
+ border:1px solid #999;
+ background:#fff;
+ -moz-border-radius:3pt;
+}
+.dojoxEntityPaletteTable {
+ position: relative;
+ overflow:hidden;
+ outline-color: black;
+ outline-style: none;
+ outline-width: 0;
+ border: 0px solid black;
+ border-collapse: separate;
+ border-spacing: 2px;
+ margin: 2px;
+ table-layout: auto;
+}
+.dojoxEntityPaletteCell {
+ border: 1px dotted gray;
+ width: 20px;
+ height: 20px;
+ overflow: hidden;
+ z-index: 10;
+ text-align: center;
+}
+.dojoxEntityPaletteNullCell {
+ border: none;
+ width: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dojoxEntityPaletteCellHighlight {
+ width: 16px;
+ height: 14px;
+ overflow: hidden;
+ cursor: default;
+ border:2px solid #000;
+ outline:1px solid #dedede;
+}
+.dojoxEntityPalettePreviewTable {
+ table-layout: auto;
+ font-size: 1em;
+ width: 100%;
+}
+.dojoxEntityPalettePreviewHeader {
+ font-size: .8em;
+ padding: 3px 3px 3px 3px;
+}
+.dojoxEntityPalettePreviewDetailEntity {
+ font-size: 3em;
+ font-weight: bold;
+ width: 1em;
+ text-align: center;
+}
+.dojoxEntityPalettePreviewDetail {
+ font-size: 1em;
+ vertical-align: middle;
+ font-weight: bold;
+ padding: 3px 3px 3px 3px;
+}
+.dijit_a11y .dojoxEntityPaletteCell {
+ background-color:transparent !important;
+}
+.dijit_a11y .dojoxEntityPaletteImg {
+ background-color:transparent !important;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/PageBreak.css b/js/dojo/dojox/editor/plugins/resources/css/PageBreak.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/PageBreak.css
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconPageBreak {
+ background-image: url(../icons/pageBreak.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconPageBreak {
+ background-image: url(../icons/pageBreakDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/Preview.css b/js/dojo/dojox/editor/plugins/resources/css/Preview.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/Preview.css
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconPreview {
+ background-image: url(../icons/preview.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconPreview {
+ background-image: url(../icons/previewDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/Save.css b/js/dojo/dojox/editor/plugins/resources/css/Save.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/Save.css
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconSave {
+ background-image: url(../icons/save.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconSave {
+ background-image: url(../icons/saveDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css b/js/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconShowBlockNodes {
+ background-image: url(../icons/showBlockNodes.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconShowBlockNodes {
+ background-image: url(../icons/showBlockNodesDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/css/Smiley.css b/js/dojo/dojox/editor/plugins/resources/css/Smiley.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/css/Smiley.css
@@ -0,0 +1,69 @@
+.dijitAdditionalEditorIconSmiley {
+ background-image: url(../icons/smiley.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconSmiley {
+ background-image: url(../icons/insertEntityDisabled.gif);
+ background-repeat: no-repeat;
+ background-position: center center;
+ width: 18px;
+ height: 18px;
+}
+.dojoxEntityPalette {
+ border:1px solid #999;
+ background:#fff;
+ -moz-border-radius:3pt;
+}
+.dojoxEntityPaletteTable {
+ position: relative;
+ overflow:hidden;
+ outline-color: black;
+ outline-style: none;
+ outline-width: 0;
+ border: 0px solid black;
+ border-collapse: separate;
+ border-spacing: 2px;
+ margin: 2px;
+ table-layout: auto;
+}
+.dojoxEntityPaletteCell {
+ border: 1px dotted gray;
+ width: 20px;
+ height: 20px;
+ overflow: hidden;
+ z-index: 10;
+ text-align: center;
+}
+.dojoxEntityPaletteNullCell {
+ border: none;
+ width: 20px;
+ height: 20px;
+ overflow: hidden;
+}
+.dojoxEntityPaletteCellHighlight {
+ width: 16px;
+ height: 14px;
+ overflow: hidden;
+ cursor: default;
+ border:2px solid #000;
+ outline:1px solid #dedede;
+}
+.dijit_a11y .dojoxEntityPaletteCell {
+ background-color:transparent !important;
+}
+.dijit_a11y .dojoxSmileyPaletteImg {
+ background-color:transparent !important;
+}
+.dojoxSmileyPaletteImg {
+ width: 16px;
+ height: 14px;
+ top: 1px;
+ left: 1px;
+ overflow: hidden;
+ cursor: default;
+ border:1px solid #999;
+
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/editorPlugins.css b/js/dojo/dojox/editor/plugins/resources/editorPlugins.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/editorPlugins.css
@@ -0,0 +1,167 @@
+
+.EditorTableDialog{
+}
+.EditorTableDialog .etdTable{
+ width:350px;
+ border:none;
+ table-layout:fixed;
+ border-collapse:collapse;
+}
+.EditorTableDialog .etdTable td{
+ width:200px;
+ border:#CCCCCC 0px solid;
+ padding:5px;
+}
+.EditorTableDialog .etdTable td.left{
+ width:200px;
+}
+.EditorTableDialog .etdTable td.right{
+ width:150px;
+}
+.EditorTableDialog .dijitTextBox{
+ width:50px;
+ float:right;
+ padding-left:3px;
+}
+.EditorTableDialog .dijitComboBox{
+ width:85px;
+ padding-left:5px;
+}
+.EditorTableDialog .etdTable .floatDijit{
+ float:right;
+}
+.EditorTableDialog label{
+ float:right;
+ margin:0;
+ margin-right:5px;
+}
+.EditorTableDialog .cellpad{
+ background:url(images/cellpad.png) no-repeat 5px;
+}
+.EditorTableDialog .cellspace{
+ background:url(images/cellspace.png) no-repeat 5px;
+}
+.dialogButtonContainer{
+ text-align:right;
+ margin-top:10px;
+ cursor:pointer;
+}
+.colorSwatchBtn{
+ display:block;
+ border:#666666 2px solid;
+ background-color:#CCCCCC;
+ width:16px;
+ height:16px;
+ cursor:pointer;
+ float:right;
+}
+.colorSwatchBtn:hover{
+ border:#0099FF 2px solid;
+}
+.colorSwatchBtn div{
+ background-color:#CCCCCC;
+ width:16px;
+ height:16px;
+ cursor:pointer;
+}
+.editorIcon{
+ background-image:url(images/tableIcons.png);
+ background-repeat: no-repeat;
+ width: 16px;
+ height: 16px;
+ text-align: center;
+}
+.editorIconUploadImage{
+ background:url(images/uploadImageIcon.gif) no-repeat 0px 4px;
+}
+.editorIconInsertTable{
+ background-position:0px 0px; }
+.editorIconInsertTableRowBefore{
+ background-position:-19px 0px; }
+.dijitDisabled .editorIconInsertTableRowBefore{
+ background-position:-120px 0px; }
+
+.editorIconInsertTableRowAfter{
+ background-position:-35px 0px; }
+.dijitDisabled .editorIconInsertTableRowAfter{
+ background-position:-136px 0px; }
+.editorIconInsertTableColumnBefore{
+ background-position:-52px 0px; }
+.dijitDisabled .editorIconInsertTableColumnBefore{
+ background-position:-154px 0px; }
+
+.editorIconInsertTableColumnAfter{
+ background-position:-69px 0px; }
+.dijitDisabled .editorIconInsertTableColumnAfter{
+ background-position:-171px 0px; }
+
+.editorIconDeleteTableRow{
+ background-position:-86px 0px; }
+.dijitDisabled .editorIconDeleteTableRow{
+ background-position:-205px 0px; }
+
+.editorIconDeleteTableColumn{
+ background-position:-103px 0px; }
+.dijitDisabled .editorIconDeleteTableColumn{
+ background-position:-188px 0px; }
+
+.editorIconColorTableCell{
+ background-position:-222px 0px; }
+.dijitDisabled .editorIconColorTableCell{
+ background-position:-239px 0px; }
+.editorIconModifyTable{
+ background-position:-256px 0px; }
+.dijitDisabled .editorIconModifyTable{
+ background-position:-273px 0px; }
+.RichTextEditable .dijitTextBox,
+.RichTextEditable .dijitComboBox,
+.RichTextEditable .dijitSpinner {
+ width: 5em;
+}
+.dojoxDropDownSelect {
+ background:#FFFFFF url(images/dropBk.png) repeat-x scroll left top;
+ border: 1px solid;
+ border-top-color:#cccccc;
+ border-right-color:#cccccc;
+ border-left-color:#999999;
+ border-bottom-color:#ffffff;
+}
+.dojoxDropDownSelect.dojoxDropDownSelectHover{
+ background-image:url(images/dropBkOver.png);
+}
+.dojoxDropDownSelect button{
+ line-height:16px;
+ height:16px;
+ width:100px;
+ text-align:left;
+ color:#8397b9;
+}
+.dijitButtonNode .dijitArrowButtonInner{
+
+ background:url(../../../../dijit/themes/tundra/images/spriteArrows.png) no-repeat left top;
+ width:7px;
+}
+.dojoxEditorUploadNorm{
+ font-family:Arial;
+ font-size:12px;
+
+
+ vertical-align: middle;
+
+ margin:0;
+ line-height:normal;
+ text-align:center;
+ white-space: nowrap;
+
+ cursor: pointer;
+ background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 2px;
+}
+.dojoxEditorUploadHover{
+ background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 0px;
+}
+.dojoxEditorUploadActive{
+ background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 4px;
+}
+.dojoxEditorUploadDisabled{
+ background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 2px;
+}
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8841b9b6f0ce80be99dd67baf25a9026d46e96b7
GIT binary patch
literal 3908
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
H7+Cjj8;AWQ
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8290ee09799add3e126575abcddcfa30642dda6c
GIT binary patch
literal 1094
zc${<hbhEHb6k-r!cvivi|Ec2tXUhK{%YWF$@cRb;|0fE6ZVG0^`+Psm@cTONsZ*!^
zKa&0bOsS!+^7|Qv-?s$+KT&+MnxVe7;{Ox*mx~yF-xPR0hvDyC@qZ7b-fv=fzmcIc
z$6#Td+VAUpzpik7KgIC(p2Uak44?Kg{5Zq#?}7BM%N+k6%Km>O_xHZ!x04KiZVUgp
zEz)1D-<WC8S7p#wuHRp6&|7TqX+Oi;bqq)5iGMlF@b)<O|L4k2ma#ru%(|mR{MJO)
z`nrnDM4xTV62C67XC(L>SuEb1ZIG4Z^Y?*NXQuv~LbW|JB>vr(>@79;c#8Ym35G9+
z7&<cy?oMWXvx=d$*x=1RwpTk?_sx^|_gMbkG`4>aWo}GiTi&Pk;~dlL18o29OJyYb
zyxPaskYe!fk!(k%!Sk)GTWTe?*Nfkn#MYH>@OeMO{h4f^4>G(x$oBaV!?#lmA9gVO
z1N!KW*peknT3T98pFW+Jmp5a^jBD4f{eP<T|Nl&5<C*{e|7XAk6#sMkxrPKgI|jHK
z=@~FHf`opuuyQd}FzA5fLD9s({=cE3si`o(ps1)Izp%NtqNF%RFE}&M-P57Cq>qa?
zz>JfPP1asM(TSI<xkM;}vpkxcTSdHFSxLrbc15uPr-ynu6Dw=E1Pg~^YH>xOvzNGf
zX=%B@)lv;r9}D(Y9ZnUdvT_E7D`je;no`njj%?hI%1e2k3u|#OTeU}hV13NPbR+s<
z!U0j2SgQz41KkI_jUjStPCBRw_6jMmI4~4E_iJEa=%`pBnAo#OT%IFA;J`-Z27P{+
z4GRNO0{JzSIT{Que&p+7k38d2aH%((N05Uf<i*Q_jXjcLvka<L8V@s=cng$-2tVp%
zRTe6H`0|QUdmAIOk;{S&hrPAjCy4Ond?;MjC1JpBVks5!B4Ckg9}^=uphQ3c#m>OR
zz|6o33@F|P9>$6mo|X!&c0SEUL{K7Ba5a>dGd8uhaWpj!7Xzk&q*;KHoD4ibX`P0O
zyo#0<mR6>Ymh$on)(VD-p4KT-r%j(RjfZjOv~pqL+}<f#+Wgb`G+U8e05O0YXn;~f
lMLE!b=C;;$_0p!^QjOM$lO_WVn94Irt$faeNppbOtN|u4gI)jt
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3583c92be718637055c139a60dd6fdcebeaa0645
GIT binary patch
literal 1041
zc${<hbhEHb6k-r!xN63b5$}_k=#!V1S6^FUY&^3wQ@<g_pgG&1GsmE>T))3szqQz)
zx747o%3w~R+V*<!EwvI0>(m<RDz`OD>}V0+H&0@DpW2am;`gSp-Ji*JWU=`3ISdaM
zvp!kI`f?G&+jR`jx3a$9#PDVx+lTE8pZ7DoJ;?U<IQN&s4ByW%{5Z$-`#RsB+aiDO
zivPVY`TvRh|L4jrEiE%<%viEy$^ZW|PoF-0?b@~f|Nk@K28#c={aizWogD*Qjr0td
z89_onSy*cs%oub)@*r<Au<du49pEwfAPdus9<!WVSsNV|2ML8rG)A2DoUG%c6=u=O
zB&*_+n47@4J!;)F3)e25ZQCN8S<83E)#+(zD03K^v2=EI_pmUS^s?wr>~!m$+|$y@
zq}r`Nzgwq8f`v&*tA75f`Fe{KB|OCw>sHTCQkUoV;?$^Fxk`_vMUK^*QBgxjr#7FZ
zL|&r5l1F9lOci<Qwk&2r<*OPG)s=7Zl{?3>%g8G$E8dh~%kT?e;1HIS5a3{l@_XSn
zLBrEng#+v-eu$q~fIeae`bpQJslY==DCb1Vr==lssb@8WL^sKro|@S^GeuD|Ry=t3
z*0V8Qj+<0-wRh%43xG`EgqpwvG=UFjf`h~Cf{bX%PM4;llQ}{YT*O0uEb(2qyzlKw
zg>y0bkGwi0*2P>({9!G2sO7QAmfE?Oj$RL|t+)L&vAn*?gDtAY5!qR=pk53#)I&$A
z-$T)NlflY}^CDa&6E3uEZG3t&YiHC25ly2NH#uHxsq*cZdsDw`mRj@XKt&Uu#q;()
z%GA+N7GYsh)zK@gt7kFRYf_eA0*0(^{mhvYDkd9<`*+Q%4*&+Nff1+1^hL8-n&nuH
zOu!)<7q82bBrm}bZpfpuCR+m-xEy(Ak%G#{G_I&CpXN(-_J)M+X$iJ4&*v{Z9BCF9
JoI^1%tN}$=WQ_m-
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9e9c6acae8bc63cfe7b9ab930bf077330859be69
GIT binary patch
literal 4994
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
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bb150ef47718ee1d35f68daa074975ffea156d5f
GIT binary patch
literal 836
zc${<hbhEHb6k-r!cvivi|C!SNCkp?cDgS>g|6v=$?;HGoZVEQkRh~L^>i-k@?`Ie?
z;(h)<lKp+1_xovv`r3-$w*=p;X88X^@xyk8|BvMU-jn!snd8?Lu5Tw9UM^zzev0AG
zZQ+G=YVS8O{JzfDnPc$#roj7+3_s2=eA>(Kd=A6kyW;;I%Km#G{qKQPUzNe~KDE~e
z*ltW=yET!ux7c7ui}<U3Y|YsQ|L#kEJH_zp68rXg@%p-oFNYZR%#e6{ocrNo*3X9+
zIx`G@oMY-M*Z+8m``ZbIFNYaE?`L?mgZ17twi}b!jw}{$EjDP(H2C{KYEGfrlVz-3
z`36VkiN8I__IxYrzxz^e*D?HiDASp#|7IWCn^g?|9?AWCET5U^^I-?j@gf<CJ{bu<
zfA5HWKFH8tt-qyK;{S8ytR$cNGuawa47N2(^j90)oy^*iX|QjeL~p6Vr~M3n?@RuB
zB>VrV;*upxT3T98pFW+Jmp5a^jBD4f{eP<T|Nl&5<C*{e|7XAk6#sMkxrPKgI|jHK
z=@~FHf`opuu%2M3V9)`{gQAIn{eMG6Q&VAnK~YgbeqnQOMM-hAW~N_=MOI94NgoHh
zyCp9ho1BT1zacwEa|yo|Z)^Y$Px%%lWf`;C6~$@1Mk372jEu}0<$S_E#TA7~_NpRV
z7=`kLN^``_y}4WCdDY7qOY`zd%gfXhBoyV_+}L=S%gRd`o|SP*^Rei+Yky#T#wbvr
z-zdh)5~0xa(6MVr71JSsJxqyi?Mj`qB32kQ+;U)Kx}&mFK*fpI)y_o3!Ek{L14G_B
zhkyyHho`tkv~_3%9CT@72}}7VAoP%Dd#s+Dg$6?s^IC4MYc7fhlW#6&m*J>jeB{8`
zCM&#ZLck{n@p*n8B`pdL3!GbcbR|wKDPqYy*lv{E(crk*Ve(?fRzB6JCmI6az!Cuk
z7AFHU0}BHuFt9`#)Kyt4D$2`STFYB|di(lYb1NFb3R6G|xq!-;!3u>Mm^FaPa!T{c
iE4qOSbGjQ5<{^{`Hk6lF2$eRKsa13Vl{EtmvjzZ-luV}p
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a47c09990437e67248911dfce3bdff2f2e5e33e2
GIT binary patch
literal 839
zc${<hbhEHb6k-r!cvjBv|C#dtr-~o8G5o&4|Nn`?|HtxwZVH|{b?W<RhKzWh-`9En
zKay>ztNeZjs8XrEw&KldhW}6G|36XueM|7=B8Km$7@p5z`1e5i&u!sfmpQ(jWcc?`
z_RnpR-`Dy6-WC6Kh3ow$hW8s87S^f#zA5nI3`1v*!H4Y(pY}5JmFxd|EZ<jU@b`h#
zt%<Dv9!TAt%=%^@+mU(VUk)>L<s0moA@Su9LspW{uS@Kmnfm|kOMN`W{d_CyzejQz
z2|jO+bN7}SyxPI~@1e}!`;reAv;H{8^kE0Xju!E4%@VKnvAsUPmYL{tV-j0uhQa6k
z3^%5*{k<n~ZyMW?#p3^;D=+U;`*w<<A;sXyGS<dSgMITP`l}7*6so;l$ME-#SZlGt
zmRgB_k7S#(4eIMEJ|ANEe30SaeaY?h;`e8=eLKPMW)(w!wf@_KY`w(>8Hqlh_A_*3
z8Z23|q@|_h^y$-id3iHt%(!;#+W)6Y|NqZ4HlF$a|9=J?K=D7fpKD04vtxj(k)8oF
zBS`2c3u_8PIfD*J9u!Rs?Ef3eo0<yp@(T;|^9q`K%ZrP$wZb#?jqPlTiu>4kVr;qC
z*ksK_t>Ssun~V8_xS}n%xy9v}Rn(OdW|tR5a3z<Ov9honWadyaDk?89wUjF>DPa*}
z6e=l`GzsNw&EOJeEiGeYyiqExETyR07Qn{+=px^9K?x2f*LIH&ERXpZUKM62EZ|(E
zEZZP3fz80{fQaz2hJZ;NZfxqTs~A}r6b^Lp8!Ai)Y*}=uL5#I&<rkxcjDlR|VyZtK
zlN#po3M#$fNJ{4r=Fr>qF{qg7V1uB9h0l)*4ZULA-qUQW6r36)j5(w-IFcXrwCeDe
z-F=zj>cPRt<lwO2K$Dl2`vei8DF#8$Jg1v+npjGOya-t2+Q-BQ4k&(5K(R2eF>o?4
z0|QE=p`4|pytRa}ytK2myR@vVr?tNkn?kXM^3t;M*0R!a*7BCNazU1k*49!%tV*$)
GX$=6;F-R-`
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8b4d860d51a39c715d2669731f3aaaf30ffe0982
GIT binary patch
literal 828
zc${<hbhEHb6k-r!cvivi|B1r?XUhMdDgA#e|N932hiwcEb(Mc^3Z6Q3>i;9z-`9D+
zpJvF2_xXMXs8as_6UF-4iZ`nneqHAH|48oJNrrz9r2jpXeZPs}?_Kfda~OVK=lgMn
z;nQA*&K!f6ix|G2V)(F~VPT!x`;82L?@9c=CHUvI$nTp1pY}8K78~@I8f<HpXv{R&
zH&5dER@VQ|l|LV3c(aP(%VCDM>lpUTkm$_R|94-quU!A_aqb&a*#6uW-d-<$e<oXN
zu|Z~{&xaiha|+e|-Iw}yis9Bo*0%@Q>gy`*PG&u_Sp3E$wkOM2kIWOlH;rvet;DMx
ztRGKtzuCw3a53wS7V&=%q(1Lw`1e@8ugc)pCH60e7?$^`{k<>QkYdo4Z}9p6+rNi0
zpARwodnEh!j#x&bPk*(3bGAWehQX_SY*|S@83{lUgN{stZzmXjoMZa;Nbc7auD=hY
z{y$Y*vSi8sr%Ej?EvHYP&dbZ2F=NKHYuEn&pJ{A7^Z)<<4A_9;e{Mh5kYH!W09PYD
z17=2$&`%cDX$%z%Iv{yaG%>LMZ>VT$D#|Y`E-uV3YVNHlElCK`arQITOe-nv<6yHf
z=VE7<3YFJQV&iBo6$s~wci`j{m0*#UQFNJIQIgJOD$LBxz))V!!mSWhQc;xZD<OQ0
zfj^JGpj;@-gQqo-OSGJ!ATRGmnV6c0l5CqBJ128lc>&XNK1*)afcEGQ44+w8c7!i-
zWR&SRk@0}(L!W~<^YS~KMGrj|sR+68tWYy>U@*^pccf#1^Tb|$mPI@U>JAOk`sGqT
zJ~$)?@~cU6+}ZfxfP|P(`4Sh6OTFS;eB34XG#S5~<CK&<W>C$d=+Y>jDQ2?Z0xL@o
zkG;a1Lzgp;3JbDw#dJJy^q3aXC#qohVnI^-B-IRwj3Sd27Z$p7%dj$mLrMe`QmhP|
zK*$OVDJft`H8-iWG?(YJw<tI9WmlAEwUn1v@HRDql^cPSvoUZnursg#mGgj<=Qg*s
VH>q_rBFsZmP!3Yi+TO@u4FHSYOAY`4
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..692a20131fea3979c70fe6846e4287f25d73c5c3
GIT binary patch
literal 919
zc${<hbhEHb6k-r!cvi;n|FQi4Cknr>^PW0&DkI*fp|0}(BiRqz82&$1{Bu*VzP6&g
z{LKGnO8=iJe?QIe|B+m0j=`BT|NlLZem;lc&1!~)b!z{g$bZ_)@c)V8`;81g&M<t~
z&hT;(!}n7RzpwLsKg00tB*U-E9Pc+V{Jkrlk>K-uE9<R^to3yjeN_hk9?IUB#MWP}
z-(PL8y<YtHO@ZE0gVth$=4^u<E#e<fac`-WxG{z8$uicr$GPv%WP7uZEi1{Vx7c8L
zpIT>z!JZis`{qe>WE%W?Aoc4K``yW`4JiiOnk70j^)nNF?oDHxQ>gamw(#47Y+nvB
zWF-1@<r_3+8vMO4*;lUrb{)g-8~krpF+5z%dStQqs~xO=Zi~Fy$M*lZ@{xJspZ7Do
zKEU>22g9fR4F4X>e?G|Y;~dk!hce$zF?>19@c9tK?^}Yuu5f)j!SMH<#Q&#COO`BY
zX=yoq`gC4i-i#SDu3fvfd-wm)&@;xyGynewqW=uIf#QE|Ki808XU70nBRvCVMv%}?
z7S>-3WehqXc~CSlus?1nYii2N$<5Et&B<%-Eh{YW)v))rw9{89DC}cqH85x5<dk!g
zRW)Q~ZZ71qVJazMV-wmSB`&HyyR1NGJwF2jBO`-j37@oIL0O)au`+*Y38Mr@Nojzh
zj~Pp=Hj@y;MGlVaYnplrk^*hq+-wg^vU#4Cig~>?YA+Tn{`>F$?`KyWwygJ)wPX{N
zGdbb!y2z4CS<S~{dF!HD4pqG=htHo_q+HB*O473^Wv-?3j<>f2gOm?h3Rh`VFIm8J
zq?0{SEpWkUzvb!-zh^2;Iwh#WB+&K1!HJoJ(YKFH)M`q`#KjI^e~W<p&B(ycz|X)5
z^ml4Q7-v~aYg-u~dn_j#qeM0jZ}w!d2zmBMxn#!46Qd?2q^BrFD`piJb4=vrU6GM0
z5-1y7T)JZWHu*T2vT&&_r3VidC&h@git}yRUMwFU)Xtum$tSOnCLPk=5-Q2gt|YRj
zwGm-66VO&(1~#D0S`FOXK$}~eic4FHdwN<*i_1ETN=v6qo6uTZG-qzn#J0{EGuyg*
z7qmdM^FtiY0dzP!P`d#{ds|r(F#LLY`?`9H%1VoX+NYKk6_*uHYHyw0I&Z<OIc-bY
N7A;u5xUG@F8UV$$a5w+}
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d7e10af6eb0a96f382acf34eeed55057e1bc58f
GIT binary patch
literal 780
zc${<hbhEHb6k-r!cvivi|C!SNXUhK{%m06(@cRb;hiwf1|IciwtNeb3AtT=B|0CJo
zw*-G*=RI}m)c4a2e{Kr?f1>#RiF|!+#hcX(zpwNCIK%LA5ySI241e!Q{JO&R?}7BM
z%N*ZMGJM$1(3xZK_pbQ&Qw;AnG5onL@@X%_!aBA08yWsRl>L2E;NJtO-co}f=a@1Q
zeOikRwlzz9KFH9OZ}9J-%!eHeduB*{-p}ym5W}sBtiLX?A6YEEy<U7ri}<%w3~%<a
zZK;*WNbvc5h@rl&;@b&^=UZ7jG7VnsV4YK__V2O$-#cOrDF*%3`k9G7cPF!UX6oOV
z!uDz(TVtldy=iQJ?@PW}1$2+_zxz_l`_%qFSN^o0;op79hl^Ri9A-E&PyF=(w*G2^
zw+Gq&K9IUUldZ2@|Lt+^x9b?5EMv_|@@dXC=&LgLc#8YRB(}~BgMITPdW#MIKa%_R
zNcP_&x&KcUmn>P*($aGJ^y$33ycsiQT)TGd|5GJn<C*{e|7XAk6#sMkxrPKgI|jHK
z=@~FHf`opuuufyBV9)`{gQAIn{eMG6Q&UkvVR3O`K~ZyWMQMq4T2`#Jk)~})X&*1U
zP9hIKzlfQFV=6mubE!}Wk6SPomy|q<sIrRv?23{Yp78Q=CT8Y?EPS&1B^5;}>GI`e
zWy}Kk0%hgWCdr(w9z0S^Y~}g+H`vtFWmM(b%=x(<U1WGJ7{teF*&h9Y`7s0It4@c2
z2F^ulA_+Vb*fw|_P~t9WahU9JnvI8P6(f(pgWl;pk!lYDSlCz?MVQVoG6>`_Hc5z0
z)A2G|!o<j<ro_^`$>C@Zr`N8JQO1WD8xxeoQXCRo&$ODHmh)5yJiscz&SCN6g}_rL
zLC)PDN{X76x->E=szt0QRGF&m!6|IB<;SO%_6aPrWO%hoG%hN+H$uWG1r$y!3@i+s
z3|zo)(rc*5VXA0l(r7Ag?Jf_fVD4_sZ)Gm)DrYEb6_{8tYwm)DbIbE{ds_3ly44pn
HGFSru6<0su
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dc8f87f2aebcc2772df85e22d4ee64aec26b256a
GIT binary patch
literal 834
zc${<hbhEHb6k-r!cvjBv|C#dtXG;Gc%m06(@L?On|0nX_Pcxi4b*iDR^3P4d?`If(
zU+4Y*NH!zh=l2c%|4$U(tY)aMt@yB=;ok%4ZzmbvZ)8|lr}lgf!>`L6{~pS|T*T0s
zWAOVr->1C{Kh7|GKgIBV6T{!T;(zZ;*4I^ZX6oOV!uIP5*W2UVt;Gi0>&3sFV0gZj
z_1`18Z>Jc(9A?N!@VPaS^~gN&h7^OllUeUgWBat9p*h>2uU!A*Den6-*`6$8?Z`BE
zvybi74%Xi{1u_$Tew<_a_fY2VJ&FEm{VlZ;SxG+o=1KgyE&S^e`;HdzKet8R9%P$S
zsP_2~!#|)OAIZI0#qf3=Lw~iw=YtFn7qf0_mUy*~EhEwA-y_)@lh}?d7Jq$!?el(y
zu6%>WOoQHHgU$?t-co}-GbH+|4E{e?{;-4L%OQs4eQLjN3I2N^_4kh0zx$H^?o0iD
zs<>pyl9ra1)2C18<>k$oG2_~`YyY1r{r^AH*m&mu|Nj|q0LA~@ey$<G&W-`DMtTO!
zj3A+(EUYOE<qSF?c~CSlu>Wr;Z)z&Y%P%a<&nsx|EiWz#Pj>URNlMf&D(++F&`{^*
z<dpG{*EZu|Z!Q*0=g!LE;SpBklam!wo?TuP#GPGM#>C8gkdI9$wy3<o)k3kXq=cD2
zm%pS;BF&1o)tOtEskAIN_eQCtortJ(TNEeHql=8sS>4%KJlmr`Fh6Ewc%>QWuz*EL
zTc(L;0^0;12lb4oh7*%C*w_@yRxz?LEa;UL)>Bv#Q1ZB$Iq?}2OGfk2z9u6n51n5Z
z4<A0s!^*WmAd#IzoWpq6$6uEY9ypnBP~=KS5#yOn?t(f3GZr0cVB+#saoBl4<<L6o
zxqAXuIy5kFa7ZPb@Oa7*)XW<yP;^0I)8a-o_hv3xuPrA66~KYS4+<m}24)6MAZB0}
zX(%r%D{pOX@@Hx-XUZ(|@1CgCh)tnrLwQzCd8;B{IWSyW%e(n{dV9;Ts>E)jH2|qW
BO*sGn
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..11af180c1c26e0d2bfec7cd74c563a6a878b7f4d
GIT binary patch
literal 200
zc$@*q05|_fNk%w1VG;lm0JHx9|NsBMz`(4>tNQ=J!NPx{p#i$ORHC9x)6<Xs{@~Ts
z&;Q{V_w1zq+z|iD5Q2h&A^8LW00031EC2ui01^Na06+wFaD_>$l@u8^8fXJ!AeQwA
zitv<`0S<877?y(tMbab%wKx=8K+|9tXQT!&u#glu9>6EmYg&jp-RNQ=c)eWVL{lhl
zC%=k@6APU!&%vkRp|V_ZPkqJ;xELP*419e<IXeX;H8%kVSv@{WCMYU}CJ!qt5db@R
C2U3Xu
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..23192d442083507abedbe61d4e18d52c7e5dec17
GIT binary patch
literal 757
zc${<hbhEHb6k-r!cviyj`v(7qZ4CdPDgS?_^#8GZLtW*mQ>T7k=l%aw@y|`c|Bqxd
z;(h)zF#La_`294)o7D{8&oI>2R=ixqu&_?;{U(NAmpT4Fl6$|A;rl6uzjwv|J&^ve
zo#DqBhRz&==W`f7?FDL-|9zeB*CqDO41+hT81BzxyD^2WIosgheaX9%S)VLp?JYKV
zvybiHWBJTPpSK6uj?5Ep%ryACpP{wb;M)m?S36ke6slz;`aE3B`scRD+vD85r3TxY
zB|0<pKObb+UN63Hp2YL5te+1t{Jk&v`T$#fUB$g=Z2zAtzuL#vm2dFl9MhIsiH=Nz
z{%V6iw}rnPVp!g%wr7S!MuN}pTY?QK2A}pb{JSsJSFV3+BJ1BfV*egU-I&DIU#*{&
z<n#Ncz`utwA5U?AJIT;jWpHG%_=g<~J6gowu4DLenBngOsc)wk{ymia|3qQQk|ixI
zEvHYP&dbZ2F=NKHYuEliRWdf7`TsvK<Ol%8|J;7AA;Hd$0j@@R2F#2gp`R?QA`B%A
zIv{yaG%>LMYba@I%FD^k&(F=tYwj&6EHF=U(ANpH4k{?@V`DY8V&~*kRFZI1XJu<H
z6bxXG4CCUGl4OvP7j~UpQsB$3A;!Xzoy`)(z$filP?8s$ASqT{oXyK|*;&+Ii@P<3
zUFu3v@%5tXaf#xxZONQmhl`4sKNTtX@iC^hyS%&liRt63rwsxJSd>(X_pRwPcQ_!}
zpu6nM!VRi|JzSTKvgVXMJIL=EZoqJ3g&>n8r>)q|6$cYlJXMY4mb^HYeUzPDS@Ojk
z=7n97{K_+Iy9^W?_@yLUa}*vPbZdz%u{wI7P|<;bi(e&S;iOZ7OIT$qrWkB$ImzVP
z$0lkuC1c`Z2XK&Zfr5mIft7)mfejcWI=~<)Drzd>ZEY)IDK6$HDeBGYDsGxOwPZ%u
Y>@LMQvoo7mcsZDvmUCn@H8NNO0OvI{`~Uy|
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..03170dff58415f5750fac2f65546294dc52b3a78
GIT binary patch
literal 3487
zc%1E%YgE#A7{`Br+{6ng3SuH6Dtemz5o%P+{ZUjf?P$5?T<0Wa3r)*Tb#j&VN72yI
z5VC{iJbCG2J8kA^=IN9nna#^eTc_-@0z}iM%d)AZ@}F*R_iiue_jz7@pLd_nd1B<z
z;?)WUa0AnNFfxMn^z`i7wX30_0Uh!)7z}E)8Xe|7dh`e#_D2VOX9rx1iqN<?bfN{!
zKBc9mqNt5C-3t^7RJk>7x(A?EpTa_P%NDe|yL;?=F#Fhf?g<UG`62n=9?8p{dqy9v
z1G7)4?{0#bUhwgu<LqOXH_c%FrPurmCTjDYd*=S}SJJC$Fx?GGvY?4;pf*47%@r`!
z1*W>e{5(3=Mz9b1qE@!u%(`J<zPkl1^?3VB*7#k@<Sp?2Hn^I{oNNb3I%K!_y!r{R
zRK%6-hi2|!+iIA0EBkdTzWl%nyJgw6BaC@7OO*kQ{{YZe{^RY00Ucrfxo6p4Xwn2;
zw-H{PB24`ZI%*gj6T21|tXVT&eh`{y1)2=VZuL>7#*JM98H%{VozQQ3{Kp5xrxo~@
zRfLv8=H<)g>OFx)d!dqy6(veYD4fjOc_vnB?mP$gwru`7>3&B&!*2F&uY}dP4JQt*
z7&u92RWsnvhJH5^E|dqB?uOo*z*q6TnQ3wRQ_iS%R~^aEm4pv<{}_Mb5cIa2VmpsV
zhq%4HD2i4Ig$s-R6R?#396yw@Au4H8q$D9KEEK|F7OM{q`1L>!mM`8H-vp3Q5JaXk
zQxOaX>*Pe@^wA0l6)Y%6l;c)_jc(&rrA6MY5a0(=HBudqP^u5h%^BQ=Bf13kwer)7
z*YkioHy%(+RCipFRY{|Yb}UauksY6KCu5ONz>!ub!TrVcj&!N!EXXL*F*3LCy^ubx
zOw3wY+NXk#M)Q+<`^jePJq>Ou%Q#8e=#R}q-DrxD^GO%hIX}0g`sLKO5m}ANk{t<h
zeYwM&V%ZF`&4a_U1=|9w9dc}wLFpzLS2=8S6J39cbdp1`AsfP)ilQ9x*;|8Tuvt##
zu&SAT>yVOT_|<f(a-SJs1g<=U{Pr8<53v1|c1N<-%I5{}*_;ox7AJi1bxN{VqC%zd
z;IL0>oBU%bV*E%T73<q!MyM%CoOY)#jc_z2`!Iqa*hUAuYna$<B(v1oPAWScw!n<U
z2@@+bohD_{>5xU^;ju3vg3>OQ!+*1<EwaY|44^IyAdN4uuNDn!T)a2w4hzDXYOA=R
zeFn2pQRw=qv+EtEBn`upc`ko{u^H2EgrSh!tc&JB*zvf-6<E-SQ@PLrSDI)sW{Q_k
zO7-g_J@BuK{*yE|c-G|Tp?6_si@KCPYxOf?Ex=~>#}F@tH)~}smF^<;bHhnEwxFqu
zD-x*gln^)pHBBDOmcj!1@|GK9Otc9naBx_~J<GX^WyJBT`zLT+IC^Y&MC=u$Ll>qu
zU)3~6MwAdan>EP^3U#F_J4LJ7v%OgDn4%VI`g0y=MSh~{95YOC<=-S0lXX$QoMzm_
zVgHT5=puo1+j?E_s(s76giW>HzTV;-NYxod6FPqmo+g|-il=BfpKt`G`*4(ZM2M2#
zY=R?>aV$zva0C(S6Ih!nh%whV=dvZ4Qkb8}<vNjX+-@)Elb5O4hK4l!cM`o_ly}g`
z|AOlFj&4e;lRKOyy2<3wXeW*pbTLa&5h1zPs2>Oq#z+g@14BJ+2{1Cu!=|xiz}*^O
z6~OasAd%(dQlczhDUMX=Drp{`nq-VsLME@RyNU>*Vw_(}h|I7DPpI<DW^E`iMHb_T
lK_azGD4jMkc0NoeyG0*Z^1tMN$^Vl7CI3tQ|F8bn{sm{ypGyD$
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..38bd4a04196b899cd368ce76c07f0dbd7f786b02
GIT binary patch
literal 5449
zc${<hbhEHb6k!lzcvi;n|C#dt$MXN5DgC~||6v=$|0fE6ZVG0^`}}_-+fY~e`#SIU
z(+sCho%(%C@cS8{tm2#14E41Y-%l}o*v{~L4#VI3lJ7S%{Cgnv>oUi}I<=RJ7(VS~
z_<fzPGsob^8HT_2B!1r%`2R%y-$U8=n;3pw;re@5{LgKXe-EVp+!p?JlHto?hKGw;
zznx-eNHOTl)bGeN_;+9O*CqBFQ`p`f=e{+OwYAvb?K*~i^CU77eeO<X{d-63#w4~a
zwGyv(u)bNv&|7Tq?~&}^2U15Ci@!a{wyjyBG1Fj9p;}gwPglM{Z>hoOLkyXTK0nSe
z{eQ0fW*^(<gAA|su`TaYyEl!kzOJIbTL0fenGZV{_RNqtGEe;DDel(?*q(1?ZO%5>
zUN4@J;L}%S@Z}IgU%CG0{S5ye%RgDhdVeO{ju!E6Cm25MXXvjs=*$2*SnB^%#U)FY
zw6wIGK7BebFK@<-8P~2|`~Otw|NoiB#xwu_|IdIMDE{a6a}5c0b_{Se(lcOY1PT3Q
z;Y?vDW6%M~gQAIn{eMGQQ&WC!UO_=#Zhmubb5Ws1yt%VqxMy5pQC|}er>QX)8=H)w
zP;?9@PhXK>AeU7s2S=$Yvz)YK@a*QoOfG{`Mn+cFQgLQ(VUNP*eD_Gz(&A!P{v7^N
zQHg{U_MWob5H5AblG2=<(vln{1x+#8+@?GyHjZbPnO+wwYH+ih*&)c{etIv{a~6gN
z;)hz8nT#F?v>aOK#hAr4n_-6WGRAH}Yn5At&8&yp8Lo>kF&t3i;1m_u#ls`+cBp}y
z@zo2F18g45>|rK5W~4tqJ4sHCtwvyBa5S@8lERZ8*IplQV`X+QQGLkJ%gdED%eHGm
z<AKS>+$CBwA2c^j<k+LeR;jh=5ECPlvO>m!i%z2I))V+j6oTBi`o-Bz{+6b3OjIi9
zV`2mc9T#TMHJ8D{uBERGIqdq&@Q2+TBEqg0SJ*wj!t@3db{sPbl{xyvYFICDGF;Ga
z;bdn?IiShW>O7U{s+bw0LAnpKm~xrVmd9+|ZTyTIbXgc0d<BHG6iO5|^m<wt#hI?$
z)NJ6Lz{a;Gqrh?f1xV0sEQSOf!*kT2o5Nc)6&!SB(4gC^%2taMbV;GhJ=m=TG?iPA
zcQennvbCO)5xB##kpWl8jV8L$L^qn~Mibp=q8m+gqls=b(Tyg$(L^_z=tdLWXrdcU
TbfbxGm?S#Z(L_g1qO%47h!Wc7
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..de0ccf660f59f3acc29265ce1e424801b7416246
GIT binary patch
literal 2518
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
J{;xjw{vW-8Rh0k$
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d5b73a6fb27b35e7a914d3fc577d62b2767a013f
GIT binary patch
literal 1042
zc${<hbhEHb6krfw_|5<V|NsA=J!_7!@yyk$H>_N_Zq}?hvuDp)vv%|9HJetgUcYkH
zx`T&~9Xfn$&AQF2)@)e4cEifm>kb}1_W%FPHEUL{Sh4*77l!|@7=GMm`2Ujq|1-Y-
zPX+%!SN?yG;o&jXzxM?HKNkM~K;-Xz$$t-J|2+aCx&M#l|38uc2O<^zKT-Vu6o{1m
zKLaA=|2G)^-(~oHo#odR*55by|KAn-cTe=+U9o@nCBL6$_<n}r$2q3Q2UvezV*ho8
z<Nq0k|K}Ngon-iUgyr)w){`qljxG_MQm;0-PVN6OhW{rSzU*W8w4dSRBB8_cgzHK}
zYf8eZ%ToUCWB9(G;qz{W=j$16tzf;fm~~RQ%A`t__EL+MV$1H1y8l33TNtj+WBsy$
z;lgy*mOS(3T=Rx(^V*`Y>ca4zj=HZa7{0DzcruUa@oc91vzhjF3hn6-?#oqe%r>tn
z2&*Vc>29yPJDK7Bbf)uNtf$&p_cRIZY839tRISbrugVLrEK2EWtLw>7X-qS(OEs^`
z4XXl))UR2+dd2ePD^{!kMhC+vpchd5$->CM(8izx;(+o51IK#?UQUycgbCBs{U7l}
z8Ei;oQg`d%;5>AMOOl0`SMtQB!-v?UP4r4uJbHG(fi=S5j)Z}NE7vsRWi6En9gf2M
zQfwO%7ACcFi805OR9<cfn8+jL<0G+w=|zj6;esuiA!!~ROT42kY!51*lCtw}yTULr
zX=V3X+es^K3V&;E6S0mhu;_Mbn_^jTN@r(5V<xwFLpV>v!J~ZgPT^Kxa&Ij<$|c0y
zFz02k;~@zx<6rYE0-cU9$i}^3n3T}LAR#j|a?_cGE`9PG%&Z+hi=MRet3;o<@-unU
g!e*P?8w)&(+56?#C0X?(R5St<97U8&csLlW0RvS+n*aa+
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e578c6aa51e67c81995f45d2e34174dc66269f03
GIT binary patch
literal 819
zc${<hbhEHb6k-r!cvi*m|C#dtCkh|7G5mil|Np6CLtW+nXG$6IKBrEd`u|Aw_jTSs
zHwC|+VfcMZ@c$FVH>(-yYb$==;QxM_;rSef_nR1gUFP_9lHuhdhTqruI&%y@Y-jj!
zhT;1uhW}6G|2>fYb%kqTo!a}241e#6f7;9N?}60sn*x9DNxa&})|si_TWav_6vLcC
zwg1nRZ%ktQyq}@IuHwjI@!n#Cw+Gq!sto$8^|#bY{Cg~ae<s_uW{HeMpXGgOZ&oq<
zy)XIe5_^BO!M}$xA5U?2<r_3-8+<v;kd@@~WEpEiiou(GY#o^fA9gUjKEU>TE9<^_
z5^vWr9GNHn_Bi*B7V%d*Sbv;jx;vS*uUvn7y?AS}!JpeAw<fawxh=eBhQyac4F4X=
ze%jBFndsA*VUUsF^Z5|NjVWyRrm_9KBlhpU<o`!<|L#jYT+I6Kk!)k8!T+?hzYnCo
zonZKUkm0|J%aSEaT3T98pFW+Jmp5a^jBD4f{eP<T|NqSY3=GD`Gynew(kMXjKewN2
zNU*bGfUA+70W%{==qC$n6GIh)4oDspO$_Y+8>*U`iV6ygiwg^intQ8CODv6jjNGF%
z6G}?^I9S8{xwyF{Y-PNiSUH+Y1+2I#D>*skHb^Tg=+CYyv0I<U%*@EhtWqf?<ycZx
z<l>-|R#wKy$HG@;BO2|>-fF@n$6Q{?!ctaQ9-}IzDA{Jf&H1phjO|&uY@`rVK)crm
z#z#C18?Ha(VrEPdn0w%ZvV%#Z4%@Aa1x-%fE`C}wBpiGd7#J#V)JS|<(50j$qa@ON
z)X0~a%~Nkd#1qw1Y&Q8t`wkvn+$bW>zpUW4DD!eZ8(uqu7nf2FiKq4}NZdVnz)6DF
zT5V0k0&jnHn*>&l1s@(Ti7Bs?akQGic)Zuply`#6g(n#S3!OW~EV)>~AtV9{A!Y_<
z1}+9(U<he8R8^&<H&rPKHl<cpw)J%Ow)IV#GIiSY88c_iRIZq=z*I4BYF38g)JCxG
v6p(Hfpk7V}R-kU#hRUku7M7-#mL@^9ist<6W+6e<-U%&vxk4RPjSSWRL*7x0
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8e262ae0dbbe28fd0bd7810df0ac159ceff08a51
GIT binary patch
literal 871
zc${<hbhEHb6k-r!cvivi|FQi4XUhMdDgA$<@L?OnpPPc;&oKPH&int7?5R_yzMp1j
zsH^<{L_Q<lr@pr0&1#0<H~9ZQQT%;N@YiLIZzmc4-jn!sh3oxBhVQ2s{ymU-zlmXC
zomyv(!H4Y(zi$fsIK%LA5yPjwKm+;yJ&=ArhvDyi$<K!vdP@y%O=SJ|Q0Bu9hJEuS
zZcJfY-lukCp7@u;44?Nid^yDMb{)f!#p18_vHdv5^zV`EjY({8Rx#{o5x+Z`_1g)C
z{%ZY)i&_6aSN``<HY>^J<0<a@GufVRW&LwoWP82%lVz-3`39d4GTfWS_G$;~+vD8d
zPBHWr8@$=a)>maPr%>(RWBJZZ{XH`z-X3K8dsn=**r2|yA~VtF*CqD8a{Y!BgXV05
z#!Q2MkL0%0O8k8w_4)wYwq}Vxw}mqjeEO>mG7^10?Puu7H0aDQ`2R@m?;Wv!_oe>b
zm;C=!amkV;EiEmlPoK`q%bPJ{#<gqL{y$av|9_^j@y!4K|1)3%ivPL&TtkAL9RpmA
z^bD98K|()SSVb5r7<54LplD)X|KCv2)Kr*XP*hZqU)bDRQBs`duN~qSte#R_(#Odi
z=FQH^suU^V9K+4oT*9Zzo}I(Np<G@ruP7ZpyP`OiJ$EYuGc$u^IhU+^aYdnnV`zD4
zDYIanV5zFGp&M_j4ZAW!+2g#@@-lll5pkI|V^$7^t>sM5%6O8wSS;HUKU^tgVcBrJ
zp@Wf0N8qBs#H0q3MmsjQi3eN`_qyn*g-m$vme9bEcOatT<AM$)T?qvVZFPqRX=x#z
z6%2~0f?}%j3L!fVH#ANc63RMIv0$<EdNoB6hYtqln;MOcJeEX$J8_VW$)ilez~P_^
zyNt>LiyN)WgQv@ha|m4cz`)X_yHZTXG3$V1&jgkD3nmwyWCSd9?i91+VgUzL6DX)y
z7?>H@8MuH!CD%|<US84Kl*Q0ik=4~zp4U}YQ97}uce>#8&gp%Ph|oo7QD~^h&Z%gv
k$Sp5#tLW-(D=X{n>TMM)?VHgvW6I15Rfr}@((JJY08kcUX#fBK
diff --git a/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif b/js/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9473c7fdc6da84dc901c6199fed25df7d844783f
GIT binary patch
literal 3020
zc%1E%TToM16oz+hCkGNBi9iCPgoI!^L*bO52Gq_8h5|7<fzpnbsEI-wDpeS&Vy(h~
z5DDcH0v7N>6K-~_c4CKWrh`ZTwLnG@8AU}22nbd*MMhMFQ)v6zKJ=M?@2B<8e%Rl9
zD<<wEafF%;SYWyW?A^P!tE;Q7uCB7OQmfV8xpM~}=8lcw_+x*3lrNX#_$Y6t&jTL`
z$jif>7lBHJ&)jvJxzAK8@pt!_YBfG>2h&{uANJ2adI%p5=<Mvohn8t}%CnASKKl{O
zK4ibPgUQR_-2=~=yY6p$UEe)eGINiSo{q=G;csul)16?>vGm0SF#Cw};%A^wMa)No
z#%sWnQ($gz*{crl`UbJRnms;_|K0+nsO7W$-mm7L4EWB@;uAK=c?lFB44rfMPF?{6
zRZvj|axs@PH{jD;&3W5H{bHAVZvG=r__Ge*+&zd^i<cZmE@iRL6bB8~Qi}E?O_iLN
zSAaex^wn=bqn1ByhKj#NrrJPW2GVDQCVm1hZ9uO<G%7ikf;=pvJhf8VYuQhJp*(Ab
zCa%*WBPU7@hn_$0a9Y71oiudq$fNI|saDWe4rOVoW(R!mq2<rcg6t#&+gH_ML^p4+
zZ`o)+xb5WJpr2LCK9wGXt{F*)?|9h?;v|l?YV=w?I^00XI+~fEg3Jvqmq{J_x1NlT
z?`S;2u^mSX_96F6DfkG_ZpU%FN+g=U_}>AG`CkdZX`7-GKVC0UM2CeSB*Mbz4Vkh5
zRDj@xeql`jjDt`YPYw#^YZ!*P3L}Yf+*51_cP3zjEf=|Oum)GJ4@iCTAEd@%azVwa
zq%mU<k>VO?JSTn}sE9Lqxr;4h5}9_{I&qqckRySa`x46SE)rWkLBaDgOI<JmDbYt6
zi`7O68UjhebW%=2T`UwH-p$Y(U85Q9Ya;+wM<ndwSx`iukPCge;+7aY!*cZ($|AWc
z9g*7n8Jm1fRnuK9<8PD^4Q&^&W*SSrTy49>TghCpgJ{Z=`jb9iFJfMn5=+=SKw^{B
zp>t)!y}C^XlcbEL{7@QT*@hat=-SssjVcLA#tLpMO^<GQ4kA0X$tp+A*+VX?&V9qZ
zjSW60L`#*bwAOamMG#DX6UMh^KO}lNBy^8#>?*~(mkTov*qz6y6d*LncFS+Il02H6
z7~RlcYJ*trU&T`qj)d%2#O<*Grfze*geqt>d|N>#|3%(yfjnWJG-Lh%cygY6Q!hd1
zAF-oGIgX?`%rUyHYcrigx%4nK$IZ?l#h&tI2Rj`-qiuAQbUNQ^8q(^SEZJtuWU{GJ
z6u{{=V}v$i5G$4L6KLpkg`$Mp3q0ev0vGR5_?(eU7PysqOJxQVp`N9kQbw)Mxr#Q(
z$w5X1-{X6KPqFeu-BbcmR)!Q>oY}C^n(<!p_H1^pp5{@Qs_!NdZr5*I+AYTFDTTo)
z2YU5ME#Ol(Scw2pw5kG*5eA^$J_G@je;u}S1v#I{tUHe}nEW=>L(wlap_sP7E4d(3
zBUE(wiXs~O;hI`C`mY$ulW9hO%~=Igl%~>!r0^6bl-E%p+C+4l;tE=em-~q=z{b_)
zuO^wL;wU|fNP@P8SrLVPDWjYh9cD6Py4dnWA<G&>q>;-)R%*CutfD2E<P+u=Ldp#a
zx<ZY_Yi`#2B~n9T8F5@4)7$U;o~W9eg44t*!*(8aoff(}(Q56@NX;R;ohWxq2FMnC
zQSACvWfT14OH37mu59cNw&{+0B$2(D>6p!B2|uvhf(&;RBE)s=nE>jd&{mQO7etRs
tsK<6UG-f&-SE)XR=Sdo&g+%8|9pO>E=KsL3Xv3lni#9CUuxJBV^CwVj40r$l
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif b/js/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..782efe75a8aa3cace49110b062fb7244f92edb9c
GIT binary patch
literal 866
zc${<hbhEHb<Y3@n_|Cxa;lq<JpPv1^)$sjh<Btb3{=VAu<L&t$m-7GIYX19R)}Q+`
z|2&-a_vN<V7xVwzpL_T0>W$Tcds`*$o!{{5&G`*wLVKG<w^WPlYZ2R7C$^(rY;&dP
z-e!phXV)yr;ayW8urya-ZK2@eEP?f<Lfb1vmgNgA$rf6c$+sd~V0n(fvTVUsxkAgb
zgqCLtJwCJc!I_PZ&Tjhu|3AYh7zOkKia%Kx85j&0bU++Xo?zgxXGlEI;qal!p;1~*
zVuiv5rWPJniG&LVOl%yC%mN%A3IdKcvZ?TK@f1FK&?PPt<56*8(UEpOji5CNg@;@m
H7#OSpylryD
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/findIcon.gif b/js/dojo/dojox/editor/plugins/resources/icons/findIcon.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..93354f4e3bc6c03ed66de25acffdbc800fe1e28a
GIT binary patch
literal 341
zc$@)M0jmB-Nk%w1VGsZi0M!5hv9`i&d6kTlqlAy9pQp8(qp_>A!ltddn4zzprLT~d
zpSHZkt+KhaxV+ll;^XJ*>Fn>`;pFb{^4#9w`TG0Q*V^Of>fGSt?(y^K?C$00>Y$~l
zvbVaiwz=Hl<l5fg^!E4j_4W4m_m`WQxx2a5*3{6^&5MkH&(Fv5^6{jjk;lci*VDYW
zu7td{na;?ozPqido^0aa+rhV^c~3xuYGHzEVuEU8foWrdZfb#TYl3cW{{H^^`}_a@
z{{R30A^8LW002G!EC2ui01yBW000JZK%a0(EEZp_SnFjRvRtlGN(OEEqP#4xM>WD$
zl(1Ojf)!OIka`_LsfwowW=@xwPQ_6P!tZBDBSj4z9}k8P78)BIMhO5F4jvZ~3<_2S
n1ON*M2m(GcRt5tB0|uWoHC9G9G&ZV5I5au0L^?aPMnM2O=R&gF
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/findIconDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/findIconDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e7a897b1f4ac8013f50e8d0116300b9cc173b3dd
GIT binary patch
literal 902
zc${<hbhEHb6krfw_|CvkU0vPN(=%ntlsR+etX;cy>(;G%_wGG*?AW<;=dNA5cJJQ3
z=g*(NfB*jb_wWBl!6+DZK=CIFBLf2;gAM}_fbs+bM>2yfhm6ODgoCUcJPHvB1q#h9
zoKhSuH!e83G;{K3C3FNj9%L5cHL?hp;NZ%p29%2oXl!f};gvh_<KrU-7FI2}87mbM
k{bosU@+eF&WMp6z<>j)NwIzXJnJ+t+gVfdp2L=Xf0M79f2><{9
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/findReplace.gif b/js/dojo/dojox/editor/plugins/resources/icons/findReplace.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d540a01f4d9eeb9d2951f30cee165c7370e9fc6a
GIT binary patch
literal 347
zc${<hbhEHb6krfwxXQq=Vd<LPTX$|=xnb4Z<;!O+Sv`NnkpqXft=+O^^`?!>*RNf?
z`oQk}`*!YKK6~ljZF_cZ+HvgAv6IJ69zSyY;J$;WPMkV&@Th0*!vFtI{{R2)-<RH3
z50?D?u=(Y+;-4>9{Q{xYzi!ojzd!Hm)rnuOPWpOf;{Cn#PZn9eTp#{=Q|#Kl_?<J-
zmUqOg?v4Mj)Oyo|q!k@8^J>H9)`m^Y_v_E|osjQ0xhP<AQQ&_tV88|xf3h$#Fjz3?
zfH)vOF|buQ%qj5Dk?Pf*<sE9p7rp%Ku?0ns7D#uiKPgJmojakU>`0#7Lcvv`K1(Ck
z7k6yQ3sw?!(}`7IrXeE0&Cg_7>zt=4B+SUcWt8KpCMmAX$IifP>^50k!rXw9m1VZe
hT!|IpX1q&XWah1uG+FB+HD5wpQejKjUJFMCYXCI`p)>#h
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/findReplaceDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/findReplaceDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9f2f0107146ca219f40c22d1aec0d5191696088e
GIT binary patch
literal 923
zc${<hbhEHb6krfw_|CwPoSa-;UER~uGiAz@IdkSLUAlDb+O=D^Zr!_g@3CXY&Ye4V
z?b@|__wGG^{`~#>_y7O@XBY*eU>E_#pDc_F4Ezi_APy)`FmO~b$aBbeY*^sf%*Mo{
z(D2}a12emfg@eO^hs+&(3?>N%2Nd0UdBj*OIxZeO#>&nkB4gmtz%W@cc%6@fuw%mv
zEl$1#GZ`FDF&LF@dNXsAL&F>vUXu!i1uFtuyjkUR9THM5tzc#jF<r4Bp_w6!+eqPt
N!;+($S(%v_tO4*JPMZJ#
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif b/js/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5eb8584d94aac3e188c82c79830a07a9159eee49
GIT binary patch
literal 177
zc$@*T08al$Nk%w1VGsZi0J9GOXMduRqPtmhnLb>I*4*ZUmb3Bm_jQV@thvm(#nnt_
zk>lv@$k5%Mt;8@;fdBvhA^8LW000jFEC2ui01yBW000DD@JUIUMQiGpl=~n+YyoJ3
z$&`S_$N}GwJ)YBS59}1r@+r99@4@&4f)Bxm__+mj4}%e@6i5yZAkJr#6dfs&V_=w+
f1`JK(6J}TjA3(1ruq@Um=E;3>=uK%zK@k8uoZe2;
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f019818bba60cb1ef0b4c145268630d9a6dcbde7
GIT binary patch
literal 177
zc$@*T08al$Nk%w1VGsZi0J9GOq@$y~yu6&7n~REy=H}-2_xH85w5+VG&CSh}latof
z)$Z=@-rnBD#l?eyg8%>jA^8LW000jFEC2ui01yBW000DD@JUIUMQiG(lKUV)YyoJ3
z%A|nC$N}GwJ)YBS59}Dv@+G+5@4@&4f)Bxm__+mjkAe}Y6i5yZAkJr#6dfs&V^Els
f1`JK(6J}TjA3(1ruq@Um=E;3>=uK%zK@k8u8s1Zy
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif b/js/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1cc4317733a60b7a6fad5b0eec53d7b6a427bca5
GIT binary patch
literal 564
zc${<hbhEHb6krfwc*el+<L93*-+q7m^84MVUmw5x`u5|`&tHF@y#De2^REXle>{Hu
z<I$_{&))ug_V&li_dnl#{{8ve@B1%*Jbd-z!OQOtUwwb_=EujczrX+d^X<oPji8?U
zFTX#2^W)h&pvqrgzW@IC_1D)QK-u5lfBmj0_p2%MtFQ2_E%R%r@awMgYOnF`ZU|_u
z^jR^leEYiYYZrFS>u}z?v2#_Q-ReI3<=qa;dmI*bIxg;Xn%C~Uq2G4H1lx7}b`MVU
zU)hv#WmD#@y){=iW&Z#FpJ6Bi#h)yU3=9qoIv@@xP8irHHaIjjx3so7SXx?i_Ox5s
zvQ3<1)n;gKrzEbZ$iQIKYGPw&Ex{_Gu++HKOpZ}NVBH1*(^hj9c_w)=7O~y>tp>6j
z9I{9GnK=xaB_;LF@SVRX*`g!EbDj6*P2E<lYd3E3YP4!fON&Z#vA^chY}FPK`o#V5
jqjsyhAg8df)W3hKT)hT~NeZ3KDn1h|juZqaFjxZsq$$Iz
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..511fa06fab99992081cec2ef46fa208f5f7025ce
GIT binary patch
literal 912
zc${<hbhEHb6krfw_|CxK<>ggeTwGmU-O|$1)6+9$%9J^C=B!=2cI(!yd-v`=ckbNt
z=g;52fB*ga_y40{6bw6{_>+Z^fq{=fhXDvcd4ho>mqC_8#$&?*M|Kt=EuV@B3{7kT
z%0dP&3>;lLS+%uxa1<&XWR%h8)39i8WS*?9Xe8nJfuVW2L86=l2SY>CES`c_EDjeO
v&dfLF<oY2Q?BK}AJxMDxYf3`H(g0?W8m`clA<G#zW!<gX@cKXl1A{dH_)Qj~
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/preview.gif b/js/dojo/dojox/editor/plugins/resources/icons/preview.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ef302880717d12cc7dcc93a5ec9409488a788e7f
GIT binary patch
literal 577
zc${<hbhEHb6krfwc*elsm$lF@Yk_~(g0RA6@s(>r3zvl!E{&^PlisvBy=hZM)24#1
z9pw}ERe;dm+Gz(r{{H{r&;OtQ{(t!Q|KtDv-~Rvq{{R1v|Nnpf|Nra%|KI=r|M~y_
z-~a!`S@y+Q4#n9HCE1Rpxvu3o4n>&`#aWIO`R*0@-c7}JwfXjydCp}yuI;7P)2fXp
zRG4;`S*&W)UD#kSyUuV%wZWWvqeU&IE7~m{9cy0KrnR<BYh9c6`VRdKod(OA^fq*x
zZ0I)K)N6iYbMl=%CAW4JU)z{+V^i9HFkl!uK=CIFBLjmQgARxTiW3I*c@1uE_STl>
z78aIPc1^ua)~*vLxjOgsx#>@y<m6&I-Nu!lkDH6j)y&bsw9i0h-TL*eCVhs|{Jh+p
zEX<6IGRA#6;)jnMku>Vl73JsI$<E5aAfel*CwBeD4I#ZgZOKJT*x8tvq_q3gC0@OL
zEv4S4ae6Ta3ybJ?jXov8KY#xUD9J3H;jkgWkxNr%CI@2^ODCV4P0x=7i;gVqmSARN
Gum%8^r?a^L
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b7f223b59b6fb8c29af50c196d6a4c70456a531d
GIT binary patch
literal 913
zc${<hbhEHb6krfw_|CwPoSdAUon2g9TwPt=($dn?(=%ntl&xF0?%lih*s){(F#y9T
z7zM)!DE?$&WMJT8&;fBkd4ho>k3m#JBcP$dv6+QcOC%y;;UQ*TS)l?A0Y;ZjE*=pX
z0|!T@Zeh{3B^m`wn);+Tc?5vE8YXjFPZH4xUeM4Z9l0x{AUN^-O#8}5AuB(pURWT~
j%qFqx)AOKK|8%!dgQ<_MFhp!*x-hGBSvV^rBZD;nH>OPq
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/replaceIcon.gif b/js/dojo/dojox/editor/plugins/resources/icons/replaceIcon.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0d1f1e3b81b5f14fcf0bd079831e60657adb81bc
GIT binary patch
literal 574
zc${<hbhEHb6k-r!coxI({gm(b%ke+H?)-i(<ohZA?+<IfKdk<KF7(Ieos*+2TkV;q
zMi{)lfBp5NyB!`<7k12iargTF|NonunAT79S>En<bVlUfdA<K%x6Vkg{P^<micFCe
z*>ZnA@BH!g%lE7C*H0}zy*}XRboU>hkN&tAe(T8AB^ee^u6CZDpz`qKvP=86E{f-T
zbaUUTY`$gr0?if-^AbdVeEszI|C8@m6F$9q+z`a`{^`9#Qvy1j7`{KL$xveW|2px<
zmrskz<2M%wENHMiy|VZFr>)x?4R5Zn{Ch9s$F;=&mjkB-vc5c*{{R1zuP1!IKdEl<
zV*CI9>-%R97S!lp-e36t&*A^KBfeiwnBdL)|7OgOn<*0mrG9<?_TyR8*%fIocDXVz
zFaSNsKrf*9lZBCiA%;N*!~w+#1N-cTn5O2I*4F5bwyu`w?yipBzMiIu#;W#x6DCSV
zDysBp80wqG_?ihy@l0tIR`NI3<977%a5IRR*zBhkz_d?>gTo<gM`x3rf;gK68><&<
zguBGViTpaDE{wN~<bs@?t~6<TtA{W@XJ=QA;(XX7FQm)xnT5rZ@955E5fe+TKv$7B
f6I50lWRne65D>Yt(5YX9n>F@fqGHk!2L@{Zp;+sI
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/replaceIconDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/replaceIconDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..261f5b0a455a70ee4eec91b70dde57bbbc9118e5
GIT binary patch
literal 933
zc${<hbhEHb6k-r!_|Cu(6cm)5on2g9TwPt=($dn?(=%ntlsR+eEM2;E?b@|lw{G3L
zcki)d$IhKQckkZ4=g*(NfB*jb_wWBl!6+COK=CIFBLgri=rAyVC?N(0jwS|G4jGRP
z2?tp@c(qh^BrJ4l;gvNKkqB&RWaCo|%h~Xt(V0Vtizg=|A;pnZNQQ&MfuZpLqX@Sg
z!%6|QBaIveS~UR*NiOVcN-hl!TQXSs3{_nO79?Z@F5;_FoBBbap^-geGuMQI%?VA6
d3|u_C3KJ7NXQaBzeV7rZz{Hk&n~jCR8UV#H73}~3
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/save.gif b/js/dojo/dojox/editor/plugins/resources/icons/save.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..499dd0ca6021c351c641053be30eecb5b4a7e7e8
GIT binary patch
literal 639
zc${<hbhEHb6krfwc*el+<Hw(<%GJ?8R0Skg#Z|9LtX+BM@%uOLzeHE9N~l|zQokal
zVMRvM^68syZaw#D`^m?<PCwaq?&*<B&re=^dG6Nh^C0x<!>6w~t;=?ud9vy7?cE^q
z*1q%4_Md-x_|o&km!6%t_VVPl7w2!kK6mTY)%$O+-hXrZ@w-PaKBPA<&u(2-(6RIc
zNcPq9H=oX5zOnP@<=ao*J$&)u*_+SB-Al@Q7r*)NC8Bg<dEeri35y=R{a!s`(Zjdj
z-+cag`^Be+Z@<+~UU=u_r#GK}eE9tJ_RCMNKmTZ&x}bU5g3n*SwN9VkHe-IrOdy)K
z{qV8E=C-cc^EU3?-!*&Ax1T@1|NOah^SXb3e?2)r_y7O@3<Ciaf3h$#FhnrufH<Hy
zVPL=05Yg1!(%NJY(CHu8)8pS6U=ZQ!>FF0XV`iA&RG$bh373G7B_Y8}0v38lc$jkp
z*ll!n+ZbSO?jGT2q90(p-`3i}AwXZ>F~UaEIKb83)ydw;HNe=|D#FajC?Nda{qO*G
z4a*2qHFenuucg)1Oe1vk#KiQ(Rlj@@RZ-Q6kW|)SNpYC)phHZ_ZOws82~HdWJPaNz
z1+9!7-C7%TCMY~)W@cAd>XG>2U^5F_1dmI{g2sc*(?eGoM4WVFoW>+jWb~tLagrYg
b>xLr|4hoG7j4VtX9upc41Ti%-FjxZspLQ0s
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ad505a9c23fa76dda26de768050aac06ce2be2d0
GIT binary patch
literal 378
zc${<hbhEHb6krfwxXQrr{riuvU%!3+{N>s6SFhi^d->|ki<hrAZQXU@@{Na&pFMc=
z^xlKVx9;3uv3mW(Coi78c=h!8%O}rXJbwE8(UWK2zW@0A<?F{!pFe#3^zQwKPhY;i
z2Qof<yngfMz5@sL?%)6Y$B#4T&fdFy_0YkCfB*jd^XJd6U%!6-{Q3X?e+DW6#h)yU
z3=HZFIv@_nPYi6+4@@rb(BX1Dv81R{Xr|Aci6vH#Y+QX0EDwHF<t?ilCc;r-_ky4G
zu4cb>lV94rm1nG(4&Eqwne$Idx=~hKJXu0QR<XNBQMMzQg@s3U>NHuNNy%)itZeh=
zE}WOl&%Bg<#R`4_e*R=ZAwhPPEh>uaf;*ErIfdCd4#>%|3-3whI>F9&T0w#R1XnWm
TW%eH4?U%Wez3+HBGFSru2lk@R
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif b/js/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4c58ae2794f2018ad0d47e82ade0f21e80754aca
GIT binary patch
literal 599
zc${<hbhEHb6krfwc*el6bN~5-f*A!3EA}6|_T%U8N3VXo|NQISr=JxQb~Ma5aPP&B
zXK#Oe{`ULci|-F#{do1^=hL@8?!EkOA6wtJ_~h3gzkd8k`0=CQ$B&91KN^1g==kwt
z#*ZHhe*D<*<HwF4KTiDlbN<JV3xEDx`}61ij~@^I{CWB3&*vXMKK%HQ@aN~TA1^F^
zJdpVFdD)+DJ0Bd-xUj+C#0ra^8n2!j?~W>;6AKJ>%&^!n!D3>)XGf*aiVlkvU5<;}
zo#(W;PH%L7aH9Xth0T{wZ`;seuw{bn#y-2XJq{Ztc&wNZacghQh7OAb4GtR`G&VFC
z+&{DCz=jzC76$*pfMJjU#h)yU3=IAZIv@@xP8is?H2C}bHn%#qw>LGJ`uO$sI<ZV*
zaqKd6^_wxnSwzH7#BHj-se*!<va+h35YHN0H%ota1x^koW(FZ)Hen$)b}N4eS-GPs
zyZBG;<+na0yOoL2Zx{DoZULJ^(lU3Hl<bB09`do8-MX;Dkn1&<Ag{q8NvY3Libh7}
zKg@rByuc{05wRv>k;eofZZQK5n~O<od@8K-Wm?J<Te+nKl+`u{FfL>j)h}=nnX+Wb
PNfj5jRWX_x0u0swO>^dL
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif b/js/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f8bc7c6ee607e100e33907132987888111c124d4
GIT binary patch
literal 957
zc${<hbhEHb6krfw_|Cu(6ckilUER{s($mv3Wy+K}bLOmExpL>uoyU$HJ9qBfwQJYz
z-Mjbv`SbVh-+%x9{r~^}45MHa3?rcUlZBCifuBJK!~x|A298+_@-_?x8x$Iw*;%<{
z3LZEfZey15C~<Ij*w7^*?^5#Nz`@2YDQS}#FBBLV*wqDPBm^cMXkgG{6v+r+Xz*ZE
zbnTn6a&sE<9A>E<JOT+1eCG2sypo9&Vqjj*BO$_T6_VPpB4TM)%7!b97uUyc=i^lf
wOkrweVogci@W6qQ(c<DN*;5XUj7)`3*ZC$WtdH5zz}n#Ay`$h^0|SFK0Q`zv^#A|>
diff --git a/js/dojo/dojox/editor/plugins/resources/icons/smiley.gif b/js/dojo/dojox/editor/plugins/resources/icons/smiley.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d5b73a6fb27b35e7a914d3fc577d62b2767a013f
GIT binary patch
literal 1042
zc${<hbhEHb6krfw_|5<V|NsA=J!_7!@yyk$H>_N_Zq}?hvuDp)vv%|9HJetgUcYkH
zx`T&~9Xfn$&AQF2)@)e4cEifm>kb}1_W%FPHEUL{Sh4*77l!|@7=GMm`2Ujq|1-Y-
zPX+%!SN?yG;o&jXzxM?HKNkM~K;-Xz$$t-J|2+aCx&M#l|38uc2O<^zKT-Vu6o{1m
zKLaA=|2G)^-(~oHo#odR*55by|KAn-cTe=+U9o@nCBL6$_<n}r$2q3Q2UvezV*ho8
z<Nq0k|K}Ngon-iUgyr)w){`qljxG_MQm;0-PVN6OhW{rSzU*W8w4dSRBB8_cgzHK}
zYf8eZ%ToUCWB9(G;qz{W=j$16tzf;fm~~RQ%A`t__EL+MV$1H1y8l33TNtj+WBsy$
z;lgy*mOS(3T=Rx(^V*`Y>ca4zj=HZa7{0DzcruUa@oc91vzhjF3hn6-?#oqe%r>tn
z2&*Vc>29yPJDK7Bbf)uNtf$&p_cRIZY839tRISbrugVLrEK2EWtLw>7X-qS(OEs^`
z4XXl))UR2+dd2ePD^{!kMhC+vpchd5$->CM(8izx;(+o51IK#?UQUycgbCBs{U7l}
z8Ei;oQg`d%;5>AMOOl0`SMtQB!-v?UP4r4uJbHG(fi=S5j)Z}NE7vsRWi6En9gf2M
zQfwO%7ACcFi805OR9<cfn8+jL<0G+w=|zj6;esuiA!!~ROT42kY!51*lCtw}yTULr
zX=V3X+es^K3V&;E6S0mhu;_Mbn_^jTN@r(5V<xwFLpV>v!J~ZgPT^Kxa&Ij<$|c0y
zFz02k;~@zx<6rYE0-cU9$i}^3n3T}LAR#j|a?_cGE`9PG%&Z+hi=MRet3;o<@-unU
g!e*P?8w)&(+56?#C0X?(R5St<97U8&csLlW0RvS+n*aa+
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5f947579244f8802a0c75d8cdf9ba519acdf43af
GIT binary patch
literal 936
zc$~dc&uhqW7=9ErC9Sxq)h3e3MQ=2@II)c>chqQa4hnN~lSZbrq<CXxYbRNaiR>n6
zHZLnDYZvh!h@{l(c|L!H&+YAf-{*aPe7{Erj`STIK8#NM21+lhqROkR3aT<IqtYv_
z5^6?PM1@ya1vKkf9_3zc<<P2SS(JI1m4QfwEJVQzR)By7O)M^R8oHwwnVxBx&{<Xy
z8J=Mo5DPXv(mmbMAyS;RNb@vH137Xv5eZLN0-`JpBu$p21u4)aLKBP2kRa839$^uX
zKAvUe9&X`~T(V%(Jj}vC^(4jFfCnr9nIW^dO*^O`@<x&fM$%*nS*63oCN!}i=hSA+
zXYP=Z)W@@|%-ld<DVHqRbeIFOS*e6(Wi;fvybG<$4k!dE3?Yd$l!<tRfCUXjr0LKd
zJuopENqs!a%Ak(}Eq=6s(IP|(2`vURqtUEHGYicQG{I<+&`6`vLOYBGjkb)|W<5TB
zn;#<n``i9!{W@S3dsXP4K*t#7H+J>UJ$`e&W6PdX@8_o8-t62l_^AKc^t-Vy9cR}b
zoa|Y=v)Z@$Z{O&-fr+g{SG!(6A6dM=Vfe;{7~M4#2S%n}EdBU)eB$uMg_+g)^B<@B
zuRPh*`+4`ut?tW%r?>t5`f0NBnm=9M-@7t<qWjFq!o8UfvpXN&{k8ORcJ0-r@5__N
I_VwV<KRacP=l}o!
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8eff804450995dfa2c2882db7b8aa6a026871216
GIT binary patch
literal 935
zc$~dcy-Uzx5PpIPZIT=sl%QO~oH__22Zuh?A##jzDCnAkrv8Dfz#>9IyeRS`BN{>}
zsKF)rAoCj9lE#`EA|ePWxSr?zBYL;v?w)%-e!pX*M+Xm{8Aca=1ErT$QRP)u1yz}q
zQR$Ud2{j`tqQWbz0-E(Kk8&@!a%k1EEXush%0Q$-7NXz<D?q@4CKi`D4c*a;OwY7T
z=q#&<49~C(hy|M->7H)s5Gl@Dq<Na9fgHJ-h=eCB0a2C)k|s;if)wZyp^3$1NRVni
zkFW?xAJ4LK54UhgE?KZ?9%f;ndXnO7zylV5%#c~!rXAD|c_T>#BWbdPtkPj(6Pj3%
zb855ZGk3^H>f>2fW^SObluH(DI?MsttW-j?G8%GS-i20W2NZ%7hLA)W%0xUuz=DP%
z(sbyK9+()7q&}WyWzffg7C&0RXc3}?gcbvu(P&npnT2KtnqV|ZXr$3-p&dqpMq5T}
zv!0r|&JPj){q5e|x&_$4fC~K+=$ORQ&fbybxtEtay8BPRTb_S)t*dYB?#Rl*o5@f6
z&-T3dIQRDE#_*-Tdw(ph-PmztW@vDFasAf5&c_c1yT7i__Fwq68b6ml%nnX`U)}89
zGdeeP>PheRUysJ`?>cwjO58sG`p)?LwxzLW3v1KI?_E9IIWsW6vh(D_i9aX$K0m+s
L<^4oY7Y_XcL%fY_
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a95518d73b6958f78f38fa2c8fde5cea3de6554e
GIT binary patch
literal 929
zc$~dc&uh<d7=I~;xlN8Ja*-5yF4K^x?Q7*QaaeI6p6sv#Cnph6(+-yCVJ%ju?`f>$
z;3AFTDQP>9)DB8>bkQyzuh;vJ@V-4g&+~d-KR%zqBLjVVPai}t{s5(yRZ-<tRs~g=
zl~L)HRtYsDE26?HtOA<#ERS+8w{mFJvMkEH%*sHdLKdRn1uH<nf+iN1ISt*>i%ie7
zOz14Dhz!rL42T7r9_gNL=@2Q-TBLcJrGXr|nuvraECErL29hRA(t;G|5}}F3Wk`@}
zK98^nNFUF#au2s~NG@5hX&z=_pn8(xY`_B+fXt9t+@>AW4|yX=1S4s(gsjqGViTHJ
zkaKFY<}-K5Nb2KRR%ULXuarv`Y&y&V*{oDTvoacTUEYOOWd{_36o!yQ8p=dGLcoHC
zBGPo|jvkm8jif%FWo6LEffhenz-SSog@hIZn$c)hqM3ze2by3sNob_eXrUcOgGO6M
zYqK67zr_y`|NU)UUAqSOik&L-PoU>A=GJZM%sza5t!KlIlMAzt-rVfnHZ;|FHZy<y
z%bqhEUk)!1Ol&!P<45QB%)80WbB~XY>^?VmZ`aZ3sg=p)p}T#fZ|{uQ&kqm!N1wkM
zS%3EZROiCqeXGMyK1Jv1p%cGuZ=avu|MbB3`=3`9y2r*YE?rvcF3z1_?4J7gV(i-$
G^#23ey^f{;
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..de55735e3973df2c60182d02ff647ac15a597268
GIT binary patch
literal 931
zc$~dcIct_-5S&1Y#3BT=Gb(B$B6uu<!9oj<d?JVzT0{%MtOwXCSb2dYM))9wEQ)7i
z1ThjxVJ8w0TtpHTEv!tDe;}q=XPzJ7(=EF@JIDJT?i|`Pe0Dzu@dqfqtcohHvMQ*`
ztc*&pv`VNMSrHXpVHMD<XL*!+xs^k!mSs`qWmX0v6|xWoFIWKr7BsQA%xUP3USxWv
zWkP3JMPzt}Wk4+0^hoz~ONU5t)*{W*EDhwy)kGvbVF`$`G>|k|k`|;umk3QPE<=J;
z^Ld0tK>B!=m3z2_LvqQ2P4h4d1J#ohX9FIv0Az;D;x_G|e#je1A{a@NC1jNj6PwV)
zf}B&EHJ`adMp7TovNCf6eWhHoVAEj^$Y!Mynw8Oz>+&wNDm$PMq%ede(oiPi5ds!8
z6p^Mwcl5x-Xe9OVEGvUP4z&2u0!E7vEhMxU(2Pd263r|$JJ1B9NkSuyMhopQ8Z_E6
zTATI6#9e-f`0sDy-`*bJC$_23KY_mMnC%}LnR)X5R^RHar$5d-{cvY+^O1)mZ=TKH
z{;_KyU+i2vcW?dh#L|}T()`VJ`>q|BJ~7tm_KrT9y!d6T6FW{Vd>x)T|M~ug%kSP!
zPc0vOzUjuw(4~cQ#~yFLdS!Ce?&ZY?$H(W^tjsQd>mKb4{OUjX`}^w)i!aZ7ntL@m
J-qVA<{{TnjitGRY
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5a87895315f3be159ff1d7868eee1c7252fa3909
GIT binary patch
literal 888
zc$~dcyK0qT5F8<q#42DRcqv2!qE@bjqCzTjJf*}!(83hkds<5aVg%C(gBD&uQYM%e
z5D5g?Mr^beeE|!xT4%n8@avY{ot?}7uim<O<?4eKEa4B(e$~zH?2c}@s_J4_c10K5
zWHs5$W;Eg1tWI`jXLQ1=Q622aj_81p8r5JU8_|G)4J|A!YZ|`e$EvJ~D)_7_vY5pv
z!YtHGR%T^X!lX1CtjLO}fH-Qkz(N+H08_RGkrqqQf))6ZpoOJnSdeSIB!h(Y>8z?u
zW-wv7VxeXvBN&i+k<u)YL=dnUHcQ*GL;7KFEJ<J@EtarVJ}hiO3k!D6ZPj{_2^%SW
zI;$!o1M*dJ#X`+QBw(AJ3O#G1Vb|>)y=pt)5Uh|!GHEyy^PqtZ4M*f@`i>uzn2eM@
zomCa^$AJ+)M!*;mVuXYd1BTHUR$`ciVF!j_3`rQIF=$~N#(>6H#%QbF+<c}F5&!+2
z{yTRF_>PM%{7+!v4n8cNob0^*_;}&y`FjUDZ$3R)Ix~GW*?qge@$J(3iS36!_P6G5
z<nMF0&mL?o&%eLEIQuz$aqRwV<LT_z<mKfHpV#<xef9bAM@LRg_qM;ho7_D-him@;
DV()R9
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f2b647dabff398a36e65e3e66ab041208b0b41cc
GIT binary patch
literal 898
zc$~dcJ&%oH5IvhH?uO#pEfgs17Cxe}BVt2AguAN}H4z_~L`hT%4arSbL==ii6xd|Z
zUF;ta*#wzrG`45|f)L3#XMTjIo6O9a^YOl;<#Wduub#pXzkt%qs;KfRtAeV`%Bb{8
ztAv`76;a_8Rsqd=mPfglTRF69Sr%npW@R8!Aq!FPf)yZOK@*G1oQCe`MW$z3CUlln
zM22Tr2E>9*k91GBbchsZEz&&A(m;+}O+>;ImVhWr14)x5X+a8fiO|I2G9*YfpGQ~(
zq>pD=xrbXgB$q7MG!L^dP(4X;HsApZKxW7+Zqp9xhrE#_f{`>?LRRT8u?bBq$T_uH
z^O-wjB=zwuD>FCHSIQ*|HXY`GY*s3vSs4wvF7HCCvI7c13PVUD4P_!8Az(p65otPf
zM-NPlMp7TovNGu7K*x^`7#$%xBy<dDqtRBP%|hFO7L1mJCXJ?rK8%J&FQeP6S5_YK
zL&Sf7`+jem0yc42h5iW)uHgOjo~6n25BCSNhc11Zy!bdC&Yyp_^!DY(gYOI1cE7%L
z{n+DOXYTztFubw+WbX9cql+^?&pzEh{qD}eom-<vM{ZtR|9pGx>-gmMKYuqT^P|<h
U<C)7}*57=4bzya3#{eh(0kMI07XSbN
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3ad71ca40653ab222a125135f57bcb6e34cce1a7
GIT binary patch
literal 896
zc$~dcJ#Wup6g^&s+M2L2XiSPo+=Vb0glffN6CG4?Lo6nniA1!C$e+PUI#eaZ)}}^_
z2tn><VUzd}(xl0C&hsHW+s(cA-1GALUAlbn^qHIIF^#`K`&Bo)vpc%ss;Y}!*%e)I
zlhtH1o6&@4vpU(CozV%eMs=_wJE8+ZYE*-bY(xVFHngy`tZDd;AFHw|s^GJ#$YK_w
z2(wT#S(%kl36s)nup%p>0^+FE0t;D)0!-N&L|QCG3s&Guf)<vRVL`6-k_-~or?aXu
znZbnRiiMhyj9@_OMM|?o5<$Rb*eq?!4(W%zu_S?sv{=Gc`LM7BEiBkMw^i#!CTyhi
z>8z@V49Hi>6$>>Jk$`P>D)g+4hF!OJ^s4QEL$E>`$)w>-%!39tG#rtq={tT<Vlq<t
zbXHZs9|uPK7y)BMh!GM-3>ZdZSczd4h8-A!F(hG-#-N397y}w(8KbRwd3i-2BL4fE
z+1|Sg_=V#x{7+zN5nKBX&26lGd^oj#_QuzZSDzkFADLgB+g$(r=;x`WgD*FKe_1)a
z_29tKdw=F8Gbf+!+@9Q;e|BtPeRX@Xbmhf~yVpN_o4mRD<lMsjojccFFYv<i*~Rbg
N-~D(yvu8KX{sVOHcvJuY
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..61145c1bd685096156117eace91573222988471f
GIT binary patch
literal 887
zc$~dcFKd@!6g}#~HVk7+0}V2hY{jdnh_JNHUosdi8ZH=C{0b9<8AQZzhCwIF;^s^?
zk%8eBn*)>c8yLiNJ?HrlKJ9YvJ@@>1-}T#T*Kgck#T@<s?N{CG&hF@jtEw(`Wmj~;
zO;(f5Y(^8F&FW-lc19<>8r8v$?1&BssZk9!vJnj!*wDh#vZmoXeyqx>sDjU`B8yp!
zBFsX~WMx)HB}_`Q!HTSi3W%dt3oK+I3NU4B5NWX#Em(ms30hcMh6TCSOEO4UpU$ev
zWCjzKD;8=-GJ*lA7b(pWNdy6#VY9R?JER}>#*zdk(qai)<-@`jw6I|3+*Yj@nXr-4
zr?aXeG9X_iS1i;_L;|+isnD}F8g|{@(W|xt4#5g(B$I|SF%KHp&~QYartkPciOERm
z(^*vke;gR`V+4#5Ax20TF<=;tVI_uH7<OO?#*l<T8iN+bVGL-DWsJ7!?d_-f5b@vN
zg}+m$fMYDX@IQg+yEvRVx3T~F^VamjrF&oZ-+Xy8w={XRaj<*z`1|Dt3wsAAN6)6N
zJvuw{;n(W(<2&!KJe+?wdAYpu>Ehz=lX`J=^XCs9?ym3L+L}E-`MCG(?fjY3xcLtx
Cm2({c
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..350d1f539487d8d33a016d01c0fc9d4978592dcf
GIT binary patch
literal 933
zc$~dc&uhqW7=F}Z%3-yGrb+T6w&mcx5QmYl-Nc3LF!Y{w5H2JKL?&aAdTR+6B8AmB
zxM*3j*FlrWMJVMTkkjjVK7WMI?d^Tv=Y4*Bzk7yuZ`nFJh%WpAN-wLT%B!pjsxm91
z(krbJYDQK>g;!VwH0xO&<z8;((5huwlzEwzfk=fcM8OMIfPe)}EG}~zx}z7Fo@trT
zSymAlo?#gf3pPE{J>AkFQk=C&^E68XIdU}-2~Su8qAU$0O_rnuDbOWC6N}4`Ak};x
zVG)o%o@M18ZsCwzvS8CZ%)&tRB*oc)2P^=YA+xwmJE$M>Mv@3d(qsu)rNhJ~G_fG(
z)Mm|R?vRnx$Fr==+(2I`mn_(Hm;<s|sf1=_G~~Lx3$4lyC<G}CA&E4UiFky71r0@{
z>ChcLFfkfQeLTy`ppOGBezbtmB18)bEe15B(X2!>3(XER!Dy1uNTbn0JB$X6wv5(h
zJwASwA0qzyTm83V5%2{AD)djF^E{@P_U?Up_w|L&?!LospWd6j+_h$SYVWiAZ!Uh`
ze5Cv3z8`aAtCpNu`*8B;(DileF8%C${_WlEfzfkkdv1Q8pV)MA?$zlV>v!GRJ~ZAt
zeBi<RTPr75jP#s1_TkFlwNJ}_FZ`N)xN~}D?9l%Hk5e0VOq}YQ*?92r@`Xnu^D|Gr
MzBt~$xC7h%0TOG8lmGw#
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b7a26ceb00dd7213ddfcf46bf4e7a772c037a5ca
GIT binary patch
literal 918
zc$~dcJ8P6t5It&&wF{(F!5AyG(48hhf{(&P8xd2eShylX3LDK&P!QG!Vn7)TqFYHU
zjEbGj5<*f;C4vTG7Z5FN#A-a}{s?b3%*>hd_`aF5XC|k5CozgYK<Q;wRC$$EK~-jD
zRC=XVLe0pEsPGD_fMz|*quk4_99p$3i!v{>G7zbdg(!Hz3J|cMiN$43LwEEd(=#m-
zI?E~|!!s-cV!@_Ix~E$@M2fQ(X`W_jAV;nyBH;;3K$N9{q{))BAO*TaXku|05~P~X
zBP;^a$Fr>5!z~<=OBQUJhgle?o}@S%@PGv%Gh`OGX$SQ~-bfO`NSZ7mt8|#ygeDf`
zoZ77U%pEe4`goR=nH%UU<&p)P4s$>@E0xf!jD}p7ccE3;0fiuiAtaH8G7*muu%Mxc
zG#$F52PQ@%sgGw_8T4_W#g7&+T7+mJp~Zk^G@6xYW}(@ECKyc;8fi3IXou0D(U#HL
zto!}@{1EZq-}v8=9l$1zsL(%w&H_H{-aEVUa(JgRcIfKH%B$6TqZ8+rX5S6g?tbfD
zAA5akV*SCc>D!+=7q&NU9++M}IR9k(^y1O;%S%5$_wsS~#9-_4VsGX}_tc}2&G$cs
s&!;X9wk~~{A3i<2@cYKEx$(J&lh1a3zw+_T*SFVJ`}_7B+mGY_09G%9fdBvi
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3accd149cdafd9ba78e45c99a09d22dde758a0e3
GIT binary patch
literal 886
zc$~dcy=s+F5S$AtSF3=QT8LJXLRgCg6;kOnR>9IVHVYQMf`thv_kz{~3MvZP#l*@^
zBoM+jcBZird;&qN)|vAVIo-0mv-9(Px9{9qS$(jECHw{2ue#Zt-O&wKRbA}LuIPfB
ztR|b;j3zvr)ydB6j81qps)HTb5giaxqZ({vBN{NUp@pSoO~ZHmSd~>#1)o(#7PA;d
zn1!0j%B+k^n3QIN6<HA#5J#;RSja*YV9M4Y(qbuEumWEaw6L@c3v#WOWRS2vomG{|
z3??jBEYyr-1OrkpQko@_2m&_4W@%e?NI&e2B?(NV#S*s4hlMR@VZqM1ty(WKVI!qa
zXH`XHK)y<@Sg4tZ1Z=ZYp=WJ0?7F?9S8WFzf)&z8CJkp|9yG9_;fOp<-|>SIlabP=
zv#J9AI56VJ2pA(mjF2#5z%UxaN({3w?7$F=Aqj&t1}%)k7|<BY7;V+_`9dEej{RNy
zcVYq@VcCWM2~6){@AUcE&g-vR)3aAL4|d*sd%ARK{pIY_+x_hyr}EshN5A%8oV+>z
zGu?eRdvf{i;~O70-XA`{y7A@O(eCeBEU*6Dd>Ho+U#)GOxv>8E!}rBxg6sbQvQKiv
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fed7623ce6187f6df31015bf540835022ba2766d
GIT binary patch
literal 889
zc$~dcyK0qT5F8=M5iEj=)d7_#f>>n{6cKDpPEyzif?%P|cD6Q_3hGH=AqpcYycIS=
zjJ|+KL}eR0t@RzeH0#Xw5PsdVyR&oo|JAjX(`T-q$0B|K?N{CG&hF@jtEw(`Wmj~;
zO;(f5Y(^8F&FW-lc19<>8r8v$?1&BssZk9!vJnj!*wDh#vZmoXeyqx>sDjU`B8yp!
zBFsX~WMx)HB}_`Q!HTSi3W%dt3oK+I3NU4B5NWX#Em(ms30hcMh6TCSOEO4UpU$ev
zWCjzKD;8=-GJ*lA7b(pWNdy6#VY9R?JER}>#*zdk(qai)<-@`jw6I|3+*Yj@nXr-4
zr?aXeG9X_iS1i;_L;|+isnD}F8g|{@(W|xt4#5g(B$I|SF%KHp&~QYartkPciOERm
z(^*vke;gR`V+4#5Ax20TF<=;tVI_uH7<OO?#*l<T8iN+bVGL-DWsJ7!`FukkBL4e3
z@@HWe@Es>z_@BV!GT!c)&bFSuzdhN1;_9cZXCLk^F0F6Q-aOyA^KEw?xcB<U$Bo0M
z=09i4FF!vxwEAS>{`R#mj}D%@dGz<b+<AQL#`g5erQ;Vimv8-@uD^Tr^~LPr#k~`p
F{Rj6Ma`ylL
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d2e84375551ee6c3be33e7d7296a4c3880b80489
GIT binary patch
literal 891
zc$~dcy=qob5F9~5f=$p=!9qzFLO`}qQBV-{i&l0PS_rxipdg5)0reA-!p4CJYEqa&
zh?o};35aZCrwBGagjlUJ=OH}Zvb(eMbMKY4%V*BszKD7J0ot#+*`3|d4OdlN?8>g_
zf}5-+o7s#eJe$?Y&g_g%cr~hn9oZ2b5K^NWY-A%EFtDM8rDaXScl=nDRZ#_>RYexF
z7)6+cn#sznj7pf4W`h-35fu<etrl3wLKI-i)*#YiDO#`sUlO#iv<wS!t(Rnwus)qt
zmB|byELSYljAR4@QZG`PC6WjNHp6CVTXsl4?2RP}Or*sUw#tWvEofoE&bh5xFEU{x
zrB7#7MPxv}O0HO_nTP~zvs0mGZ8Yq<y`xuc2ONSG(nux^XJQ^Su%Y3IJWb#6gA$XG
z(x<bk0{%EK;>QRWBSMUjFk-+k8pBEqvoP$y5R4%SgER&$jKdhv7|R%K)zj&7eTew)
z@8sXZhkzegap8Xgvp4W@?)YTy^{2<P$Cht?*?aT($^6pQt;vVC2kYNwa^dOw-v^sB
zr}O9J=+4^4;*sh3hu3$mZLVB+u(f;dZarJQ^lSg+{X1V@Ej-#-pWA=;ZF}-!`PSm8
H6FBz|$wPD3
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cf806b9e96cb109204169c6880245e813396cc43
GIT binary patch
literal 890
zc$~dcO^eQP6g_Iv*gYkZY%~*@EaYxXEUe5kPxew$QrE`X7ogNA7Fe8;nAup)Gb|_@
zNtwDSJM%HDyhPVIzYpQJyWM-wJum<N+WMt)t2ZuUf*(NpRX4k{JG$Yjs*7FO6<u(X
z)nqf9(S&ESI@y_>(Fw0cb+98lq60!|RD+FdL<0skw6L_SY50yGtFkJp;Ipd8Viuza
zvrscxnUzrqlhSOkA}gW-;;7XE3t5N)OxYSlS}a8iR^Us57M7M_L9X?Z3=-C-v#K(g
z!Gz_Cg_@C!U_k0cO0z@~LBM9%EN#mU>4&|sB!P*vSi)BMu&@O!EZ8}>RqI72Y^3z*
ztg46%$XCe~3pEpwfNgdv^sJ4BUAK4is_lS7utFNiq~T1=g9bJ<9FeE#JAP1NGE(|<
zR#m_s2S)rD0b@jn5fVlW7)E1QiD4Fo9T<W!Bw>)opoMW50~%u)qpf;l<AFXz{P%bK
z*TOzv52s!DpTOc3ygqPjy8YtA-Nl0|*FJB*{CIz|G<!CkZ+^P>ZGSGm{l2;O@aXED
zKR@SNySJCtuU|NI=H~3_q51BUy`2-6ADz7Q<^8*}%hTtFul`<`y?OO@Yx;QQ?~w`4
F{{xiPboKxM
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..00c7c664ba09ad35ab0ca1f28726cd4ae342e8fc
GIT binary patch
literal 892
zc$~dcEsK?55Ius(UMve%gL0G0mSu{fVJ&)hv1}ApP>|7T6%j;H+zkfP0r5LngezJU
zi-_XK6q}08YFE>E&hsOD+AuR`&d2*6Upsd2(3w>%;y2KK)y?kgj&8WB>S9-RMHk#;
zHQCH&G~wB-PIhKzbi%7q9qh=C=zx$K)nFqV(SU&sEi5f-8ouMls;r7C_^c|jn8hf<
zEYwU^W@S{uq%<3>$cm_dIBK=PLKdO`Q?>??7E95B75I{%g{5U!kZZjpgM{_ztg1|A
zFk!i3p=Kl_7?66A(kzig5U?3GOWU$T`eAP@Nnj!^matVmENnpw3wF+J)q0T$8!3G{
zt12P`@>O!hLd`@ZV4Ix^J!_+3*X<p>YCGT%tdK@BX*d(}pn(kyN91YxjvthmjFdi|
zRTc2Zfe}AOz!(u?goF_ThS3;SVwi<t2Zmq_Nf@LtXki@2fW}zHXsh1Z+SZ4N|Ni#>
z-MIt!hGiH2C$Ml5&nJ6l^ZReEF6>#_{4js;_Qv9L{m$&!!*|!d?#jCU^ymBSeUr;S
z{;WJ+yE5IlyZLcrx_)c<=*3^>=VwpcJh1!w>&eQw&-ad8cy;MzJo)lyc6;g6rx&MJ
GarhsSgLahw
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..91c7e1286fc3c1fb0b7d82b60f00550604bf7b65
GIT binary patch
literal 890
zc$~dcyK0qT5F8;$><(xV(88c;LM&uaA|hIulN2@<Ha3E+_ymHjg60Gi6pIm+sEv&f
zFQo`UycFBmX|3-dR_o075PsdVyR&oo|F!k=tEaA<!vueT_N#7oXLoeNRaF<evMaja
zCacM2Hlqp8W_7YNJEId`jp|@Wc0>n+)Tjm<*@y-VY-nL=S<~<xKUQT`RKaIek;N=V
z5oV!gvN9{95+<eDU`19$1;kOS1s1Xp1(>omh_qOW7OcRR1T8Er!-8DvB^e~FPiIwS
zGJ^@r6$>>Z8Nq<mi<D-GB!Ym=uvyxc9nuebV@U!NX|aT@@?l{MT3E1iZmZUdOxQ^2
z(^*v!8IZ4%D;8=dA_3d%ROne74ZCjd=vCVRhhT*?l1amvm<J7PXgDHI(|7!!#AKxO
z>8z@NKMsueF#^Vj5F;dv7%+^+uoA;83_CCcV@SdvjX?|JFa|WnGDchVY__Ej5&!)y
z{+-(c{KSe2{}Y(Mgm?Q6O?S3;Z_V#tzWi<H`KLRRBO6bqZ(e-9{bO$)xcmCom#xDm
zX1^ES9^Jiv@a*H2%?DS%K3Y8Uu})rGs?B59?|oQ5e(l1u)f+eGHr~Jb{&M<o`RT$0
Gr~d(NjB|hh
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14756189c3b24ee7a7f19ebb998b09d6bd2128df
GIT binary patch
literal 891
zc$~dcyK0tE5F9}?=>m$Cg_l$z2yqJ)Ev(FMQl(2o3!8la3p*=CAr>*Q8WHhQ#72l{
zk-|nK5M>)X1v~K#1hHCY&O>;*Wp`)i@_ma}ubjVd^D<`e2WY?QW_NZ+H(XV9u`9cx
z3vRNSY-Tf>@N8BmJF_!7;nk=Pc4S9%KuC>hu#t^uz`%wUmX<XQ-|=HrRz($jRux&y
zViaK(Y9=eQGAdzGnhjQDMN~i>wOU{y3sHb6TZ2f8rD(wld`Zy4(lRW_wO*1z!uoVp
zRVFi-uw1cFGm;SuNWDmDmPjH9*bJMcZP_9Hus4<@Fp(BZ*eV|uwxERtJLk4)y~u=(
zls=tR6_Ek?D!F2zW+D=>%}#}$wb8Ka_Kse)9dHO%NF$jvoQZkRz=nn+@-%(N4@yi%
zN}tZE3i#u|h#w<hj0iD8!iWLGXbdYc%)+n(LokLU4AL01Fb-otV=QB|Rj;o<)Q5=w
z{!acqcmVj0c^CdCFtv(z)5j+}&p+OsIx=^Cf9J)g2Q#Oao=)Dr+`ISfP}co7Kle5c
zpSyK*cV%|+=+yGorO#)7ec7B}x&3>8Gi&3_;*$?+3)@T2j@{Y%G5!Aa*H@Frb2qLn
HoWR9@6To$#
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a1e95022bf7d3334a63058e0dd7fdf0f39a0b3cd
GIT binary patch
literal 929
zc$~dc%Ztx(6g>(Jt0@~qk`$B0)GdufHs;mTWQqALrgWPv7P6T%CTiq0Ay*c|LJ~D*
z%3dDL<XR!Gjhd8f6<J;9eEtZZ-R<6c?s<H_14I3N`^FEU8-IY(%c`jIDyxF3%*v?r
zN~?sLkrh$l6;=VwdX`7Ims>fsYFQR#US?$=QXvab@PZW}U_ld$%bbSp=tZVyS|)Us
zRYZnoSO&y`O^<X>w{(aUXD!k^&C)=QTuns66PAD|O9M%hC22tlbcxW!;xZ&iHJ?XV
z1f-8=S-FQ>I3$-W*fbBbFi<^7aW>!q3qWSbEN;^d>W93MB!ZDNSwdFnFtG_uEXX;v
zS@W4YWF+<REGsiN&{xVO3pO3*fNWMOp;;LXxi0TQtFi+MK?*}iA`N9C9wA^sLlJ2@
zbVm<Nj7Cx)&$2S;<3NiaEnu_=(LzFt0nKPME78nCvja^qnj|#RXtdA{qd}uBqqSMj
z%v|D!i2we!|6RQb_>4U&^iQB`5{v7$49?FzKi{>XXKZQy-iwRfJBIHLKE3~H`qRSr
z*V{){UQcaZbK(82*_Ff7n+9gbj-L9qbfsr>>cs8^e|v4)fiE}C_I@9^b@2Gw%getW
z3|;N(Z0;;y|FJwbd~$DR{o=&voslz>kB@!$IdZf2bpOtczaM^FoOt)B^XA!;m*=qm
EAAop@<p2Nx
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a55290e2ee2c8f9798c20fac8a7343ff38240b1e
GIT binary patch
literal 898
zc$~dc&x_7+5Pp=y`<AknxG3?KgWSe})<G%WeGlTO$nIgM)_E^3BucF)%3+FP9ptua
zwNWnHrZ&w%xo~liKVeHw<9X(f@VQMh^UU+(`@J}O;q;mLbC|*(p!BjTs=UgopenO6
zD!tMwp=M-7RCt9|K(n6ZQSRkd4y{_2MVXgb8HiNKLKM7U1qfKs#Nslip*wn!>6w-Z
zon;k~;Te_zv0&39-P0`{BE?yYG*7cMkRw+Uk?@2iAj;A}(qu_mkOEyIG_kl02~y4H
z5f%aI<5^bj;T8_bB?~sq!z>I`Pg0x>c)$XX88VC8w1fH~ZzPFeBu$o(RXR*;LK6#e
zPHonF<_;N2eLTy`%nkIFa>;^ChdCgdl}cz<MnkU4yU?oafI^VM5RynknTSUSSkO>J
znhxF30~4c>)W@@|4Ei|G@uLGqM~Dsy9Ru2Ew3TSH&~~5&qa~q9qiLZJqoL8u=r-%+
z<%j$b@!#Lkzq@w<KX6io{s|0jV10Oay!vwU-eCWUYul@@wjNB4CeO!fE1&Owf46Yp
z!<Es-<3s0f?rg999zQu|w@(eH7sk&<GaE}+_Z`o>wmA9p@#);97kh90JUd+a_4Uz_
UI|r|SdH?p?o6D~!dj^>K2L-5h<p2Nx
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9d4a96466cc83a4e81af31a0ed3469ab9d468ad1
GIT binary patch
literal 880
zc$~dcyK0qT5S)O;i5Q63rclyI&?Z|Lu}P&d5D;xe5oAkWB7%}Y3cFG9TG&PoSlI+o
zj<Ap}Bw(q}AcC;Yd=KH*ExS8Am;b+U^ZMG=2kThGZ=n6Eo88$R-EdXa#jfm%F1X2R
zvYE|j!n0YO?99&Sgjb_F*pVI40U<T2!A3Ts0RtOaSX$OJe8-PfSrt|ASyf~)i&2DG
zsF|$H%BX}%X*O7q6;T0k)M|l+EJOjOYz-nUmZAkK@FhVDOUtkz*Lq0?3G35YRhi6S
z!g9qz%}7QtAoU`pSt5xbU^8r%wq=L(!`@huz(iUsVXJ&t*n$=o?3~-G^&%5CQu=gO
zRYV5ltK^D>nu$ojHaiu1)<(mw+dF#IcEBN6A&q3xa3<zK0~;ES$kX&4KPWL7DSbMt
zD&UU;BYup4F(SkW2_ps!qcN<+Fbl&D48a(ZFi2z2!Z?fpjj@c;R=u;cs}B+X{ayHT
zY7RKTB^UlDFxkR%eraR>&B6BM+{)eA{@X847MC|)ZhU<A_3`oP{5(7R{@dR9g-1(k
ss}E<-PHsK_`SkX$&E3oQU;Vu}UH<gq%AKPh-=`lAU$1Z9J2Szxe-trsbpQYW
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d704664b3adf590a93177338b51824fba81ee2da
GIT binary patch
literal 907
zc$~dc&x_7+5Pp=y>!3D!P+H~fjan&bB)d{_*mrji<mTYwGPx^%07|W-4P`_v?FE-*
zk*g$|=AbRL{(wEWI4SLEJkR_QKDTLRo_T(JzvG3u(=%7kVFG`F(#xu-@+zx>s?5r$
z^h&FQnvoSz;T2W^&3cwcxtCixv}#!vWnN}wAW|U<QSgElAYefgi_4sb?&w9PXIdt7
zmQ_TCXIKWrf=!QfPq%c46lX2cJk8QTj$BPd!V{K&C`$uLlO<_E3UrCk#Nsj}NHw2F
zSOlbxXIZ(2TR0?_EZ8&;voKISNpUvd0SiE8$SiKt4(f-zktBkVG+9Dc=`gVgO)SVc
zwOR9-J7gsF@hmGdH_%tgB?~qk=74NgDxp~!4Y@AwLaVX^3PB1(NFohoA|4@NK|>K~
zI&?=5OpHcSAJ4Kf=;J`gj}90eAvz><3}~a#R-(;9+kqC0mV_pariDI?hDI-=+pL$C
z?(###e}BWB-MfIFIHp4X1P0fzzGrHFZROLg!Q{~^8*9%$-<cRKKAnH_;>+!=flqzB
zbm+tV{l{<QseP+o9}K6ToLqQ&_}lXI@Mdl;9~nP9G1`3hYjb=2c;?{mKRee)-&f9G
dJg~hn`SQZOvyWz<Exv#C<MrkB*}Vgt`3HRgeF*>n
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2096c70c57d432dba7edaa31db38fe3d0fc6287c
GIT binary patch
literal 943
zc$~dc&5O@*5PlR|MQ!#bZDB9AEr+?Rwk)N!yGr87DwnZ)a6_&l>+Rz0FlDuD(k5E%
zfs%tH(h$ES4o;Gnn<zPr=lT2*KDTLRo_Sur-yLHkgPRX-MK}HcrI%Gv<yBS%RhgAh
z>6KOqH6tsc!Yix-n)NJ?axb@XXw|YT%Dl|VK%_zzqTmH9K)`|~7MD2<-O-Co&$LYF
zEUSnN&#(-L1)Cn}o^I(7Db8A?d77nx9J!i^geNQkQI-ahCQH(S6zCG6iN$3|kZL}U
zun0&W&$4n4w{S=<S+HpyW?`UulHzQ@0~UbHkXhWO9n=qbBS{1!X|jZ@(qUo~nplu?
zYP04ucgRTU<5^Z_ZlJG}OBQT8%mLY~R6?^d8ggCUg;r$;6oM3nkVG2FL_9*kf`%f}
zbm)#Am>7+uKAvS|(8qxmKU%<O5u$~J76Y2mXjY<`g=PnuU^Gc+q|s=h9Y%vjTSjZM
zK6masKSccZx9;!KCBR1vsL(%wt_xUPv37J}_Q}bvp8owW7H&M9?%ptdZS?-lXQw_a
z_dI>~^T>(bZO7gXuI_t&sdw-A_NhyABbNszUgpD}b9r{)@cX{W#V@aCHf`)2nYVAR
zW{3CnPmKMZd^@*(xHB+y<@?y}Wz+t6{^*_E7q?v9wQ8v6N9W9*x$#?TI$z&hKeXxP
S%+3e*K0P}A>%ht`4E+N`50QQV
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2376db0f6c3dcf6339b311f85c31e5da660eabe6
GIT binary patch
literal 925
zc$~dczi-ZQ5Pn1@m54Oh=s+Vvy0ka&Mj}K)i^OE>QshESbTg_%yoSb)4wrPO4m23b
zn@B7YktQXF!QvfEhQ=-tmh(KHKf-6b+}(4}kMH;N<f$W_>Ejr}Z=m$DDyqE7s-P;f
zGAg~&Dxqd%MO1i&RY0?z<x%eCRt~LNmPMJDSs92_$U+pnU<C+R(8S_0r=dG~k?EP1
z37usXk>MGZ0kL4yBi++29U{e9i!@KOG>{`#6Or(QB_PVuK+<GMT95)=A~dnM3<*-r
z=MfeG>El^e?%@^=$t4Rm&BH7VR8LZz4S2u;kQp+I+q8rFA#Ws!U?feJkX1TNY(f(Y
za!zg5eC7@rNqs!a%FGS)m2$~~O@}!ko0UpvRz^dv%e&C3?0`a$!Vr>3Lz#$22w2ci
zM4ArW(E}5sk<`bttPJ`%(Bel67%f7ykkDd4GaAiGG_%m`Kog8635_%wEwsaE&}hqO
zZPwlHJ${Jz?{Dv)flWXkqbl@IVDKh-TlY+?F1?!@+<9nfef9DCJ3}L97AIaVuigGO
zesTB8^^p_v!&_!{^~Zj!&F||xoBDbG^2db()4uuO!zbq+ja_@Yc(=Fz%iOU`e+N3R
zHrAI8pWpud&99Bmw<Z?GFI=5n`Si4N^1<lLjprYhCuh6EXJ5bQ_pW^1v274X{{gUe
Bh28)F
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..923b227248ad1f21584fed142c5869d48017e145
GIT binary patch
literal 887
zc$~dcy=s+F5FDe$O+W~w)D%H0(Z+2Ix3Mz!21JyUHi~ZNOPGKV3p-)JLSqxG5|Tp1
zMntgK#!efnyntAQRO`%n2v4`{?(F=0-^TpTt@TH@v5Zro{i>VY*&W?*Rn^6=?20b9
z$!fBh&1k~2S)J_6&gg_!qdM4;9nk?HHLAfzHlhIo8(LUe)--&_k5yR}Rq$C=WHF0T
zgjuMWtjx-&gh^>OSdkS`0ddr7frTtY0j6vXA}yAp1uO6+K?_UEuprlZNd^h)(^*xS
z%wWQD#X`+UMlc}tBBfa(i6CGzY?iiVhxEhVSdzd*S}b9!d|23m78dNB+p6^<6E;%%
zbXHYF2IQ;ciiMhqNWeBb6?)c2!>-#qdewHoAy^@eWYTaZ=0O7+8ji@*^c_DaF&Qa+
zI;$$+j{_rqjDRsB#0Uu^1`MMyti&)2!ww9=7?LnZW6;7li~)_YjL}xTyZcffBL4eZ
zJG*cW_=W2({7+!Ag`>sGvxB!^wkIps9)3S~_w~i{mCZM^!@X}iKW{$1^zqN$#?I<A
zSI!PkX3y8|ez?j9Pv@@}=AVuye^2Vwjc30<@85rNkJIg?)y?DmAMY=oU%>PqBO`Lf
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7e1cf819c5c3e92e5490beb03114546adda48be7
GIT binary patch
literal 875
zc$~dcJ!+O=5F8;z(tTi?#vc?!EV50+CLri%8o@d!HhTdtpeP8j5J7|?7AiJcCFBG~
z1OscYkkUfDfLN_FdkCLy+1=UsdEcA2Zfst?zl8<<0PR=Z?9T4!hO4SBc4b#|!A(|^
z&1^;!p3UlHXLd#>yc*TPj_imI2&qvGHnI^77}(Il(z2%EJASOns;Gj`sv?V7j3UfJ
z&17X(MkP#2v%!k2hzf|KRtqd-Aqp^MYY=I%6fIbRF9}*$T80I=)=M%-Sf9?S%47x;
zmMa!&Mlyl{sTV2D5=jIBn_;uGEjy$i_QsL~CemUFTjj&T7PPQn=iFAU7n!h;(x<bk
zA~GOfC08ueOhf{<*{RU8HX3%_-qEYJ0}jCoX(W?|GcgYu*wAo9o~G~kL5ayo>C;(N
z0e>8r_%Q)vBE*D*i2-9Y#!8G?7&|b6F_JK(F|;s;G0>Q0Ok4Ht?lXOe`0ww`-<4Cq
z4_tQPe*&vZ9ImY|_uqVayn6c5&e#37pPw$yZNFX~y!-Ox`^MdqUyHr1=j+$cuB_d8
lfBfkD?T_{9;OF*>EBB6Ge%QG1ZEy3z?~~)hi$@P}?H|PYZx8?g
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..caeaa510e0a874525b882da6e379a3c87ecc9168
GIT binary patch
literal 898
zc$~dcKTFqf5PpJ&pAaGD=uk*t;gH^vxU^I%MA1~BL<Hv))X*EKpi+nk8V(!!2i9g8
zL8FMIakRA53+N5BL?B$xb1$OLcHG@_&!6x2{QSAoGuO{x7=M7$%c`jIDyxF3%*v?r
zN~?sLkrh$l6;=VwdX`7Ims>fsYFQR#US?$=QXvab@PZW}U_ld$%bbSp=tZVyS|)Us
zRYZnoSO&y`O^<X>w{(aUXD!k^&C)=QTuns66PAD|O9M%hC22tlbcxW!;xZ&iHJ?XV
z1f-8=S-FQ>I3$-W*fbBbFi<^7aW>!q3qWSbEN;^d>W93MB!ZDNSwdFnFtG_uEXX;v
zS@W4YWF+<REGsiN&{xVO3pO3*fNWMOp;;LXxi0TQtFi+MK?*}iA`N9C9wA^sLlJ2@
zbVm<Nj7Cx)&$2S;<3Puc4j3IFIwW)qXrs|qqRm3vffkIGgeHxqg+7diMlYk=tXEc6
z`61%Jzhi$79sqt~Qic8r46b2wXl!od#n!#Sk&}zN8!xvX43957pL_pm=l+lB!};*$
z_?OkAn|DS}+<LS3Wa8q}#hH;`XP=!~y1Ren@{J2?)5kwee*Uoh?a}Pj-~01ZZ}%RL
U-5y!``tjZO^-Hf84h=B-4;^TD8~^|S
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1a4e71d07c1c8eacadc7765a59ff98b87eeb5a03
GIT binary patch
literal 924
zc$~dcJ8P9u5F8;$w2(j=@c{<CQ6yEi&>)C{=Ekc@qg6;F;$ow{Xy=nFL=Z(*Qba`v
zVi6762Q9>Gr-io@v9?GfR_o095uR?@-Pw73U-!)P(W#3kFoHio>19<^d6iW`Rc2*W
zdZkrD&B%(V@CvJdW<ATJ+{>*TTD2^TGB2|-5UG%bD0smN5U`+$#br)Icl09DGc6N3
z%PJznGb{sQ!KO#Lr&~HiinA7Jo@QwvN3JF!;R#DXl%;{B$&$1n1-e9NVsRM~q?*qo
zECSNUv#i|1EgX_d7Hpb_Ss19Eq&OS!fCV5kWEQt+2lYeVND{$Fnk*r!bePzLCKlwJ
z+N}A^9Ws*oc$Sr!8|W+Lk_DR%b3isLmC&q=hFq6-p;g%dg&>6?B$0+P5swhCprME~
z9lE0jCPpKvk7rpK^l_lYj}|amglHk5#eilsnw4l~q1k~Z7)=ryX*61BhtZ(XmeJa*
z`~3&}5b@vN*x#WozyK2}^iN>;I@Y%BnOR+4zcoC1c;WNv^N;sN_V<=%-o7|}=lkUL
zynl6H_u=69-Cu_`f37c%b+0YNWT*FdVs`xY;L(qbCr3_x`LyzNd}DFy((h9{zrCDZ
x>fYGVnIAoHZu#KTT{mC9yF9mY{?**<{ATCEv)=pu-m@Rx4A!pf-a3S1{{SXKgFFBL
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..33fc14dcf9129f1e959131b679f50748cdce2f15
GIT binary patch
literal 917
zc$~dczf09|6g@$M(ej|BL5PPD77pr#C|z1oOK6J_91840Z)}N%mI{Iw{i3A{56jku
zENKae!~&B$xMj1^*eXu9b3T7WpY3w*J@@?herGSuoI8Kx0y@|SN-wLT%B!pjsxm91
z(krbJYDQK>g;!VwH0xO&<z8;((5huwlzEwzfk=fcM8OMIfPe)}EG}~zx}z7Fo@trT
zSymAlo?#gf3pPE{J>AkFQk=C&^E68XIdU}-2~Su8qAU$0O_rnuDbOWC6N}4`Ak};x
zVG)o%o@M18ZsCwzvS8CZ%)&tRB*oc)2P^=YA+xwmJE$M>Mv@3d(qsu)rNhJ~G_fG(
z)Mm|R?vRnx$Fr==+(2I`mn_(Hm;<s|sf1=_G~~Lx3$4lyC<G}CA&E4UiFky71r0@{
z>ChcLFfkfQeLTy`ppOGBezbtmB18)bEe15B(X2!>3(XER!Dy1uNTbn0JB$X6wv5(h
z-S0o<hlv0Fx(A030lzS&LjMGYZe#7p@Z9Q~jR!-=&Ma=Nu53Q)j9ebfeRzBE;qGMb
z+o|V!U!R;fdVhUuXK(i9=yd<&!Oqgzr>C!eS^V*FW&Tz7=I6n}+R~Nfk-N*eYu)V^
o6L<cO^~V3q52kKSejl~pGtaKQ?hUp-z5Dt8`ey&$@eZc{0SP37!vFvP
diff --git a/js/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif b/js/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..88a391738abb303ce7075f562df12d7a617c919f
GIT binary patch
literal 884
zc$~dcy=s+F5F8;$)Fxn?6e4M&-9lopNuyrVdDAMW#im!V6yXMxSf&~g)Kr!cMX-z#
zR9I43=wn!kAgnXzA#%E9cW3A4`)=I4er5gM1{UxKXus-acXmfNTvc_kE4!i#ZnBze
zW;2@bY*r^bvokv3)u;}3WJh#BNR4W+k&S4;z=jr<mNgCE@ncn1MHPHj6<N$;6k!%>
zCM&ZtDq&KZ4OV1DR6rcHT3{gyQGh91gGh^|Xu%46NzlU5GAzioUXnq=`gB%RCNr3@
zT(M9yk`W9@y+~=6NFoT>44b8G*&+R~H<lzYkrqqXDjycMpoIlH=eBCS$b^lQKAlw+
zkpcNCxniMaA`-C8PKBPe(Xi|Gj$XALa0pgNBbhXuiFwe#hK3{ZG=0YpN=!ydpU$cZ
z_~XEcA0uFl2r)v!hylZB3@b6r!mtBFFoq-y(ipTb4r4%LEMv4)@9sX=hlmq@7yizj
z0)FAL3;z?CzlHZ_7AFU<4`=h|S8jhhc=P4y!o|&(lXv?^J3minef+)ub+)wj=-*^|
uce1y<_29>|>GJozOLrdctWWdWi`DJ>=RQ5$K7O?^JG->`;qB)qxcVQ@s&SzJ
diff --git a/js/dojo/dojox/editor/plugins/resources/images/busy.gif b/js/dojo/dojox/editor/plugins/resources/images/busy.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7519974e07452757e08a2b647e51a374ecfc5645
GIT binary patch
literal 9052
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
diff --git a/js/dojo/dojox/editor/plugins/resources/images/cellpad.png b/js/dojo/dojox/editor/plugins/resources/images/cellpad.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e8d1b9b80c52e613b96b6a3b7265111ec07f5076
GIT binary patch
literal 147
zc%17D@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{(
zJaZG%Q-e|yQz{EjrrH1%u?6^qxB}__|Nk$&IsYz@rR?eA7*cU7Dd7N1&k6<=rl}4A
qJqe*4T{VI{li6p!eZin`fFb-g!=%|R?^A%v89ZJ6T-G@yGywor`z-1J
diff --git a/js/dojo/dojox/editor/plugins/resources/images/cellspace.png b/js/dojo/dojox/editor/plugins/resources/images/cellspace.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d0802217982d465b3efffb55ab32eca156adc823
GIT binary patch
literal 135
zc%17D@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{(
zJaZG%Q-e|yQz{EjrrH1%u?6^qxB}__|Nk$&IsYz@CGP3s7*cU7Dd7N1j{w8+m)b@*
d?lKD`FqDNc9QFFj#spNt;OXk;vd$@?2>?eZC!PQR
diff --git a/js/dojo/dojox/editor/plugins/resources/images/tableIcons.png b/js/dojo/dojox/editor/plugins/resources/images/tableIcons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..898ecd820bf4df7d8d9236c0a16b804ccd307dc0
GIT binary patch
literal 704
zc%17D@N?(olHy`uVBq!ia0y~yVAKJ!1vr?2<m{YHsz6Gz#5JNMI6tkVJh3R1!7(L2
zDOJHUH!(dmC^a#qvhZZ84Ny@+fKP}k!?*to|Ap8X{=dF6YwzAY|35NZxpF11pn!{u
z>;M1%{gWpAo6KxsVX@)Po$JNCuirdeyLRoO`PF~-^416I{%2tL!0`Xn+j|T4Y;A6C
z-t+F=+_`g4pFVx}?%jxph%;x-08N;&!oweEmqJO9U+{nYfFUME`Yq5mr#xL8Ln>~)
znQ?nkvjR_B?$Rj!wO8g{VA%IRI<KLXX;)eK@wm*iqKD@dKW0yooXs=)@2yF^2j?en
z-tSsep}Zp4o8!**e$MxYXQ^Ha3oRAv71nS*y;b1At6k?TgLC-Wn~QaSSXY(KkK$zc
zy+Djf@kZh9yK@d0N<NR85M)(u&2-R?#r@5?lh!3pKbpJm=A|Dp^F7@Cc%uBp*d*Uo
z38B}cI4i<ZE@($Bn%C-@6rs|_YN*qZc+j9wr2)i>7fFf`INT(0?TW0T&Q|8kk8X!o
z?eu*!ahb>Knst&A5kX8-bk1-6kSv{Lwz-LKLxaGV!^c~`C$e735(w)m{W^E$lt{Lg
zq}a^FeVfu+<HM$DDZRct)l_SVs+P81_{D8&5A+FpPMWbH@|bVx)peWX#93d@n(wo$
zLUM9Tz{JD15*ZoTSwi<GOx4*N<CS)wHS*~e9q+cytMA`3$U6M|<<B>MCr)isRNcbf
zwB}!M<i8{FIS2g3f($-Rm-wLd<Zqq$@4xq2j{bXOd)ksu#r(nAon|bVId3;;EZq~b
z;RtuwjFn9(wb_S%$|@gh4>h<y;jD*5)%`0UOF8Y<H2nzcX-#Cf-*%PrcKera>kqrX
d^=@Efi2TjepuEys5SRiOJYD@<);T3K0RUR_Rxtno
diff --git a/js/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif b/js/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..83ed316dc23f8e866fc2f1231dd4510b82767c29
GIT binary patch
literal 255
zc$@+M0093-Nk%w1VGsZe0K@<Q_3KQ^&B<_*y@saUyuuga;^Oh~@jh@DEnJthx3Qs~
znU1qja+y_Bh7|DT2kqyLc()vKk{M7*Mo)8Jp`DF#aci2GlfT2iti0q#K|Q6So&Ns*
zcXn^h(#-$x0RR90A^8LV00000EC2ui01yBS000Gipr$DbMOhZ9h+@ZWh5-OYZEV~3
zab0B~6OV_1Kn#w9UGL`*IuHT@W~!_d2tp@RaNO`Jk8E}k6)?QL2LbC@6Bv=h0c~wG
zn(|3wv4EgC1rQNU4G|F#h<;xN1sy^O7XckNI6Mjx5*daWoS2>(9UTD|7YU}2k)f&~
F06TyWXSo0X
diff --git a/js/dojo/dojox/editor/plugins/resources/insertTable.html b/js/dojo/dojox/editor/plugins/resources/insertTable.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/insertTable.html
@@ -0,0 +1,41 @@
+<div class="dijitDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+ <div dojoAttachPoint="titleBar" class="dijitDialogTitleBar">
+ <span dojoAttachPoint="titleNode" class="dijitDialogTitle" id="${id}_title">${insertTableTitle}</span>
+ <span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel" title="${buttonCancel}">
+ <span dojoAttachPoint="closeText" class="closeText" title="${buttonCancel}">x</span>
+ </span>
+ </div>
+ <div dojoAttachPoint="containerNode" class="dijitDialogPaneContent">
+ <table class="etdTable"><tr>
+ <td class="left">
+ <span dojoAttachPoint="selectRow" dojoType="dijit.form.TextBox" value="2"></span>
+ <label>${rows}</label>
+ </td><td class="right">
+ <span dojoAttachPoint="selectCol" dojoType="dijit.form.TextBox" value="2"></span>
+ <label>${columns}</label>
+ </td></tr><tr><td>
+ <span dojoAttachPoint="selectWidth" dojoType="dijit.form.TextBox" value="100"></span>
+ <label>${tableWidth}</label>
+ </td><td>
+ <select dojoAttachPoint="selectWidthType" hasDownArrow="true" dojoType="dijit.form.FilteringSelect">
+ <option value="percent">${percent}</option>
+ <option value="pixels">${pixels}</option>
+ </select></td></tr>
+ <tr><td>
+ <span dojoAttachPoint="selectBorder" dojoType="dijit.form.TextBox" value="1"></span>
+ <label>${borderThickness}</label></td>
+ <td>
+ ${pixels}
+ </td></tr><tr><td>
+ <span dojoAttachPoint="selectPad" dojoType="dijit.form.TextBox" value="0"></span>
+ <label>${cellPadding}</label></td>
+ <td class="cellpad"></td></tr><tr><td>
+ <span dojoAttachPoint="selectSpace" dojoType="dijit.form.TextBox" value="0"></span>
+ <label>${cellSpacing}</label>
+ </td><td class="cellspace"></td></tr></table>
+ <div class="dialogButtonContainer">
+ <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onInsert">${buttonInsert}</div>
+ <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onCancel">${buttonCancel}</div>
+ </div>
+ </div>
+</div>
diff --git a/js/dojo/dojox/editor/plugins/resources/modifyTable.html b/js/dojo/dojox/editor/plugins/resources/modifyTable.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/editor/plugins/resources/modifyTable.html
@@ -0,0 +1,50 @@
+<div class="dijitDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+ <div dojoAttachPoint="titleBar" class="dijitDialogTitleBar">
+ <span dojoAttachPoint="titleNode" class="dijitDialogTitle" id="${id}_title">${modifyTableTitle}</span>
+ <span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel" title="${buttonCancel}">
+ <span dojoAttachPoint="closeText" class="closeText" title="${buttonCancel}">x</span>
+ </span>
+ </div>
+ <div dojoAttachPoint="containerNode" class="dijitDialogPaneContent">
+ <table class="etdTable">
+ <tr><td class="left">
+ <span class="colorSwatchBtn" dojoAttachPoint="backgroundCol"></span>
+ <label>${backgroundColor}</label>
+ </td><td class="right">
+ <span class="colorSwatchBtn" dojoAttachPoint="borderCol"></span>
+ <label>${borderColor}</label>
+ </td></tr><tr><td>
+ <span dojoAttachPoint="selectBorder" dojoType="dijit.form.TextBox" value="1"></span>
+ <label>${borderThickness}</label>
+ </td><td>
+ ${pixels}
+ </td></tr><tr><td>
+ <select class="floatDijit" dojoAttachPoint="selectAlign" dojoType="dijit.form.FilteringSelect">
+ <option value="default">${default}</option>
+ <option value="left">${left}</option>
+ <option value="center">${center}</option>
+ <option value="right">${right}</option>
+ </select>
+ <label>${align}</label>
+ </td><td></td></tr><tr><td>
+ <span dojoAttachPoint="selectWidth" dojoType="dijit.form.TextBox" value="100"></span>
+ <label>${tableWidth}</label>
+ </td><td>
+ <select dojoAttachPoint="selectWidthType" hasDownArrow="true" dojoType="dijit.form.FilteringSelect">
+ <option value="percent">${percent}</option>
+ <option value="pixels">${pixels}</option>
+ </select>
+ </td></tr><tr><td>
+ <span dojoAttachPoint="selectPad" dojoType="dijit.form.TextBox" value="0"></span>
+ <label>${cellPadding}</label></td>
+ <td class="cellpad"></td></tr><tr><td>
+ <span dojoAttachPoint="selectSpace" dojoType="dijit.form.TextBox" value="0"></span>
+ <label>${cellSpacing}</label>
+ </td><td class="cellspace"></td></tr>
+ </table>
+ <div class="dialogButtonContainer">
+ <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onSet">${buttonSet}</div>
+ <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onCancel">${buttonCancel}</div>
+ </div>
+ </div>
+</div>
diff --git a/js/dojo/dojox/embed/Flash.js b/js/dojo/dojox/embed/Flash.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/Flash.js
@@ -0,0 +1,270 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Flash"]){
+dojo._hasResource["dojox.embed.Flash"]=true;
+dojo.provide("dojox.embed.Flash");
+(function(){
+var _1,_2;
+var _3=9;
+var _4="dojox-embed-flash-",_5=0;
+var _6={expressInstall:false,width:320,height:240,swLiveConnect:"true",allowScriptAccess:"sameDomain",allowNetworking:"all",style:null,redirect:null};
+function _7(_8){
+_8=dojo.delegate(_6,_8);
+if(!("path" in _8)){
+console.error("dojox.embed.Flash(ctor):: no path reference to a Flash movie was provided.");
+return null;
+}
+if(!("id" in _8)){
+_8.id=(_4+_5++);
+}
+return _8;
+};
+if(dojo.isIE){
+_1=function(_9){
+_9=_7(_9);
+if(!_9){
+return null;
+}
+var p;
+var _a=_9.path;
+if(_9.vars){
+var a=[];
+for(p in _9.vars){
+a.push(p+"="+_9.vars[p]);
+}
+_9.params.FlashVars=a.join("&");
+delete _9.vars;
+}
+var s="<object id=\""+_9.id+"\" "+"classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" "+"width=\""+_9.width+"\" "+"height=\""+_9.height+"\""+((_9.style)?" style=\""+_9.style+"\"":"")+">"+"<param name=\"movie\" value=\""+_a+"\" />";
+if(_9.params){
+for(p in _9.params){
+s+="<param name=\""+p+"\" value=\""+_9.params[p]+"\" />";
+}
+}
+s+="</object>";
+return {id:_9.id,markup:s};
+};
+_2=(function(){
+var _b=10,_c=null;
+while(!_c&&_b>7){
+try{
+_c=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_b--);
+}
+catch(e){
+}
+}
+if(_c){
+var v=_c.GetVariable("$version").split(" ")[1].split(",");
+return {major:(v[0]!=null)?parseInt(v[0]):0,minor:(v[1]!=null)?parseInt(v[1]):0,rev:(v[2]!=null)?parseInt(v[2]):0};
+}
+return {major:0,minor:0,rev:0};
+})();
+dojo.addOnUnload(function(){
+var _d=function(){
+};
+var _e=dojo.query("object").reverse().style("display","none").forEach(function(i){
+for(var p in i){
+if((p!="FlashVars")&&dojo.isFunction(i[p])){
+try{
+i[p]=_d;
+}
+catch(e){
+}
+}
+}
+});
+});
+}else{
+_1=function(_f){
+_f=_7(_f);
+if(!_f){
+return null;
+}
+var p;
+var _10=_f.path;
+if(_f.vars){
+var a=[];
+for(p in _f.vars){
+a.push(p+"="+_f.vars[p]);
+}
+_f.params.flashVars=a.join("&");
+delete _f.vars;
+}
+var s="<embed type=\"application/x-shockwave-flash\" "+"src=\""+_10+"\" "+"id=\""+_f.id+"\" "+"width=\""+_f.width+"\" "+"height=\""+_f.height+"\""+((_f.style)?" style=\""+_f.style+"\" ":"")+"swLiveConnect=\""+_f.swLiveConnect+"\" "+"allowScriptAccess=\""+_f.allowScriptAccess+"\" "+"allowNetworking=\""+_f.allowNetworking+"\" "+"pluginspage=\""+window.location.protocol+"//www.adobe.com/go/getflashplayer\" ";
+if(_f.params){
+for(p in _f.params){
+s+=" "+p+"=\""+_f.params[p]+"\"";
+}
+}
+s+=" />";
+return {id:_f.id,markup:s};
+};
+_2=(function(){
+var _11=navigator.plugins["Shockwave Flash"];
+if(_11&&_11.description){
+var v=_11.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split(".");
+return {major:(v[0]!=null)?parseInt(v[0]):0,minor:(v[1]!=null)?parseInt(v[1]):0,rev:(v[2]!=null)?parseInt(v[2]):0};
+}
+return {major:0,minor:0,rev:0};
+})();
+}
+dojox.embed.Flash=function(_12,_13){
+if(location.href.toLowerCase().indexOf("file://")>-1){
+throw new Error("dojox.embed.Flash can't be run directly from a file. To instatiate the required SWF correctly it must be run from a server, like localHost.");
+}
+this.available=dojox.embed.Flash.available;
+this.minimumVersion=_12.minimumVersion||_3;
+this.id=null;
+this.movie=null;
+this.domNode=null;
+if(_13){
+_13=dojo.byId(_13);
+}
+setTimeout(dojo.hitch(this,function(){
+if(_12.expressInstall||this.available&&this.available>=this.minimumVersion){
+if(_12&&_13){
+this.init(_12,_13);
+}else{
+this.onError("embed.Flash was not provided with the proper arguments.");
+}
+}else{
+if(!this.available){
+this.onError("Flash is not installed.");
+}else{
+this.onError("Flash version detected: "+this.available+" is out of date. Minimum required: "+this.minimumVersion);
+}
+}
+}),100);
+};
+dojo.extend(dojox.embed.Flash,{onReady:function(_14){
+console.warn("embed.Flash.movie.onReady:",_14);
+},onLoad:function(_15){
+console.warn("embed.Flash.movie.onLoad:",_15);
+},onError:function(msg){
+},_onload:function(){
+clearInterval(this._poller);
+delete this._poller;
+delete this._pollCount;
+delete this._pollMax;
+this.onLoad(this.movie);
+},init:function(_16,_17){
+this.destroy();
+_17=dojo.byId(_17||this.domNode);
+if(!_17){
+throw new Error("dojox.embed.Flash: no domNode reference has been passed.");
+}
+var p=0,_18=false;
+this._poller=null;
+this._pollCount=0;
+this._pollMax=15;
+this.pollTime=100;
+if(dojox.embed.Flash.initialized){
+this.id=dojox.embed.Flash.place(_16,_17);
+this.domNode=_17;
+setTimeout(dojo.hitch(this,function(){
+this.movie=this.byId(this.id,_16.doc);
+this.onReady(this.movie);
+this._poller=setInterval(dojo.hitch(this,function(){
+try{
+p=this.movie.PercentLoaded();
+}
+catch(e){
+console.warn("this.movie.PercentLoaded() failed");
+}
+if(p==100){
+this._onload();
+}else{
+if(p==0&&this._pollCount++>this._pollMax){
+clearInterval(this._poller);
+throw new Error("Building SWF failed.");
+}
+}
+}),this.pollTime);
+}),1);
+}
+},_destroy:function(){
+try{
+this.domNode.removeChild(this.movie);
+}
+catch(e){
+}
+this.id=this.movie=this.domNode=null;
+},destroy:function(){
+if(!this.movie){
+return;
+}
+var _19=dojo.delegate({id:true,movie:true,domNode:true,onReady:true,onLoad:true});
+for(var p in this){
+if(!_19[p]){
+delete this[p];
+}
+}
+if(this._poller){
+dojo.connect(this,"onLoad",this,"_destroy");
+}else{
+this._destroy();
+}
+},byId:function(_1a,doc){
+doc=doc||document;
+if(doc.embeds[_1a]){
+return doc.embeds[_1a];
+}
+if(doc[_1a]){
+return doc[_1a];
+}
+if(window[_1a]){
+return window[_1a];
+}
+if(document[_1a]){
+return document[_1a];
+}
+return null;
+}});
+dojo.mixin(dojox.embed.Flash,{minSupported:8,available:_2.major,supported:(_2.major>=_2.required),minimumRequired:_2.required,version:_2,initialized:false,onInitialize:function(){
+dojox.embed.Flash.initialized=true;
+},__ie_markup__:function(_1b){
+return _1(_1b);
+},proxy:function(obj,_1c){
+dojo.forEach((dojo.isArray(_1c)?_1c:[_1c]),function(_1d){
+this[_1d]=dojo.hitch(this,function(){
+return (function(){
+return eval(this.movie.CallFunction("<invoke name=\""+_1d+"\" returntype=\"javascript\">"+"<arguments>"+dojo.map(arguments,function(_1e){
+return __flash__toXML(_1e);
+}).join("")+"</arguments>"+"</invoke>"));
+}).apply(this,arguments||[]);
+});
+},obj);
+}});
+if(dojo.isIE){
+if(dojo._initFired){
+var e=document.createElement("script");
+e.type="text/javascript";
+e.src=dojo.moduleUrl("dojox","embed/IE/flash.js");
+document.getElementsByTagName("head")[0].appendChild(e);
+}else{
+document.write("<scr"+"ipt type=\"text/javascript\" src=\""+dojo.moduleUrl("dojox","embed/IE/flash.js")+"\">"+"</scr"+"ipt>");
+}
+}else{
+dojox.embed.Flash.place=function(_1f,_20){
+var o=_1(_1f);
+_20=dojo.byId(_20);
+if(!_20){
+_20=dojo.doc.createElement("div");
+_20.id=o.id+"-container";
+dojo.body().appendChild(_20);
+}
+if(o){
+_20.innerHTML=o.markup;
+return o.id;
+}
+return null;
+};
+dojox.embed.Flash.onInitialize();
+}
+})();
+}
diff --git a/js/dojo/dojox/embed/IE/flash.js b/js/dojo/dojox/embed/IE/flash.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/IE/flash.js
@@ -0,0 +1,22 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojox.embed.Flash.place=function(_1,_2){
+var o=dojox.embed.Flash.__ie_markup__(_1);
+_2=dojo.byId(_2);
+if(!_2){
+_2=dojo.doc.createElement("div");
+_2.id=o.id+"-container";
+dojo.body().appendChild(_2);
+}
+if(o){
+_2.innerHTML=o.markup;
+return o.id;
+}
+return null;
+};
+dojox.embed.Flash.onInitialize();
diff --git a/js/dojo/dojox/embed/Object.js b/js/dojo/dojox/embed/Object.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/Object.js
@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Object"]){
+dojo._hasResource["dojox.embed.Object"]=true;
+dojo.provide("dojox.embed.Object");
+dojo.experimental("dojox.embed.Object");
+dojo.require("dijit._Widget");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.embed.Quicktime");
+dojo.declare("dojox.embed.Object",dijit._Widget,{width:0,height:0,src:"",movie:null,params:null,reFlash:/\.swf|\.flv/gi,reQtMovie:/\.3gp|\.avi|\.m4v|\.mov|\.mp4|\.mpg|\.mpeg|\.qt/gi,reQtAudio:/\.aiff|\.aif|\.m4a|\.m4b|\.m4p|\.midi|\.mid|\.mp3|\.mpa|\.wav/gi,postCreate:function(){
+if(!this.width||!this.height){
+var _1=dojo.marginBox(this.domNode);
+this.width=_1.w,this.height=_1.h;
+}
+var em=dojox.embed.Flash;
+if(this.src.match(this.reQtMovie)||this.src.match(this.reQtAudio)){
+em=dojox.embed.Quicktime;
+}
+if(!this.params){
+this.params={};
+if(this.domNode.hasAttributes()){
+var _2={dojoType:"",width:"",height:"","class":"",style:"",id:"",src:""};
+var _3=this.domNode.attributes;
+for(var i=0,l=_3.length;i<l;i++){
+if(!_2[_3[i].name]){
+this.params[_3[i].name]=_3[i].value;
+}
+}
+}
+}
+var _4={path:this.src,width:this.width,height:this.height,params:this.params};
+this.movie=new (em)(_4,this.domNode);
+}});
+}
diff --git a/js/dojo/dojox/embed/Quicktime.js b/js/dojo/dojox/embed/Quicktime.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/Quicktime.js
@@ -0,0 +1,139 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Quicktime"]){
+dojo._hasResource["dojox.embed.Quicktime"]=true;
+dojo.provide("dojox.embed.Quicktime");
+(function(d){
+var _1,_2={major:0,minor:0,rev:0},_3,_4={width:320,height:240,redirect:null},_5="dojox-embed-quicktime-",_6=0,_7="This content requires the <a href=\"http://www.apple.com/quicktime/download/\" title=\"Download and install QuickTime.\">QuickTime plugin</a>.";
+function _8(_9){
+_9=d.mixin(d.clone(_4),_9||{});
+if(!("path" in _9)&&!_9.testing){
+console.error("dojox.embed.Quicktime(ctor):: no path reference to a QuickTime movie was provided.");
+return null;
+}
+if(_9.testing){
+_9.path="";
+}
+if(!("id" in _9)){
+_9.id=_5+_6++;
+}
+return _9;
+};
+if(d.isIE){
+_3=(function(){
+try{
+var o=new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck.1");
+if(o!==undefined){
+var v=o.QuickTimeVersion.toString(16);
+function p(i){
+return (v.substring(i,i+1)-0)||0;
+};
+_2={major:p(0),minor:p(1),rev:p(2)};
+return o.IsQuickTimeAvailable(0);
+}
+}
+catch(e){
+}
+return false;
+})();
+_1=function(_a){
+if(!_3){
+return {id:null,markup:_7};
+}
+_a=_8(_a);
+if(!_a){
+return null;
+}
+var s="<object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" "+"codebase=\"http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0\" "+"id=\""+_a.id+"\" "+"width=\""+_a.width+"\" "+"height=\""+_a.height+"\">"+"<param name=\"src\" value=\""+_a.path+"\"/>";
+for(var p in _a.params||{}){
+s+="<param name=\""+p+"\" value=\""+_a.params[p]+"\"/>";
+}
+s+="</object>";
+return {id:_a.id,markup:s};
+};
+}else{
+_3=(function(){
+for(var i=0,p=navigator.plugins,l=p.length;i<l;i++){
+if(p[i].name.indexOf("QuickTime")>-1){
+return true;
+}
+}
+return false;
+})();
+_1=function(_b){
+if(!_3){
+return {id:null,markup:_7};
+}
+_b=_8(_b);
+if(!_b){
+return null;
+}
+var s="<embed type=\"video/quicktime\" src=\""+_b.path+"\" "+"id=\""+_b.id+"\" "+"name=\""+_b.id+"\" "+"pluginspage=\"www.apple.com/quicktime/download\" "+"enablejavascript=\"true\" "+"width=\""+_b.width+"\" "+"height=\""+_b.height+"\"";
+for(var p in _b.params||{}){
+s+=" "+p+"=\""+_b.params[p]+"\"";
+}
+s+="></embed>";
+return {id:_b.id,markup:s};
+};
+}
+dojox.embed.Quicktime=function(_c,_d){
+return dojox.embed.Quicktime.place(_c,_d);
+};
+d.mixin(dojox.embed.Quicktime,{minSupported:6,available:_3,supported:_3,version:_2,initialized:false,onInitialize:function(){
+dojox.embed.Quicktime.initialized=true;
+},place:function(_e,_f){
+var o=_1(_e);
+if(!(_f=d.byId(_f))){
+_f=d.create("div",{id:o.id+"-container"},d.body());
+}
+if(o){
+_f.innerHTML=o.markup;
+if(o.id){
+return d.isIE?d.byId(o.id):document[o.id];
+}
+}
+return null;
+}});
+if(!d.isIE){
+var id="-qt-version-test",o=_1({testing:true,width:4,height:4}),c=10,top="-1000px",_10="1px";
+function _11(){
+setTimeout(function(){
+var qt=document[o.id],n=d.byId(id);
+if(qt){
+try{
+var v=qt.GetQuickTimeVersion().split(".");
+dojox.embed.Quicktime.version={major:parseInt(v[0]||0),minor:parseInt(v[1]||0),rev:parseInt(v[2]||0)};
+if(dojox.embed.Quicktime.supported=v[0]){
+dojox.embed.Quicktime.onInitialize();
+}
+c=0;
+}
+catch(e){
+if(c--){
+_11();
+}
+}
+}
+if(!c&&n){
+d.destroy(n);
+}
+},20);
+};
+if(d._initFired){
+d.create("div",{innerHTML:o.markup,id:id,style:{top:top,left:0,width:_10,height:_10,overflow:"hidden",position:"absolute"}},d.body());
+}else{
+document.write("<div style=\"top:"+top+";left:0;width:"+_10+";height:"+_10+";overflow:hidden;position:absolute\" id=\""+id+"\">"+o.markup+"</div>");
+}
+_11();
+}else{
+if(d.isIE&&_3){
+dojox.embed.Quicktime.onInitialize();
+}
+}
+})(dojo);
+}
diff --git a/js/dojo/dojox/embed/README b/js/dojo/dojox/embed/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/README
@@ -0,0 +1,44 @@
+-------------------------------------------------------------------------------
+dojox.embed
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 4/7/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+ Tom Trenka (ttrenka AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+A move/port of what was in dojox.av._base; the nominal purpose is to provide
+easy ways of including external objects that would normally require the use
+of either an OBJECT or an EMBED tag.
+
+The following constructors are considered beta (working tests and docs) as of
+2008-06-04:
+
+dojox.embed.Flash
+dojox.embed.FlashProxy
+dojox.embed.Quicktime
+dojox.embed.Object (a Dijit that can load anything there is an embed for here)
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.embed has no dependencies, other than the Dojo base.
+-------------------------------------------------------------------------------
+Documentation
+
+TBD
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojox/trunk/embed/*
+
+Install into the following directory structure:
+/dojox/embed/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
diff --git a/js/dojo/dojox/embed/flashVars.js b/js/dojo/dojox/embed/flashVars.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/embed/flashVars.js
@@ -0,0 +1,37 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.flashVars"]){
+dojo._hasResource["dojox.embed.flashVars"]=true;
+dojo.provide("dojox.embed.flashVars");
+dojo.mixin(dojox.embed.flashVars,{serialize:function(n,o){
+var _1=function(_2){
+if(typeof _2=="string"){
+_2=_2.replace(/;/g,"_sc_");
+_2=_2.replace(/\./g,"_pr_");
+_2=_2.replace(/\:/g,"_cl_");
+}
+return _2;
+};
+var df=dojox.embed.flashVars.serialize;
+var _3="";
+if(dojo.isArray(o)){
+for(var i=0;i<o.length;i++){
+_3+=df(n+"."+i,_1(o[i]))+";";
+}
+return _3.replace(/;{2,}/g,";");
+}else{
+if(dojo.isObject(o)){
+for(var nm in o){
+_3+=df(n+"."+nm,_1(o[nm]))+";";
+}
+return _3.replace(/;{2,}/g,";");
+}
+}
+return n+":"+o;
+}});
+}
diff --git a/js/dojo/dojox/embed/resources/version.mov b/js/dojo/dojox/embed/resources/version.mov
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4f2cb73f57df73c31567ff3d24519e5f34ce89c7
GIT binary patch
literal 1667
zc$}?N&r4K69G~azhMH0bL5)2O<iSE7t0=CL=-OJlkh-aqP=d2Nv+iT(?OWfQeY#O0
z(WOg=&f%$xm#&?HAQ1W!in;_r*DgU2Y~SzO_w=ozCG_1l%=hQ#GxMF9C4|tTs#iA^
zr8E{HIFlBMt(cbOf+9_~#L@Hq&Bxz32x(gdGe<On-=S!&2uJN1a;mh!cU#%44ElXl
z_Bby9-}ffx0b1@@<-hPo{Xxip;L3qHE~KME6}iJ&?XAfT1`0L#343qKWQj`~6|*F5
z*WiLxtMZ};p^5$!7=qpbw?*d#Akqx0a4DcdyJs4eBINbBrpKU>nH_>Zkcj}511gh-
z<D+VT`mnEwnvw={Xqu@IC>h{Q&^Wh6F|@TV1o8E+j>=1zT}L@QlvAu$HfXqkNZK@`
z_(e$u)J%{O$t~PGb`W8qjRrDvv5k%F^SynJ@|qv8z@d{tTrsSs5b_5x&5u0@A)_C6
zTf_D_s$d<~#a<$3jVtD-PMN~fY0y&dunyvZXvwmu2kSZqV-j-;mZ@VGguYob3T0)O
zLa$0z7q)I%t|4^SaB58IdE3}1sfutAVeBlG1xs4EtkJU+DWih-HhDIp3Op_EzF+-I
zohxj|uqu#w`J~LllrKi}5ykzp>fy}mZEvW#asSL(V$(YZvB)WP(G%(@j2PZ0Kjz)o
zaeb5yPK;aub<RJ>sUvYc;bqXo_V{QbnMi;+&kA&LnXV4e;e<Y>4-e6a+2JIDEcq8H
zzUOS&1Rh|DTX{jVCfg88g7G@>o|b9(_+58zEnX)>+6&M-mW5nIXGcoP8^M;^i?$Fr
zZ^54e%ncLP7qSW3&){iwcV6lQvpbtfFZpeVw&RBOe(XMmsb9^ls%5LFwwNuBt!wjx
zxQ30(rc*21pYp#Ojp@k9`oJ2Y@5r~_^S?gtuI(dRc5Wg4dUpNEe`D-zWz5e+p2kR9
Q7ukOviT!-^Y9UPe2X)_BcK`qY
diff --git a/js/dojo/dojox/encoding/LICENSE b/js/dojo/dojox/encoding/LICENSE
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/LICENSE
@@ -0,0 +1,14 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+MD5.js, SHA1.js:
+ * Copyright 1998-2005, Paul Johnstone
+ Distributed under the terms of the BSD License
+
+SimpleAES.js
+ * Original version by Chris Veness (CLA signed with permission
+ given under the terms of the BSD license)
+ http://www.movable-type.co.uk/scripts/aes.html
diff --git a/js/dojo/dojox/encoding/_base.js b/js/dojo/dojox/encoding/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/_base.js
@@ -0,0 +1,11 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding._base"]){
+dojo._hasResource["dojox.encoding._base"]=true;
+dojo.provide("dojox.encoding._base");
+}
diff --git a/js/dojo/dojox/encoding/base64.js b/js/dojo/dojox/encoding/base64.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/base64.js
@@ -0,0 +1,70 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.base64"]){
+dojo._hasResource["dojox.encoding.base64"]=true;
+dojo.provide("dojox.encoding.base64");
+(function(){
+var p="=";
+var _1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+var _2=dojox.encoding;
+_2.base64.encode=function(ba){
+var s=[],l=ba.length;
+var rm=l%3;
+var x=l-rm;
+for(var i=0;i<x;){
+var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(_1.charAt((t>>>6)&63));
+s.push(_1.charAt(t&63));
+}
+switch(rm){
+case 2:
+var t=ba[i++]<<16|ba[i++]<<8;
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(_1.charAt((t>>>6)&63));
+s.push(p);
+break;
+case 1:
+var t=ba[i++]<<16;
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(p);
+s.push(p);
+break;
+}
+return s.join("");
+};
+_2.base64.decode=function(_3){
+var s=_3.split(""),_4=[];
+var l=s.length;
+while(s[--l]==p){
+}
+for(var i=0;i<l;){
+var t=_1.indexOf(s[i++])<<18;
+if(i<=l){
+t|=_1.indexOf(s[i++])<<12;
+}
+if(i<=l){
+t|=_1.indexOf(s[i++])<<6;
+}
+if(i<=l){
+t|=_1.indexOf(s[i++]);
+}
+_4.push((t>>>16)&255);
+_4.push((t>>>8)&255);
+_4.push(t&255);
+}
+while(_4[_4.length-1]==0){
+_4.pop();
+}
+return _4;
+};
+})();
+}
diff --git a/js/dojo/dojox/encoding/compression/lzw.js b/js/dojo/dojox/encoding/compression/lzw.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/compression/lzw.js
@@ -0,0 +1,83 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.compression.lzw"]){
+dojo._hasResource["dojox.encoding.compression.lzw"]=true;
+dojo.provide("dojox.encoding.compression.lzw");
+dojo.require("dojox.encoding.bits");
+(function(){
+var _1=function(x){
+var w=1;
+for(var v=2;x>=v;v<<=1,++w){
+}
+return w;
+};
+dojox.encoding.compression.lzw.Encoder=function(n){
+this.size=n;
+this.init();
+};
+dojo.extend(dojox.encoding.compression.lzw.Encoder,{init:function(){
+this.dict={};
+for(var i=0;i<this.size;++i){
+this.dict[String.fromCharCode(i)]=i;
+}
+this.width=_1(this.code=this.size);
+this.p="";
+},encode:function(_2,_3){
+var c=String.fromCharCode(_2),p=this.p+c,r=0;
+if(p in this.dict){
+this.p=p;
+return r;
+}
+_3.putBits(this.dict[this.p],this.width);
+if((this.code&(this.code+1))==0){
+_3.putBits(this.code++,r=this.width++);
+}
+this.dict[p]=this.code++;
+this.p=c;
+return r+this.width;
+},flush:function(_4){
+if(this.p.length==0){
+return 0;
+}
+_4.putBits(this.dict[this.p],this.width);
+this.p="";
+return this.width;
+}});
+dojox.encoding.compression.lzw.Decoder=function(n){
+this.size=n;
+this.init();
+};
+dojo.extend(dojox.encoding.compression.lzw.Decoder,{init:function(){
+this.codes=new Array(this.size);
+for(var i=0;i<this.size;++i){
+this.codes[i]=String.fromCharCode(i);
+}
+this.width=_1(this.size);
+this.p=-1;
+},decode:function(_5){
+var c=_5.getBits(this.width),v;
+if(c<this.codes.length){
+v=this.codes[c];
+if(this.p>=0){
+this.codes.push(this.codes[this.p]+v.substr(0,1));
+}
+}else{
+if((c&(c+1))==0){
+this.codes.push("");
+++this.width;
+return "";
+}
+var x=this.codes[this.p];
+v=x+x.substr(0,1);
+this.codes.push(v);
+}
+this.p=c;
+return v;
+}});
+})();
+}
diff --git a/js/dojo/dojox/encoding/compression/splay.js b/js/dojo/dojox/encoding/compression/splay.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/compression/splay.js
@@ -0,0 +1,65 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.compression.splay"]){
+dojo._hasResource["dojox.encoding.compression.splay"]=true;
+dojo.provide("dojox.encoding.compression.splay");
+dojo.require("dojox.encoding.bits");
+dojox.encoding.compression.Splay=function(n){
+this.up=new Array(2*n+1);
+this.left=new Array(n);
+this.right=new Array(n);
+this.reset();
+};
+dojo.extend(dojox.encoding.compression.Splay,{reset:function(){
+for(var i=1;i<this.up.length;this.up[i]=Math.floor((i-1)/2),++i){
+}
+for(var i=0;i<this.left.length;this.left[i]=2*i+1,this.right[i]=2*i+2,++i){
+}
+},splay:function(i){
+var a=i+this.left.length;
+do{
+var c=this.up[a];
+if(c){
+var d=this.up[c];
+var b=this.left[d];
+if(c==b){
+b=this.right[d];
+this.right[d]=a;
+}else{
+this.left[d]=a;
+}
+this[a==this.left[c]?"left":"right"][c]=b;
+this.up[a]=d;
+this.up[b]=c;
+a=d;
+}else{
+a=c;
+}
+}while(a);
+},encode:function(_1,_2){
+var s=[],a=_1+this.left.length;
+do{
+s.push(this.right[this.up[a]]==a);
+a=this.up[a];
+}while(a);
+this.splay(_1);
+var l=s.length;
+while(s.length){
+_2.putBits(s.pop()?1:0,1);
+}
+return l;
+},decode:function(_3){
+var a=0;
+do{
+a=this[_3.getBits(1)?"right":"left"][a];
+}while(a<this.left.length);
+a-=this.left.length;
+this.splay(a);
+return a;
+}});
+}
diff --git a/js/dojo/dojox/encoding/crypto/Blowfish.js b/js/dojo/dojox/encoding/crypto/Blowfish.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/crypto/Blowfish.js
@@ -0,0 +1,275 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.Blowfish"]){
+dojo._hasResource["dojox.encoding.crypto.Blowfish"]=true;
+dojo.provide("dojox.encoding.crypto.Blowfish");
+dojo.require("dojox.encoding.base64");
+dojo.require("dojox.encoding.crypto._base");
+dojox.encoding.crypto.Blowfish=new function(){
+var _1=Math.pow(2,2);
+var _2=Math.pow(2,3);
+var _3=Math.pow(2,4);
+var _4=Math.pow(2,8);
+var _5=Math.pow(2,16);
+var _6=Math.pow(2,24);
+var iv=null;
+var _7={p:[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s0:[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],s1:[1266315497,3048417604,3681880366,3289982499,2909710000,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],s2:[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],s3:[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409000,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]};
+function _8(x,y){
+return (((x>>16)+(y>>16)+(((x&65535)+(y&65535))>>16))<<16)|(((x&65535)+(y&65535))&65535);
+};
+function _9(x,y){
+return (((x>>16)^(y>>16))<<16)|(((x&65535)^(y&65535))&65535);
+};
+function $(v,_a){
+var d=_a.s3[v&255];
+v>>=8;
+var c=_a.s2[v&255];
+v>>=8;
+var b=_a.s1[v&255];
+v>>=8;
+var a=_a.s0[v&255];
+var r=(((a>>16)+(b>>16)+(((a&65535)+(b&65535))>>16))<<16)|(((a&65535)+(b&65535))&65535);
+r=(((r>>16)^(c>>16))<<16)|(((r&65535)^(c&65535))&65535);
+return (((r>>16)+(d>>16)+(((r&65535)+(d&65535))>>16))<<16)|(((r&65535)+(d&65535))&65535);
+};
+function eb(o,_b){
+var l=o.left;
+var r=o.right;
+l=_9(l,_b.p[0]);
+r=_9(r,_9($(l,_b),_b.p[1]));
+l=_9(l,_9($(r,_b),_b.p[2]));
+r=_9(r,_9($(l,_b),_b.p[3]));
+l=_9(l,_9($(r,_b),_b.p[4]));
+r=_9(r,_9($(l,_b),_b.p[5]));
+l=_9(l,_9($(r,_b),_b.p[6]));
+r=_9(r,_9($(l,_b),_b.p[7]));
+l=_9(l,_9($(r,_b),_b.p[8]));
+r=_9(r,_9($(l,_b),_b.p[9]));
+l=_9(l,_9($(r,_b),_b.p[10]));
+r=_9(r,_9($(l,_b),_b.p[11]));
+l=_9(l,_9($(r,_b),_b.p[12]));
+r=_9(r,_9($(l,_b),_b.p[13]));
+l=_9(l,_9($(r,_b),_b.p[14]));
+r=_9(r,_9($(l,_b),_b.p[15]));
+l=_9(l,_9($(r,_b),_b.p[16]));
+o.right=l;
+o.left=_9(r,_b.p[17]);
+};
+function db(o,_c){
+var l=o.left;
+var r=o.right;
+l=_9(l,_c.p[17]);
+r=_9(r,_9($(l,_c),_c.p[16]));
+l=_9(l,_9($(r,_c),_c.p[15]));
+r=_9(r,_9($(l,_c),_c.p[14]));
+l=_9(l,_9($(r,_c),_c.p[13]));
+r=_9(r,_9($(l,_c),_c.p[12]));
+l=_9(l,_9($(r,_c),_c.p[11]));
+r=_9(r,_9($(l,_c),_c.p[10]));
+l=_9(l,_9($(r,_c),_c.p[9]));
+r=_9(r,_9($(l,_c),_c.p[8]));
+l=_9(l,_9($(r,_c),_c.p[7]));
+r=_9(r,_9($(l,_c),_c.p[6]));
+l=_9(l,_9($(r,_c),_c.p[5]));
+r=_9(r,_9($(l,_c),_c.p[4]));
+l=_9(l,_9($(r,_c),_c.p[3]));
+r=_9(r,_9($(l,_c),_c.p[2]));
+l=_9(l,_9($(r,_c),_c.p[1]));
+o.right=l;
+o.left=_9(r,_c.p[0]);
+};
+function _d(_e){
+var k=_e;
+if(dojo.isString(k)){
+k=dojo.map(k.split(""),function(_f){
+return _f.charCodeAt(0)&255;
+});
+}
+var pos=0,_10=0,res={left:0,right:0},i,j,l;
+var box={p:dojo.map(_7.p.slice(0),function(_11){
+var l=k.length,j;
+for(j=0;j<4;j++){
+_10=(_10*_4)|k[pos++%l];
+}
+return (((_11>>16)^(_10>>16))<<16)|(((_11&65535)^(_10&65535))&65535);
+}),s0:_7.s0.slice(0),s1:_7.s1.slice(0),s2:_7.s2.slice(0),s3:_7.s3.slice(0)};
+for(i=0,l=box.p.length;i<l;){
+eb(res,box);
+box.p[i++]=res.left,box.p[i++]=res.right;
+}
+for(i=0;i<4;i++){
+for(j=0,l=box["s"+i].length;j<l;){
+eb(res,box);
+box["s"+i][j++]=res.left,box["s"+i][j++]=res.right;
+}
+}
+return box;
+};
+this.getIV=function(_12){
+var out=_12||dojox.encoding.crypto.outputTypes.Base64;
+switch(out){
+case dojox.encoding.crypto.outputTypes.Hex:
+return dojo.map(iv,function(_13){
+return (_13<=15?"0":"")+_13.toString(16);
+}).join("");
+case dojox.encoding.crypto.outputTypes.String:
+return iv.join("");
+case dojox.encoding.crypto.outputTypes.Raw:
+return iv;
+default:
+return dojox.encoding.base64.encode(iv);
+}
+};
+this.setIV=function(_14,_15){
+var ip=_15||dojox.encoding.crypto.outputTypes.Base64;
+var ba=null;
+switch(ip){
+case dojox.encoding.crypto.outputTypes.String:
+ba=dojo.map(_14.split(""),function(_16){
+return _16.charCodeAt(0);
+});
+break;
+case dojox.encoding.crypto.outputTypes.Hex:
+ba=[];
+for(var i=0,l=_14.length-1;i<l;i+=2){
+ba.push(parseInt(_14.substr(i,2),16));
+}
+break;
+case dojox.encoding.crypto.outputTypes.Raw:
+ba=_14;
+break;
+default:
+ba=dojox.encoding.base64.decode(_14);
+break;
+}
+iv={};
+iv.left=ba[0]*_6|ba[1]*_5|ba[2]*_4|ba[3];
+iv.right=ba[4]*_6|ba[5]*_5|ba[6]*_4|ba[7];
+};
+this.encrypt=function(_17,key,ao){
+var out=dojox.encoding.crypto.outputTypes.Base64;
+var _18=dojox.encoding.crypto.cipherModes.ECB;
+if(ao){
+if(ao.outputType){
+out=ao.outputType;
+}
+if(ao.cipherMode){
+_18=ao.cipherMode;
+}
+}
+var bx=_d(key),_19=8-(_17.length&7);
+for(var i=0;i<_19;i++){
+_17+=String.fromCharCode(_19);
+}
+var _1a=[],_1b=_17.length>>3,pos=0,o={},_1c=(_18==dojox.encoding.crypto.cipherModes.CBC);
+var _1d={left:iv.left||null,right:iv.right||null};
+for(var i=0;i<_1b;i++){
+o.left=_17.charCodeAt(pos)*_6|_17.charCodeAt(pos+1)*_5|_17.charCodeAt(pos+2)*_4|_17.charCodeAt(pos+3);
+o.right=_17.charCodeAt(pos+4)*_6|_17.charCodeAt(pos+5)*_5|_17.charCodeAt(pos+6)*_4|_17.charCodeAt(pos+7);
+if(_1c){
+o.left=(((o.left>>16)^(_1d.left>>16))<<16)|(((o.left&65535)^(_1d.left&65535))&65535);
+o.right=(((o.right>>16)^(_1d.right>>16))<<16)|(((o.right&65535)^(_1d.right&65535))&65535);
+}
+eb(o,bx);
+if(_1c){
+_1d.left=o.left;
+_1d.right=o.right;
+}
+_1a.push((o.left>>24)&255);
+_1a.push((o.left>>16)&255);
+_1a.push((o.left>>8)&255);
+_1a.push(o.left&255);
+_1a.push((o.right>>24)&255);
+_1a.push((o.right>>16)&255);
+_1a.push((o.right>>8)&255);
+_1a.push(o.right&255);
+pos+=8;
+}
+switch(out){
+case dojox.encoding.crypto.outputTypes.Hex:
+return dojo.map(_1a,function(_1e){
+return (_1e<=15?"0":"")+_1e.toString(16);
+}).join("");
+case dojox.encoding.crypto.outputTypes.String:
+return _1a.join("");
+case dojox.encoding.crypto.outputTypes.Raw:
+return _1a;
+default:
+return dojox.encoding.base64.encode(_1a);
+}
+};
+this.decrypt=function(_1f,key,ao){
+var ip=dojox.encoding.crypto.outputTypes.Base64;
+var _20=dojox.encoding.crypto.cipherModes.ECB;
+if(ao){
+if(ao.outputType){
+ip=ao.outputType;
+}
+if(ao.cipherMode){
+_20=ao.cipherMode;
+}
+}
+var bx=_d(key);
+var pt=[];
+var c=null;
+switch(ip){
+case dojox.encoding.crypto.outputTypes.Hex:
+c=[];
+for(var i=0,l=_1f.length-1;i<l;i+=2){
+c.push(parseInt(_1f.substr(i,2),16));
+}
+break;
+case dojox.encoding.crypto.outputTypes.String:
+c=dojo.map(_1f.split(""),function(_21){
+return _21.charCodeAt(0);
+});
+break;
+case dojox.encoding.crypto.outputTypes.Raw:
+c=_1f;
+break;
+default:
+c=dojox.encoding.base64.decode(_1f);
+break;
+}
+var _22=c.length>>3,pos=0,o={},_23=(_20==dojox.encoding.crypto.cipherModes.CBC);
+var _24={left:iv.left||null,right:iv.right||null};
+for(var i=0;i<_22;i++){
+o.left=c[pos]*_6|c[pos+1]*_5|c[pos+2]*_4|c[pos+3];
+o.right=c[pos+4]*_6|c[pos+5]*_5|c[pos+6]*_4|c[pos+7];
+if(_23){
+var _25=o.left;
+var _26=o.right;
+}
+db(o,bx);
+if(_23){
+o.left=(((o.left>>16)^(_24.left>>16))<<16)|(((o.left&65535)^(_24.left&65535))&65535);
+o.right=(((o.right>>16)^(_24.right>>16))<<16)|(((o.right&65535)^(_24.right&65535))&65535);
+_24.left=_25;
+_24.right=_26;
+}
+pt.push((o.left>>24)&255);
+pt.push((o.left>>16)&255);
+pt.push((o.left>>8)&255);
+pt.push(o.left&255);
+pt.push((o.right>>24)&255);
+pt.push((o.right>>16)&255);
+pt.push((o.right>>8)&255);
+pt.push(o.right&255);
+pos+=8;
+}
+if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==1){
+var n=pt[pt.length-1];
+pt.splice(pt.length-n,n);
+}
+return dojo.map(pt,function(_27){
+return String.fromCharCode(_27);
+}).join("");
+};
+this.setIV("0000000000000000",dojox.encoding.crypto.outputTypes.Hex);
+}();
+}
diff --git a/js/dojo/dojox/encoding/crypto/RSAKey-ext.js b/js/dojo/dojox/encoding/crypto/RSAKey-ext.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/crypto/RSAKey-ext.js
@@ -0,0 +1,107 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.RSAKey-ext"]){
+dojo._hasResource["dojox.encoding.crypto.RSAKey-ext"]=true;
+dojo.provide("dojox.encoding.crypto.RSAKey-ext");
+dojo.experimental("dojox.encoding.crypto.RSAKey-ext");
+dojo.require("dojox.encoding.crypto.RSAKey");
+dojo.require("dojox.math.BigInteger-ext");
+(function(){
+var _1=dojox.math.BigInteger;
+function _2(d,n){
+var b=d.toByteArray();
+for(var i=0,_3=b.length;i<_3&&!b[i];++i){
+}
+if(b.length-i!==n-1||b[i]!==2){
+return null;
+}
+for(++i;b[i];){
+if(++i>=_3){
+return null;
+}
+}
+var _4="";
+while(++i<_3){
+_4+=String.fromCharCode(b[i]);
+}
+return _4;
+};
+dojo.extend(dojox.encoding.crypto.RSAKey,{setPrivate:function(N,E,D){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+this.d=new _1(D,16);
+}else{
+throw new Error("Invalid RSA private key");
+}
+},setPrivateEx:function(N,E,D,P,Q,DP,DQ,C){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+this.d=new _1(D,16);
+this.p=new _1(P,16);
+this.q=new _1(Q,16);
+this.dmp1=new _1(DP,16);
+this.dmq1=new _1(DQ,16);
+this.coeff=new _1(C,16);
+}else{
+throw new Error("Invalid RSA private key");
+}
+},generate:function(B,E){
+var _5=this.rngf(),qs=B>>1;
+this.e=parseInt(E,16);
+var ee=new _1(E,16);
+for(;;){
+for(;;){
+this.p=new _1(B-qs,1,_5);
+if(!this.p.subtract(_1.ONE).gcd(ee).compareTo(_1.ONE)&&this.p.isProbablePrime(10)){
+break;
+}
+}
+for(;;){
+this.q=new _1(qs,1,_5);
+if(!this.q.subtract(_1.ONE).gcd(ee).compareTo(_1.ONE)&&this.q.isProbablePrime(10)){
+break;
+}
+}
+if(this.p.compareTo(this.q)<=0){
+var t=this.p;
+this.p=this.q;
+this.q=t;
+}
+var p1=this.p.subtract(_1.ONE);
+var q1=this.q.subtract(_1.ONE);
+var _6=p1.multiply(q1);
+if(!_6.gcd(ee).compareTo(_1.ONE)){
+this.n=this.p.multiply(this.q);
+this.d=ee.modInverse(_6);
+this.dmp1=this.d.mod(p1);
+this.dmq1=this.d.mod(q1);
+this.coeff=this.q.modInverse(this.p);
+break;
+}
+}
+_5.destroy();
+},decrypt:function(_7){
+var c=new _1(_7,16),m;
+if(!this.p||!this.q){
+m=c.modPow(this.d,this.n);
+}else{
+var cp=c.mod(this.p).modPow(this.dmp1,this.p),cq=c.mod(this.q).modPow(this.dmq1,this.q);
+while(cp.compareTo(cq)<0){
+cp=cp.add(this.p);
+}
+m=cp.subtract(cq).multiply(this.coeff).mod(this.p).multiply(this.q).add(cq);
+}
+if(!m){
+return null;
+}
+return _2(m,(this.n.bitLength()+7)>>3);
+}});
+})();
+}
diff --git a/js/dojo/dojox/encoding/crypto/RSAKey.js b/js/dojo/dojox/encoding/crypto/RSAKey.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/crypto/RSAKey.js
@@ -0,0 +1,66 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.RSAKey"]){
+dojo._hasResource["dojox.encoding.crypto.RSAKey"]=true;
+dojo.provide("dojox.encoding.crypto.RSAKey");
+dojo.experimental("dojox.encoding.crypto.RSAKey");
+dojo.require("dojox.math.BigInteger");
+dojo.require("dojox.math.random.Simple");
+(function(){
+var dm=dojox.math,_1=dm.BigInteger,_2=dm.random.Simple,_3=function(){
+return new _2();
+};
+function _4(s,n,_5){
+if(n<s.length+11){
+throw new Error("Message too long for RSA");
+}
+var ba=new Array(n);
+var i=s.length;
+while(i&&n){
+ba[--n]=s.charCodeAt(--i);
+}
+ba[--n]=0;
+var _6=_5();
+var x=[0];
+while(n>2){
+x[0]=0;
+while(x[0]==0){
+_6.nextBytes(x);
+}
+ba[--n]=x[0];
+}
+ba[--n]=2;
+ba[--n]=0;
+_6.destroy();
+return new _1(ba);
+};
+dojo.declare("dojox.encoding.crypto.RSAKey",null,{constructor:function(_7){
+this.rngf=_7||_3;
+this.e=0;
+this.n=this.d=this.p=this.q=this.dmp1=this.dmq1=this.coeff=null;
+},setPublic:function(N,E){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+}else{
+throw new Error("Invalid RSA public key");
+}
+},encrypt:function(_8){
+var m=_4(_8,(this.n.bitLength()+7)>>3,this.rngf);
+if(!m){
+return null;
+}
+var c=m.modPowInt(this.e,this.n);
+if(!c){
+return null;
+}
+var h=c.toString(16);
+return h.length%2?"0"+h:h;
+}});
+})();
+}
diff --git a/js/dojo/dojox/encoding/crypto/SimpleAES.js b/js/dojo/dojox/encoding/crypto/SimpleAES.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/crypto/SimpleAES.js
@@ -0,0 +1,236 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.SimpleAES"]){
+dojo._hasResource["dojox.encoding.crypto.SimpleAES"]=true;
+dojo.provide("dojox.encoding.crypto.SimpleAES");
+dojo.require("dojox.encoding.base64");
+dojo.require("dojox.encoding.crypto._base");
+(function(){
+var _1=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];
+var _2=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];
+function _3(_4,w){
+var Nb=4;
+var Nr=w.length/Nb-1;
+var _5=[[],[],[],[]];
+for(var i=0;i<4*Nb;i++){
+_5[i%4][Math.floor(i/4)]=_4[i];
+}
+_5=_6(_5,w,0,Nb);
+for(var _7=1;_7<Nr;_7++){
+_5=_8(_5,Nb);
+_5=_9(_5,Nb);
+_5=_a(_5,Nb);
+_5=_6(_5,w,_7,Nb);
+}
+_5=_8(_5,Nb);
+_5=_9(_5,Nb);
+_5=_6(_5,w,Nr,Nb);
+var _b=new Array(4*Nb);
+for(var i=0;i<4*Nb;i++){
+_b[i]=_5[i%4][Math.floor(i/4)];
+}
+return _b;
+};
+function _8(s,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+s[r][c]=_1[s[r][c]];
+}
+}
+return s;
+};
+function _9(s,Nb){
+var t=new Array(4);
+for(var r=1;r<4;r++){
+for(var c=0;c<4;c++){
+t[c]=s[r][(c+r)%Nb];
+}
+for(var c=0;c<4;c++){
+s[r][c]=t[c];
+}
+}
+return s;
+};
+function _a(s,Nb){
+for(var c=0;c<4;c++){
+var a=new Array(4);
+var b=new Array(4);
+for(var i=0;i<4;i++){
+a[i]=s[i][c];
+b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1;
+}
+s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3];
+s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3];
+s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3];
+s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3];
+}
+return s;
+};
+function _6(_c,w,_d,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+_c[r][c]^=w[_d*4+c][r];
+}
+}
+return _c;
+};
+function _e(_f){
+var Nb=4;
+var Nk=_f.length/4;
+var Nr=Nk+6;
+var w=new Array(Nb*(Nr+1));
+var _10=new Array(4);
+for(var i=0;i<Nk;i++){
+var r=[_f[4*i],_f[4*i+1],_f[4*i+2],_f[4*i+3]];
+w[i]=r;
+}
+for(var i=Nk;i<(Nb*(Nr+1));i++){
+w[i]=new Array(4);
+for(var t=0;t<4;t++){
+_10[t]=w[i-1][t];
+}
+if(i%Nk==0){
+_10=_11(_12(_10));
+for(var t=0;t<4;t++){
+_10[t]^=_2[i/Nk][t];
+}
+}else{
+if(Nk>6&&i%Nk==4){
+_10=_11(_10);
+}
+}
+for(var t=0;t<4;t++){
+w[i][t]=w[i-Nk][t]^_10[t];
+}
+}
+return w;
+};
+function _11(w){
+for(var i=0;i<4;i++){
+w[i]=_1[w[i]];
+}
+return w;
+};
+function _12(w){
+w[4]=w[0];
+for(var i=0;i<4;i++){
+w[i]=w[i+1];
+}
+return w;
+};
+function _13(_14,_15,_16){
+if(!(_16==128||_16==192||_16==256)){
+return "";
+}
+var _17=_16/8;
+var _18=new Array(_17);
+for(var i=0;i<_17;i++){
+_18[i]=_15.charCodeAt(i)&255;
+}
+var key=_3(_18,_e(_18));
+key=key.concat(key.slice(0,_17-16));
+var _19=16;
+var _1a=new Array(_19);
+var _1b=(new Date()).getTime();
+for(var i=0;i<4;i++){
+_1a[i]=(_1b>>>i*8)&255;
+}
+for(var i=0;i<4;i++){
+_1a[i+4]=(_1b/4294967296>>>i*8)&255;
+}
+var _1c=_e(key);
+var _1d=Math.ceil(_14.length/_19);
+var _1e=new Array(_1d);
+for(var b=0;b<_1d;b++){
+for(var c=0;c<4;c++){
+_1a[15-c]=(b>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_1a[15-c-4]=(b/4294967296>>>c*8);
+}
+var _1f=_3(_1a,_1c);
+var _20=b<_1d-1?_19:(_14.length-1)%_19+1;
+var ct="";
+for(var i=0;i<_20;i++){
+var _21=_14.charCodeAt(b*_19+i);
+var _22=_21^_1f[i];
+ct+=((_22<16)?"0":"")+_22.toString(16);
+}
+_1e[b]=ct;
+}
+var _23="";
+for(var i=0;i<8;i++){
+_23+=((_1a[i]<16)?"0":"")+_1a[i].toString(16);
+}
+return _23+" "+_1e.join(" ");
+};
+function _24(s){
+var ret=[];
+s.replace(/(..)/g,function(str){
+ret.push(parseInt(str,16));
+});
+return ret;
+};
+function _25(_26,_27,_28){
+if(!(_28==128||_28==192||_28==256)){
+return "";
+}
+var _29=_28/8;
+var _2a=new Array(_29);
+for(var i=0;i<_29;i++){
+_2a[i]=_27.charCodeAt(i)&255;
+}
+var _2b=_e(_2a);
+var key=_3(_2a,_2b);
+key=key.concat(key.slice(0,_29-16));
+var _2c=_e(key);
+_26=_26.split(" ");
+var _2d=16;
+var _2e=new Array(_2d);
+var _2f=_26[0];
+_2e=_24(_2f);
+var _30=new Array(_26.length-1);
+for(var b=1;b<_26.length;b++){
+for(var c=0;c<4;c++){
+_2e[15-c]=((b-1)>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_2e[15-c-4]=((b/4294967296-1)>>>c*8)&255;
+}
+var _31=_3(_2e,_2c);
+var pt="";
+var tmp=_24(_26[b]);
+for(var i=0;i<tmp.length;i++){
+var _32=_26[b].charCodeAt(i);
+var _33=tmp[i]^_31[i];
+pt+=String.fromCharCode(_33);
+}
+_30[b-1]=pt;
+}
+return _30.join("");
+};
+function _34(str){
+return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){
+return "!"+c.charCodeAt(0)+"!";
+});
+};
+function _35(str){
+return str.replace(/!\d\d?\d?!/g,function(c){
+return String.fromCharCode(c.slice(1,-1));
+});
+};
+dojox.encoding.crypto.SimpleAES=new (function(){
+this.encrypt=function(_36,key){
+return _13(_36,key,256);
+};
+this.decrypt=function(_37,key){
+return _25(_37,key,256);
+};
+})();
+})();
+}
diff --git a/js/dojo/dojox/encoding/crypto/_base.js b/js/dojo/dojox/encoding/crypto/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/crypto/_base.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto._base"]){
+dojo._hasResource["dojox.encoding.crypto._base"]=true;
+dojo.provide("dojox.encoding.crypto._base");
+(function(){
+var c=dojox.encoding.crypto;
+c.cipherModes={ECB:0,CBC:1,PCBC:2,CFB:3,OFB:4,CTR:5};
+c.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
+})();
+}
diff --git a/js/dojo/dojox/encoding/digests/MD5.js b/js/dojo/dojox/encoding/digests/MD5.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/digests/MD5.js
@@ -0,0 +1,158 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests.MD5"]){
+dojo._hasResource["dojox.encoding.digests.MD5"]=true;
+dojo.provide("dojox.encoding.digests.MD5");
+dojo.require("dojox.encoding.digests._base");
+(function(){
+var _1=dojox.encoding.digests;
+var _2=8;
+function R(n,c){
+return (n<<c)|(n>>>(32-c));
+};
+function C(q,a,b,x,s,t){
+return _1.addWords(R(_1.addWords(_1.addWords(a,q),_1.addWords(x,t)),s),b);
+};
+function FF(a,b,c,d,x,s,t){
+return C((b&c)|((~b)&d),a,b,x,s,t);
+};
+function GG(a,b,c,d,x,s,t){
+return C((b&d)|(c&(~d)),a,b,x,s,t);
+};
+function HH(a,b,c,d,x,s,t){
+return C(b^c^d,a,b,x,s,t);
+};
+function II(a,b,c,d,x,s,t){
+return C(c^(b|(~d)),a,b,x,s,t);
+};
+function _3(x,_4){
+x[_4>>5]|=128<<((_4)%32);
+x[(((_4+64)>>>9)<<4)+14]=_4;
+var a=1732584193;
+var b=-271733879;
+var c=-1732584194;
+var d=271733878;
+for(var i=0;i<x.length;i+=16){
+var _5=a;
+var _6=b;
+var _7=c;
+var _8=d;
+a=FF(a,b,c,d,x[i+0],7,-680876936);
+d=FF(d,a,b,c,x[i+1],12,-389564586);
+c=FF(c,d,a,b,x[i+2],17,606105819);
+b=FF(b,c,d,a,x[i+3],22,-1044525330);
+a=FF(a,b,c,d,x[i+4],7,-176418897);
+d=FF(d,a,b,c,x[i+5],12,1200080426);
+c=FF(c,d,a,b,x[i+6],17,-1473231341);
+b=FF(b,c,d,a,x[i+7],22,-45705983);
+a=FF(a,b,c,d,x[i+8],7,1770035416);
+d=FF(d,a,b,c,x[i+9],12,-1958414417);
+c=FF(c,d,a,b,x[i+10],17,-42063);
+b=FF(b,c,d,a,x[i+11],22,-1990404162);
+a=FF(a,b,c,d,x[i+12],7,1804603682);
+d=FF(d,a,b,c,x[i+13],12,-40341101);
+c=FF(c,d,a,b,x[i+14],17,-1502002290);
+b=FF(b,c,d,a,x[i+15],22,1236535329);
+a=GG(a,b,c,d,x[i+1],5,-165796510);
+d=GG(d,a,b,c,x[i+6],9,-1069501632);
+c=GG(c,d,a,b,x[i+11],14,643717713);
+b=GG(b,c,d,a,x[i+0],20,-373897302);
+a=GG(a,b,c,d,x[i+5],5,-701558691);
+d=GG(d,a,b,c,x[i+10],9,38016083);
+c=GG(c,d,a,b,x[i+15],14,-660478335);
+b=GG(b,c,d,a,x[i+4],20,-405537848);
+a=GG(a,b,c,d,x[i+9],5,568446438);
+d=GG(d,a,b,c,x[i+14],9,-1019803690);
+c=GG(c,d,a,b,x[i+3],14,-187363961);
+b=GG(b,c,d,a,x[i+8],20,1163531501);
+a=GG(a,b,c,d,x[i+13],5,-1444681467);
+d=GG(d,a,b,c,x[i+2],9,-51403784);
+c=GG(c,d,a,b,x[i+7],14,1735328473);
+b=GG(b,c,d,a,x[i+12],20,-1926607734);
+a=HH(a,b,c,d,x[i+5],4,-378558);
+d=HH(d,a,b,c,x[i+8],11,-2022574463);
+c=HH(c,d,a,b,x[i+11],16,1839030562);
+b=HH(b,c,d,a,x[i+14],23,-35309556);
+a=HH(a,b,c,d,x[i+1],4,-1530992060);
+d=HH(d,a,b,c,x[i+4],11,1272893353);
+c=HH(c,d,a,b,x[i+7],16,-155497632);
+b=HH(b,c,d,a,x[i+10],23,-1094730640);
+a=HH(a,b,c,d,x[i+13],4,681279174);
+d=HH(d,a,b,c,x[i+0],11,-358537222);
+c=HH(c,d,a,b,x[i+3],16,-722521979);
+b=HH(b,c,d,a,x[i+6],23,76029189);
+a=HH(a,b,c,d,x[i+9],4,-640364487);
+d=HH(d,a,b,c,x[i+12],11,-421815835);
+c=HH(c,d,a,b,x[i+15],16,530742520);
+b=HH(b,c,d,a,x[i+2],23,-995338651);
+a=II(a,b,c,d,x[i+0],6,-198630844);
+d=II(d,a,b,c,x[i+7],10,1126891415);
+c=II(c,d,a,b,x[i+14],15,-1416354905);
+b=II(b,c,d,a,x[i+5],21,-57434055);
+a=II(a,b,c,d,x[i+12],6,1700485571);
+d=II(d,a,b,c,x[i+3],10,-1894986606);
+c=II(c,d,a,b,x[i+10],15,-1051523);
+b=II(b,c,d,a,x[i+1],21,-2054922799);
+a=II(a,b,c,d,x[i+8],6,1873313359);
+d=II(d,a,b,c,x[i+15],10,-30611744);
+c=II(c,d,a,b,x[i+6],15,-1560198380);
+b=II(b,c,d,a,x[i+13],21,1309151649);
+a=II(a,b,c,d,x[i+4],6,-145523070);
+d=II(d,a,b,c,x[i+11],10,-1120210379);
+c=II(c,d,a,b,x[i+2],15,718787259);
+b=II(b,c,d,a,x[i+9],21,-343485551);
+a=_1.addWords(a,_5);
+b=_1.addWords(b,_6);
+c=_1.addWords(c,_7);
+d=_1.addWords(d,_8);
+}
+return [a,b,c,d];
+};
+function _9(_a,_b){
+var wa=_1.stringToWord(_b);
+if(wa.length>16){
+wa=_3(wa,_b.length*_2);
+}
+var l=[],r=[];
+for(var i=0;i<16;i++){
+l[i]=wa[i]^909522486;
+r[i]=wa[i]^1549556828;
+}
+var h=_3(l.concat(_1.stringToWord(_a)),512+_a.length*_2);
+return _3(r.concat(h),640);
+};
+_1.MD5=function(_c,_d){
+var _e=_d||_1.outputTypes.Base64;
+var wa=_3(_1.stringToWord(_c),_c.length*_2);
+switch(_e){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _1.wordToHex(wa);
+case _1.outputTypes.String:
+return _1.wordToString(wa);
+default:
+return _1.wordToBase64(wa);
+}
+};
+_1.MD5._hmac=function(_f,key,_10){
+var out=_10||_1.outputTypes.Base64;
+var wa=_9(_f,key);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _1.wordToHex(wa);
+case _1.outputTypes.String:
+return _1.wordToString(wa);
+default:
+return _1.wordToBase64(wa);
+}
+};
+})();
+}
diff --git a/js/dojo/dojox/encoding/digests/SHA1.js b/js/dojo/dojox/encoding/digests/SHA1.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/digests/SHA1.js
@@ -0,0 +1,137 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests.SHA1"]){
+dojo._hasResource["dojox.encoding.digests.SHA1"]=true;
+dojo.provide("dojox.encoding.digests.SHA1");
+dojo.require("dojox.encoding.digests._base");
+(function(){
+var _1=dojox.encoding.digests;
+var _2=8,_3=(1<<_2)-1;
+function R(n,c){
+return (n<<c)|(n>>>(32-c));
+};
+function FT(t,b,c,d){
+if(t<20){
+return (b&c)|((~b)&d);
+}
+if(t<40){
+return b^c^d;
+}
+if(t<60){
+return (b&c)|(b&d)|(c&d);
+}
+return b^c^d;
+};
+function KT(t){
+return (t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;
+};
+function _4(x,_5){
+x[_5>>5]|=128<<(24-_5%32);
+x[((_5+64>>9)<<4)+15]=_5;
+var w=new Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;
+for(var i=0;i<x.length;i+=16){
+var _6=a,_7=b,_8=c,_9=d,_a=e;
+for(var j=0;j<80;j++){
+if(j<16){
+w[j]=x[i+j];
+}else{
+w[j]=R(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
+}
+var t=_1.addWords(_1.addWords(R(a,5),FT(j,b,c,d)),_1.addWords(_1.addWords(e,w[j]),KT(j)));
+e=d;
+d=c;
+c=R(b,30);
+b=a;
+a=t;
+}
+a=_1.addWords(a,_6);
+b=_1.addWords(b,_7);
+c=_1.addWords(c,_8);
+d=_1.addWords(d,_9);
+e=_1.addWords(e,_a);
+}
+return [a,b,c,d,e];
+};
+function _b(_c,_d){
+var wa=_e(_d);
+if(wa.length>16){
+wa=_4(wa,_d.length*_2);
+}
+var _f=new Array(16),_10=new Array(16);
+for(var i=0;i<16;i++){
+_f[i]=wa[i]^909522486;
+_10[i]=wa[i]^1549556828;
+}
+var _11=_4(_f.concat(_e(_c)),512+_c.length*_2);
+return _4(_10.concat(_11),512+160);
+};
+function _e(s){
+var wa=[];
+for(var i=0,l=s.length*_2;i<l;i+=_2){
+wa[i>>5]|=(s.charCodeAt(i/_2)&_3)<<(32-_2-i%32);
+}
+return wa;
+};
+function _12(wa){
+var h="0123456789abcdef",s=[];
+for(var i=0,l=wa.length*4;i<l;i++){
+s.push(h.charAt((wa[i>>2]>>((3-i%4)*8+4))&15),h.charAt((wa[i>>2]>>((3-i%4)*8))&15));
+}
+return s.join("");
+};
+function _13(wa){
+var s=[];
+for(var i=0,l=wa.length*32;i<l;i+=_2){
+s.push(String.fromCharCode((wa[i>>5]>>>(32-_2-i%32))&_3));
+}
+return s.join("");
+};
+function _14(wa){
+var p="=",tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=[];
+for(var i=0,l=wa.length*4;i<l;i+=3){
+var t=(((wa[i>>2]>>8*(3-i%4))&255)<<16)|(((wa[i+1>>2]>>8*(3-(i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*(3-(i+2)%4))&255);
+for(var j=0;j<4;j++){
+if(i*8+j*6>wa.length*32){
+s.push(p);
+}else{
+s.push(tab.charAt((t>>6*(3-j))&63));
+}
+}
+}
+return s.join("");
+};
+_1.SHA1=function(_15,_16){
+var out=_16||_1.outputTypes.Base64;
+var wa=_4(_e(_15),_15.length*_2);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _12(wa);
+case _1.outputTypes.String:
+return _13(wa);
+default:
+return _14(wa);
+}
+};
+_1.SHA1._hmac=function(_17,key,_18){
+var out=_18||_1.outputTypes.Base64;
+var wa=_b(_17,key);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _12(wa);
+case _1.outputTypes.String:
+return _13(wa);
+default:
+return _14(wa);
+}
+};
+})();
+}
diff --git a/js/dojo/dojox/encoding/digests/_base.js b/js/dojo/dojox/encoding/digests/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/encoding/digests/_base.js
@@ -0,0 +1,57 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests._base"]){
+dojo._hasResource["dojox.encoding.digests._base"]=true;
+dojo.provide("dojox.encoding.digests._base");
+(function(){
+var d=dojox.encoding.digests;
+d.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
+d.addWords=function(a,b){
+var l=(a&65535)+(b&65535);
+var m=(a>>16)+(b>>16)+(l>>16);
+return (m<<16)|(l&65535);
+};
+var _1=8;
+var _2=(1<<_1)-1;
+d.stringToWord=function(s){
+var wa=[];
+for(var i=0,l=s.length*_1;i<l;i+=_1){
+wa[i>>5]|=(s.charCodeAt(i/_1)&_2)<<(i%32);
+}
+return wa;
+};
+d.wordToString=function(wa){
+var s=[];
+for(var i=0,l=wa.length*32;i<l;i+=_1){
+s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&_2));
+}
+return s.join("");
+};
+d.wordToHex=function(wa){
+var h="0123456789abcdef",s=[];
+for(var i=0,l=wa.length*4;i<l;i++){
+s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&15)+h.charAt((wa[i>>2]>>((i%4)*8))&15));
+}
+return s.join("");
+};
+d.wordToBase64=function(wa){
+var p="=",_3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=[];
+for(var i=0,l=wa.length*4;i<l;i+=3){
+var t=(((wa[i>>2]>>8*(i%4))&255)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&255);
+for(var j=0;j<4;j++){
+if(i*8+j*6>wa.length*32){
+s.push(p);
+}else{
+s.push(_3.charAt((t>>6*(3-j))&63));
+}
+}
+}
+return s.join("");
+};
+})();
+}
diff --git a/js/dojo/dojox/flash/DojoExternalInterface.as b/js/dojo/dojox/flash/DojoExternalInterface.as
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/flash/DojoExternalInterface.as
@@ -0,0 +1,177 @@
+/**
+ A wrapper around Flash 8's ExternalInterface; this is needed
+ because ExternalInterface has a number of serialization bugs that we
+ need to correct for.
+
+ @author Brad Neuberg
+*/
+
+import flash.external.ExternalInterface;
+
+class DojoExternalInterface{
+ public static var available:Boolean;
+ public static var dojoPath = "";
+
+ public static function initialize(){
+ //trace("DojoExternalInterface.initialize");
+
+ // extract the dojo base path
+ DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();
+
+ // see if we need to do an express install
+ var install:ExpressInstall = new ExpressInstall();
+ if(install.needsUpdate){
+ install.init();
+ }
+
+ // set whether communication is available
+ DojoExternalInterface.available = ExternalInterface.available;
+
+ // make sure we can play nice in XD settings
+ System.security.allowDomain(unescape(_root.xdomain));
+ }
+
+ /** Called when we are finished adding methods through addCallback. */
+ public static function done(){
+ //trace("done");
+ DojoExternalInterface.call("dojox.flash.loaded");
+ }
+
+ public static function addCallback(methodName:String, instance:Object,
+ method:Function):Boolean{
+ //trace("addCallback");
+ ExternalInterface.addCallback(methodName, instance, function(){
+ instance = (instance) ? instance : null;
+ var params = [];
+ if(arguments && arguments.length){
+ for(var i = 0; i < arguments.length; i++){
+ params[i] = DojoExternalInterface.decodeData(arguments[i]);
+ }
+ }
+
+ var results = method.apply(instance, params);
+ results = DojoExternalInterface.encodeData(results);
+
+ return results;
+ });
+
+ // tell JavaScript about DojoExternalInterface new method so we can create a proxy
+ ExternalInterface.call("dojox.flash.comm._addExternalInterfaceCallback",
+ methodName);
+
+ return true;
+ }
+
+ public static function call(methodName:String):Void{
+ // we might have any number of optional arguments, so we have to
+ // pass them in dynamically; strip out the results callback
+ var parameters = new Array();
+ for(var i = 0; i < arguments.length; i++){
+ parameters.push(arguments[i]);
+ }
+
+ // FIXME: Should we be encoding or decoding the data to get
+ // around Flash's serialization bugs?
+
+ var results = ExternalInterface.call.apply(ExternalInterface, parameters);
+
+ return results;
+ }
+
+ /**
+ Called by Flash to indicate to JavaScript that we are ready to have
+ our Flash functions called. Calling loaded()
+ will fire the dojox.flash.loaded() event, so that JavaScript can know that
+ Flash has finished loading and adding its callbacks, and can begin to
+ interact with the Flash file.
+ */
+ public static function loaded(){
+ DojoExternalInterface.call("dojox.flash.loaded");
+ }
+
+ /**
+ Utility trace implementation that prints out to console.debug.
+ */
+ public static function trace(msg){
+ DojoExternalInterface.call("console.debug", "FLASH: " + msg);
+ }
+
+ private static function decodeData(data):String{
+ if(!data || typeof data != "string"){
+ return data;
+ }
+
+ // JAC: Using unicode character 0001 to store instead of Unicode null
+ // which causes trouble
+ data = replaceStr(data, "&custom_null;", "\u0001");
+
+ // we have to use custom encodings for certain characters when passing
+ // them over; for example, passing a backslash over as //// from JavaScript
+ // to Flash doesn't work
+ data = replaceStr(data, "&custom_backslash;", "\\");
+
+ return data;
+ }
+
+ private static function encodeData(data):String{
+ if(!data || typeof data != "string"){
+ return data;
+ }
+
+ // double encode all entity values, or they will be mis-decoded
+ // by Flash when returned
+ data = replaceStr(data, "&", "&amp;");
+
+ // certain XMLish characters break Flash's wire serialization for
+ // ExternalInterface; encode these into a custom encoding, rather than
+ // the standard entity encoding, because otherwise we won't be able to
+ // differentiate between our own encoding and any entity characters
+ // that are being used in the string itself
+ data = replaceStr(data, '<', '&custom_lt;');
+ data = replaceStr(data, '>', '&custom_gt;');
+
+ // needed for IE
+ data = replaceStr(data, '\\', '&custom_backslash;');
+ data = replaceStr(data, "\u0001", "&custom_null;");
+
+ // encode control characters and JavaScript delimiters
+ data = replaceStr(data, "\n", "\\n");
+ data = replaceStr(data, "\r", "\\r");
+ data = replaceStr(data, "\f", "\\f");
+ data = replaceStr(data, "'", "\\'");
+ data = replaceStr(data, '"', '\"');
+
+ return data;
+ }
+
+ /**
+ Flash ActionScript has no String.replace method or support for
+ Regular Expressions! We roll our own very simple one.
+ */
+ public static function replaceStr(inputStr:String, replaceThis:String,
+ withThis:String):String{
+ var splitStr = inputStr.split(replaceThis);
+ if(!splitStr){
+ return inputStr;
+ }
+
+ inputStr = splitStr.join(withThis);
+ return inputStr;
+ }
+
+ private static function getDojoPath(){
+ var url = _root._url;
+ var start = url.indexOf("baseUrl=") + "baseUrl=".length;
+ var path = url.substring(start);
+ var end = path.indexOf("&");
+ if(end != -1){
+ path = path.substring(0, end);
+ }
+
+ // some browsers append a junk string at the end: '%20'%20quality=
+ if(path.indexOf("'%20'%20quality=") != -1){
+ path = path.substring(0, path.indexOf("'%20'%20quality="));
+ }
+ return unescape(path);
+ }
+}
diff --git a/js/dojo/dojox/flash/ExpressInstall.as b/js/dojo/dojox/flash/ExpressInstall.as
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/flash/ExpressInstall.as
@@ -0,0 +1,71 @@
+/**
+ * Based on the expressinstall.as class created by Geoff Stearns as part
+ * of the FlashObject library.
+ *
+ * Use this file to invoke the Macromedia Flash Player Express Install functionality
+ * This file is intended for use with the FlashObject embed script. You can download FlashObject
+ * and this file at the following URL: http://blog.deconcept.com/flashobject/
+ *
+ * Usage:
+ * var ExpressInstall = new ExpressInstall();
+ *
+ * // test to see if install is needed:
+ * if (ExpressInstall.needsUpdate) { // returns true if update is needed
+ * ExpressInstall.init(); // starts the update
+ * }
+ *
+ * NOTE: Your Flash movie must be at least 214px by 137px in order to use ExpressInstall.
+ *
+ */
+
+class ExpressInstall{
+ public var needsUpdate:Boolean;
+ private var updater:MovieClip;
+ private var hold:MovieClip;
+
+ public function ExpressInstall(){
+ // does the user need to update?
+ this.needsUpdate = (_root.MMplayerType == undefined) ? false : true;
+ }
+
+ public function init():Void{
+ this.loadUpdater();
+ }
+
+ public function loadUpdater():Void{
+ System.security.allowDomain("fpdownload.macromedia.com");
+
+ // hope that nothing is at a depth of 10000000, you can change this depth if needed, but you want
+ // it to be on top of your content if you have any stuff on the first frame
+ this.updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000);
+
+ // register the callback so we know if they cancel or there is an error
+ var _self = this;
+ this.updater.installStatus = _self.onInstallStatus;
+ this.hold = this.updater.createEmptyMovieClip("hold", 1);
+
+ // can't use movieClipLoader because it has to work in 6.0.65
+ this.updater.onEnterFrame = function():Void {
+ if(typeof this.hold.startUpdate == 'function'){
+ _self.initUpdater();
+ this.onEnterFrame = null;
+ }
+ }
+
+ var cacheBuster:Number = Math.random();
+
+ this.hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/"
+ +"update/current/swf/autoUpdater.swf?"+ cacheBuster);
+ }
+
+ private function initUpdater():Void{
+ this.hold.redirectURL = _root.MMredirectURL;
+ this.hold.MMplayerType = _root.MMplayerType;
+ this.hold.MMdoctitle = _root.MMdoctitle;
+ this.hold.startUpdate();
+ }
+
+ public function onInstallStatus(msg):Void{
+ getURL("javascript:dojox.flash.install._onInstallStatus('"+msg+"')");
+ }
+}
diff --git a/js/dojo/dojox/flash/_base.js b/js/dojo/dojox/flash/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/flash/_base.js
@@ -0,0 +1,299 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.flash._base"]){
+dojo._hasResource["dojox.flash._base"]=true;
+dojo.provide("dojox.flash._base");
+dojo.experimental("dojox.flash");
+dojo.require("dijit._base.place");
+dojox.flash=function(){
+};
+dojox.flash={ready:false,url:null,_visible:true,_loadedListeners:[],_installingListeners:[],setSwf:function(_1,_2){
+this.url=_1;
+this._visible=true;
+if(_2!==null&&_2!==undefined){
+this._visible=_2;
+}
+this._initialize();
+},addLoadedListener:function(_3){
+this._loadedListeners.push(_3);
+},addInstallingListener:function(_4){
+this._installingListeners.push(_4);
+},loaded:function(){
+dojox.flash.ready=true;
+if(dojox.flash._loadedListeners.length){
+for(var i=0;i<dojox.flash._loadedListeners.length;i++){
+dojox.flash._loadedListeners[i].call(null);
+}
+}
+},installing:function(){
+if(dojox.flash._installingListeners.length){
+for(var i=0;i<dojox.flash._installingListeners.length;i++){
+dojox.flash._installingListeners[i].call(null);
+}
+}
+},_initialize:function(){
+var _5=new dojox.flash.Install();
+dojox.flash.installer=_5;
+if(_5.needed()){
+_5.install();
+}else{
+dojox.flash.obj=new dojox.flash.Embed(this._visible);
+dojox.flash.obj.write();
+dojox.flash.comm=new dojox.flash.Communicator();
+}
+}};
+dojox.flash.Info=function(){
+this._detectVersion();
+};
+dojox.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,installing:false,isVersionOrAbove:function(_6,_7,_8){
+_8=parseFloat("."+_8);
+if(this.versionMajor>=_6&&this.versionMinor>=_7&&this.versionRevision>=_8){
+return true;
+}else{
+return false;
+}
+},_detectVersion:function(){
+var _9;
+for(var _a=25;_a>0;_a--){
+if(dojo.isIE){
+var _b;
+try{
+if(_a>6){
+_b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_a);
+}else{
+_b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+}
+if(typeof _b=="object"){
+if(_a==6){
+_b.AllowScriptAccess="always";
+}
+_9=_b.GetVariable("$version");
+}
+}
+catch(e){
+continue;
+}
+}else{
+_9=this._JSFlashInfo(_a);
+}
+if(_9==-1){
+this.capable=false;
+return;
+}else{
+if(_9!=0){
+var _c;
+if(dojo.isIE){
+var _d=_9.split(" ");
+var _e=_d[1];
+_c=_e.split(",");
+}else{
+_c=_9.split(".");
+}
+this.versionMajor=_c[0];
+this.versionMinor=_c[1];
+this.versionRevision=_c[2];
+var _f=this.versionMajor+"."+this.versionRevision;
+this.version=parseFloat(_f);
+this.capable=true;
+break;
+}
+}
+}
+},_JSFlashInfo:function(_10){
+if(navigator.plugins!=null&&navigator.plugins.length>0){
+if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){
+var _11=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
+var _12=navigator.plugins["Shockwave Flash"+_11].description;
+var _13=_12.split(" ");
+var _14=_13[2].split(".");
+var _15=_14[0];
+var _16=_14[1];
+var _17=(_13[3]||_13[4]).split("r");
+var _18=_17[1]>0?_17[1]:0;
+var _19=_15+"."+_16+"."+_18;
+return _19;
+}
+}
+return -1;
+}};
+dojox.flash.Embed=function(_1a){
+this._visible=_1a;
+};
+dojox.flash.Embed.prototype={width:215,height:138,id:"flashObject",_visible:true,protocol:function(){
+switch(window.location.protocol){
+case "https:":
+return "https";
+break;
+default:
+return "http";
+break;
+}
+},write:function(_1b){
+var _1c;
+var _1d=dojox.flash.url;
+var _1e=_1d;
+var _1f=_1d;
+var _20=dojo.baseUrl;
+var _21=document.location.protocol+"//"+document.location.host;
+if(_1b){
+var _22=escape(window.location);
+document.title=document.title.slice(0,47)+" - Flash Player Installation";
+var _23=escape(document.title);
+_1e+="?MMredirectURL="+_22+"&MMplayerType=ActiveX"+"&MMdoctitle="+_23+"&baseUrl="+escape(_20)+"&xdomain="+escape(_21);
+_1f+="?MMredirectURL="+_22+"&MMplayerType=PlugIn"+"&baseUrl="+escape(_20)+"&xdomain="+escape(_21);
+}else{
+_1e+="?cachebust="+new Date().getTime();
+_1e+="&baseUrl="+escape(_20);
+_1e+="&xdomain="+escape(_21);
+}
+if(_1f.indexOf("?")==-1){
+_1f+="?baseUrl="+escape(_20);
+}else{
+_1f+="&baseUrl="+escape(_20);
+}
+_1f+="&xdomain="+escape(_21);
+_1c="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\"\n "+"width=\""+this.width+"\"\n "+"height=\""+this.height+"\"\n "+"id=\""+this.id+"\"\n "+"name=\""+this.id+"\"\n "+"align=\"middle\">\n "+"<param name=\"allowScriptAccess\" value=\"always\"></param>\n "+"<param name=\"movie\" value=\""+_1e+"\"></param>\n "+"<param name=\"quality\" value=\"high\"></param>\n "+"<param name=\"bgcolor\" value=\"#ffffff\"></param>\n "+"<embed src=\""+_1f+"\" "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"Embed"+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"always\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" "+"></embed>\n"+"</object>\n";
+dojo.connect(dojo,"loaded",dojo.hitch(this,function(){
+var _24=this.id+"Container";
+if(dojo.byId(_24)){
+return;
+}
+var div=document.createElement("div");
+div.id=this.id+"Container";
+div.style.width=this.width+"px";
+div.style.height=this.height+"px";
+if(!this._visible){
+div.style.position="absolute";
+div.style.zIndex="10000";
+div.style.top="-1000px";
+}
+div.innerHTML=_1c;
+var _25=document.getElementsByTagName("body");
+if(!_25||!_25.length){
+throw new Error("No body tag for this page");
+}
+_25=_25[0];
+_25.appendChild(div);
+}));
+},get:function(){
+if(dojo.isIE||dojo.isWebKit){
+return dojo.byId(this.id);
+}else{
+return document[this.id+"Embed"];
+}
+},setVisible:function(_26){
+var _27=dojo.byId(this.id+"Container");
+if(_26){
+_27.style.position="absolute";
+_27.style.visibility="visible";
+}else{
+_27.style.position="absolute";
+_27.style.y="-1000px";
+_27.style.visibility="hidden";
+}
+},center:function(){
+var _28=this.width;
+var _29=this.height;
+var _2a=dijit.getViewport();
+var x=_2a.l+(_2a.w-_28)/2;
+var y=_2a.t+(_2a.h-_29)/2;
+var _2b=dojo.byId(this.id+"Container");
+_2b.style.top=y+"px";
+_2b.style.left=x+"px";
+}};
+dojox.flash.Communicator=function(){
+};
+dojox.flash.Communicator.prototype={_addExternalInterfaceCallback:function(_2c){
+var _2d=dojo.hitch(this,function(){
+var _2e=new Array(arguments.length);
+for(var i=0;i<arguments.length;i++){
+_2e[i]=this._encodeData(arguments[i]);
+}
+var _2f=this._execFlash(_2c,_2e);
+_2f=this._decodeData(_2f);
+return _2f;
+});
+this[_2c]=_2d;
+},_encodeData:function(_30){
+if(!_30||typeof _30!="string"){
+return _30;
+}
+_30=_30.replace("\\","&custom_backslash;");
+_30=_30.replace(/\0/g,"&custom_null;");
+return _30;
+},_decodeData:function(_31){
+if(_31&&_31.length&&typeof _31!="string"){
+_31=_31[0];
+}
+if(!_31||typeof _31!="string"){
+return _31;
+}
+_31=_31.replace(/\&custom_null\;/g,"\x00");
+_31=_31.replace(/\&custom_lt\;/g,"<").replace(/\&custom_gt\;/g,">").replace(/\&custom_backslash\;/g,"\\");
+return _31;
+},_execFlash:function(_32,_33){
+var _34=dojox.flash.obj.get();
+_33=(_33)?_33:[];
+for(var i=0;i<_33;i++){
+if(typeof _33[i]=="string"){
+_33[i]=this._encodeData(_33[i]);
+}
+}
+var _35=function(){
+return eval(_34.CallFunction("<invoke name=\""+_32+"\" returntype=\"javascript\">"+__flash__argumentsToXML(_33,0)+"</invoke>"));
+};
+var _36=_35.call(_33);
+if(typeof _36=="string"){
+_36=this._decodeData(_36);
+}
+return _36;
+}};
+dojox.flash.Install=function(){
+};
+dojox.flash.Install.prototype={needed:function(){
+if(!dojox.flash.info.capable){
+return true;
+}
+if(!dojox.flash.info.isVersionOrAbove(8,0,0)){
+return true;
+}
+return false;
+},install:function(){
+var _37;
+dojox.flash.info.installing=true;
+dojox.flash.installing();
+if(dojox.flash.info.capable==false){
+_37=new dojox.flash.Embed(false);
+_37.write();
+}else{
+if(dojox.flash.info.isVersionOrAbove(6,0,65)){
+_37=new dojox.flash.Embed(false);
+_37.write(true);
+_37.setVisible(true);
+_37.center();
+}else{
+alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
+window.location.href=+dojox.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
+}
+}
+},_onInstallStatus:function(msg){
+if(msg=="Download.Complete"){
+dojox.flash._initialize();
+}else{
+if(msg=="Download.Cancelled"){
+alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
+window.location.href=dojox.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
+}else{
+if(msg=="Download.Failed"){
+alert("There was an error downloading the Flash Player update. "+"Please try again later, or visit macromedia.com to download "+"the latest version of the Flash plugin.");
+}
+}
+}
+}};
+dojox.flash.info=new dojox.flash.Info();
+}
diff --git a/js/dojo/dojox/form/BusyButton.js b/js/dojo/dojox/form/BusyButton.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/BusyButton.js
@@ -0,0 +1,79 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.BusyButton"]){
+dojo._hasResource["dojox.form.BusyButton"]=true;
+dojo.provide("dojox.form.BusyButton");
+dojo.require("dijit.form.Button");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form._BusyButtonMixin",null,{isBusy:false,busyLabel:"",timeout:null,useIcon:true,postMixInProperties:function(){
+this.inherited(arguments);
+if(!this.busyLabel){
+this.busyLabel=dojo.i18n.getLocalization("dijit","loading",this.lang).loadingState;
+}
+},postCreate:function(){
+this.inherited(arguments);
+this._label=this.containerNode.innerHTML;
+this._initTimeout=this.timeout;
+if(this.isBusy){
+this.makeBusy();
+}
+},makeBusy:function(){
+this.isBusy=true;
+this.attr("disabled",true);
+this.setLabel(this.busyLabel,this.timeout);
+},cancel:function(){
+this.attr("disabled",false);
+this.isBusy=false;
+this.setLabel(this._label);
+if(this._timeout){
+clearTimeout(this._timeout);
+}
+this.timeout=this._initTimeout;
+},resetTimeout:function(_1){
+if(this._timeout){
+clearTimeout(this._timeout);
+}
+if(_1){
+this._timeout=setTimeout(dojo.hitch(this,function(){
+this.cancel();
+}),_1);
+}else{
+if(_1==undefined||_1===0){
+this.cancel();
+}
+}
+},setLabel:function(_2,_3){
+this.label=_2;
+while(this.containerNode.firstChild){
+this.containerNode.removeChild(this.containerNode.firstChild);
+}
+this.containerNode.innerHTML=this.label;
+if(this.showLabel==false&&!(dojo.attr(this.domNode,"title"))){
+this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
+}
+if(_3){
+this.resetTimeout(_3);
+}else{
+this.timeout=null;
+}
+if(this.useIcon&&this.isBusy){
+var _4=new Image();
+_4.src=this._blankGif;
+dojo.attr(_4,"id",this.id+"_icon");
+dojo.addClass(_4,"dojoxBusyButtonIcon");
+this.containerNode.appendChild(_4);
+}
+},_clicked:function(e){
+if(!this.isBusy){
+this.makeBusy();
+}
+}});
+dojo.declare("dojox.form.BusyButton",[dijit.form.Button,dojox.form._BusyButtonMixin],{});
+dojo.declare("dojox.form.BusyComboButton",[dijit.form.ComboButton,dojox.form._BusyButtonMixin],{});
+dojo.declare("dojox.form.BusyDropDownButton",[dijit.form.DropDownButton,dojox.form._BusyButtonMixin],{});
+}
diff --git a/js/dojo/dojox/form/CheckedMultiSelect.js b/js/dojo/dojox/form/CheckedMultiSelect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/CheckedMultiSelect.js
@@ -0,0 +1,100 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.CheckedMultiSelect"]){
+dojo._hasResource["dojox.form.CheckedMultiSelect"]=true;
+dojo.provide("dojox.form.CheckedMultiSelect");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.declare("dojox.form._CheckedMultiSelectItem",[dijit._Widget,dijit._Templated],{widgetsInTemplate:true,templateString:dojo.cache("dojox.form","resources/_CheckedMultiSelectItem.html","<div class=\"dijitReset ${baseClass}\"\n\t><input class=\"${baseClass}Box\" dojoType=\"dijit.form.CheckBox\" dojoAttachPoint=\"checkBox\" \n\t\tdojoAttachEvent=\"_onClick:_changeBox\" type=\"${_type.type}\" baseClass=\"${_type.baseClass}\"\n\t><div class=\"dijitInline ${baseClass}Label\" dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onmousedown:_onMouse,onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"></div\n></div>\n"),baseClass:"dojoxMultiSelectItem",option:null,parent:null,disabled:false,readOnly:false,postMixInProperties:function(){
+if(this.parent.multiple){
+this._type={type:"checkbox",baseClass:"dijitCheckBox"};
+}else{
+this._type={type:"radio",baseClass:"dijitRadio"};
+}
+this.disabled=this.option.disabled=this.option.disabled||false;
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.labelNode.innerHTML=this.option.label;
+},_changeBox:function(){
+if(this.attr("disabled")||this.attr("readOnly")){
+return;
+}
+if(this.parent.multiple){
+this.option.selected=this.checkBox.attr("value")&&true;
+}else{
+this.parent.attr("value",this.option.value);
+}
+this.parent._updateSelection();
+this.parent.focus();
+},_onMouse:function(e){
+if(this.attr("disabled")||this.attr("readOnly")){
+dojo.stopEvent(e);
+}else{
+this.checkBox._onMouse(e);
+}
+},_onClick:function(e){
+if(this.attr("disabled")||this.attr("readOnly")){
+dojo.stopEvent(e);
+}else{
+this.checkBox._onClick(e);
+}
+},_updateBox:function(){
+this.checkBox.attr("value",this.option.selected);
+},_setDisabledAttr:function(_1){
+this.disabled=_1||this.option.disabled;
+this.checkBox.attr("disabled",this.disabled);
+dojo.toggleClass(this.domNode,"dojoxMultiSelectDisabled",this.disabled);
+},_setReadOnlyAttr:function(_2){
+this.checkBox.attr("readOnly",_2);
+this.checkBox._setStateClass();
+this.readOnly=_2;
+}});
+dojo.declare("dojox.form.CheckedMultiSelect",dijit.form._FormSelectWidget,{templateString:dojo.cache("dojox.form","resources/CheckedMultiSelect.html","<div class=\"dijit dijitReset dijitInline\" dojoAttachEvent=\"onmousedown:_mouseDown,onclick:focus\"\n\t><select class=\"${baseClass}Select\" multiple=\"true\" dojoAttachPoint=\"containerNode,focusNode\"></select\n\t><div dojoAttachPoint=\"wrapperDiv\"></div\n></div>\n"),baseClass:"dojoxMultiSelect",_mouseDown:function(e){
+dojo.stopEvent(e);
+},_addOptionItem:function(_3){
+this.wrapperDiv.appendChild(new dojox.form._CheckedMultiSelectItem({option:_3,parent:this}).domNode);
+},_updateSelection:function(){
+this.inherited(arguments);
+dojo.forEach(this._getChildren(),function(c){
+c._updateBox();
+});
+},_getChildren:function(){
+return dojo.map(this.wrapperDiv.childNodes,function(n){
+return dijit.byNode(n);
+});
+},invertSelection:function(_4){
+dojo.forEach(this.options,function(i){
+i.selected=!i.selected;
+});
+this._updateSelection();
+},_setDisabledAttr:function(_5){
+this.inherited(arguments);
+dojo.forEach(this._getChildren(),function(_6){
+if(_6&&_6.attr){
+_6.attr("disabled",_5);
+}
+});
+},_setReadOnlyAttr:function(_7){
+if("readOnly" in this.attributeMap){
+this._attrToDom("readOnly",_7);
+}
+this.readOnly=_7;
+dojo.forEach(this._getChildren(),function(_8){
+if(_8&&_8.attr){
+_8.attr("readOnly",_7);
+}
+});
+this._setStateClass();
+},uninitialize:function(){
+dojo.forEach(this._getChildren(),function(_9){
+_9.destroyRecursive();
+});
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/form/DateTextBox.js b/js/dojo/dojox/form/DateTextBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/DateTextBox.js
@@ -0,0 +1,82 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DateTextBox"]){
+dojo._hasResource["dojox.form.DateTextBox"]=true;
+dojo.provide("dojox.form.DateTextBox");
+dojo.experimental("dojox.form.DateTextBox");
+dojo.require("dojox.widget.Calendar");
+dojo.require("dojox.widget.CalendarViews");
+dojo.require("dijit.form._DateTimeTextBox");
+dojo.declare("dojox.form.DateTextBox",dijit.form._DateTimeTextBox,{popupClass:"dojox.widget.Calendar",_selector:"date",_open:function(){
+this.inherited(arguments);
+dojo.style(this._picker.domNode.parentNode,"position","absolute");
+}});
+dojo.declare("dojox.form.DayTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.DailyCalendar",parse:function(_1){
+return _1;
+},format:function(_2){
+return _2.getDate?_2.getDate():_2;
+},validator:function(_3){
+var _4=Number(_3);
+var _5=/(^-?\d\d*$)/.test(String(_3));
+return _3==""||_3==null||(_5&&_4>=1&&_4<=31);
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_6){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,String(_6.getDate()),true,String(_6.getDate()));
+});
+}});
+dojo.declare("dojox.form.MonthTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.MonthlyCalendar",selector:"date",postMixInProperties:function(){
+this.inherited(arguments);
+this.constraints.datePattern="MM";
+},format:function(_7){
+return Number(_7)+1;
+},parse:function(_8,_9){
+return Number(_8)-1;
+},serialize:function(_a,_b){
+return String(_a);
+},validator:function(_c){
+var _d=Number(_c);
+var _e=/(^-?\d\d*$)/.test(String(_c));
+return _c==""||_c==null||(_e&&_d>=1&&_d<=12);
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_f){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,_f,true,_f);
+});
+}});
+dojo.declare("dojox.form.YearTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.YearlyCalendar",format:function(_10){
+if(typeof _10=="string"){
+return _10;
+}else{
+if(_10.getFullYear){
+return _10.getFullYear();
+}
+}
+return _10;
+},validator:function(_11){
+return _11==""||_11==null||/(^-?\d\d*$)/.test(String(_11));
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_12){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,_12,true,_12);
+});
+},parse:function(_13,_14){
+return _13||(this._isEmpty(_13)?null:undefined);
+},filter:function(val){
+if(val&&val.getFullYear){
+return val.getFullYear().toString();
+}
+return this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/form/DropDownSelect.js b/js/dojo/dojox/form/DropDownSelect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/DropDownSelect.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DropDownSelect"]){
+dojo._hasResource["dojox.form.DropDownSelect"]=true;
+dojo.deprecated("dojox.form.DropDownSelect","Use dijit.form.Select instead","2.0");
+dojo.provide("dojox.form.DropDownSelect");
+dojo.require("dijit.form.Select");
+dojo.setObject("dojox.form.DropDownSelect",dijit.form.Select);
+}
diff --git a/js/dojo/dojox/form/DropDownStack.js b/js/dojo/dojox/form/DropDownStack.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/DropDownStack.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DropDownStack"]){
+dojo._hasResource["dojox.form.DropDownStack"]=true;
+dojo.provide("dojox.form.DropDownStack");
+dojo.require("dijit.form.Select");
+dojo.require("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form.DropDownStack",[dijit.form.Select,dojox.form._SelectStackMixin],{});
+}
diff --git a/js/dojo/dojox/form/FileInput.js b/js/dojo/dojox/form/FileInput.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/FileInput.js
@@ -0,0 +1,42 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInput"]){
+dojo._hasResource["dojox.form.FileInput"]=true;
+dojo.provide("dojox.form.FileInput");
+dojo.experimental("dojox.form.FileInput");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.form.FileInput",dijit.form._FormWidget,{label:"Browse ...",cancelText:"Cancel",name:"uploadFile",templateString:dojo.cache("dojox.form","resources/FileInput.html","<div class=\"dijitFileInput\">\n\t<input id=\"${id}\" class=\"dijitFileInputReal\" type=\"file\" dojoAttachPoint=\"fileInput\" name=\"${name}\" />\n\t<div class=\"dijitFakeInput\">\n\t\t<input class=\"dijitFileInputVisible\" type=\"text\" dojoAttachPoint=\"focusNode, inputNode\" />\n\t\t<div class=\"dijitInline dijitFileInputText\" dojoAttachPoint=\"titleNode\">${label}</div>\n\t\t<div class=\"dijitInline dijitFileInputButton\" dojoAttachPoint=\"cancelNode\" \n\t\t\tdojoAttachEvent=\"onclick:reset\">${cancelText}</div>\n\t</div>\n</div>\n"),startup:function(){
+this._listener=this.connect(this.fileInput,"onchange","_matchValue");
+this._keyListener=this.connect(this.fileInput,"onkeyup","_matchValue");
+},_matchValue:function(){
+this.inputNode.value=this.fileInput.value;
+if(this.inputNode.value){
+this.cancelNode.style.visibility="visible";
+dojo.fadeIn({node:this.cancelNode,duration:275}).play();
+}
+},setLabel:function(_1,_2){
+this.titleNode.innerHTML=_1;
+},reset:function(e){
+this.disconnect(this._listener);
+this.disconnect(this._keyListener);
+if(this.fileInput){
+this.domNode.removeChild(this.fileInput);
+}
+dojo.fadeOut({node:this.cancelNode,duration:275}).play();
+this.fileInput=document.createElement("input");
+this.fileInput.setAttribute("type","file");
+this.fileInput.setAttribute("id",this.id);
+this.fileInput.setAttribute("name",this.name);
+dojo.addClass(this.fileInput,"dijitFileInputReal");
+this.domNode.appendChild(this.fileInput);
+this._keyListener=this.connect(this.fileInput,"onkeyup","_matchValue");
+this._listener=this.connect(this.fileInput,"onchange","_matchValue");
+this.inputNode.value="";
+}});
+}
diff --git a/js/dojo/dojox/form/FileInputAuto.js b/js/dojo/dojox/form/FileInputAuto.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/FileInputAuto.js
@@ -0,0 +1,95 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInputAuto"]){
+dojo._hasResource["dojox.form.FileInputAuto"]=true;
+dojo.provide("dojox.form.FileInputAuto");
+dojo.require("dojox.form.FileInput");
+dojo.require("dojo.io.iframe");
+dojo.declare("dojox.form.FileInputAuto",dojox.form.FileInput,{url:"",blurDelay:2000,duration:500,uploadMessage:"Uploading ...",triggerEvent:"onblur",_sent:false,templateString:dojo.cache("dojox.form","resources/FileInputAuto.html","<div class=\"dijitFileInput\">\n\t<input id=\"${id}\" name=\"${name}\" class=\"dijitFileInputReal\" type=\"file\" dojoAttachPoint=\"fileInput\" />\n\t<div class=\"dijitFakeInput\" dojoAttachPoint=\"fakeNodeHolder\">\n\t\t<input class=\"dijitFileInputVisible\" type=\"text\" dojoAttachPoint=\"focusNode, inputNode\" />\n\t\t<div class=\"dijitInline dijitFileInputText\" dojoAttachPoint=\"titleNode\">${label}</div>\n\t\t<div class=\"dijitInline dijitFileInputButton\" dojoAttachPoint=\"cancelNode\" dojoAttachEvent=\"onclick:reset\">${cancelText}</div>\n\t</div>\n\t<div class=\"dijitProgressOverlay\" dojoAttachPoint=\"overlay\">&nbsp;</div>\n</div>\n"),startup:function(){
+this._blurListener=this.connect(this.fileInput,this.triggerEvent,"_onBlur");
+this._focusListener=this.connect(this.fileInput,"onfocus","_onFocus");
+this.inherited(arguments);
+},_onFocus:function(){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+},_onBlur:function(){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+if(!this._sent){
+this._blurTimer=setTimeout(dojo.hitch(this,"_sendFile"),this.blurDelay);
+}
+},setMessage:function(_1){
+this.overlay.removeChild(this.overlay.firstChild);
+this.overlay.appendChild(document.createTextNode(_1));
+},_sendFile:function(e){
+if(this._sent||this._sending||!this.fileInput.value){
+return;
+}
+this._sending=true;
+dojo.style(this.fakeNodeHolder,"display","none");
+dojo.style(this.overlay,{opacity:0,display:"block"});
+this.setMessage(this.uploadMessage);
+dojo.fadeIn({node:this.overlay,duration:this.duration}).play();
+var _2;
+if(dojo.isIE){
+_2=document.createElement("<form enctype=\"multipart/form-data\" method=\"post\">");
+_2.encoding="multipart/form-data";
+}else{
+_2=document.createElement("form");
+_2.setAttribute("enctype","multipart/form-data");
+}
+_2.appendChild(this.fileInput);
+dojo.body().appendChild(_2);
+dojo.io.iframe.send({url:this.url,form:_2,handleAs:"json",handle:dojo.hitch(this,"_handleSend")});
+},_handleSend:function(_3,_4){
+this.overlay.removeChild(this.overlay.firstChild);
+this._sent=true;
+this._sending=false;
+dojo.style(this.overlay,{opacity:0,border:"none",background:"none"});
+this.overlay.style.backgroundImage="none";
+this.fileInput.style.display="none";
+this.fakeNodeHolder.style.display="none";
+dojo.fadeIn({node:this.overlay,duration:this.duration}).play(250);
+this.disconnect(this._blurListener);
+this.disconnect(this._focusListener);
+dojo.body().removeChild(_4.args.form);
+this.fileInput=null;
+this.onComplete(_3,_4,this);
+},reset:function(e){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+this.disconnect(this._blurListener);
+this.disconnect(this._focusListener);
+this.overlay.style.display="none";
+this.fakeNodeHolder.style.display="";
+this.inherited(arguments);
+this._sent=false;
+this._sending=false;
+this._blurListener=this.connect(this.fileInput,this.triggerEvent,"_onBlur");
+this._focusListener=this.connect(this.fileInput,"onfocus","_onFocus");
+},onComplete:function(_5,_6,_7){
+}});
+dojo.declare("dojox.form.FileInputBlind",dojox.form.FileInputAuto,{startup:function(){
+this.inherited(arguments);
+this._off=dojo.style(this.inputNode,"width");
+this.inputNode.style.display="none";
+this._fixPosition();
+},_fixPosition:function(){
+if(dojo.isIE){
+dojo.style(this.fileInput,"width","1px");
+}else{
+dojo.style(this.fileInput,"left","-"+(this._off)+"px");
+}
+},reset:function(e){
+this.inherited(arguments);
+this._fixPosition();
+}});
+}
diff --git a/js/dojo/dojox/form/FileInputBlind.js b/js/dojo/dojox/form/FileInputBlind.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/FileInputBlind.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInputBlind"]){
+dojo._hasResource["dojox.form.FileInputBlind"]=true;
+dojo.provide("dojox.form.FileInputBlind");
+dojo.require("dojox.form.FileInputAuto");
+}
diff --git a/js/dojo/dojox/form/FilePickerTextBox.js b/js/dojo/dojox/form/FilePickerTextBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/FilePickerTextBox.js
@@ -0,0 +1,264 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FilePickerTextBox"]){
+dojo._hasResource["dojox.form.FilePickerTextBox"]=true;
+dojo.provide("dojox.form.FilePickerTextBox");
+dojo.require("dojox.widget.FilePicker");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit._HasDropDown");
+dojo.declare("dojox.form.FilePickerTextBox",[dijit.form.ValidationTextBox,dijit._HasDropDown],{baseClass:"dojoxFilePickerTextBox",templateString:dojo.cache("dojox.form","resources/FilePickerTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\" waiRole=\"combobox\" tabIndex=\"-1\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"downArrowNode,_buttonNode,_popupStateNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" ${nameAttrSetting} class='dijitReset'\n\t\t\t\tdojoAttachEvent='onkeypress:_onKey' \n\t\t\t\tdojoAttachPoint='textbox,focusNode' waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t\t/></div\n\t></div\n></div>\n"),searchDelay:500,_stopClickEvents:false,valueItem:null,numPanes:2.25,postMixInProperties:function(){
+this.inherited(arguments);
+this.dropDown=new dojox.widget.FilePicker(this.constraints);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.dropDown,"onChange",this._onWidgetChange);
+this.connect(this.focusNode,"onblur","_focusBlur");
+this.connect(this.focusNode,"onfocus","_focusFocus");
+this.connect(this.focusNode,"ondblclick",function(){
+dijit.selectInputText(this.focusNode);
+});
+},_setValueAttr:function(_1,_2,_3){
+if(!this._searchInProgress){
+this.inherited(arguments);
+_1=_1||"";
+var _4=this.dropDown.attr("pathValue")||"";
+if(_1!==_4){
+this._skip=true;
+var fx=dojo.hitch(this,"_setBlurValue");
+this.dropDown._setPathValueAttr(_1,!_3,this._settingBlurValue?fx:null);
+}
+}
+},_onWidgetChange:function(_5){
+if(!_5&&this.focusNode.value){
+this._hasValidPath=false;
+this.focusNode.value="";
+}else{
+this.valueItem=_5;
+var _6=this.dropDown._getPathValueAttr(_5);
+if(_6){
+this._hasValidPath=true;
+}
+if(!this._skip){
+this._setValueAttr(_6,undefined,true);
+}
+delete this._skip;
+}
+this.validate();
+},startup:function(){
+if(!this.dropDown._started){
+this.dropDown.startup();
+}
+this.inherited(arguments);
+},openDropDown:function(){
+this.dropDown.domNode.style.width="0px";
+if(!("minPaneWidth" in (this.constraints||{}))){
+this.dropDown.attr("minPaneWidth",(this.domNode.offsetWidth/this.numPanes));
+}
+this.inherited(arguments);
+},toggleDropDown:function(){
+this.inherited(arguments);
+if(this._opened){
+this.dropDown.attr("pathValue",this.attr("value"));
+}
+},_focusBlur:function(e){
+if(e.explicitOriginalTarget==this.focusNode&&!this._allowBlur){
+window.setTimeout(dojo.hitch(this,function(){
+if(!this._allowBlur){
+this.focus();
+}
+}),1);
+}else{
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false});
+delete this._menuFocus;
+}
+}
+},_focusFocus:function(e){
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false});
+}
+delete this._menuFocus;
+var _7=dijit.getFocus(this);
+if(_7&&_7.node){
+_7=dijit.byNode(_7.node);
+if(_7){
+this._menuFocus=_7.domNode;
+}
+}
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":true});
+}
+delete this._allowBlur;
+},_onBlur:function(){
+this._allowBlur=true;
+delete this.dropDown._savedFocus;
+this.inherited(arguments);
+},_setBlurValue:function(){
+if(this.dropDown&&!this._settingBlurValue){
+this._settingBlurValue=true;
+this.attr("value",this.focusNode.value);
+}else{
+delete this._settingBlurValue;
+this.inherited(arguments);
+}
+},parse:function(_8,_9){
+if(this._hasValidPath||this._hasSelection){
+return _8;
+}
+var dd=this.dropDown,_a=dd.topDir,_b=dd.pathSeparator;
+var _c=dd.attr("pathValue");
+var _d=function(v){
+if(_a.length&&v.indexOf(_a)===0){
+v=v.substring(_a.length);
+}
+if(_b&&v[v.length-1]==_b){
+v=v.substring(0,v.length-1);
+}
+return v;
+};
+_c=_d(_c);
+var _e=_d(_8);
+if(_e==_c){
+return _8;
+}
+return undefined;
+},_startSearchFromInput:function(){
+var dd=this.dropDown,fn=this.focusNode;
+var _f=fn.value,_10=_f,_11=dd.topDir;
+if(this._hasSelection){
+dijit.selectInputText(fn,_10.length);
+}
+this._hasSelection=false;
+if(_11.length&&_f.indexOf(_11)===0){
+_f=_f.substring(_11.length);
+}
+var _12=_f.split(dd.pathSeparator);
+var _13=dojo.hitch(this,function(idx){
+var dir=_12[idx];
+var _14=dd.getChildren()[idx];
+var _15;
+this._searchInProgress=true;
+var _16=dojo.hitch(this,function(){
+delete this._searchInProgress;
+});
+if((dir||_14)&&!this._opened){
+this.toggleDropDown();
+}
+if(dir&&_14){
+var fx=dojo.hitch(this,function(){
+if(_15){
+this.disconnect(_15);
+}
+delete _15;
+var _17=_14._menu.getChildren();
+var _18=dojo.filter(_17,function(i){
+return i.label==dir;
+})[0];
+var _19=dojo.filter(_17,function(i){
+return (i.label.indexOf(dir)===0);
+})[0];
+if(_18&&((_12.length>idx+1&&_18.children)||(!_18.children))){
+idx++;
+_14._menu.onItemClick(_18,{type:"internal",stopPropagation:function(){
+},preventDefault:function(){
+}});
+if(_12[idx]){
+_13(idx);
+}else{
+_16();
+}
+}else{
+_14._setSelected(null);
+if(_19&&_12.length===idx+1){
+dd._setInProgress=true;
+dd._removeAfter(_14);
+delete dd._setInProgress;
+var _1a=_19.label;
+if(_19.children){
+_1a+=dd.pathSeparator;
+}
+_1a=_1a.substring(dir.length);
+window.setTimeout(function(){
+dijit.scrollIntoView(_19.domNode);
+},1);
+fn.value=_10+_1a;
+dijit.selectInputText(fn,_10.length);
+this._hasSelection=true;
+try{
+_19.focusNode.focus();
+}
+catch(e){
+}
+}else{
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false,"Focus":false});
+}
+delete this._menuFocus;
+}
+_16();
+}
+});
+if(!_14.isLoaded){
+_15=this.connect(_14,"onLoad",fx);
+}else{
+fx();
+}
+}else{
+if(_14){
+_14._setSelected(null);
+dd._setInProgress=true;
+dd._removeAfter(_14);
+delete dd._setInProgress;
+}
+_16();
+}
+});
+_13(0);
+},_onKey:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+var dk=dojo.keys;
+var c=e.charOrCode;
+if(c==dk.DOWN_ARROW){
+this._allowBlur=true;
+}
+if(c==dk.ENTER&&this._opened){
+this.dropDown.onExecute();
+dijit.selectInputText(this.focusNode,this.focusNode.value.length);
+this._hasSelection=false;
+dojo.stopEvent(e);
+return;
+}
+if((c==dk.RIGHT_ARROW||c==dk.LEFT_ARROW||c==dk.TAB)&&this._hasSelection){
+this._startSearchFromInput();
+dojo.stopEvent(e);
+return;
+}
+this.inherited(arguments);
+var _1b=false;
+if((c==dk.BACKSPACE||c==dk.DELETE)&&this._hasSelection){
+this._hasSelection=false;
+}else{
+if(c==dk.BACKSPACE||c==dk.DELETE||c==" "){
+_1b=true;
+}else{
+_1b=e.keyChar!=="";
+}
+}
+if(this._searchTimer){
+window.clearTimeout(this._searchTimer);
+}
+delete this._searchTimer;
+if(_1b){
+this._hasValidPath=false;
+this._hasSelection=false;
+this._searchTimer=window.setTimeout(dojo.hitch(this,"_startSearchFromInput"),this.searchDelay+1);
+}
+}});
+}
diff --git a/js/dojo/dojox/form/FileUploader.js b/js/dojo/dojox/form/FileUploader.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/FileUploader.js
@@ -0,0 +1,727 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileUploader"]){
+dojo._hasResource["dojox.form.FileUploader"]=true;
+dojo.provide("dojox.form.FileUploader");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojo.io.iframe");
+dojo.require("dojox.html.styles");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.embed.flashVars");
+dojo.require("dijit._Contained");
+dojo.experimental("dojox.form.FileUploader");
+(function(){
+var _1=dojo.config.uploaderPath||dojo.moduleUrl("dojox.form","resources/uploader.swf");
+var _2=function(_3){
+if(!_3||_3=="none"){
+return false;
+}
+return _3.replace(/:/g,"||").replace(/\./g,"^^").replace("url(","").replace(")","").replace(/'/g,"").replace(/"/g,"");
+};
+var _4=function(_5){
+var tn=_5.tagName.toLowerCase();
+return tn=="button"||tn=="input";
+};
+var _6=function(_7){
+var o={};
+o.ff=dojo.style(_7,"fontFamily");
+if(o.ff){
+o.ff=o.ff.replace(", ",",");
+o.ff=o.ff.replace(/\"|\'/g,"");
+o.ff=o.ff=="sans-serif"?"Arial":o.ff;
+o.fw=dojo.style(_7,"fontWeight");
+o.fi=dojo.style(_7,"fontStyle");
+o.fs=parseInt(dojo.style(_7,"fontSize"),10);
+if(dojo.style(_7,"fontSize").indexOf("%")>-1){
+var n=_7;
+while(n.tagName){
+if(dojo.style(n,"fontSize").indexOf("%")==-1){
+o.fs=parseInt(dojo.style(n,"fontSize"),10);
+break;
+}
+if(n.tagName.toLowerCase()=="body"){
+o.fs=16*0.01*parseInt(dojo.style(n,"fontSize"),10);
+}
+n=n.parentNode;
+}
+}
+o.fc=new dojo.Color(dojo.style(_7,"color")).toHex();
+o.fc=parseInt(o.fc.substring(1,Infinity),16);
+}
+o.lh=dojo.style(_7,"lineHeight");
+o.ta=dojo.style(_7,"textAlign");
+o.ta=o.ta=="start"||!o.ta?"left":o.ta;
+o.va=_4(_7)?"middle":o.lh==o.h?"middle":dojo.style(_7,"verticalAlign");
+return o;
+};
+var _8=function(_9){
+var cn=dojo.trim(_9.innerHTML);
+if(cn.indexOf("<")>-1){
+cn=escape(cn);
+}
+return cn;
+};
+var _a=function(_b){
+var o={};
+var _c=dojo.contentBox(_b);
+var _d=dojo._getPadExtents(_b);
+o.p=[_d.t,_d.w-_d.l,_d.h-_d.t,_d.l];
+o.w=_c.w+_d.w;
+o.h=_c.h+_d.h;
+o.d=dojo.style(_b,"display");
+var _e=new dojo.Color(dojo.style(_b,"backgroundColor"));
+o.bc=_e.a==0?"#ffffff":_e.toHex();
+o.bc=parseInt(o.bc.substring(1,Infinity),16);
+var _f=_2(dojo.style(_b,"backgroundImage"));
+if(_f){
+o.bi={url:_f,rp:dojo.style(_b,"backgroundRepeat"),pos:escape(dojo.style(_b,"backgroundPosition"))};
+if(!o.bi.pos){
+var rx=dojo.style(_b,"backgroundPositionX");
+var ry=dojo.style(_b,"backgroundPositionY");
+rx=(rx=="left")?"0%":(rx=="right")?"100%":rx;
+ry=(ry=="top")?"0%":(ry=="bottom")?"100%":ry;
+o.bi.pos=escape(rx+" "+ry);
+}
+}
+return dojo.mixin(o,_6(_b));
+};
+var _10=function(_11,_12,_13){
+var _14,_15;
+if(_13){
+_14=dojo.place("<"+_11.tagName+"><span>"+_11.innerHTML+"</span></"+_11.tagName+">",_11.parentNode);
+var _16=_14.firstChild;
+dojo.addClass(_16,_11.className);
+dojo.addClass(_14,_12);
+_15=_a(_16);
+}else{
+_14=dojo.place("<"+_11.tagName+">"+_11.innerHTML+"</"+_11.tagName+">",_11.parentNode);
+dojo.addClass(_14,_11.className);
+dojo.addClass(_14,_12);
+_14.id=_11.id;
+_15=_a(_14);
+}
+dojo.destroy(_14);
+return _15;
+};
+var _17=function(ltr){
+return ltr.charCodeAt(0)<91;
+};
+dojo.declare("dojox.form.FileUploader",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<div><div dojoAttachPoint=\"progNode\"><div dojoAttachPoint=\"progTextNode\"></div></div><div dojoAttachPoint=\"insideNode\" class=\"uploaderInsideNode\"></div></div>",uploadUrl:"",isDebug:false,devMode:false,baseClass:"dojoxUploaderNorm",hoverClass:"dojoxUploaderHover",activeClass:"dojoxUploaderActive",disabledClass:"dojoxUploaderDisabled",force:"",uploaderType:"",flashObject:null,flashMovie:null,flashDiv:null,insideNode:null,deferredUploading:1,fileListId:"",uploadOnChange:false,selectMultipleFiles:true,htmlFieldName:"uploadedfile",flashFieldName:"flashUploadFiles",fileMask:null,minFlashVersion:9,tabIndex:-1,showProgress:false,progressMessage:"Loading",progressBackgroundUrl:dojo.moduleUrl("dijit","themes/tundra/images/buttonActive.png"),progressBackgroundColor:"#ededed",progressWidgetId:"",skipServerCheck:false,serverTimeout:5000,log:function(){
+if(this.isDebug){
+console.log.apply(console,arguments);
+}
+},constructor:function(){
+this._subs=[];
+},postMixInProperties:function(){
+this.fileList=[];
+this._cons=[];
+this.fileMask=[];
+this.fileInputs=[];
+this.fileCount=0;
+this.flashReady=false;
+this._disabled=false;
+this.force=this.force.toLowerCase();
+this.uploaderType=((dojox.embed.Flash.available>=this.minFlashVersion||this.force=="flash")&&this.force!="html")?"flash":"html";
+this.deferredUploading=this.deferredUploading===true?1:this.deferredUploading;
+if(!this.swfPath){
+this.swfPath=_1;
+}
+this._refNode=this.srcNodeRef;
+this.getButtonStyle();
+},startup:function(){
+},postCreate:function(){
+this.inherited(arguments);
+this.setButtonStyle();
+var _18;
+if(this.uploaderType=="flash"){
+_18="createFlashUploader";
+}else{
+this.uploaderType="html";
+_18="createHtmlUploader";
+}
+if(this._hiddenNode){
+var w=dijit.byNode(this._hiddenNode);
+this.connect(w,"onShow",_18);
+}else{
+this[_18]();
+}
+if(this.fileListId){
+this.connect(dojo.byId(this.fileListId),"click",function(evt){
+var p=evt.target.parentNode.parentNode.parentNode;
+if(p.id&&p.id.indexOf("file_")>-1){
+this.removeFile(p.id.split("file_")[1]);
+}
+});
+}
+dojo.addOnUnload(this,this.destroy);
+},getButtonStyle:function(){
+var _19=this.srcNodeRef;
+var p=_19.parentNode;
+while(p.tagName.toLowerCase()!="body"){
+var d=dojo.style(p,"display");
+if(d=="none"){
+this._hiddenNode=p;
+break;
+}
+p=p.parentNode;
+}
+if(this._hiddenNode){
+dojo.style(this._hiddenNode,"display","block");
+}
+if(this.button){
+console.warn("DEPRECATED: FileUploader.button - will be removed in 1.5. FileUploader should be created as widget.");
+}
+if(!_19&&this.button&&this.button.domNode){
+var _1a=true;
+var cls=this.button.domNode.className+" dijitButtonNode";
+var txt=_8(dojo.query(".dijitButtonText",this.button.domNode)[0]);
+var _1b="<button id=\""+this.button.id+"\" class=\""+cls+"\">"+txt+"</button>";
+_19=dojo.place(_1b,this.button.domNode,"after");
+this.srcNodeRef=_19;
+this.button.destroy();
+this.baseClass="dijitButton";
+this.hoverClass="dijitButtonHover";
+this.pressClass="dijitButtonActive";
+this.disabledClass="dijitButtonDisabled";
+}else{
+if(!this.srcNodeRef&&this.button){
+_19=this.button;
+}
+}
+if(dojo.attr(_19,"class")){
+this.baseClass+=" "+dojo.attr(_19,"class");
+}
+dojo.attr(_19,"class",this.baseClass);
+this.norm=_a(_19);
+this.width=this.norm.w;
+this.height=this.norm.h;
+if(this.uploaderType=="flash"){
+this.over=_10(_19,this.baseClass+" "+this.hoverClass,_1a);
+this.down=_10(_19,this.baseClass+" "+this.activeClass,_1a);
+this.dsbl=_10(_19,this.baseClass+" "+this.disabledClass,_1a);
+this.fhtml={cn:_8(_19),nr:this.norm,ov:this.over,dn:this.down,ds:this.dsbl};
+}else{
+this.fhtml={cn:_8(_19),nr:this.norm};
+if(this.norm.va=="middle"){
+this.norm.lh=this.norm.h;
+}
+}
+if(this.devMode){
+this.log("classes - base:",this.baseClass," hover:",this.hoverClass,"active:",this.activeClass);
+this.log("fhtml:",this.fhtml);
+this.log("norm:",this.norm);
+this.log("over:",this.over);
+this.log("down:",this.down);
+}
+},setButtonStyle:function(){
+dojo.style(this.domNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h)+"px",padding:"0px",lineHeight:"normal",position:"relative"});
+if(this.uploaderType=="html"&&this.norm.va=="middle"){
+dojo.style(this.domNode,"lineHeight",this.norm.lh+"px");
+}
+if(this.showProgress){
+this.progTextNode.innerHTML=this.progressMessage;
+dojo.style(this.progTextNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h+0)+"px",padding:"0px",margin:"0px",left:"0px",lineHeight:(this.fhtml.nr.h+0)+"px",position:"absolute"});
+dojo.style(this.progNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h+0)+"px",padding:"0px",margin:"0px",left:"0px",position:"absolute",display:"none",backgroundImage:"url("+this.progressBackgroundUrl+")",backgroundPosition:"bottom",backgroundRepeat:"repeat-x",backgroundColor:this.progressBackgroundColor});
+}else{
+dojo.destroy(this.progNode);
+}
+dojo.style(this.insideNode,{position:"absolute",top:"0px",left:"0px",display:""});
+dojo.addClass(this.domNode,this.srcNodeRef.className);
+if(this.fhtml.nr.d.indexOf("inline")>-1){
+dojo.addClass(this.domNode,"dijitInline");
+}
+try{
+this.insideNode.innerHTML=this.fhtml.cn;
+}
+catch(e){
+if(this.uploaderType=="flash"){
+this.insideNode=this.insideNode.parentNode.removeChild(this.insideNode);
+dojo.body().appendChild(this.insideNode);
+this.insideNode.innerHTML=this.fhtml.cn;
+var c=dojo.connect(this,"onReady",this,function(){
+dojo.disconnect(c);
+this.insideNode=this.insideNode.parentNode.removeChild(this.insideNode);
+this.domNode.appendChild(this.insideNode);
+});
+}else{
+this.insideNode.appendChild(document.createTextNode(this.fhtml.cn));
+}
+}
+this.flashDiv=this.insideNode;
+if(this._hiddenNode){
+dojo.style(this._hiddenNode,"display","none");
+}
+},onChange:function(_1c){
+},onProgress:function(_1d){
+},onComplete:function(_1e){
+},onCancel:function(){
+},onError:function(_1f){
+},onReady:function(_20){
+},onLoad:function(_21){
+},submit:function(_22){
+var _23=_22?dojo.formToObject(_22):null;
+this.upload(_23);
+return false;
+},upload:function(_24){
+if(!this.fileList.length){
+return false;
+}
+if(!this.uploadUrl){
+console.warn("uploadUrl not provided. Aborting.");
+return false;
+}
+if(!this.showProgress){
+this.attr("disabled",true);
+}
+if(this.progressWidgetId){
+var _25=dijit.byId(this.progressWidgetId).domNode;
+if(dojo.style(_25,"display")=="none"){
+this.restoreProgDisplay="none";
+dojo.style(_25,"display","block");
+}
+if(dojo.style(_25,"visibility")=="hidden"){
+this.restoreProgDisplay="hidden";
+dojo.style(_25,"visibility","visible");
+}
+}
+if(_24&&!_24.target){
+this.postData=_24;
+}
+this.log("upload type:",this.uploaderType," - postData:",this.postData);
+for(var i=0;i<this.fileList.length;i++){
+var f=this.fileList[i];
+f.bytesLoaded=0;
+f.bytesTotal=f.size||100000;
+f.percent=0;
+}
+if(this.uploaderType=="flash"){
+this.uploadFlash();
+}else{
+this.uploadHTML();
+}
+return false;
+},removeFile:function(_26,_27){
+var i;
+for(i=0;i<this.fileList.length;i++){
+if(this.fileList[i].name==_26){
+if(!_27){
+this.fileList.splice(i,1);
+}
+break;
+}
+}
+if(this.uploaderType=="flash"){
+this.flashMovie.removeFile(_26);
+}else{
+if(!_27){
+dojo.destroy(this.fileInputs[i]);
+this.fileInputs.splice(i,1);
+this._renumberInputs();
+}
+}
+if(this.fileListId){
+dojo.destroy("file_"+_26);
+}
+},destroyAll:function(){
+console.warn("DEPRECATED for 1.5 - use destroy() instead");
+this.destroy();
+},destroy:function(){
+if(this.uploaderType=="flash"&&!this.flashMovie){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,dojo.unsubscribe,dojo);
+dojo.forEach(this._cons,dojo.disconnect,dojo);
+if(this.scrollConnect){
+dojo.disconnect(this.scrollConnect);
+}
+if(this.uploaderType=="flash"){
+this.flashObject.destroy();
+dojo.destroy(this.flashDiv);
+}else{
+dojo.destroy("dojoIoIframe");
+dojo.destroy(this._fileInput);
+dojo.destroy(this._formNode);
+}
+this.inherited(arguments);
+},hide:function(){
+console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', 'none' instead");
+dojo.style(this.domNode,"display","none");
+},show:function(){
+console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', '') instead");
+dojo.style(this.domNode,"display","");
+},disable:function(_28){
+console.warn("DEPRECATED: FileUploader.disable() - will be removed in 1.5. Use attr('disable', true) instead.");
+this.attr("disable",_28);
+},_displayProgress:function(_29){
+if(_29===true){
+if(this.uploaderType=="flash"){
+dojo.style(this.insideNode,"left","-2500px");
+}else{
+dojo.style(this.insideNode,"display","none");
+}
+dojo.style(this.progNode,"display","");
+}else{
+if(_29===false){
+dojo.style(this.insideNode,{display:"",left:"0px"});
+dojo.style(this.progNode,"display","none");
+}else{
+var w=_29*this.fhtml.nr.w;
+dojo.style(this.progNode,"width",w+"px");
+}
+}
+},_animateProgress:function(){
+this._displayProgress(true);
+var _2a=false;
+var c=dojo.connect(this,"_complete",function(){
+dojo.disconnect(c);
+_2a=true;
+});
+var w=0;
+var _2b=setInterval(dojo.hitch(this,function(){
+w+=5;
+if(w>this.fhtml.nr.w){
+w=0;
+_2a=true;
+}
+this._displayProgress(w/this.fhtml.nr.w);
+if(_2a){
+clearInterval(_2b);
+setTimeout(dojo.hitch(this,function(){
+this._displayProgress(false);
+}),500);
+}
+}),50);
+},_error:function(evt){
+if(typeof (evt)=="string"){
+evt=new Error(evt);
+}
+this.onError(evt);
+},_addToFileList:function(){
+if(this.fileListId){
+var str="";
+dojo.forEach(this.fileList,function(d){
+str+="<table id=\"file_"+d.name+"\" class=\"fileToUpload\"><tr><td class=\"fileToUploadClose\"></td><td class=\"fileToUploadName\">"+d.name+"</td><td class=\"fileToUploadSize\">"+Math.ceil(d.size*0.001)+"kb</td></tr></table>";
+},this);
+dojo.byId(this.fileListId).innerHTML=str;
+}
+},_change:function(_2c){
+if(dojo.isIE){
+dojo.forEach(_2c,function(f){
+f.name=f.name.split("\\")[f.name.split("\\").length-1];
+});
+}
+if(this.selectMultipleFiles){
+this.fileList=this.fileList.concat(_2c);
+}else{
+if(this.fileList[0]){
+this.removeFile(this.fileList[0].name,true);
+}
+this.fileList=_2c;
+}
+this._addToFileList();
+this.onChange(_2c);
+if(this.uploadOnChange){
+this._buildFileInput();
+this.upload();
+}else{
+if(this.uploaderType=="html"&&this.selectMultipleFiles){
+this._buildFileInput();
+this._connectInput();
+}
+}
+},_complete:function(_2d){
+_2d=dojo.isArray(_2d)?_2d:[_2d];
+dojo.forEach(_2d,function(f){
+if(f.ERROR){
+this._error(f.ERROR);
+}
+},this);
+dojo.forEach(this.fileList,function(f){
+f.bytesLoaded=1;
+f.bytesTotal=1;
+f.percent=100;
+this._progress(f);
+},this);
+dojo.forEach(this.fileList,function(f){
+this.removeFile(f.name,true);
+},this);
+this.onComplete(_2d);
+this.fileList=[];
+this._resetHTML();
+this.attr("disabled",false);
+if(this.restoreProgDisplay){
+setTimeout(dojo.hitch(this,function(){
+dojo.style(dijit.byId(this.progressWidgetId).domNode,this.restoreProgDisplay=="none"?"display":"visibility",this.restoreProgDisplay);
+}),500);
+}
+},_progress:function(_2e){
+var _2f=0;
+var _30=0;
+for(var i=0;i<this.fileList.length;i++){
+var f=this.fileList[i];
+if(f.name==_2e.name){
+f.bytesLoaded=_2e.bytesLoaded;
+f.bytesTotal=_2e.bytesTotal;
+f.percent=Math.ceil(f.bytesLoaded/f.bytesTotal*100);
+this.log(f.name,"percent:",f.percent);
+}
+_30+=Math.ceil(0.001*f.bytesLoaded);
+_2f+=Math.ceil(0.001*f.bytesTotal);
+}
+var _31=Math.ceil(_30/_2f*100);
+if(this.progressWidgetId){
+dijit.byId(this.progressWidgetId).update({progress:_31+"%"});
+}
+if(this.showProgress){
+this._displayProgress(_31*0.01);
+}
+this.onProgress(this.fileList);
+},_getDisabledAttr:function(){
+return this._disabled;
+},_setDisabledAttr:function(_32){
+if(this._disabled==_32){
+return;
+}
+if(this.uploaderType=="flash"){
+if(!this.flashReady){
+var _33=dojo.connect(this,"onLoad",this,function(){
+dojo.disconnect(_33);
+this._setDisabledAttr(_32);
+});
+return;
+}
+this._disabled=_32;
+this.flashMovie.doDisable(_32);
+}else{
+this._disabled=_32;
+dojo.style(this._fileInput,"display",this._disabled?"none":"");
+}
+dojo.toggleClass(this.domNode,this.disabledClass,_32);
+},_onFlashBlur:function(){
+this.flashMovie.blur();
+if(!this.nextFocusObject&&this.tabIndex){
+var _34=dojo.query("[tabIndex]");
+for(var i=0;i<_34.length;i++){
+if(_34[i].tabIndex>=Number(this.tabIndex)+1){
+this.nextFocusObject=_34[i];
+break;
+}
+}
+}
+this.nextFocusObject.focus();
+},_disconnect:function(){
+dojo.forEach(this._cons,dojo.disconnect,dojo);
+},uploadHTML:function(){
+if(this.selectMultipleFiles){
+dojo.destroy(this._fileInput);
+}
+this._setHtmlPostData();
+if(this.showProgress){
+this._animateProgress();
+}
+var dfd=dojo.io.iframe.send({url:this.uploadUrl,form:this._formNode,handleAs:"json",error:dojo.hitch(this,function(err){
+this._error("HTML Upload Error:"+err.message);
+}),load:dojo.hitch(this,function(_35,_36,_37){
+this._complete(_35);
+})});
+},createHtmlUploader:function(){
+this._buildForm();
+this._setFormStyle();
+this._buildFileInput();
+this._connectInput();
+this._styleContent();
+dojo.style(this.insideNode,"visibility","visible");
+this.onReady();
+},_connectInput:function(){
+this._disconnect();
+this._cons.push(dojo.connect(this._fileInput,"mouseover",this,function(evt){
+dojo.addClass(this.domNode,this.hoverClass);
+this.onMouseOver(evt);
+}));
+this._cons.push(dojo.connect(this._fileInput,"mouseout",this,function(evt){
+dojo.removeClass(this.domNode,this.activeClass);
+dojo.removeClass(this.domNode,this.hoverClass);
+this.onMouseOut(evt);
+this._checkHtmlCancel("off");
+}));
+this._cons.push(dojo.connect(this._fileInput,"mousedown",this,function(evt){
+dojo.addClass(this.domNode,this.activeClass);
+dojo.removeClass(this.domNode,this.hoverClass);
+this.onMouseDown(evt);
+}));
+this._cons.push(dojo.connect(this._fileInput,"mouseup",this,function(evt){
+dojo.removeClass(this.domNode,this.activeClass);
+this.onMouseUp(evt);
+this.onClick(evt);
+this._checkHtmlCancel("up");
+}));
+this._cons.push(dojo.connect(this._fileInput,"change",this,function(){
+this._checkHtmlCancel("change");
+this._change([{name:this._fileInput.value,type:"",size:0}]);
+}));
+if(this.tabIndex>=0){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+},_checkHtmlCancel:function(_38){
+if(_38=="change"){
+this.dialogIsOpen=false;
+}
+if(_38=="up"){
+this.dialogIsOpen=true;
+}
+if(_38=="off"){
+if(this.dialogIsOpen){
+this.onCancel();
+}
+this.dialogIsOpen=false;
+}
+},_styleContent:function(){
+var o=this.fhtml.nr;
+dojo.style(this.insideNode,{width:o.w+"px",height:o.va=="middle"?o.h+"px":"auto",textAlign:o.ta,paddingTop:o.p[0]+"px",paddingRight:o.p[1]+"px",paddingBottom:o.p[2]+"px",paddingLeft:o.p[3]+"px"});
+try{
+dojo.style(this.insideNode,"lineHeight","inherit");
+}
+catch(e){
+}
+},_resetHTML:function(){
+if(this.uploaderType=="html"&&this._formNode){
+this.fileInputs=[];
+dojo.query("*",this._formNode).forEach(function(n){
+dojo.destroy(n);
+});
+this.fileCount=0;
+this._buildFileInput();
+this._connectInput();
+}
+},_buildForm:function(){
+if(this._formNode){
+return;
+}
+if(dojo.isIE){
+this._formNode=document.createElement("<form enctype=\"multipart/form-data\" method=\"post\">");
+this._formNode.encoding="multipart/form-data";
+}else{
+this._formNode=document.createElement("form");
+this._formNode.setAttribute("enctype","multipart/form-data");
+}
+this._formNode.id=dijit.getUniqueId("FileUploaderForm");
+this.domNode.appendChild(this._formNode);
+},_buildFileInput:function(){
+if(this._fileInput){
+this._disconnect();
+this._fileInput.id=this._fileInput.id+this.fileCount;
+dojo.style(this._fileInput,"display","none");
+}
+this._fileInput=document.createElement("input");
+this.fileInputs.push(this._fileInput);
+var nm=this.htmlFieldName;
+var _39=this.id;
+if(this.selectMultipleFiles){
+nm+=this.fileCount;
+_39+=this.fileCount;
+this.fileCount++;
+}
+dojo.attr(this._fileInput,{id:this.id,name:nm,type:"file"});
+dojo.addClass(this._fileInput,"dijitFileInputReal");
+this._formNode.appendChild(this._fileInput);
+var _3a=dojo.marginBox(this._fileInput);
+dojo.style(this._fileInput,{position:"relative",left:(this.fhtml.nr.w-_3a.w)+"px",opacity:0});
+},_renumberInputs:function(){
+if(!this.selectMultipleFiles){
+return;
+}
+var nm;
+this.fileCount=0;
+dojo.forEach(this.fileInputs,function(inp){
+nm=this.htmlFieldName+this.fileCount;
+this.fileCount++;
+dojo.attr(inp,"name",nm);
+},this);
+},_setFormStyle:function(){
+var _3b=Math.max(2,Math.max(Math.ceil(this.fhtml.nr.w/60),Math.ceil(this.fhtml.nr.h/15)));
+dojox.html.insertCssRule("#"+this._formNode.id+" input","font-size:"+_3b+"em");
+dojo.style(this.domNode,{overflow:"hidden",position:"relative"});
+dojo.style(this.insideNode,"position","absolute");
+},_setHtmlPostData:function(){
+if(this.postData){
+for(var nm in this.postData){
+dojo.create("input",{type:"hidden",name:nm,value:this.postData[nm]},this._formNode);
+}
+}
+},uploadFlash:function(){
+try{
+if(this.showProgress){
+this._displayProgress(true);
+var c=dojo.connect(this,"_complete",this,function(){
+dojo.disconnect(c);
+this._displayProgress(false);
+});
+}
+this.flashMovie.doUpload(this.postData);
+}
+catch(err){
+this._error("FileUploader - Sorry, the SWF failed to initialize."+err);
+}
+},createFlashUploader:function(){
+this.uploadUrl=this.uploadUrl.toString();
+if(this.uploadUrl){
+if(this.uploadUrl.toLowerCase().indexOf("http")<0&&this.uploadUrl.indexOf("/")!=0){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+this.uploadUrl=loc+this.uploadUrl;
+this.log("SWF Fixed - Relative loc:",loc," abs loc:",this.uploadUrl);
+}else{
+this.log("SWF URL unmodified:",this.uploadUrl);
+}
+}else{
+console.warn("Warning: no uploadUrl provided.");
+}
+var w=this.fhtml.nr.w;
+var h=this.fhtml.nr.h;
+var _3c={expressInstall:true,path:this.swfPath.uri||this.swfPath,width:w,height:h,allowScriptAccess:"always",allowNetworking:"all",vars:{uploadDataFieldName:this.flashFieldName,uploadUrl:this.uploadUrl,uploadOnSelect:this.uploadOnChange,deferredUploading:this.deferredUploading||0,selectMultipleFiles:this.selectMultipleFiles,id:this.id,isDebug:this.isDebug,devMode:this.devMode,flashButton:dojox.embed.flashVars.serialize("fh",this.fhtml),fileMask:dojox.embed.flashVars.serialize("fm",this.fileMask),noReturnCheck:this.skipServerCheck,serverTimeout:this.serverTimeout},params:{scale:"noscale",wmode:"opaque"}};
+this.flashObject=new dojox.embed.Flash(_3c,this.insideNode);
+this.flashObject.onError=dojo.hitch(function(msg){
+this._error("Flash Error: "+msg);
+});
+this.flashObject.onReady=dojo.hitch(this,function(){
+dojo.style(this.insideNode,"visibility","visible");
+this.log("FileUploader flash object ready");
+this.onReady(this);
+});
+this.flashObject.onLoad=dojo.hitch(this,function(mov){
+this.flashMovie=mov;
+this.flashReady=true;
+this.onLoad(this);
+});
+this._connectFlash();
+},_connectFlash:function(){
+this._doSub("/filesSelected","_change");
+this._doSub("/filesUploaded","_complete");
+this._doSub("/filesProgress","_progress");
+this._doSub("/filesError","_error");
+this._doSub("/filesCanceled","onCancel");
+this._doSub("/stageBlur","_onFlashBlur");
+this._doSub("/up","onMouseUp");
+this._doSub("/down","onMouseDown");
+this._doSub("/over","onMouseOver");
+this._doSub("/out","onMouseOut");
+this.connect(this.domNode,"focus",function(){
+this.flashMovie.focus();
+this.flashMovie.doFocus();
+});
+if(this.tabIndex>=0){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+},_doSub:function(_3d,_3e){
+this._subs.push(dojo.subscribe(this.id+_3d,this,_3e));
+}});
+})();
+}
diff --git a/js/dojo/dojox/form/ListInput.js b/js/dojo/dojox/form/ListInput.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/ListInput.js
@@ -0,0 +1,440 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.ListInput"]){
+dojo._hasResource["dojox.form.ListInput"]=true;
+dojo.experimental("dojox.form.ListInput");
+dojo.provide("dojox.form.ListInput");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.InlineEditBox");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form.ListInput",[dijit.form._FormValueWidget],{constructor:function(){
+this._items=[];
+if(!dojo.isArray(this.delimiter)){
+this.delimiter=[this.delimiter];
+}
+var r="("+this.delimiter.join("|")+")?";
+this.regExp="^"+this.regExp+r+"$";
+},inputClass:"dojox.form._ListInputInputBox",inputHandler:"onChange",inputProperties:{minWidth:50},submitOnlyValidValue:true,useOnBlur:true,readOnlyInput:false,maxItems:null,showCloseButtonWhenValid:true,showCloseButtonWhenInvalid:true,regExp:".*",delimiter:",",constraints:{},baseClass:"dojoxListInput",type:"select",value:"",templateString:"<div dojoAttachPoint=\"focusNode\" class=\"dijit dijitReset dijitLeft dojoxListInput\"><select dojoAttachpoint=\"_selectNode\" multiple=\"multiple\" class=\"dijitHidden\" ${nameAttrSetting}></select><ul dojoAttachPoint=\"_listInput\"><li dojoAttachEvent=\"onclick: _onClick\" class=\"dijitInputField dojoxListInputNode dijitHidden\" dojoAttachPoint=\"_inputNode\"></li></ul></div>",useAnim:true,duration:500,easingIn:null,easingOut:null,readOnlyItem:false,useArrowForEdit:true,_items:null,_lastAddedItem:null,_currentItem:null,_input:null,_count:0,postCreate:function(){
+this.inherited(arguments);
+this._createInputBox();
+},_setReadOnlyInputAttr:function(_1){
+console.warn("_setReadOnlyInputAttr",this.id,_1);
+if(!this._started){
+return this._createInputBox();
+}
+this.readOnlyInput=_1;
+this._createInputBox();
+},_setReadOnlyItemAttr:function(_2){
+if(!this._started){
+return;
+}
+for(var i in this._items){
+this._items[i].attr("readOnlyItem",_2);
+}
+},_createInputBox:function(){
+console.warn("_createInputBox",this.id,this.readOnlyInput);
+dojo[(this.readOnlyInput?"add":"remove")+"Class"](this._inputNode,"dijitHidden");
+if(this.readOnlyInput){
+return;
+}
+if(this._input){
+return;
+}
+if(this.inputHandler===null){
+return !console.warn("you must add some handler to connect to input field");
+}
+if(dojo.isString(this.inputHandler)){
+this.inputHandler=this.inputHandler.split(",");
+}
+if(dojo.isString(this.inputProperties)){
+this.inputProperties=dojo.fromJson(this.inputProperties);
+}
+var _3=dojo.getObject(this.inputClass,false);
+this.inputProperties.regExp=this.regExpGen(this.constraints);
+this._input=new _3(this.inputProperties);
+this._input.startup();
+this._inputNode.appendChild(this._input.domNode);
+dojo.forEach(this.inputHandler,function(_4){
+this.connect(this._input,dojo.string.trim(_4),"_onHandler");
+},this);
+this.connect(this._input,"onKeyDown","_inputOnKeyDown");
+this.connect(this._input,"onBlur","_inputOnBlur");
+},compare:function(_5,_6){
+_5=_5.join(",");
+_6=_6.join(",");
+if(_5>_6){
+return 1;
+}else{
+if(_5<_6){
+return -1;
+}else{
+return 0;
+}
+}
+},add:function(_7){
+if(this._count>=this.maxItems&&this.maxItems!==null){
+return;
+}
+this._lastValueReported=this._getValues();
+if(!dojo.isArray(_7)){
+_7=[_7];
+}
+for(var i in _7){
+var _8=_7[i];
+if(_8===""||typeof _8!="string"){
+continue;
+}
+this._count++;
+var re=new RegExp(this.regExpGen(this.constraints));
+this._lastAddedItem=new dojox.form._ListInputInputItem({"index":this._items.length,readOnlyItem:this.readOnlyItem,value:_8,regExp:this.regExpGen(this.constraints)});
+this._lastAddedItem.startup();
+this._testItem(this._lastAddedItem,_8);
+this._lastAddedItem.onClose=dojo.hitch(this,"_onItemClose",this._lastAddedItem);
+this._lastAddedItem.onChange=dojo.hitch(this,"_onItemChange",this._lastAddedItem);
+this._lastAddedItem.onEdit=dojo.hitch(this,"_onItemEdit",this._lastAddedItem);
+this._lastAddedItem.onKeyDown=dojo.hitch(this,"_onItemKeyDown",this._lastAddedItem);
+if(this.useAnim){
+dojo.style(this._lastAddedItem.domNode,{opacity:0,display:""});
+}
+this._placeItem(this._lastAddedItem.domNode);
+if(this.useAnim){
+var _9=dojo.fadeIn({node:this._lastAddedItem.domNode,duration:this.duration,easing:this.easingIn}).play();
+}
+this._items[this._lastAddedItem.index]=this._lastAddedItem;
+if(this._onChangeActive&&this.intermediateChanges){
+this.onChange(_8);
+}
+if(this._count>=this.maxItems&&this.maxItems!==null){
+break;
+}
+}
+this._updateValues();
+if(this._lastValueReported.length==0){
+this._lastValueReported=this.value;
+}
+if(!this.readOnlyInput){
+this._input.attr("value","");
+}
+if(this._onChangeActive){
+this.onChange(this.value);
+}
+this._setReadOnlyWhenMaxItemsReached();
+},_setReadOnlyWhenMaxItemsReached:function(){
+this.attr("readOnlyInput",(this._count>=this.maxItems&&this.maxItems!==null));
+},_setSelectNode:function(){
+this._selectNode.options.length=0;
+var _a=this.submitOnlyValidValue?this.attr("MatchedValue"):this.value;
+if(!dojo.isArray(_a)){
+return;
+}
+dojo.forEach(_a,function(_b){
+this._selectNode.options[this._selectNode.options.length]=new Option(_b,_b,true,true);
+},this);
+},_placeItem:function(_c){
+dojo.place(_c,this._inputNode,"before");
+},_getCursorPos:function(_d){
+if(typeof _d.selectionStart!="undefined"){
+return _d.selectionStart;
+}
+try{
+_d.focus();
+}
+catch(e){
+}
+var _e=_d.createTextRange();
+_e.moveToBookmark(dojo.doc.selection.createRange().getBookmark());
+_e.moveEnd("character",_d.value.length);
+try{
+return _d.value.length-_e.text.length;
+}
+finally{
+_e=null;
+}
+},_onItemClose:function(_f){
+if(this.disabled){
+return;
+}
+if(this.useAnim){
+var _10=dojo.fadeOut({node:_f.domNode,duration:this.duration,easing:this.easingOut,onEnd:dojo.hitch(this,"_destroyItem",_f)}).play();
+}else{
+this._destroyItem(_f);
+}
+},_onItemKeyDown:function(_11,e){
+if(this.readOnlyItem||!this.useArrowForEdit){
+return;
+}
+if(e.keyCode==dojo.keys.LEFT_ARROW&&this._getCursorPos(e.target)==0){
+this._editBefore(_11);
+}else{
+if(e.keyCode==dojo.keys.RIGHT_ARROW&&this._getCursorPos(e.target)==e.target.value.length){
+this._editAfter(_11);
+}
+}
+},_editBefore:function(_12){
+this._currentItem=this._getPreviousItem(_12);
+if(this._currentItem!==null){
+this._currentItem.edit();
+}
+},_editAfter:function(_13){
+this._currentItem=this._getNextItem(_13);
+if(this._currentItem!==null){
+this._currentItem.edit();
+}
+if(!this.readOnlyInput){
+if(this._currentItem===null){
+this._focusInput();
+}
+}
+},_onItemChange:function(_14,_15){
+if(!_15){
+_15=_14.attr("value");
+}
+this._testItem(_14,_15);
+this._updateValues();
+},_onItemEdit:function(_16){
+dojo.removeClass(_16.domNode,"dijitError");
+dojo.removeClass(_16.domNode,this.baseClass+"Match");
+dojo.removeClass(_16.domNode,this.baseClass+"Mismatch");
+},_testItem:function(_17,_18){
+var re=new RegExp(this.regExpGen(this.constraints));
+var _19=_18.match(re);
+dojo.removeClass(_17.domNode,this.baseClass+(!_19?"Match":"Mismatch"));
+dojo.addClass(_17.domNode,this.baseClass+(_19?"Match":"Mismatch"));
+dojo[(!_19?"add":"remove")+"Class"](_17.domNode,"dijitError");
+if((this.showCloseButtonWhenValid&&_19)||(this.showCloseButtonWhenInvalid&&!_19)){
+dojo.addClass(_17.domNode,this.baseClass+"Closable");
+}else{
+dojo.removeClass(_17.domNode,this.baseClass+"Closable");
+}
+},_getValueAttr:function(){
+return this.value;
+},_setValueAttr:function(_1a){
+this._destroyAllItems();
+this.add(this._parseValue(_1a));
+},_parseValue:function(_1b){
+if(typeof _1b=="string"){
+if(dojo.isString(this.delimiter)){
+this.delimiter=[this.delimiter];
+}
+var re=new RegExp("^.*("+this.delimiter.join("|")+").*");
+if(_1b.match(re)){
+re=new RegExp(this.delimiter.join("|"));
+return _1b.split(re);
+}
+}
+return _1b;
+},regExpGen:function(_1c){
+return this.regExp;
+},_setDisabledAttr:function(_1d){
+if(!this.readOnlyItem){
+for(var i in this._items){
+this._items[i].attr("disabled",_1d);
+}
+}
+if(!this.readOnlyInput){
+this._input.attr("disabled",_1d);
+}
+this.inherited(arguments);
+},_onHandler:function(_1e){
+var _1f=this._parseValue(_1e);
+if(dojo.isArray(_1f)){
+this.add(_1f);
+}
+},_onClick:function(e){
+this._focusInput();
+},_focusInput:function(){
+if(!this.readOnlyInput&&this._input.focus){
+this._input.focus();
+}
+},_inputOnKeyDown:function(e){
+this._currentItem=null;
+if(e.keyCode==dojo.keys.BACKSPACE&&this._input.attr("value")==""&&this.attr("lastItem")){
+this._destroyItem(this.attr("lastItem"));
+}else{
+if(e.keyCode==dojo.keys.ENTER&&this._input.attr("value")!=""){
+this.add(this._input.attr("value"));
+}else{
+if(e.keyCode==dojo.keys.LEFT_ARROW&&this._getCursorPos(this._input.focusNode)==0&&!this.readOnlyItem&&this.useArrowForEdit){
+this._editBefore();
+}
+}
+}
+},_inputOnBlur:function(){
+if(this.useOnBlur&&this._input.attr("value")!=""){
+this.add(this._input.attr("value"));
+}
+},_getMatchedValueAttr:function(){
+return this._getValues(dojo.hitch(this,this._matchValidator));
+},_getMismatchedValueAttr:function(){
+return this._getValues(dojo.hitch(this,this._mismatchValidator));
+},_getValues:function(_20){
+var _21=[];
+_20=_20||this._nullValidator;
+for(var i in this._items){
+var _22=this._items[i];
+if(_22===null){
+continue;
+}
+var _23=_22.attr("value");
+if(_20(_23)){
+_21.push(_23);
+}
+}
+return _21;
+},_nullValidator:function(_24){
+return true;
+},_matchValidator:function(_25){
+var re=new RegExp(this.regExpGen(this.constraints));
+return _25.match(re);
+},_mismatchValidator:function(_26){
+var re=new RegExp(this.regExpGen(this.constraints));
+return !(_26.match(re));
+},_getLastItemAttr:function(){
+return this._getSomeItem();
+},_getSomeItem:function(_27,_28){
+_27=_27||false;
+_28=_28||"last";
+var _29=null;
+var _2a=-1;
+for(var i in this._items){
+if(this._items[i]===null){
+continue;
+}
+if(_28=="before"&&this._items[i]===_27){
+break;
+}
+_29=this._items[i];
+if(_28=="first"||_2a==0){
+_2a=1;
+break;
+}
+if(_28=="after"&&this._items[i]===_27){
+_2a=0;
+}
+}
+if(_28=="after"&&_2a==0){
+_29=null;
+}
+return _29;
+},_getPreviousItem:function(_2b){
+return this._getSomeItem(_2b,"before");
+},_getNextItem:function(_2c){
+return this._getSomeItem(_2c,"after");
+},_destroyItem:function(_2d,_2e){
+this._items[_2d.index]=null;
+_2d.destroy();
+this._count--;
+if(_2e!==false){
+this._updateValues();
+this._setReadOnlyWhenMaxItemsReached();
+}
+},_updateValues:function(){
+this.value=this._getValues();
+this._setSelectNode();
+},_destroyAllItems:function(){
+for(var i in this._items){
+if(this._items[i]==null){
+continue;
+}
+this._destroyItem(this._items[i],false);
+}
+this._items=[];
+this._count=0;
+this.value=null;
+this._setSelectNode();
+this._setReadOnlyWhenMaxItemsReached();
+},destroy:function(){
+this._destroyAllItems();
+this._lastAddedItem=null;
+if(!this._input){
+this._input.destroy();
+}
+this.inherited(arguments);
+}});
+dojo.declare("dojox.form._ListInputInputItem",[dijit._Widget,dijit._Templated],{templateString:"<li class=\"dijit dijitReset dijitLeft dojoxListInputItem\" dojoAttachEvent=\"onclick: onClick\" ><span dojoAttachPoint=\"labelNode\"></span></li>",closeButtonNode:null,readOnlyItem:true,baseClass:"dojoxListInputItem",value:"",regExp:".*",_editBox:null,_handleKeyDown:null,attributeMap:{value:{node:"labelNode",type:"innerHTML"}},postMixInProperties:function(){
+var _2f=dojo.i18n.getLocalization("dijit","common");
+dojo.mixin(this,_2f);
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.closeButtonNode=dojo.create("span",{"class":"dijitButtonNode dijitDialogCloseIcon",title:this.itemClose,onclick:dojo.hitch(this,"onClose"),onmouseenter:dojo.hitch(this,"_onCloseEnter"),onmouseleave:dojo.hitch(this,"_onCloseLeave")},this.domNode);
+dojo.create("span",{"class":"closeText",title:this.itemClose,innerHTML:"x"},this.closeButtonNode);
+},startup:function(){
+this.inherited(arguments);
+this._createInlineEditBox();
+},_setReadOnlyItemAttr:function(_30){
+this.readOnlyItem=_30;
+if(!_30){
+this._createInlineEditBox();
+}else{
+if(this._editBox){
+this._editBox.attr("disabled",true);
+}
+}
+},_createInlineEditBox:function(){
+if(this.readOnlyItem){
+return;
+}
+if(!this._started){
+return;
+}
+if(this._editBox){
+this._editBox.attr("disabled",false);
+return;
+}
+this._editBox=new dijit.InlineEditBox({value:this.value,editor:"dijit.form.ValidationTextBox",editorParams:{regExp:this.regExp}},this.labelNode);
+this.connect(this._editBox,"edit","_onEdit");
+this.connect(this._editBox,"onChange","_onCloseEdit");
+this.connect(this._editBox,"onCancel","_onCloseEdit");
+},edit:function(){
+if(!this.readOnlyItem){
+this._editBox.edit();
+}
+},_onCloseEdit:function(_31){
+dojo.removeClass(this.closeButtonNode,this.baseClass+"Edited");
+dojo.disconnect(this._handleKeyDown);
+this.onChange(_31);
+},_onEdit:function(){
+dojo.addClass(this.closeButtonNode,this.baseClass+"Edited");
+this._handleKeyDown=dojo.connect(this._editBox.editWidget,"_onKeyPress",this,"onKeyDown");
+this.onEdit();
+},_setDisabledAttr:function(_32){
+if(!this.readOnlyItem){
+this._editBox.attr("disabled",_32);
+}
+},_getValueAttr:function(){
+return (!this.readOnlyItem&&this._started?this._editBox.attr("value"):this.value);
+},destroy:function(){
+if(this._editBox){
+this._editBox.destroy();
+}
+this.inherited(arguments);
+},_onCloseEnter:function(){
+dojo.addClass(this.closeButtonNode,"dijitDialogCloseIcon-hover");
+},_onCloseLeave:function(){
+dojo.removeClass(this.closeButtonNode,"dijitDialogCloseIcon-hover");
+},onClose:function(){
+},onEdit:function(){
+},onClick:function(){
+},onChange:function(_33){
+},onKeyDown:function(_34){
+}});
+dojo.declare("dojox.form._ListInputInputBox",[dijit.form.ValidationTextBox],{minWidth:50,intermediateChanges:true,regExp:".*",_sizer:null,onChange:function(_35){
+this.inherited(arguments);
+if(this._sizer===null){
+this._sizer=dojo.create("div",{style:{position:"absolute",left:"-10000px",top:"-10000px"}},dojo.body());
+}
+this._sizer.innerHTML=_35;
+var w=dojo.contentBox(this._sizer).w+this.minWidth;
+dojo.contentBox(this.domNode,{w:w});
+},destroy:function(){
+dojo.destroy(this._sizer);
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/form/Manager.js b/js/dojo/dojox/form/Manager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/Manager.js
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.Manager"]){
+dojo._hasResource["dojox.form.Manager"]=true;
+dojo.provide("dojox.form.Manager");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.form.manager._Mixin");
+dojo.require("dojox.form.manager._NodeMixin");
+dojo.require("dojox.form.manager._FormMixin");
+dojo.require("dojox.form.manager._ValueMixin");
+dojo.require("dojox.form.manager._EnableMixin");
+dojo.require("dojox.form.manager._DisplayMixin");
+dojo.require("dojox.form.manager._ClassMixin");
+dojo.declare("dojox.form.Manager",[dijit._Widget,dojox.form.manager._Mixin,dojox.form.manager._NodeMixin,dojox.form.manager._FormMixin,dojox.form.manager._ValueMixin,dojox.form.manager._EnableMixin,dojox.form.manager._DisplayMixin,dojox.form.manager._ClassMixin],{buildRendering:function(){
+var _1=this.domNode=this.srcNodeRef;
+if(!this.containerNode){
+this.containerNode=_1;
+}
+this._attachPoints=[];
+dijit._Templated.prototype._attachTemplateNodes.call(this,_1);
+},destroyRendering:function(){
+dijit._Templated.prototype.destroyRendering.call(this);
+}});
+}
diff --git a/js/dojo/dojox/form/MultiComboBox.js b/js/dojo/dojox/form/MultiComboBox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/MultiComboBox.js
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.MultiComboBox"]){
+dojo._hasResource["dojox.form.MultiComboBox"]=true;
+dojo.provide("dojox.form.MultiComboBox");
+dojo.experimental("dojox.form.MultiComboBox");
+dojo.require("dijit.form.ComboBox");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.declare("dojox.form.MultiComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{delimiter:",",_previousMatches:false,_setValueAttr:function(_1){
+if(this.delimiter&&_1.length!=0){
+_1=_1+this.delimiter+" ";
+arguments[0]=this._addPreviousMatches(_1);
+}
+this.inherited(arguments);
+},_addPreviousMatches:function(_2){
+if(this._previousMatches){
+if(!_2.match(new RegExp("^"+this._previousMatches))){
+_2=this._previousMatches+_2;
+}
+_2=this._cleanupDelimiters(_2);
+}
+return _2;
+},_cleanupDelimiters:function(_3){
+if(this.delimiter){
+_3=_3.replace(new RegExp(" +")," ");
+_3=_3.replace(new RegExp("^ *"+this.delimiter+"* *"),"");
+_3=_3.replace(new RegExp(this.delimiter+" *"+this.delimiter),this.delimiter);
+}
+return _3;
+},_autoCompleteText:function(_4){
+arguments[0]=this._addPreviousMatches(_4);
+this.inherited(arguments);
+},_startSearch:function(_5){
+_5=this._cleanupDelimiters(_5);
+var re=new RegExp("^.*"+this.delimiter+" *");
+if((this._previousMatches=_5.match(re))){
+arguments[0]=_5.replace(re,"");
+}
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/form/PasswordValidator.js b/js/dojo/dojox/form/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/PasswordValidator.js
@@ -0,0 +1,159 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.PasswordValidator"]){
+dojo._hasResource["dojox.form.PasswordValidator"]=true;
+dojo.provide("dojox.form.PasswordValidator");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.requireLocalization("dojox.form","PasswordValidator",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form._ChildTextBox",dijit.form.ValidationTextBox,{containerWidget:null,type:"password",reset:function(){
+dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,"",true);
+this._hasBeenBlurred=false;
+},postCreate:function(){
+this.inherited(arguments);
+if(!this.name){
+dojo.removeAttr(this.focusNode,"name");
+}
+this.connect(this.focusNode,"onkeypress","_onChildKeyPress");
+},_onChildKeyPress:function(e){
+if(e&&e.keyCode==dojo.keys.ENTER){
+this._setBlurValue();
+}
+}});
+dojo.declare("dojox.form._OldPWBox",dojox.form._ChildTextBox,{_isPWValid:false,_setValueAttr:function(_1,_2){
+if(_1===""){
+_1=dojox.form._OldPWBox.superclass.attr.call(this,"value");
+}
+if(_2!==null){
+this._isPWValid=this.containerWidget.pwCheck(_1);
+}
+this.inherited(arguments);
+this.containerWidget._childValueAttr(this.containerWidget._inputWidgets[1].attr("value"));
+},isValid:function(_3){
+return this.inherited("isValid",arguments)&&this._isPWValid;
+},_update:function(e){
+if(this._hasBeenBlurred){
+this.validate(true);
+}
+this._onMouse(e);
+},_getValueAttr:function(){
+if(this.containerWidget._started&&this.containerWidget.isValid()){
+return this.inherited(arguments);
+}
+return "";
+},_setBlurValue:function(){
+var _4=dijit.form.ValidationTextBox.prototype._getValueAttr.call(this);
+this._setValueAttr(_4,(this.isValid?this.isValid():true));
+}});
+dojo.declare("dojox.form._NewPWBox",dojox.form._ChildTextBox,{required:true,onChange:function(){
+this.containerWidget._inputWidgets[2].validate(false);
+this.inherited(arguments);
+}});
+dojo.declare("dojox.form._VerifyPWBox",dojox.form._ChildTextBox,{isValid:function(_5){
+return this.inherited("isValid",arguments)&&(this.attr("value")==this.containerWidget._inputWidgets[1].attr("value"));
+}});
+dojo.declare("dojox.form.PasswordValidator",dijit.form._FormValueWidget,{required:true,_inputWidgets:null,oldName:"",templateString:dojo.cache("dojox.form","resources/PasswordValidator.html","<div dojoAttachPoint=\"containerNode\">\n\t<input type=\"hidden\" name=\"${name}\" value=\"\" dojoAttachPoint=\"focusNode\" />\n</div>\n"),_hasBeenBlurred:false,isValid:function(_6){
+return dojo.every(this._inputWidgets,function(i){
+if(i&&i._setStateClass){
+i._setStateClass();
+}
+return (!i||i.isValid());
+});
+},validate:function(_7){
+return dojo.every(dojo.map(this._inputWidgets,function(i){
+if(i&&i.validate){
+i._hasBeenBlurred=(i._hasBeenBlurred||this._hasBeenBlurred);
+return i.validate();
+}
+return true;
+},this),"return item;");
+},reset:function(){
+this._hasBeenBlurred=false;
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.reset){
+i.reset();
+}
+},this);
+},_createSubWidgets:function(){
+var _8=this._inputWidgets,_9=dojo.i18n.getLocalization("dojox.form","PasswordValidator",this.lang);
+dojo.forEach(_8,function(i,_a){
+if(i){
+var p={containerWidget:this},c;
+if(_a===0){
+p.name=this.oldName;
+p.invalidMessage=_9.badPasswordMessage;
+c=dojox.form._OldPWBox;
+}else{
+if(_a===1){
+p.required=this.required;
+c=dojox.form._NewPWBox;
+}else{
+if(_a===2){
+p.invalidMessage=_9.nomatchMessage;
+c=dojox.form._VerifyPWBox;
+}
+}
+}
+_8[_a]=new c(p,i);
+}
+},this);
+},pwCheck:function(_b){
+return false;
+},postCreate:function(){
+this.inherited(arguments);
+var _c=this._inputWidgets=[];
+dojo.forEach(["old","new","verify"],function(i){
+_c.push(dojo.query("input[pwType="+i+"]",this.containerNode)[0]);
+},this);
+if(!_c[1]||!_c[2]){
+throw new Error("Need at least pwType=\"new\" and pwType=\"verify\"");
+}
+if(this.oldName&&!_c[0]){
+throw new Error("Need to specify pwType=\"old\" if using oldName");
+}
+this.containerNode=this.domNode;
+this._createSubWidgets();
+this.connect(this._inputWidgets[1],"_setValueAttr","_childValueAttr");
+this.connect(this._inputWidgets[2],"_setValueAttr","_childValueAttr");
+},_childValueAttr:function(v){
+this.attr("value",this.isValid()?v:"");
+},_setDisabledAttr:function(_d){
+this.inherited(arguments);
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.attr){
+i.attr("disabled",_d);
+}
+});
+},_setRequiredAttribute:function(_e){
+this.required=_e;
+dojo.attr(this.focusNode,"required",_e);
+dijit.setWaiState(this.focusNode,"required",_e);
+this._refreshState();
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.attr){
+i.attr("required",_e);
+}
+});
+},_setValueAttr:function(v){
+this.inherited(arguments);
+dojo.attr(this.focusNode,"value",v);
+},_getValueAttr:function(){
+return this.inherited(arguments)||"";
+},focus:function(){
+var f=false;
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&!i.isValid()&&!f){
+i.focus();
+f=true;
+}
+});
+if(!f){
+this._inputWidgets[1].focus();
+}
+}});
+}
diff --git a/js/dojo/dojox/form/README b/js/dojo/dojox/form/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/README
@@ -0,0 +1,73 @@
+-------------------------------------------------------------------------------
+dojox.form Collection
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 02/26/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Nathan Toone (toonetown)
+ Peter Higgins (dante)
+ Wolfram Kriesing (http://wolfram.kriesing.de/blog/): Rating
+ Mike Wilcox
+-------------------------------------------------------------------------------
+Project description
+
+ This is a collection of additional widgets that can be used in forms.
+-------------------------------------------------------------------------------
+Dependencies:
+
+ Depends on dojo core and dijit
+
+ dojo.form.FileUploader depends on dojox.embed, and uses Flash movies created
+ in the deft project using Flex OSS 3. You do not need any of the deft code;
+ compiled movies are included with dojox.form in the resources folder.
+ If you want to modify the actual movies, you can look in the deft project
+ (under the package deft.av).
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+ Install into /dojox/form
+-------------------------------------------------------------------------------
+Additional Notes (Brief widget list):
+
+ * CheckedMultiSelect - an extension to dijit.form.MultiSelect which
+ uses check boxes instead of ctrl-click
+
+ * DropDownSelect - an extension to dijit.form.DropDownButton which is
+ meant to mirror the html <select> drop down
+
+ * DropDownStack/RadioStack - a widget that can toggle parts of a form as
+ "on" or "off" - to allow for different options based on
+ the value selected.
+
+ * FileInput - experimental dijit-like input type="file"
+
+ * FileInputAuto/Blind - extension to FileInput for
+ added flair/automation
+
+ * FilePickerTextBox - a validating text box that can browser server-side
+ files using a dojox.data.FileStore
+ * FileUploader - Allows for Multi-file uploads and file masking. Uses a SWF
+ file created with Deft. Compatible with Flash Player
+ versions 8-10. Degradeable to a multi-file HTML uploader.
+
+ * ListInput - A text-box widget that allows inputting multiple items (similar
+ to the "to" field on many email clients)
+
+ * MultiComboBox - an experimental ComboBox that allows
+ multiple entries bases on a separator character.
+
+ * PasswordValidator - a widget which simplifies the common "old/new/verify"
+ mechanism of specifying passwords
+
+ * Rating - a star-based rating widget
+
+ * TimeSpinner - a number spinner that revolves through
+ time constrainsts
+
diff --git a/js/dojo/dojox/form/RadioStack.js b/js/dojo/dojox/form/RadioStack.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/RadioStack.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.RadioStack"]){
+dojo._hasResource["dojox.form.RadioStack"]=true;
+dojo.provide("dojox.form.RadioStack");
+dojo.require("dojox.form.CheckedMultiSelect");
+dojo.require("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form.RadioStack",[dojox.form.CheckedMultiSelect,dojox.form._SelectStackMixin],{});
+}
diff --git a/js/dojo/dojox/form/RangeSlider.js b/js/dojo/dojox/form/RangeSlider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/RangeSlider.js
@@ -0,0 +1,297 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.RangeSlider"]){
+dojo._hasResource["dojox.form.RangeSlider"]=true;
+dojo.provide("dojox.form.RangeSlider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.form.VerticalSlider");
+dojo.require("dojox.fx");
+(function(){
+var _1=function(a,b){
+return b-a;
+},_2=function(a,b){
+return a-b;
+};
+dojo.declare("dojox.form._RangeSliderMixin",null,{value:[0,100],postMixInProperties:function(){
+this.value=dojo.map(this.value,function(i){
+return parseInt(i,10);
+});
+},postCreate:function(){
+this.inherited(arguments);
+this.value.sort(this._isReversed()?_1:_2);
+var _3=this;
+var _4=function(){
+dijit.form._SliderMoverMax.apply(this,arguments);
+this.widget=_3;
+};
+dojo.extend(_4,dijit.form._SliderMoverMax.prototype);
+this._movableMax=new dojo.dnd.Moveable(this.sliderHandleMax,{mover:_4});
+dijit.setWaiState(this.focusNodeMax,"valuemin",this.minimum);
+dijit.setWaiState(this.focusNodeMax,"valuemax",this.maximum);
+var _5=function(){
+dijit.form._SliderBarMover.apply(this,arguments);
+this.widget=_3;
+};
+dojo.extend(_5,dijit.form._SliderBarMover.prototype);
+this._movableBar=new dojo.dnd.Moveable(this.progressBar,{mover:_5});
+},destroy:function(){
+this.inherited(arguments);
+this._movableMax.destroy();
+this._movableBar.destroy();
+},_onKeyPress:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey){
+return;
+}
+var _6=e.currentTarget,_7=false,_8=false,k=dojo.keys;
+if(_6==this.sliderHandle){
+_7=true;
+}else{
+if(_6==this.progressBar){
+_8=_7=true;
+}else{
+if(_6==this.sliderHandleMax){
+_8=true;
+}
+}
+}
+switch(e.keyCode){
+case k.HOME:
+this._setValueAttr(this.minimum,true,_8);
+break;
+case k.END:
+this._setValueAttr(this.maximum,true,_8);
+break;
+case ((this._descending||this.isLeftToRight())?k.RIGHT_ARROW:k.LEFT_ARROW):
+case (this._descending===false?k.DOWN_ARROW:k.UP_ARROW):
+case (this._descending===false?k.PAGE_DOWN:k.PAGE_UP):
+if(_7&&_8){
+this._bumpValue([{"change":e.keyCode==k.PAGE_UP?this.pageIncrement:1,"useMaxValue":true},{"change":e.keyCode==k.PAGE_UP?this.pageIncrement:1,"useMaxValue":false}]);
+}else{
+if(_7){
+this._bumpValue(e.keyCode==k.PAGE_UP?this.pageIncrement:1,true);
+}else{
+if(_8){
+this._bumpValue(e.keyCode==k.PAGE_UP?this.pageIncrement:1);
+}
+}
+}
+break;
+case ((this._descending||this.isLeftToRight())?k.LEFT_ARROW:k.RIGHT_ARROW):
+case (this._descending===false?k.UP_ARROW:k.DOWN_ARROW):
+case (this._descending===false?k.PAGE_UP:k.PAGE_DOWN):
+if(_7&&_8){
+this._bumpValue([{change:e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,useMaxValue:false},{change:e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,useMaxValue:true}]);
+}else{
+if(_7){
+this._bumpValue(e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1);
+}else{
+if(_8){
+this._bumpValue(e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,true);
+}
+}
+}
+break;
+default:
+dijit.form._FormValueWidget.prototype._onKeyPress.apply(this,arguments);
+this.inherited(arguments);
+return;
+}
+dojo.stopEvent(e);
+},_onHandleClickMax:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.sliderHandleMax);
+}
+dojo.stopEvent(e);
+},_onClkIncBumper:function(){
+this._setValueAttr(this._descending===false?this.minimum:this.maximum,true,true);
+},_bumpValue:function(_9,_a){
+var _b=dojo.isArray(_9)?[this._getBumpValue(_9[0].change,_9[0].useMaxValue),this._getBumpValue(_9[1].change,_9[1].useMaxValue)]:this._getBumpValue(_9,_a);
+this._setValueAttr(_b,true,!dojo.isArray(_9)&&((_9>0&&!_a)||(_a&&_9<0)));
+},_getBumpValue:function(_c,_d){
+var s=dojo.getComputedStyle(this.sliderBarContainer),c=dojo._getContentBox(this.sliderBarContainer,s),_e=this.discreteValues,_f=!_d?this.value[0]:this.value[1];
+if(_e<=1||_e==Infinity){
+_e=c[this._pixelCount];
+}
+_e--;
+if((this._isReversed()&&_c<0)||(_c>0&&!this._isReversed())){
+_f=!_d?this.value[1]:this.value[0];
+}
+var _10=(_f-this.minimum)*_e/(this.maximum-this.minimum)+_c;
+if(_10<0){
+_10=0;
+}
+if(_10>_e){
+_10=_e;
+}
+return _10*(this.maximum-this.minimum)/_e+this.minimum;
+},_onBarClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.progressBar);
+}
+dojo.stopEvent(e);
+},_onRemainingBarClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.progressBar);
+}
+var _11=dojo.coords(this.sliderBarContainer,true),bar=dojo.coords(this.progressBar,true),_12=e[this._mousePixelCoord]-_11[this._startingPixelCoord],_13=bar[this._startingPixelCount],_14=_13+bar[this._pixelCount],_15=this._isReversed()?_12<=_13:_12>=_14,p=this._isReversed()?_11[this._pixelCount]-_12:_12;
+this._setPixelValue(p,_11[this._pixelCount],true,_15);
+dojo.stopEvent(e);
+},_setPixelValue:function(_16,_17,_18,_19){
+if(this.disabled||this.readOnly){
+return;
+}
+var _1a=this._getValueByPixelValue(_16,_17);
+this._setValueAttr(_1a,_18,_19);
+},_getValueByPixelValue:function(_1b,_1c){
+_1b=_1b<0?0:_1c<_1b?_1c:_1b;
+var _1d=this.discreteValues;
+if(_1d<=1||_1d==Infinity){
+_1d=_1c;
+}
+_1d--;
+var _1e=_1c/_1d;
+var _1f=Math.round(_1b/_1e);
+return (this.maximum-this.minimum)*_1f/_1d+this.minimum;
+},_setValueAttr:function(_20,_21,_22){
+var _23=this.value;
+if(!dojo.isArray(_20)){
+if(_22){
+if(this._isReversed()){
+_23[0]=_20;
+}else{
+_23[1]=_20;
+}
+}else{
+if(this._isReversed()){
+_23[1]=_20;
+}else{
+_23[0]=_20;
+}
+}
+}else{
+_23=_20;
+}
+this._lastValueReported="";
+this.valueNode.value=this.value=_20=_23;
+dijit.setWaiState(this.focusNode,"valuenow",_23[0]);
+dijit.setWaiState(this.focusNodeMax,"valuenow",_23[1]);
+this.value.sort(this._isReversed()?_1:_2);
+dijit.form._FormValueWidget.prototype._setValueAttr.apply(this,arguments);
+this._printSliderBar(_21,_22);
+},_printSliderBar:function(_24,_25){
+var _26=(this.value[0]-this.minimum)/(this.maximum-this.minimum);
+var _27=(this.value[1]-this.minimum)/(this.maximum-this.minimum);
+var _28=_26;
+if(_26>_27){
+_26=_27;
+_27=_28;
+}
+var _29=this._isReversed()?((1-_26)*100):(_26*100);
+var _2a=this._isReversed()?((1-_27)*100):(_27*100);
+var _2b=this._isReversed()?((1-_27)*100):(_26*100);
+if(_24&&this.slideDuration>0&&this.progressBar.style[this._progressPixelSize]){
+var _2c=_25?_27:_26;
+var _2d=this;
+var _2e={};
+var _2f=parseFloat(this.progressBar.style[this._handleOffsetCoord]);
+var _30=this.slideDuration/10;
+if(_30===0){
+return;
+}
+if(_30<0){
+_30=0-_30;
+}
+var _31={};
+var _32={};
+var _33={};
+_31[this._handleOffsetCoord]={start:this.sliderHandle.style[this._handleOffsetCoord],end:_29,units:"%"};
+_32[this._handleOffsetCoord]={start:this.sliderHandleMax.style[this._handleOffsetCoord],end:_2a,units:"%"};
+_33[this._handleOffsetCoord]={start:this.progressBar.style[this._handleOffsetCoord],end:_2b,units:"%"};
+_33[this._progressPixelSize]={start:this.progressBar.style[this._progressPixelSize],end:(_27-_26)*100,units:"%"};
+var _34=dojo.animateProperty({node:this.sliderHandle,duration:_30,properties:_31});
+var _35=dojo.animateProperty({node:this.sliderHandleMax,duration:_30,properties:_32});
+var _36=dojo.animateProperty({node:this.progressBar,duration:_30,properties:_33});
+var _37=dojo.fx.combine([_34,_35,_36]);
+_37.play();
+}else{
+this.sliderHandle.style[this._handleOffsetCoord]=_29+"%";
+this.sliderHandleMax.style[this._handleOffsetCoord]=_2a+"%";
+this.progressBar.style[this._handleOffsetCoord]=_2b+"%";
+this.progressBar.style[this._progressPixelSize]=((_27-_26)*100)+"%";
+}
+}});
+dojo.declare("dijit.form._SliderMoverMax",dijit.form._SliderMover,{onMouseMove:function(e){
+var _38=this.widget;
+var _39=_38._abspos;
+if(!_39){
+_39=_38._abspos=dojo.coords(_38.sliderBarContainer,true);
+_38._setPixelValue_=dojo.hitch(_38,"_setPixelValue");
+_38._isReversed_=_38._isReversed();
+}
+var _3a=e[_38._mousePixelCoord]-_39[_38._startingPixelCoord];
+_38._setPixelValue_(_38._isReversed_?(_39[_38._pixelCount]-_3a):_3a,_39[_38._pixelCount],false,true);
+},destroy:function(e){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _3b=this.widget;
+_3b._abspos=null;
+_3b._setValueAttr(_3b.value,true);
+}});
+dojo.declare("dijit.form._SliderBarMover",dojo.dnd.Mover,{onMouseMove:function(e){
+var _3c=this.widget;
+if(_3c.disabled||_3c.readOnly){
+return;
+}
+var _3d=_3c._abspos;
+var bar=_3c._bar;
+var _3e=_3c._mouseOffset;
+if(!_3d){
+_3d=_3c._abspos=dojo.coords(_3c.sliderBarContainer,true);
+_3c._setPixelValue_=dojo.hitch(_3c,"_setPixelValue");
+_3c._getValueByPixelValue_=dojo.hitch(_3c,"_getValueByPixelValue");
+_3c._isReversed_=_3c._isReversed();
+}
+if(!bar){
+bar=_3c._bar=dojo.coords(_3c.progressBar,true);
+}
+if(!_3e){
+_3e=_3c._mouseOffset=e[_3c._mousePixelCoord]-_3d[_3c._startingPixelCoord]-bar[_3c._startingPixelCount];
+}
+var _3f=e[_3c._mousePixelCoord]-_3d[_3c._startingPixelCoord]-_3e,_40=_3f+bar[_3c._pixelCount];
+pixelValues=[_3f,_40];
+pixelValues.sort(_2);
+if(pixelValues[0]<=0){
+pixelValues[0]=0;
+pixelValues[1]=bar[_3c._pixelCount];
+}
+if(pixelValues[1]>=_3d[_3c._pixelCount]){
+pixelValues[1]=_3d[_3c._pixelCount];
+pixelValues[0]=_3d[_3c._pixelCount]-bar[_3c._pixelCount];
+}
+var _41=[_3c._getValueByPixelValue(_3c._isReversed_?(_3d[_3c._pixelCount]-pixelValues[0]):pixelValues[0],_3d[_3c._pixelCount]),_3c._getValueByPixelValue(_3c._isReversed_?(_3d[_3c._pixelCount]-pixelValues[1]):pixelValues[1],_3d[_3c._pixelCount])];
+_3c._setValueAttr(_41,false,false);
+},destroy:function(){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _42=this.widget;
+_42._abspos=null;
+_42._bar=null;
+_42._mouseOffset=null;
+_42._setValueAttr(_42.value,true);
+}});
+dojo.declare("dojox.form.HorizontalRangeSlider",[dijit.form.HorizontalSlider,dojox.form._RangeSliderMixin],{templateString:dojo.cache("dojox.form","resources/HorizontalRangeSlider.html","<table class=\"dijit dijitReset dijitSlider dojoxRangeSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\" colspan=\"2\"></td\n ><td dojoAttachPoint=\"containerNode,topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n ><td class=\"dijitReset\" colspan=\"2\"></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n ><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n ></td\n ><td class=\"dijitReset\"\n ><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper dijitSliderLeftBumperH\" dojoAttachEvent=\"onclick:_onClkDecBumper\"></div\n ></td\n ><td class=\"dijitReset\"\n ><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n /><div waiRole=\"presentation\" class=\"dojoxRangeSliderBarContainer\" dojoAttachPoint=\"sliderBarContainer\"\n ><div dojoAttachPoint=\"sliderHandle\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n ><div class=\"dijitSliderImageHandle dijitSliderImageHandleH\"></div\n ></div\n ><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar,focusNode\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onBarClick\"></div\n ><div dojoAttachPoint=\"sliderHandleMax,focusNodeMax\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClickMax\" waiRole=\"sliderMax\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n ><div class=\"dijitSliderImageHandle dijitSliderImageHandleH\"></div\n ></div\n ><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onRemainingBarClick\"></div\n ></div\n ></td\n ><td class=\"dijitReset\"\n ><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper dijitSliderRightBumperH\" dojoAttachEvent=\"onclick:_onClkIncBumper\"></div\n ></td\n ><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n ><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n ></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\" colspan=\"2\"></td\n ><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n ><td class=\"dijitReset\" colspan=\"2\"></td\n ></tr\n></table>\n")});
+dojo.declare("dojox.form.VerticalRangeSlider",[dijit.form.VerticalSlider,dojox.form._RangeSliderMixin],{templateString:dojo.cache("dojox.form","resources/VerticalRangeSlider.html","<table class=\"dijitReset dijitSlider dojoxRangeSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n><tbody class=\"dijitReset\"\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\"></td\n ><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n ><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n ></td\n ><td class=\"dijitReset\"></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\"></td\n ><td class=\"dijitReset\"\n ><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper dijitSliderTopBumperV\" dojoAttachEvent=\"onclick:_onClkIncBumper\"></div></center\n ></td\n ><td class=\"dijitReset\"></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n ><td class=\"dijitReset\" style=\"height:100%;\"\n ><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n /><center waiRole=\"presentation\" style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\n ><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onRemainingBarClick\"\n ><div dojoAttachPoint=\"sliderHandle\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n ><div class=\"dijitSliderImageHandle dijitSliderImageHandleV\"></div\n ></div\n ><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar,focusNode\" tabIndex=\"${tabIndex}\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onBarClick\"\n ></div\n ><div dojoAttachPoint=\"sliderHandleMax,focusNodeMax\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClickMax\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n ><div class=\"dijitSliderImageHandle dijitSliderImageHandleV\"></div\n ></div\n ></div\n ></center\n ></td\n ><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\"></td\n ><td class=\"dijitReset\"\n ><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper dijitSliderBottomBumperV\" dojoAttachEvent=\"onclick:_onClkDecBumper\"></div></center\n ></td\n ><td class=\"dijitReset\"></td\n ></tr\n ><tr class=\"dijitReset\"\n ><td class=\"dijitReset\"></td\n ><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n ><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n ></td\n ><td class=\"dijitReset\"></td\n ></tr\n></tbody></table>\n")});
+})();
+}
diff --git a/js/dojo/dojox/form/Rating.js b/js/dojo/dojox/form/Rating.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/Rating.js
@@ -0,0 +1,56 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.Rating"]){
+dojo._hasResource["dojox.form.Rating"]=true;
+dojo.provide("dojox.form.Rating");
+dojo.require("dijit.form._FormWidget");
+dojo.declare("dojox.form.Rating",dijit.form._FormWidget,{templateString:null,numStars:3,value:0,constructor:function(_1){
+dojo.mixin(this,_1);
+var _2="<div dojoAttachPoint=\"domNode\" class=\"dojoxRating dijitInline\">"+"<input type=\"hidden\" value=\"0\" dojoAttachPoint=\"focusNode\" /><ul>${stars}</ul>"+"</div>";
+var _3="<li class=\"dojoxRatingStar dijitInline\" dojoAttachEvent=\"onclick:onStarClick,onmouseover:_onMouse,onmouseout:_onMouse\" value=\"${value}\"></li>";
+var _4="";
+for(var i=0;i<this.numStars;i++){
+_4+=dojo.string.substitute(_3,{value:i+1});
+}
+this.templateString=dojo.string.substitute(_2,{stars:_4});
+},postCreate:function(){
+this.inherited(arguments);
+this._renderStars(this.value);
+},_onMouse:function(_5){
+this.inherited(arguments);
+if(this._hovering){
+var _6=+dojo.attr(_5.target,"value");
+this.onMouseOver(_5,_6);
+this._renderStars(_6,true);
+}else{
+this._renderStars(this.value);
+}
+},_renderStars:function(_7,_8){
+dojo.query(".dojoxRatingStar",this.domNode).forEach(function(_9,i){
+if(i+1>_7){
+dojo.removeClass(_9,"dojoxRatingStarHover");
+dojo.removeClass(_9,"dojoxRatingStarChecked");
+}else{
+dojo.removeClass(_9,"dojoxRatingStar"+(_8?"Checked":"Hover"));
+dojo.addClass(_9,"dojoxRatingStar"+(_8?"Hover":"Checked"));
+}
+});
+},onStarClick:function(_a){
+var _b=+dojo.attr(_a.target,"value");
+this.setAttribute("value",_b==this.value?0:_b);
+this._renderStars(this.value);
+this.onChange(this.value);
+},onMouseOver:function(){
+},setAttribute:function(_c,_d){
+this.inherited("setAttribute",arguments);
+if(_c=="value"){
+this._renderStars(this.value);
+this.onChange(this.value);
+}
+}});
+}
diff --git a/js/dojo/dojox/form/TimeSpinner.js b/js/dojo/dojox/form/TimeSpinner.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/TimeSpinner.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.TimeSpinner"]){
+dojo._hasResource["dojox.form.TimeSpinner"]=true;
+dojo.provide("dojox.form.TimeSpinner");
+dojo.require("dijit.form._Spinner");
+dojo.require("dijit.form.NumberTextBox");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojox.form.TimeSpinner",[dijit.form._Spinner],{required:false,adjust:function(_1,_2){
+return dojo.date.add(_1,"minute",_2);
+},isValid:function(){
+return true;
+},smallDelta:5,largeDelta:30,timeoutChangeRate:0.5,parse:function(_3,_4){
+return dojo.date.locale.parse(_3,{selector:"time",formatLength:"short"});
+},format:function(_5,_6){
+if(dojo.isString(_5)){
+return _5;
+}
+return dojo.date.locale.format(_5,{selector:"time",formatLength:"short"});
+},serialize:dojo.date.stamp.toISOString,value:"12:00 AM",_onKeyPress:function(e){
+if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.attr("value")!="undefined"){
+var _7=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];
+if(_7){
+this._setValueAttr(_7,true);
+}
+dojo.stopEvent(e);
+}
+}});
+}
diff --git a/js/dojo/dojox/form/_FormSelectWidget.js b/js/dojo/dojox/form/_FormSelectWidget.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/_FormSelectWidget.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._FormSelectWidget"]){
+dojo._hasResource["dojox.form._FormSelectWidget"]=true;
+dojo.deprecated("dojox.form._FormSelectWidget","Use dijit.form._FormSelectWidget instead","2.0");
+dojo.provide("dojox.form._FormSelectWidget");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.setObject("dojox.form._FormSelectWidget",dijit.form._FormSelectWidget);
+}
diff --git a/js/dojo/dojox/form/_HasDropDown.js b/js/dojo/dojox/form/_HasDropDown.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/_HasDropDown.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._HasDropDown"]){
+dojo._hasResource["dojox.form._HasDropDown"]=true;
+dojo.deprecated("dojox.form._HasDropDown","Use dijit._HasDropDown instead","2.0");
+dojo.provide("dojox.form._HasDropDown");
+dojo.require("dijit._HasDropDown");
+dojo.setObject("dojox.form._HasDropDown",dijit._HasDropDown);
+}
diff --git a/js/dojo/dojox/form/_SelectStackMixin.js b/js/dojo/dojox/form/_SelectStackMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/_SelectStackMixin.js
@@ -0,0 +1,151 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._SelectStackMixin"]){
+dojo._hasResource["dojox.form._SelectStackMixin"]=true;
+dojo.provide("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form._SelectStackMixin",null,{stackId:"",stackPrefix:"",_paneIdFromOption:function(_1){
+return (this.stackPrefix||"")+_1;
+},_optionValFromPane:function(id){
+var sp=this.stackPrefix;
+if(sp&&id.indexOf(sp)===0){
+return id.substring(sp.length);
+}
+return id;
+},_togglePane:function(_2,_3){
+if(_2._shown!=undefined&&_2._shown==_3){
+return;
+}
+var _4=dojo.filter(_2.getDescendants(),"return item.name;");
+if(!_3){
+_5={};
+dojo.forEach(_4,function(w){
+_5[w.id]=w.disabled;
+w.attr("disabled",true);
+});
+_2._savedStates=_5;
+}else{
+var _5=_2._savedStates||{};
+dojo.forEach(_4,function(w){
+var _6=_5[w.id];
+if(_6==undefined){
+_6=false;
+}
+w.attr("disabled",_6);
+});
+delete _2._savedStates;
+}
+_2._shown=_3;
+},_connectTitle:function(_7,_8){
+var fx=dojo.hitch(this,function(_9){
+this.updateOption({value:_8,label:_9});
+});
+if(_7._setTitleAttr){
+this.connect(_7,"_setTitleAttr",fx);
+}else{
+this.connect(_7,"attr",function(_a,_b){
+if(_a=="title"&&arguments.length>1){
+fx(_b);
+}
+});
+}
+},onAddChild:function(_c,_d){
+if(!this._panes[_c.id]){
+this._panes[_c.id]=_c;
+var v=this._optionValFromPane(_c.id);
+this.addOption({value:v,label:_c.title});
+this._connectTitle(_c,v);
+}
+if(!_c.onShow||!_c.onHide||_c._shown==undefined){
+_c.onShow=dojo.hitch(this,"_togglePane",_c,true);
+_c.onHide=dojo.hitch(this,"_togglePane",_c,false);
+_c.onHide();
+}
+},_setValueAttr:function(v){
+if("_savedValue" in this){
+return;
+}
+this.inherited(arguments);
+},attr:function(_e,_f){
+if(_e=="value"&&arguments.length==2&&"_savedValue" in this){
+this._savedValue=_f;
+}
+return this.inherited(arguments);
+},onRemoveChild:function(_10){
+if(this._panes[_10.id]){
+delete this._panes[_10.id];
+this.removeOption(this._optionValFromPane(_10.id));
+}
+},onSelectChild:function(_11){
+this._setValueAttr(this._optionValFromPane(_11.id));
+},onStartup:function(_12){
+var _13=_12.selected;
+this.addOption(dojo.filter(dojo.map(_12.children,function(c){
+var v=this._optionValFromPane(c.id);
+this._connectTitle(c,v);
+var _14=null;
+if(!this._panes[c.id]){
+this._panes[c.id]=c;
+_14={value:v,label:c.title};
+}
+if(!c.onShow||!c.onHide||c._shown==undefined){
+c.onShow=dojo.hitch(this,"_togglePane",c,true);
+c.onHide=dojo.hitch(this,"_togglePane",c,false);
+c.onHide();
+}
+if("_savedValue" in this&&v===this._savedValue){
+_13=c;
+}
+return _14;
+},this),function(i){
+return i;
+}));
+var _15=this;
+var fx=function(){
+delete _15._savedValue;
+_15.onSelectChild(_13);
+if(!_13._shown){
+_15._togglePane(_13,true);
+}
+};
+if(_13!==_12.selected){
+var _16=dijit.byId(this.stackId);
+var c=this.connect(_16,"_showChild",function(sel){
+this.disconnect(c);
+fx();
+});
+}else{
+fx();
+}
+},postMixInProperties:function(){
+this._savedValue=this.value;
+this.inherited(arguments);
+this.connect(this,"onChange","_handleSelfOnChange");
+},postCreate:function(){
+this.inherited(arguments);
+this._panes={};
+this._subscriptions=[dojo.subscribe(this.stackId+"-startup",this,"onStartup"),dojo.subscribe(this.stackId+"-addChild",this,"onAddChild"),dojo.subscribe(this.stackId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.stackId+"-selectChild",this,"onSelectChild")];
+var _17=dijit.byId(this.stackId);
+if(_17&&_17._started){
+this.onStartup({children:_17.getChildren(),selected:_17.selectedChildWidget});
+}
+},destroy:function(){
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+delete this._panes;
+this.inherited("destroy",arguments);
+},_handleSelfOnChange:function(val){
+var _18=this._panes[this._paneIdFromOption(val)];
+if(_18){
+var s=dijit.byId(this.stackId);
+if(_18==s.selectedChildWidget){
+s._transition(_18);
+}else{
+s.selectChild(_18);
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/form/manager/_ClassMixin.js b/js/dojo/dojox/form/manager/_ClassMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_ClassMixin.js
@@ -0,0 +1,31 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._ClassMixin"]){
+dojo._hasResource["dojox.form.manager._ClassMixin"]=true;
+dojo.provide("dojox.form.manager._ClassMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,ia=fm.inspectorAdapter;
+dojo.declare("dojox.form.manager._ClassMixin",null,{gatherClassState:function(_1,_2){
+var _3=this.inspect(ia(function(_4,_5){
+return dojo.hasClass(_5,_1);
+}),_2);
+return _3;
+},addClass:function(_6,_7){
+this.inspect(aa(function(_8,_9){
+dojo.addClass(_9,_6);
+}),_7);
+return this;
+},removeClass:function(_a,_b){
+this.inspect(aa(function(_c,_d){
+dojo.removeClass(_d,_a);
+}),_b);
+return this;
+}});
+})();
+}
diff --git a/js/dojo/dojox/form/manager/_DisplayMixin.js b/js/dojo/dojox/form/manager/_DisplayMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_DisplayMixin.js
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._DisplayMixin"]){
+dojo._hasResource["dojox.form.manager._DisplayMixin"]=true;
+dojo.provide("dojox.form.manager._DisplayMixin");
+dojo.declare("dojox.form.manager._DisplayMixin",null,{gatherDisplayState:function(_1){
+var _2=this.inspectAttachedPoints(function(_3,_4){
+return dojo.style(_4,"display")!="none";
+},_1);
+return _2;
+},show:function(_5,_6){
+if(arguments.length<2){
+_6=true;
+}
+this.inspectAttachedPoints(function(_7,_8,_9){
+dojo.style(_8,"display",_9?"":"none");
+},_5,_6);
+return this;
+},hide:function(_a){
+return this.show(_a,false);
+}});
+}
diff --git a/js/dojo/dojox/form/manager/_EnableMixin.js b/js/dojo/dojox/form/manager/_EnableMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_EnableMixin.js
@@ -0,0 +1,43 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._EnableMixin"]){
+dojo._hasResource["dojox.form.manager._EnableMixin"]=true;
+dojo.provide("dojox.form.manager._EnableMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,ia=fm.inspectorAdapter;
+dojo.declare("dojox.form.manager._EnableMixin",null,{gatherEnableState:function(_1){
+var _2=this.inspectFormWidgets(ia(function(_3,_4){
+return !_4.attr("disabled");
+}),_1);
+if(this.inspectFormNodes){
+dojo.mixin(_2,this.inspectFormNodes(ia(function(_5,_6){
+return !dojo.attr(_6,"disabled");
+}),_1));
+}
+return _2;
+},enable:function(_7,_8){
+if(arguments.length<2||_8===undefined){
+_8=true;
+}
+this.inspectFormWidgets(aa(function(_9,_a,_b){
+_a.attr("disabled",!_b);
+}),_7,_8);
+if(this.inspectFormNodes){
+this.inspectFormNodes(aa(function(_c,_d,_e){
+dojo.attr(_d,"disabled",!_e);
+}),_7,_8);
+}
+return this;
+},disable:function(_f){
+var _10=this.gatherEnableState();
+this.enable(_f,false);
+return _10;
+}});
+})();
+}
diff --git a/js/dojo/dojox/form/manager/_FormMixin.js b/js/dojo/dojox/form/manager/_FormMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_FormMixin.js
@@ -0,0 +1,70 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._FormMixin"]){
+dojo._hasResource["dojox.form.manager._FormMixin"]=true;
+dojo.provide("dojox.form.manager._FormMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter;
+dojo.declare("dojox.form.manager._FormMixin",null,{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",startup:function(){
+this.isForm=this.domNode.tagName.toLowerCase()=="form";
+if(this.isForm){
+this.connect(this.domNode,"onreset","_onReset");
+this.connect(this.domNode,"onsubmit","_onSubmit");
+}
+this.inherited(arguments);
+},_onReset:function(_1){
+var _2={returnValue:true,preventDefault:function(){
+this.returnValue=false;
+},stopPropagation:function(){
+},currentTarget:_1.currentTarget,target:_1.target};
+if(!(this.onReset(_2)===false)&&_2.returnValue){
+this.reset();
+}
+dojo.stopEvent(_1);
+return false;
+},onReset:function(){
+return true;
+},reset:function(){
+this.inspectFormWidgets(aa(function(_3,_4){
+if(_4.reset){
+_4.reset();
+}
+}));
+if(this.isForm){
+this.domNode.reset();
+}
+return this;
+},_onSubmit:function(_5){
+if(this.onSubmit(_5)===false){
+dojo.stopEvent(_5);
+}
+},onSubmit:function(){
+return this.isValid();
+},submit:function(){
+if(this.isForm){
+if(!(this.onSubmit()===false)){
+this.domNode.submit();
+}
+}
+},isValid:function(){
+for(var _6 in this.formWidgets){
+var _7=false;
+aa(function(_8,_9){
+if(!_9.attr("disabled")&&_9.isValid&&!_9.isValid()){
+_7=true;
+}
+}).call(this,null,this.formWidgets[_6].widget);
+if(_7){
+return false;
+}
+}
+return true;
+}});
+})();
+}
diff --git a/js/dojo/dojox/form/manager/_Mixin.js b/js/dojo/dojox/form/manager/_Mixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_Mixin.js
@@ -0,0 +1,274 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._Mixin"]){
+dojo._hasResource["dojox.form.manager._Mixin"]=true;
+dojo.provide("dojox.form.manager._Mixin");
+dojo.require("dijit._Widget");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter=function(_1){
+return function(_2,_3,_4){
+if(dojo.isArray(_3)){
+dojo.forEach(_3,function(_5){
+_1.call(this,_2,_5,_4);
+},this);
+}else{
+_1.apply(this,arguments);
+}
+};
+},ia=fm.inspectorAdapter=function(_6){
+return function(_7,_8,_9){
+return _6.call(this,_7,dojo.isArray(_8)?_8[0]:_8,_9);
+};
+},_a={domNode:1,containerNode:1,srcNodeRef:1,bgIframe:1},_b=fm._keys=function(o){
+var _c=[],_d;
+for(_d in o){
+if(o.hasOwnProperty(_d)){
+_c.push(_d);
+}
+}
+return _c;
+},_e=function(_f){
+var _10=_f.attr("name");
+if(_10&&_f instanceof dijit.form._FormWidget){
+if(_10 in this.formWidgets){
+var a=this.formWidgets[_10].widget;
+if(dojo.isArray(a)){
+a.push(_f);
+}else{
+this.formWidgets[_10].widget=[a,_f];
+}
+}else{
+this.formWidgets[_10]={widget:_f,connections:[]};
+}
+}else{
+_10=null;
+}
+return _10;
+},_11=function(_12){
+var _13={};
+aa(function(_14,w){
+var o=w.attr("observer");
+if(o&&typeof o=="string"){
+dojo.forEach(o.split(","),function(o){
+o=dojo.trim(o);
+if(o&&dojo.isFunction(this[o])){
+_13[o]=1;
+}
+},this);
+}
+}).call(this,null,this.formWidgets[_12].widget);
+return _b(_13);
+},_15=function(_16,_17){
+var t=this.formWidgets[_16],w=t.widget,c=t.connections;
+if(c.length){
+dojo.forEach(c,dojo.disconnect);
+c=t.connections=[];
+}
+if(dojo.isArray(w)){
+dojo.forEach(w,function(w){
+dojo.forEach(_17,function(o){
+c.push(dojo.connect(w,"onChange",this,function(evt){
+if(this.watch&&dojo.attr(w.focusNode,"checked")){
+this[o](w.attr("value"),_16,w,evt);
+}
+}));
+},this);
+},this);
+}else{
+var _18=w.declaredClass=="dijit.form.Button"?"onClick":"onChange";
+dojo.forEach(_17,function(o){
+c.push(dojo.connect(w,_18,this,function(evt){
+if(this.watch){
+this[o](w.attr("value"),_16,w,evt);
+}
+}));
+},this);
+}
+};
+dojo.declare("dojox.form.manager._Mixin",null,{watch:true,startup:function(){
+if(this._started){
+return;
+}
+this.formWidgets={};
+this.formNodes={};
+this.registerWidgetDescendants(this);
+this.inherited(arguments);
+},destroy:function(){
+for(var _19 in this.formWidgets){
+dojo.forEach(this.formWidgets[_19].connections,dojo.disconnect);
+}
+this.formWidgets={};
+this.inherited(arguments);
+},registerWidget:function(_1a){
+if(typeof _1a=="string"){
+_1a=dijit.byId(_1a);
+}else{
+if(_1a.tagName&&_1a.cloneNode){
+_1a=dijit.byNode(_1a);
+}
+}
+var _1b=_e.call(this,_1a);
+if(_1b){
+_15.call(this,_1b,_11.call(this,_1b));
+}
+return this;
+},unregisterWidget:function(_1c){
+if(_1c in this.formWidgets){
+dojo.forEach(this.formWidgets[_1c].connections,this.disconnect,this);
+delete this.formWidgets[_1c];
+}
+return this;
+},registerWidgetDescendants:function(_1d){
+if(typeof _1d=="string"){
+_1d=dijit.byId(_1d);
+}else{
+if(_1d.tagName&&_1d.cloneNode){
+_1d=dijit.byNode(_1d);
+}
+}
+var _1e=dojo.map(_1d.getDescendants(),_e,this);
+dojo.forEach(_1e,function(_1f){
+if(_1f){
+_15.call(this,_1f,_11.call(this,_1f));
+}
+},this);
+return this.registerNodeDescendants?this.registerNodeDescendants(_1d.domNode):this;
+},unregisterWidgetDescendants:function(_20){
+if(typeof _20=="string"){
+_20=dijit.byId(_20);
+}else{
+if(_20.tagName&&_20.cloneNode){
+_20=dijit.byNode(_20);
+}
+}
+dojo.forEach(dojo.map(_20.getDescendants(),function(w){
+return w instanceof dijit.form._FormWidget&&w.attr("name")||null;
+}),function(_21){
+if(_21){
+this.unregisterNode(_21);
+}
+},this);
+return this.unregisterNodeDescendants?this.unregisterNodeDescendants(_20.domNode):this;
+},formWidgetValue:function(_22,_23){
+var _24=arguments.length==2&&_23!==undefined,_25;
+if(typeof _22=="string"){
+_22=this.formWidgets[_22];
+if(_22){
+_22=_22.widget;
+}
+}
+if(!_22){
+return null;
+}
+if(dojo.isArray(_22)){
+if(_24){
+dojo.forEach(_22,function(_26){
+_26.attr("checked",false);
+});
+dojo.forEach(_22,function(_27){
+_27.attr("checked",_27.attr("value")===_23);
+});
+return this;
+}
+dojo.some(_22,function(_28){
+if(dojo.attr(_28.focusNode,"checked")){
+_25=_28;
+return true;
+}
+return false;
+});
+return _25?_25.attr("value"):"";
+}
+if(_24){
+_22.attr("value",_23);
+return this;
+}
+return _22.attr("value");
+},formPointValue:function(_29,_2a){
+if(_29&&typeof _29=="string"){
+_29=this[_29];
+}
+if(!_29||!_29.tagName||!_29.cloneNode){
+return null;
+}
+if(!dojo.hasClass(_29,"dojoFormValue")){
+return null;
+}
+if(arguments.length==2&&_2a!==undefined){
+_29.innerHTML=_2a;
+return this;
+}
+return _29.innerHTML;
+},inspectFormWidgets:function(_2b,_2c,_2d){
+var _2e,_2f={};
+if(_2c){
+if(dojo.isArray(_2c)){
+dojo.forEach(_2c,function(_30){
+if(_30 in this.formWidgets){
+_2f[_30]=_2b.call(this,_30,this.formWidgets[_30].widget,_2d);
+}
+},this);
+}else{
+for(_2e in _2c){
+if(_2e in this.formWidgets){
+_2f[_2e]=_2b.call(this,_2e,this.formWidgets[_2e].widget,_2c[_2e]);
+}
+}
+}
+}else{
+for(_2e in this.formWidgets){
+_2f[_2e]=_2b.call(this,_2e,this.formWidgets[_2e].widget,_2d);
+}
+}
+return _2f;
+},inspectAttachedPoints:function(_31,_32,_33){
+var _34,_35={};
+if(_32){
+if(dojo.isArray(_32)){
+dojo.forEach(_32,function(_36){
+var _37=this[_36];
+if(_37&&_37.tagName&&_37.cloneNode){
+_35[_36]=_31.call(this,_36,_37,_33);
+}
+},this);
+}else{
+for(_34 in _32){
+var _38=this[_34];
+if(_38&&_38.tagName&&_38.cloneNode){
+_35[_34]=_31.call(this,_34,_38,_32[_34]);
+}
+}
+}
+}else{
+for(_34 in this){
+if(!(_34 in _a)){
+var _38=this[_34];
+if(_38&&_38.tagName&&_38.cloneNode){
+_35[_34]=_31.call(this,_34,_38,_33);
+}
+}
+}
+}
+return _35;
+},inspect:function(_39,_3a,_3b){
+var _3c=this.inspectFormWidgets(function(_3d,_3e,_3f){
+if(dojo.isArray(_3e)){
+return _39.call(this,_3d,dojo.map(_3e,function(w){
+return w.domNode;
+}),_3f);
+}
+return _39.call(this,_3d,_3e.domNode,_3f);
+},_3a,_3b);
+if(this.inspectFormNodes){
+dojo.mixin(_3c,this.inspectFormNodes(_39,_3a,_3b));
+}
+return dojo.mixin(_3c,this.inspectAttachedPoints(_39,_3a,_3b));
+}});
+})();
+dojo.extend(dijit._Widget,{observer:""});
+}
diff --git a/js/dojo/dojox/form/manager/_NodeMixin.js b/js/dojo/dojox/form/manager/_NodeMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_NodeMixin.js
@@ -0,0 +1,239 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._NodeMixin"]){
+dojo._hasResource["dojox.form.manager._NodeMixin"]=true;
+dojo.provide("dojox.form.manager._NodeMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,_1=fm._keys,ce=fm.changeEvent=function(_2){
+var _3="onclick";
+switch(_2.tagName.toLowerCase()){
+case "textarea":
+_3="onkeyup";
+break;
+case "select":
+_3="onchange";
+break;
+case "input":
+switch(_2.type.toLowerCase()){
+case "text":
+case "password":
+_3="onkeyup";
+break;
+}
+break;
+}
+return _3;
+},_4=function(_5,_6){
+var _7=dojo.attr(_5,"name");
+_6=_6||this.domNode;
+if(_7&&!(_7 in this.formWidgets)){
+for(var n=_5;n&&n!==_6;n=n.parentNode){
+if(dojo.attr(n,"widgetId")&&dijit.byNode(n) instanceof dijit.form._FormWidget){
+return null;
+}
+}
+if(_5.tagName.toLowerCase()=="input"&&_5.type.toLowerCase()=="radio"){
+var a=this.formNodes[_7];
+a=a&&a.node;
+if(a&&dojo.isArray(a)){
+a.push(_5);
+}else{
+this.formNodes[_7]={node:[_5],connections:[]};
+}
+}else{
+this.formNodes[_7]={node:_5,connections:[]};
+}
+}else{
+_7=null;
+}
+return _7;
+},_8=function(_9){
+var _a={};
+aa(function(_b,n){
+var o=dojo.attr(n,"observer");
+if(o&&typeof o=="string"){
+dojo.forEach(o.split(","),function(o){
+o=dojo.trim(o);
+if(o&&dojo.isFunction(this[o])){
+_a[o]=1;
+}
+},this);
+}
+}).call(this,null,this.formNodes[_9].node);
+return _1(_a);
+},_c=function(_d,_e){
+var t=this.formNodes[_d],c=t.connections;
+if(c.length){
+dojo.forEach(c,dojo.disconnect);
+c=t.connections=[];
+}
+aa(function(_f,n){
+var _10=ce(n);
+dojo.forEach(_e,function(o){
+c.push(dojo.connect(n,_10,this,function(evt){
+if(this.watch){
+this[o](this.formNodeValue(_d),_d,n,evt);
+}
+}));
+},this);
+}).call(this,null,t.node);
+};
+dojo.declare("dojox.form.manager._NodeMixin",null,{destroy:function(){
+for(var _11 in this.formNodes){
+dojo.forEach(this.formNodes[_11].connections,dojo.disconnect);
+}
+this.formNodes={};
+this.inherited(arguments);
+},registerNode:function(_12){
+if(typeof _12=="string"){
+_12=dojo.byId(_12);
+}
+var _13=_4.call(this,_12);
+if(_13){
+_c.call(this,_13,_8.call(this,_13));
+}
+return this;
+},unregisterNode:function(_14){
+if(_14 in this.formNodes){
+dojo.forEach(this.formNodes[_14].connections,this.disconnect,this);
+delete this.formNodes[_14];
+}
+return this;
+},registerNodeDescendants:function(_15){
+if(typeof _15=="string"){
+_15=dojo.byId(_15);
+}
+dojo.query("input, select, textarea, button",_15).map(function(n){
+return _4.call(this,n,_15);
+},this).forEach(function(_16){
+if(_16){
+_c.call(this,_16,_8.call(this,_16));
+}
+},this);
+return this;
+},unregisterNodeDescendants:function(_17){
+if(typeof _17=="string"){
+_17=dojo.byId(_17);
+}
+dojo.query("input, select, textarea, button",_17).map(function(n){
+return dojo.attr(_17,"name")||null;
+}).forEach(function(_18){
+if(_18){
+this.unregisterNode(_18);
+}
+},this);
+return this;
+},formNodeValue:function(_19,_1a){
+var _1b=arguments.length==2&&_1a!==undefined,_1c;
+if(typeof _19=="string"){
+_19=this.formNodes[_19];
+if(_19){
+_19=_19.node;
+}
+}
+if(!_19){
+return null;
+}
+if(dojo.isArray(_19)){
+if(_1b){
+dojo.forEach(_19,function(_1d){
+_1d.checked="";
+});
+dojo.forEach(_19,function(_1e){
+_1e.checked=_1e.value===_1a?"checked":"";
+});
+return this;
+}
+dojo.some(_19,function(_1f){
+if(_1f.checked){
+_1c=_1f;
+return true;
+}
+return false;
+});
+return _1c?_1c.value:"";
+}
+switch(_19.tagName.toLowerCase()){
+case "select":
+if(_19.multiple){
+if(_1b){
+if(dojo.isArray(_1a)){
+var _20={};
+dojo.forEach(_1a,function(v){
+_20[v]=1;
+});
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value in _20;
+});
+return this;
+}
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value===_1a;
+});
+return this;
+}
+var _1c=dojo.query("> option",_19).filter(function(opt){
+return opt.selected;
+}).map(function(opt){
+return opt.value;
+});
+return _1c.length==1?_1c[0]:_1c;
+}
+if(_1b){
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value===_1a;
+});
+return this;
+}
+return _19.value||"";
+case "button":
+if(_1b){
+_19.innerHTML=""+_1a;
+return this;
+}
+return _19.innerHTML;
+case "input":
+if(_19.type.toLowerCase()=="checkbox"){
+if(_1b){
+_19.checked=_1a?"checked":"";
+return this;
+}
+return Boolean(_19.checked);
+}
+}
+if(_1b){
+_19.value=""+_1a;
+return this;
+}
+return _19.value;
+},inspectFormNodes:function(_21,_22,_23){
+var _24,_25={};
+if(_22){
+if(dojo.isArray(_22)){
+dojo.forEach(_22,function(_26){
+if(_26 in this.formNodes){
+_25[_26]=_21.call(this,_26,this.formNodes[_26].node,_23);
+}
+},this);
+}else{
+for(_24 in _22){
+if(_24 in this.formNodes){
+_25[_24]=_21.call(this,_24,this.formNodes[_24].node,_22[_24]);
+}
+}
+}
+}else{
+for(_24 in this.formNodes){
+_25[_24]=_21.call(this,_24,this.formNodes[_24].node,_23);
+}
+}
+return _25;
+}});
+})();
+}
diff --git a/js/dojo/dojox/form/manager/_ValueMixin.js b/js/dojo/dojox/form/manager/_ValueMixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/manager/_ValueMixin.js
@@ -0,0 +1,48 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._ValueMixin"]){
+dojo._hasResource["dojox.form.manager._ValueMixin"]=true;
+dojo.provide("dojox.form.manager._ValueMixin");
+dojo.declare("dojox.form.manager._ValueMixin",null,{elementValue:function(_1,_2){
+if(_1 in this.formWidgets){
+return this.formWidgetValue(_1,_2);
+}
+if(this.formNodes&&_1 in this.formNodes){
+return this.formNodeValue(_1,_2);
+}
+return this.formPointValue(_1,_2);
+},gatherFormValues:function(_3){
+var _4=this.inspectFormWidgets(function(_5){
+return this.formWidgetValue(_5);
+},_3);
+if(this.inspectFormNodes){
+dojo.mixin(_4,this.inspectFormNodes(function(_6){
+return this.formNodeValue(_6);
+},_3));
+}
+dojo.mixin(_4,this.inspectAttachedPoints(function(_7){
+return this.formPointValue(_7);
+},_3));
+return _4;
+},setFormValues:function(_8){
+if(_8){
+this.inspectFormWidgets(function(_9,_a,_b){
+this.formWidgetValue(_9,_b);
+},_8);
+if(this.inspectFormNodes){
+this.inspectFormNodes(function(_c,_d,_e){
+this.formNodeValue(_c,_e);
+},_8);
+}
+this.inspectAttachedPoints(function(_f,_10,_11){
+this.formPointValue(_f,_11);
+},_8);
+}
+return this;
+}});
+}
diff --git a/js/dojo/dojox/form/nls/PasswordValidator.js b/js/dojo/dojox/form/nls/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Invalid Password.","nomatchMessage":"Passwords do not match."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/ar/PasswordValidator.js b/js/dojo/dojox/form/nls/ar/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/ar/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"كلمة سرية غير صحيحة.","nomatchMessage":"كلمة السرية غير مطابقة."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/ca/PasswordValidator.js b/js/dojo/dojox/form/nls/ca/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/ca/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"La contrasenya no és correcta","nomatchMessage":"Les contrasenyes no coincideixen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/cs/PasswordValidator.js b/js/dojo/dojox/form/nls/cs/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/cs/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Neplatné heslo.","nomatchMessage":"Hesla se neshodují."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/da/PasswordValidator.js b/js/dojo/dojox/form/nls/da/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/da/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Ugyldig adgangskode.","nomatchMessage":"Adgangskoderne stemmer ikke overens."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/de/PasswordValidator.js b/js/dojo/dojox/form/nls/de/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/de/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Ungültiges Kennwort.","nomatchMessage":"Die Kennwörter stimmen nicht überein."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/el/PasswordValidator.js b/js/dojo/dojox/form/nls/el/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/el/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Μη έγκυρος κωδικός πρόσβασης.","nomatchMessage":"Οι κωδικοί πρόσβασης δεν συμφωνούν."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/es/PasswordValidator.js b/js/dojo/dojox/form/nls/es/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/es/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Contraseña no válida.","nomatchMessage":"Las contraseñas no coinciden."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/fi/PasswordValidator.js b/js/dojo/dojox/form/nls/fi/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/fi/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Salasana ei kelpaa.","nomatchMessage":"Salasanat eivät täsmää."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/fr/PasswordValidator.js b/js/dojo/dojox/form/nls/fr/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/fr/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Mot de passe incorrect.","nomatchMessage":"Les mots de passe ne correspondent pas."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/he/PasswordValidator.js b/js/dojo/dojox/form/nls/he/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/he/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"סיסמה לא חוקית.","nomatchMessage":"הסיסמאות אינן זהות."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/hu/PasswordValidator.js b/js/dojo/dojox/form/nls/hu/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/hu/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Érvénytelen jelszó.","nomatchMessage":"A jelszavak nem egyeznek."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/it/PasswordValidator.js b/js/dojo/dojox/form/nls/it/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/it/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Password non valida.","nomatchMessage":"Le password non corrispondono."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/ja/PasswordValidator.js b/js/dojo/dojox/form/nls/ja/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/ja/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"無効なパスワードです。","nomatchMessage":"パスワードが一致しません。"})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/ko/PasswordValidator.js b/js/dojo/dojox/form/nls/ko/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/ko/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"비밀번호가 올바르지 않습니다.","nomatchMessage":"비밀번호가 일치하지 않습니다."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/nb/PasswordValidator.js b/js/dojo/dojox/form/nls/nb/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/nb/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Ugyldig passord.","nomatchMessage":"Passordene samsvarer ikke."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/nl/PasswordValidator.js b/js/dojo/dojox/form/nls/nl/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/nl/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Ongeldig wachtwoord. ","nomatchMessage":"Wachtwoorden komen niet overeen."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/pl/PasswordValidator.js b/js/dojo/dojox/form/nls/pl/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/pl/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Niepoprawne hasło.","nomatchMessage":"Hasła nie są zgodne."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/pt-pt/PasswordValidator.js b/js/dojo/dojox/form/nls/pt-pt/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/pt-pt/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Palavra-passe não válida.","nomatchMessage":"As palavras-passe não correspondem."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/pt/PasswordValidator.js b/js/dojo/dojox/form/nls/pt/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/pt/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Senha Inválida.","nomatchMessage":"As senhas não correspondem."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/ru/PasswordValidator.js b/js/dojo/dojox/form/nls/ru/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/ru/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Неправильный пароль.","nomatchMessage":"Пароли не совпадают."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/sk/PasswordValidator.js b/js/dojo/dojox/form/nls/sk/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/sk/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Neplatné heslo.","nomatchMessage":"Heslá sa nezhodujú."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/sl/PasswordValidator.js b/js/dojo/dojox/form/nls/sl/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/sl/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Neveljavno geslo.","nomatchMessage":"Gesli se ne ujemata."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/sv/PasswordValidator.js b/js/dojo/dojox/form/nls/sv/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/sv/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Ogiltigt lösenord.","nomatchMessage":"Lösenorden stämmer inte överens."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/th/PasswordValidator.js b/js/dojo/dojox/form/nls/th/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/th/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"รหัสผ่านไม่ถูกต้อง","nomatchMessage":"รหัสผ่านไม่ตรงกัน"})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/tr/PasswordValidator.js b/js/dojo/dojox/form/nls/tr/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/tr/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"Geçersiz Parola.","nomatchMessage":"Parolalar eşleşmiyor."})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/zh-tw/PasswordValidator.js b/js/dojo/dojox/form/nls/zh-tw/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/zh-tw/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"無效的密碼。","nomatchMessage":"密碼不符合。"})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/nls/zh/PasswordValidator.js b/js/dojo/dojox/form/nls/zh/PasswordValidator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/nls/zh/PasswordValidator.js
@@ -0,0 +1,1 @@
+({"badPasswordMessage":"密码无效。","nomatchMessage":"密码不匹配。"})
\ No newline at end of file
diff --git a/js/dojo/dojox/form/resources/BusyButton.css b/js/dojo/dojox/form/resources/BusyButton.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/BusyButton.css
@@ -0,0 +1,9 @@
+
+.dojoxBusyButtonIcon {
+ width: 10px;
+ height: 10px;
+ vertical-align: middle;
+ margin-left: 4px;
+ background-image: url('images/loading_wheel.gif');
+ background-repeat: no-repeat;
+}
diff --git a/js/dojo/dojox/form/resources/CheckedMultiSelect.css b/js/dojo/dojox/form/resources/CheckedMultiSelect.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/CheckedMultiSelect.css
@@ -0,0 +1,66 @@
+
+.dojoxMultiSelectSelect { display: none; }
+.dojoxMultiSelect {
+ border: solid black 1px;
+ margin: 1px 0;
+ overflow: scroll;
+ overflow-y: scroll;
+ overflow-x: hidden;
+ height: 100px;
+}
+.dj_ie .dojoxMultiSelect,
+.dj_webkit .dojoxMultiSelect {
+
+ padding-right: 15px;
+}
+.dojoxMultiSelectItem {
+ white-space: nowrap;
+ padding:.1em .2em;
+ cursor:default;
+}
+.dojoxMultiSelectDisabled *,
+.dojoxMultiSelectReadOnly * {
+ color:gray !important;
+}
+.dojoxMultiSelectItemLabel {
+ margin-left: .2em;
+}
+.tundra .dojoxMultiSelect {
+ margin: 0em 0.1em;
+}
+.tundra .dojoxMultiSelect {
+ background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../../../dijit/themes/tundra/images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #b3b3b3;
+ line-height: normal;
+}
+.tundra .dojoxMultiSelectFocused {
+
+ border-color:#406b9b;
+}
+.soria .dojoxMultiSelect {
+ margin: 0em 0.1em;
+}
+.soria .dojoxMultiSelect {
+ background:#fff url("../../../dijit/themes/soria/images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../../../dijit/themes/soria/images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #8ba0bd;
+ line-height: normal;
+}
+.soria .dojoxMultiSelectFocused {
+
+ border-color:#406b9b;
+}
+.nihilo .dojoxMultiSelect {
+ margin: 0em 0.1em;
+}
+.nihilo .dojoxMultiSelect {
+ background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../../../dijit/themes/nihilo/images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #d3d3d3;
+ line-height: normal;
+}
+.nihilo .dojoxMultiSelectFocused {
+
+ border-color:#b3b3b3;
+}
diff --git a/js/dojo/dojox/form/resources/CheckedMultiSelect.html b/js/dojo/dojox/form/resources/CheckedMultiSelect.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/CheckedMultiSelect.html
@@ -0,0 +1,4 @@
+<div class="dijit dijitReset dijitInline" dojoAttachEvent="onmousedown:_mouseDown,onclick:focus"
+ ><select class="${baseClass}Select" multiple="true" dojoAttachPoint="containerNode,focusNode"></select
+ ><div dojoAttachPoint="wrapperDiv"></div
+></div>
\ No newline at end of file
diff --git a/js/dojo/dojox/form/resources/FileInput.css b/js/dojo/dojox/form/resources/FileInput.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FileInput.css
@@ -0,0 +1,88 @@
+.dijitFileInput {
+ position:relative;
+ height:1.3em;
+
+}
+.dijitFileInputReal {
+ position:absolute;
+ z-index:2;
+ filter:alpha(opacity:0);
+ opacity:0;
+ cursor:pointer;
+}
+.dijitFileInputRealBlind {
+ right:0;
+}
+.dijitFileInputReal:hover { cursor:pointer; }
+.dijitFileInputButton,
+.dijitFileInputText {
+ border:1px solid #333;
+ padding:2px 12px 2px 12px;
+ cursor:pointer;
+}
+.dijitFileInputButton {
+ z-index:3;
+ visibility:hidden;
+}
+.dijitFakeInput { position:absolute; top:0; left:0; z-index:1; white-space: nowrap; }
+.dijitProgressOverlay {
+ display:none;
+ width:250px;
+ height:1em;
+ position:absolute;
+ top:0; left:0;
+ border:1px solid #333;
+ background:#cad2de url('../../../dijit/themes/tundra/images/dijitProgressBarAnim.gif') repeat-x top left;
+ padding:2px;
+}
+.tundra .dijitProgressOverlay {
+ border:1px solid #84a3d1;
+ background-color:#cad2de;
+}
+.tundra .dijitFakeInput input {
+
+ padding: 0;
+ background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+ border:1px solid #9b9b9b;
+ line-height: normal;
+}
+.tundra .dijitFileInputButton,
+.tundra .dijitFileInputText {
+ border:1px solid #9b9b9b;
+ padding:0px 12px 0px 12px;
+ background:#e9e9e9 url("../../../dijit/themes/tundra/images/buttonEnabled.png") repeat-x top;
+}
+.soria .dijitProgressOverlay {
+ border:1px solid #8BA0BD;
+ background-color:#cad2de;
+}
+.soria .dijitFakeInput input {
+ border:1px solid #8BA0BD;
+ background:#fff url("../../../dijit/themes/soria/images/validationInputBg.png") repeat-x top left;
+ line-height:normal;
+ background-position:0 -30px;
+ padding:0.2em 0.3em;
+}
+.soria .dijitFileInputButton,
+.soria .dijitFileInputText {
+ border:1px solid #8BA0BD;
+ padding:2px 12px 2px 12px;
+ background:#b7cdee url('../../../dijit/themes/soria/images/buttonEnabled.png') repeat-x;
+}
+.nihilo .dijitProgressOverlay {
+ border:1px solid #DEDEDE;
+ background-color:#cad2de;
+}
+.nihilo .dijitFakeInput input {
+ border:1px solid #DEDEDE;
+ background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+ line-height:normal;
+ background-position:0 -30px;
+ padding:0.2em 0.3em;
+}
+.nihilo .dijitFileInputButton,
+.nihilo .dijitFileInputText {
+ border:1px solid #DEDEDE;
+ padding:2px 12px 2px 12px;
+ background:#b7cdee url('../../../dijit/themes/nihilo/images/buttonEnabled.png') repeat-x;
+}
diff --git a/js/dojo/dojox/form/resources/FileInput.html b/js/dojo/dojox/form/resources/FileInput.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FileInput.html
@@ -0,0 +1,9 @@
+<div class="dijitFileInput">
+ <input id="${id}" class="dijitFileInputReal" type="file" dojoAttachPoint="fileInput" name="${name}" />
+ <div class="dijitFakeInput">
+ <input class="dijitFileInputVisible" type="text" dojoAttachPoint="focusNode, inputNode" />
+ <div class="dijitInline dijitFileInputText" dojoAttachPoint="titleNode">${label}</div>
+ <div class="dijitInline dijitFileInputButton" dojoAttachPoint="cancelNode"
+ dojoAttachEvent="onclick:reset">${cancelText}</div>
+ </div>
+</div>
diff --git a/js/dojo/dojox/form/resources/FileInputAuto.html b/js/dojo/dojox/form/resources/FileInputAuto.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FileInputAuto.html
@@ -0,0 +1,9 @@
+<div class="dijitFileInput">
+ <input id="${id}" name="${name}" class="dijitFileInputReal" type="file" dojoAttachPoint="fileInput" />
+ <div class="dijitFakeInput" dojoAttachPoint="fakeNodeHolder">
+ <input class="dijitFileInputVisible" type="text" dojoAttachPoint="focusNode, inputNode" />
+ <div class="dijitInline dijitFileInputText" dojoAttachPoint="titleNode">${label}</div>
+ <div class="dijitInline dijitFileInputButton" dojoAttachPoint="cancelNode" dojoAttachEvent="onclick:reset">${cancelText}</div>
+ </div>
+ <div class="dijitProgressOverlay" dojoAttachPoint="overlay">&nbsp;</div>
+</div>
diff --git a/js/dojo/dojox/form/resources/FilePickerTextBox.css b/js/dojo/dojox/form/resources/FilePickerTextBox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FilePickerTextBox.css
@@ -0,0 +1,468 @@
+.dojoxRollingList {
+ border: 1px solid #000;
+ height: 20em;
+ background-color: #FFF;
+ position: relative;
+}
+.dijitPopup .dojoxRollingList {
+ position: static;
+}
+.dojoxRollingListContainer {
+ overflow: scroll;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ white-space: nowrap;
+}
+.dojoxRollingListButtons {
+ position: absolute;
+ right: 5px;
+ padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+ display: none;
+}
+.dojoxRollingListPane {
+ overflow: scroll;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ display:-moz-inline-box;
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+ border:0;
+ padding:0;
+ vertical-align:middle;
+ #vertical-align: auto;
+}
+.dojoxRollingListPane .dijitMenuItem td {
+ width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+ width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+ position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+ padding-right: 15px;
+}
+.dojoxRollingListPane .dijitMenu {
+ border: none !important;
+}
+.dojoxRollingListItem {
+ cursor: default;
+}
+.tundra .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+ background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #fff;
+ background-color: #999;
+ font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+ font-family: inherit;
+}
+.soria .dojoxRollingList {
+ border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+ background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+ font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+ border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+ background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+ font-family: inherit;
+}
+.dojoxFileInfoPane *{
+ white-space: normal;
+}
+.dojoxFileInfoLabel {
+ font-weight: bold;
+ white-space: nowrap;
+}
+.dojoxFileInfoPane {
+ width: 20em;
+}
+.tundra .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url(../../widget/FilePicker/images/tundraFileIcons.gif);
+ background-repeat: no-repeat;
+}
+.tundra .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.tundra .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.tundra .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
+.soria .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url(../../widget/FilePicker/images/soriaFileIcons.gif);
+ background-repeat: no-repeat;
+}
+.soria .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.soria .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.soria .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
+.nihilo .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url(../../widget/FilePicker/images/nihiloFileIcons.gif);
+ background-repeat: no-repeat;
+}
+.nihilo .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.nihilo .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.nihilo .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
+.dojoxFilePickerTextBox{
+ width: 30em;
+ vertical-align: middle;
+}
+.dojoxFilePickerTextBox input:focus{
+ outline: none;
+}
+.dojoxFilePickerTextBoxFocused{
+ outline: auto 5px -webkit-focus-ring-color;
+}
+.dojoxFilePickerTextBox INPUT{
+ border-left: solid black 1px;
+ display:inline;
+ position:static !important;
+ border:0 !important;
+ margin:0 !important;
+ vertical-align:top !important;
+ visibility:visible !important;
+ background-color:transparent !important;
+ background-image:none !important;
+ width:100% !important;
+}
+.dijitRtl .dojoxFilePickerTextBox .dijitInputField {
+ border-right-width:1px !important;
+ border-left-width:0 !important;
+}
+.tundra .dojoxFilePickerTextBoxDisabled *
+{
+ cursor: not-allowed !important;
+}
+.tundra .dojoxFilePickerTextBox {
+ font-family: sans-serif;
+ font-size: 100%;
+}
+.tundra .dojoxFilePickerTextBox {
+ background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../../../dijit/themes/tundra/images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #b3b3b3;
+ line-height: normal;
+}
+.tundra .dojoxFilePickerTextBoxDisabled {
+ color: gray;
+}
+.dj_webkit .tundra .dojoxFilePickerTextBoxDisabled {
+ color: #eee;
+}
+.tundra .dojoxFilePickerTextBox .dijitInputField {
+ padding: 1px 0;
+}
+.tundra .dojoxFilePickerTextBox .dijitButtonNode {
+ padding: 1px 0.2em;
+}
+.tundra .dojoxFilePickerTextBox .dijitButtonNode{
+ border-color: #9b9b9b;
+ border-width: 0px 0px 0px 1px;
+ border-style: solid;
+}
+.tundra .dojoxFilePickerTextBoxFocused {
+ border-color:#406b9b;
+}
+.tundra .dojoxFilePickerTextBoxFocused .dijitButtonNode {
+ border-left-color:#366dba;
+}
+.dijitRtl .tundra .dojoxFilePickerTextBox .dijitButtonNode{
+ border-color: #9b9b9b;
+ border-width: 0px 1px 0px 0px;
+}
+.tundra .dojoxFilePickerTextBoxDisabled {
+ border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
+ background:#e4e4e4 url("../../../dijit/themes/tundra/images/buttonDisabled.png") top repeat-x;
+}
+.tundra .dojoxFilePickerTextBoxHover .dijitDownArrowButton {
+ border-color: #a5beda;
+ border-bottom-color:#5c7590;
+ color:#000;
+ background:#fcfdff url("../../../dijit/themes/tundra/images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+ border-color:#366dba;
+ background: #ededed url("../../../dijit/themes/tundra/images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+ background-image: url("images/tundraFolderSprite.gif");
+ background-repeat: no-repeat;
+ background-attachment: scroll;
+ background-position: left center;
+ height: auto;
+ width: 16px;
+ font-size: 100%;
+ font-size: inherit;
+}
+.tundra .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+ background-position: -16px;
+}
+.tundra .dojoxFilePickerTextBoxError {
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .tundra .dojoxFilePickerTextBoxError INPUT {
+ background-color:#f9f7ba !important;
+}
+.tundra .dojoxFilePickerTextBoxErrorFocused {
+ background-color:#f9f999;
+ background-image:none;
+}
+.dj_ie6 .tundra .dojoxFilePickerTextBoxErrorFocused INPUT {
+ background-color:#f9f999 !important;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled *
+{
+ cursor: not-allowed !important;
+}
+.nihilo .dojoxFilePickerTextBox{
+ margin: 0em 0.1em;
+}
+.nihilo .dojoxFilePickerTextBox {
+ background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../../../dijit/themes/nihilo/images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #d3d3d3;
+ line-height: normal;
+}
+.nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+ padding: 0 0.2em;
+}
+.nihilo .dojoxFilePickerTextBox .dijitButtonNode{
+ border-color: #d3d3d3;
+ border-left: 1px solid #d3d3d3;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled {
+ color: gray;
+}
+.dj_safari .nihilo .dojoxFilePickerTextBoxDisabled {
+ color: #eee;
+}
+.nihilo .dojoxFilePickerTextBoxFocused {
+ border-color:#b3b3b3;
+}
+.nihilo .dojoxFilePickerTextBoxFocused .dijitButtonNode, {
+ border-left-color:#d3d3d3;
+}
+.dijitRtl .nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+ border-color: #8ba0bd;
+ border-left: 0px solid #8ba0bd;
+ border-right: 1px solid #8ba0bd;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled {
+ border-color: #dedede;
+ background:#fafafa url("../../../dijit/themes/nihilo/images/buttonDisabled.png") top repeat-x;
+ opacity: 0.60;
+}
+.nihilo .dojoxFilePickerTextBoxHover .dijitDownArrowButton {
+ color:#000;
+ background:#fcfcfc url("../../../dijit/themes/nihilo/images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+ border-color:#dedede;
+ background: #f5f5f5 url("../../../dijit/themes/nihilo/images/buttonActive.png") top left repeat-x;
+}
+.dijitRtl .nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.nihilo .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("images/nihiloFolderSprite.gif") no-repeat left center;
+ width: 16px;
+}
+.nihilo .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+ background-position: -16px;
+}
+.nihilo .dojoxFilePickerTextBoxError {
+ border-color:#b3b3b3;
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dojoxFilePickerTextBoxError INPUT {
+ background-color:#f9f7ba !important;
+}
+.nihilo .dojoxFilePickerTextBoxErrorFocused {
+ background-color:#ff6;
+ background-image:none;
+}
+.dj_ie6 .nihilo .dojoxFilePickerTextBoxErrorFocused INPUT {
+ background-color:#ff6 !important;
+}
+.soria .dojoxFilePickerTextBoxDisabled *
+{
+ cursor: not-allowed !important;
+}
+.soria .dojoxFilePickerTextBox{
+ margin: 0em 0.1em;
+}
+.soria .dojoxFilePickerTextBox {
+ background:#fff url("../images/validationInputBg.png") repeat-x top left;
+ #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+ border:1px solid #8ba0bd;
+ line-height: normal;
+}
+.soria .dojoxFilePickerTextBoxDisabled{
+ color: gray;
+}
+.dj_safari .soria .dojoxFilePickerTextBoxDisabled{
+ color: #eee;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode {
+ padding: 0 0.2em;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode{
+ border-color: #8ba0bd;
+ border-left: 1px solid #8ba0bd;
+}
+.soria .dojoxFilePickerTextBoxFocused {
+ border-color:#406b9b;
+}
+.soria .dojoxFilePickerTextBoxFocused .dijitButtonNode {
+ border-left-color:#8ba0bd;
+}
+.dijitRtl .soria .dojoxFilePickerTextBox .dijitButtonNode{
+ border-color: #8ba0bd;
+ border-left: 0px solid #8ba0bd;
+ border-right: 1px solid #8ba0bd;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.soria .dojoxFilePickerTextBoxDisabled{
+ border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+ background:#c3d3e5 url("../../../dijit/themes/soria/buttonDisabled.png") top repeat-x;
+ opacity: 0.60;
+}
+.soria .dojoxFilePickerTextBoxHover .dijitDownArrowButton{
+ color:#000;
+ background:#acc5e2 url("../../../dijit/themes/soria/buttonHover.png") repeat-x top left;
+}
+.soria .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+ border-color:#657c9c;
+ background: #91b4e5 url("../../../dijit/themes/soria/buttonActive.png") top left repeat-x;
+}
+.dijitRtl .soria .dojoxFilePickerTextBox .dijitButtonNode {
+ border-width: 0px 0px 0px 1px;
+}
+.soria .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+ background:url("images/soriaFolderSprite.gif") no-repeat left center;
+ width: 16px;
+}
+.soria .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+ background-position: -16px;
+}
+.soria .dojoxFilePickerTextBoxError {
+ border-color:#f3d118;
+ background-color:#f9f7ba;
+ background-image:none;
+}
+.dj_ie6 .soria .dojoxFilePickerTextBoxError INPUT {
+ background-color:#f9f7ba !important;
+}
+.soria .dojoxFilePickerTextBoxErrorFocused {
+ background-color:#ff6;
+ background-image:none;
+}
+.dj_ie6 .soria .dojoxFilePickerTextBoxErrorFocused INPUT {
+ background-color:#ff6 !important;
+}
diff --git a/js/dojo/dojox/form/resources/FilePickerTextBox.html b/js/dojo/dojox/form/resources/FilePickerTextBox.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FilePickerTextBox.html
@@ -0,0 +1,18 @@
+<div class="dijit dijitReset dijitInlineTable dijitLeft"
+ id="widget_${id}"
+ dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse" waiRole="combobox" tabIndex="-1"
+ ><div style="overflow:hidden;"
+ ><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'
+ dojoAttachPoint="downArrowNode,_buttonNode,_popupStateNode" waiRole="presentation"
+ ><div class="dijitArrowButtonInner">&thinsp;</div
+ ><div class="dijitArrowButtonChar">&#9660;</div
+ ></div
+ ><div class="dijitReset dijitValidationIcon"><br></div
+ ><div class="dijitReset dijitValidationIconText">&Chi;</div
+ ><div class="dijitReset dijitInputField"
+ ><input type="text" autocomplete="off" ${nameAttrSetting} class='dijitReset'
+ dojoAttachEvent='onkeypress:_onKey'
+ dojoAttachPoint='textbox,focusNode' waiRole="textbox" waiState="haspopup-true,autocomplete-list"
+ /></div
+ ></div
+></div>
diff --git a/js/dojo/dojox/form/resources/FileUploader.css b/js/dojo/dojox/form/resources/FileUploader.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/FileUploader.css
@@ -0,0 +1,154 @@
+.dojoxUploaderNorm{
+ font-family:Myriad,Helvetica,Tahoma,Arial,clean,sans-serif;
+ font-size:12px;
+ border: 1px solid #c0c0c0;
+ border-bottom: 1px solid #9b9b9b;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #fff url("../../../dijit/themes/tundra/images/buttonEnabled.png") repeat-x bottom left;
+
+ vertical-align: middle;
+
+ margin:0;
+ line-height:normal;
+ text-align:center;
+ white-space: nowrap;
+
+ cursor: pointer;
+}
+.uploaderInsideNode{
+ visibility:hidden;
+}
+.dojoxUploaderHover{
+ border-color: #a5beda;
+ border-bottom-color:#5c7590;
+ color:#243C5F;
+ background:#fcfdff url("../../../dijit/themes/tundra/images/buttonHover.png") repeat-x bottom;
+}
+.dojoxUploaderActive{
+ border-color:#366dba;
+ background: #ededed url("../../../dijit/themes/tundra/images/buttonActive.png") bottom repeat-x;
+}
+.dojoxUploaderDisabled{
+ color: #7F7F7F;
+ border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
+ background:#e4e4e4 url("../../../dijit/themes/tundra/images/buttonDisabled.png") top repeat-x;
+}
+.soria .dojoxUploaderNorm {
+ border: 1px solid #8ba0bd;
+ border-bottom:1px solid #657c9c;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #bcd5f0 url("../../../dijit/themes/soria/images/buttonEnabled.png") repeat-x top left;
+}
+.soria .dojoxUploaderHover{
+ color:#243C5F;
+ background:#acc5e2 url("../../../dijit/themes/soria/images/buttonHover.png") repeat-x top left !important;
+}
+.soria .dojoxUploaderActive{
+ border-color:#657c9c;
+ background: #91b4e5 url("../../../dijit/themes/soria/images/buttonActive.png") top left repeat-x !important;
+}
+.soria .dojoxUploaderDisabled{
+ border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+ background:#c3d3e5 url("../../../dijit/themes/soria/images/buttonDisabled.png") top repeat-x !important;
+ opacity: 0.60;
+}
+.nihilo .dojoxUploaderNorm {
+ border:1px solid #dedede;
+ border-bottom:1px solid #dedede;
+ padding: 0.1em 0.2em 0.2em 0.2em;
+ background: #fff url("../../../dijit/themes/nihilo/images/buttonEnabled.png") repeat-x top left;
+}
+.nihilo .dojoxUploaderHover{
+ color:#243C5F;
+ background:#fcfcfc url("../../../dijit/themes/nihilo/images/buttonHover.png") repeat-x top left !important;
+}
+.nihilo .dojoxUploaderActive{
+ border-color:#dedede;
+ background: #f5f5f5 url("../../../dijit/themes/nihilo/images/buttonActive.png") top left repeat-x !important;
+}
+.nihilo .dojoxUploaderDisabled{
+ border-color: #dedede;
+ background:#fafafa url("../../../dijit/themes/nihilo/images/buttonDisabled.png") top repeat-x !important;
+ opacity: 0.60;
+}
+.noir .dojoxUploaderNorm {
+ vertical-align:top;
+ height:30px;
+ font-family:inherit;
+ font-size:inherit;
+ background-color:transparent;
+ background-image:none;
+ padding:0px !important;
+ line-height:25px;
+ color:#cccccc;
+}
+.noir .dojoxUploaderHover{
+ color:#fa4242;
+}
+.noir .dojoxUploaderActive{
+ color:#31d397;
+}
+.noir .dojoxUploaderDisabled{
+ color:#3f3f3f;
+}
+.fileToUpload,
+.fileToUploadClose,
+.fileToUploadName,
+.fileToUploadSize{
+ height:18px;
+ line-height:18px;
+}
+.fileToUpload{
+ font-size:12px;
+ font-family:sans-serif;
+ padding:2px;
+ margin:0px;
+ width:100%;
+}
+.fileToUploadName{
+ text-align:left;
+ width:auto !important;
+}
+.fileToUploadSize{
+ width:30px !important;
+ text-align:right;
+}
+.dj_ie .fileToUploadSize{
+ padding-right:20px;
+}
+.fileToUploadClose{
+ background:url(../../../dijit/themes/tundra/images/tabClose.png) no-repeat 2px center;
+ width:18px !important;
+ cursor:pointer;
+}
+.fileToUploadClose:hover{
+ background:url(../../../dijit/themes/tundra/images/tabCloseHover.png) no-repeat 2px center;
+}
+.thumb{
+ height:50px;
+ padding:3px;
+ border:1px solid #ccc;
+ margin-bottom:3px;
+}
+.thumbPic{
+ width:50px;
+ height:50px;
+ text-align:center;
+ line-height:50px;
+ background-color:#000;
+ float:left;
+}
+.thumbPic img{
+ line-height:50px;
+ margin:auto auto;
+ display:block;
+}
+.thumbText{
+ float:left;
+ margin-left:5px;
+ font-size:10px;
+}
+.dj_ie object{
+
+ display:block !important;
+}
diff --git a/js/dojo/dojox/form/resources/HorizontalRangeSlider.html b/js/dojo/dojox/form/resources/HorizontalRangeSlider.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/HorizontalRangeSlider.html
@@ -0,0 +1,39 @@
+<table class="dijit dijitReset dijitSlider dojoxRangeSlider" cellspacing="0" cellpadding="0" border="0" rules="none"
+ ><tr class="dijitReset"
+ ><td class="dijitReset" colspan="2"></td
+ ><td dojoAttachPoint="containerNode,topDecoration" class="dijitReset" style="text-align:center;width:100%;"></td
+ ><td class="dijitReset" colspan="2"></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH"
+ ><div class="dijitSliderDecrementIconH" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton" dojoAttachEvent="onclick: decrement"><span class="dijitSliderButtonInner">-</span></div
+ ></td
+ ><td class="dijitReset"
+ ><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper dijitSliderLeftBumperH" dojoAttachEvent="onclick:_onClkDecBumper"></div
+ ></td
+ ><td class="dijitReset"
+ ><input dojoAttachPoint="valueNode" type="hidden" name="${name}"
+ /><div waiRole="presentation" class="dojoxRangeSliderBarContainer" dojoAttachPoint="sliderBarContainer"
+ ><div dojoAttachPoint="sliderHandle" tabIndex="${tabIndex}" class="dijitSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClick" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+ ><div class="dijitSliderImageHandle dijitSliderImageHandleH"></div
+ ></div
+ ><div waiRole="presentation" dojoAttachPoint="progressBar,focusNode" class="dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onBarClick"></div
+ ><div dojoAttachPoint="sliderHandleMax,focusNodeMax" tabIndex="${tabIndex}" class="dijitSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClickMax" waiRole="sliderMax" valuemin="${minimum}" valuemax="${maximum}"
+ ><div class="dijitSliderImageHandle dijitSliderImageHandleH"></div
+ ></div
+ ><div waiRole="presentation" dojoAttachPoint="remainingBar" class="dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH" dojoAttachEvent="onmousedown:_onRemainingBarClick"></div
+ ></div
+ ></td
+ ><td class="dijitReset"
+ ><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper dijitSliderRightBumperH" dojoAttachEvent="onclick:_onClkIncBumper"></div
+ ></td
+ ><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH"
+ ><div class="dijitSliderIncrementIconH" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton" dojoAttachEvent="onclick: increment"><span class="dijitSliderButtonInner">+</span></div
+ ></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td class="dijitReset" colspan="2"></td
+ ><td dojoAttachPoint="containerNode,bottomDecoration" class="dijitReset" style="text-align:center;"></td
+ ><td class="dijitReset" colspan="2"></td
+ ></tr
+></table>
diff --git a/js/dojo/dojox/form/resources/ListInput.css b/js/dojo/dojox/form/resources/ListInput.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/ListInput.css
@@ -0,0 +1,75 @@
+.dojoxListInput {
+ border:1px solid #ccc;
+ background-color:#efefef;
+ height:auto !important;
+ max-height:60px;
+ min-height:20px;
+ overflow:auto;
+ position:relative
+}
+.dojoxListInput ul {
+ margin:0;
+ padding:0
+}
+.dijitDialogCloseIcon {
+ display:none;
+}
+.dojoxListInputClosable .dijitDialogCloseIcon{
+ display:inline
+}
+.dojoxListInputClosable {
+ padding-right:18px !important
+}
+.dojoxListInputItem {
+ float:left;
+ list-style-type:none;
+ margin:1px 5px 1px 1px;
+ padding:0
+}
+.dojoxListInputItem .closeText {
+ display:none;
+ position:absolute;
+}
+.dojoxListInputItem .dijitDialogCloseIcon{
+ right:auto !important;
+ border:0 !important;
+ padding:0!important;
+}
+.dojoxListInputMatch {
+ border :1px solid #5EB55E;
+ background-color:#efffef
+}
+.dojoxListInputMismatch {
+ border :1px solid #B55E5E;
+ background-color:#ffefef
+}
+.dojoxListInput.dojoxListInputFocused {
+ border:1px solid #000;
+ border-right:1px solid #ccc;
+ border-bottom:1px solid #ccc;
+ background-color:#fff
+}
+.dojoxListInputNode {
+ cursor:text;
+}
+.dojoxListInput .dijitTextBox {
+ background:#efefef !important;
+ border:0 !important;
+}
+.dojoxListInputFocused .dijitTextBox {
+ background: #fff !important;
+ border:0 !important;
+}
+.dojoxListInputItem .dijitTextBox {
+ width:auto !important;
+ border:0 !important;
+}
+.dojoxListInputNode {
+ float:none;
+}
+.dojoxListInputItemEdited{
+ display:none !important
+}
+.dojoxListInputItem .dijitInline{
+ display:inline !important
+}
diff --git a/js/dojo/dojox/form/resources/PasswordValidator.html b/js/dojo/dojox/form/resources/PasswordValidator.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/PasswordValidator.html
@@ -0,0 +1,3 @@
+<div dojoAttachPoint="containerNode">
+ <input type="hidden" name="${name}" value="" dojoAttachPoint="focusNode" />
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/form/resources/RangeSlider.css b/js/dojo/dojox/form/resources/RangeSlider.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/RangeSlider.css
@@ -0,0 +1,18 @@
+.dojoxRangeSlider .dijitSliderLeftBumperH, .dojoxRangeSlider .dijitSliderBottomBumperV {
+ background:#FFFFFF !important;
+}
+.dojoxRangeSliderBarContainer {
+ position:relative;
+}
+.dojoxRangeSlider .dijitSliderProgressBarV {
+ position:relative !important;
+}
+.dojoxRangeSlider .dijitSliderProgressBar {
+ overflow:hidden;
+ cursor:pointer;
+
+}
+.dojoxRangeSlider .dijitSliderProgressBarV {
+ position:absolute !important;
+ border-width: 0px;
+}
diff --git a/js/dojo/dojox/form/resources/Rating.css b/js/dojo/dojox/form/resources/Rating.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/Rating.css
@@ -0,0 +1,20 @@
+.dojoxRating ul {
+ padding:0;
+ margin:0;
+}
+.dojoxRatingStar {
+ display:inline-block;
+ background-image:url(images/rating_empty.gif);
+ background-position:left center;
+ position:relative;
+ height:15px;
+ width:15px;
+ float:left;
+}
+.dojoxRatingStarChecked {
+ background-image:url(images/rating_full.gif);
+}
+.dojoxRatingStarHover {
+ background-image:url(images/rating_full.gif);
+ opacity:.5;
+}
diff --git a/js/dojo/dojox/form/resources/VerticalRangeSlider.html b/js/dojo/dojox/form/resources/VerticalRangeSlider.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/VerticalRangeSlider.html
@@ -0,0 +1,50 @@
+<table class="dijitReset dijitSlider dojoxRangeSlider" cellspacing="0" cellpadding="0" border="0" rules="none"
+><tbody class="dijitReset"
+ ><tr class="dijitReset"
+ ><td class="dijitReset"></td
+ ><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV"
+ ><div class="dijitSliderIncrementIconV" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton" dojoAttachEvent="onclick: increment"><span class="dijitSliderButtonInner">+</span></div
+ ></td
+ ><td class="dijitReset"></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td class="dijitReset"></td
+ ><td class="dijitReset"
+ ><center><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper dijitSliderTopBumperV" dojoAttachEvent="onclick:_onClkIncBumper"></div></center
+ ></td
+ ><td class="dijitReset"></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td dojoAttachPoint="leftDecoration" class="dijitReset" style="text-align:center;height:100%;"></td
+ ><td class="dijitReset" style="height:100%;"
+ ><input dojoAttachPoint="valueNode" type="hidden" name="${name}"
+ /><center waiRole="presentation" style="position:relative;height:100%;" dojoAttachPoint="sliderBarContainer"
+ ><div waiRole="presentation" dojoAttachPoint="remainingBar" class="dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV" dojoAttachEvent="onmousedown:_onRemainingBarClick"
+ ><div dojoAttachPoint="sliderHandle" tabIndex="${tabIndex}" class="dijitSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClick" style="vertical-align:top;" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+ ><div class="dijitSliderImageHandle dijitSliderImageHandleV"></div
+ ></div
+ ><div waiRole="presentation" dojoAttachPoint="progressBar,focusNode" tabIndex="${tabIndex}" class="dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onBarClick"
+ ></div
+ ><div dojoAttachPoint="sliderHandleMax,focusNodeMax" tabIndex="${tabIndex}" class="dijitSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClickMax" style="vertical-align:top;" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+ ><div class="dijitSliderImageHandle dijitSliderImageHandleV"></div
+ ></div
+ ></div
+ ></center
+ ></td
+ ><td dojoAttachPoint="containerNode,rightDecoration" class="dijitReset" style="text-align:center;height:100%;"></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td class="dijitReset"></td
+ ><td class="dijitReset"
+ ><center><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper dijitSliderBottomBumperV" dojoAttachEvent="onclick:_onClkDecBumper"></div></center
+ ></td
+ ><td class="dijitReset"></td
+ ></tr
+ ><tr class="dijitReset"
+ ><td class="dijitReset"></td
+ ><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV"
+ ><div class="dijitSliderDecrementIconV" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton" dojoAttachEvent="onclick: decrement"><span class="dijitSliderButtonInner">-</span></div
+ ></td
+ ><td class="dijitReset"></td
+ ></tr
+></tbody></table>
diff --git a/js/dojo/dojox/form/resources/_CheckedMultiSelectItem.html b/js/dojo/dojox/form/resources/_CheckedMultiSelectItem.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/form/resources/_CheckedMultiSelectItem.html
@@ -0,0 +1,5 @@
+<div class="dijitReset ${baseClass}"
+ ><input class="${baseClass}Box" dojoType="dijit.form.CheckBox" dojoAttachPoint="checkBox"
+ dojoAttachEvent="_onClick:_changeBox" type="${_type.type}" baseClass="${_type.baseClass}"
+ ><div class="dijitInline ${baseClass}Label" dojoAttachPoint="labelNode" dojoAttachEvent="onmousedown:_onMouse,onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick"></div
+></div>
diff --git a/js/dojo/dojox/form/resources/images/loading_wheel.gif b/js/dojo/dojox/form/resources/images/loading_wheel.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..901a7e394e1eb57bce0284ca04824668da5a97aa
GIT binary patch
literal 1266
zc${<hbhEHb<YM4rxXQrr|NsBrzkh%K{{8dk&+p&AfA#9svuDp9J$iKS-o0D5Ze6=}
z?b4-7=gyrwb?Vg7qel-OJh*r7-km#lZr!?d<Hn6^*REZ;a^=#cOBXCyFlWx388c=~
znKEU<gb6)8Jslk#EiEk#4Gq=R)#c^o#l^+>`T5z|+3D%&$;rv_@$penQDI?WK|w)&
zetuqFUT$t~PEJmCc6L@)R;H$=hK7c^y1JU0nyRX*va+(0l9HmLq5=W}K-V&$0>%H_
zey$<G&W-`DMtTO!j3A+(ESy{nRt!2Id5||5*!&&lzGL`M!@#g`1GCp&2Bw9Lhi6>%
zXl!73S(q!v%#gTXcZmy|Vu-?y8XK0U4ZI8H$UJmXvOOSUC&VMj%*yB_B*rhu#_eUr
z!ob606=>xMvV#@P4nK#v=NN8OFmNrL@K|%DliEVZ!yQXwwzx6~JlLVteoR^6f~($~
zrl14!GPF`3Ht;soNHH}mFu1^bK%AGGlbM;(iC2J&kCol4j)ASO9lI6w4s!#-ck;B)
zI-9;kl2^M+?BtT>1_>)(twqKSX{()@gCseGMI62wS*~j3<9TFJBcjsb)VME0fQzZR
z#Hz^&tC@~KGb1j_w(aU(`uJjFTR-zD;Vx4Pj=8K)G+vl&2zK~BLm^v3!1<8`m&@9T
ze2H>w42O;?I6Cn0vokT(StU1lV3^7YG}Rht>hYT|M4Xe-mU2yPo9^oKb(3$~yep!L
zJ}-r=yp5JSzce_>?)TKxp-t$H2Rnmw3sYN{qK-%#6Lwd6ILyskP;61cx^Tn81pzt|
z4;>6o1ZZipK3kCNBgDew^7W!17pJP@lY=6Bo{0xjUd`Y=;>;dq#?35XCZx>e<;0+@
z*4D<vgWYgYuukyc=-<W4#56IWk9BSfBcr00lk*`30Sh0ghYbyH3QCff@Ufgy=#&co
zA@SoxS|9%-j)b*Nidoqz4DMLXv;dk}A;H(()2f_wMOCP`SJ6p8Y?af5rItq$RAT13
z1q<@Ybsk!hxnZlHep_LR)m%IIWak<F9L?Aaa{wCVuE5jo>g>4D;uTkGbIOGRE@6oi
z1_e_>wlJ_KS!{IRP?9>apm~mtm7AuKb!(WFkD~-vr;CiNyRVcKstXyRQ3Ud}yMzMY
z;fD<iF6g#29JpXmSrwvqXai$rOVE~O9|Q{-Z1j6JFwS}*vhbMp6+^{4hx*rj-WfBA
z)2hyj)d{Pab`En3JQO&D=QlfKT+l34lXUU$FtJpbkvt<q!Nw{i@kD|`$s94)9T$8A
z<z=&j8DGjd_r6;+F{I7PS0vln5nI*;rcXUZ9VvI!hQJ$*cN7>E9VM!I#SR_%!sH~l
tl#RK~#7K#Y?XIi1B#Y3Lwsi*rr)W(&-4M7YLqnX8-`h$+(9My-8UXwWmplLf
diff --git a/js/dojo/dojox/form/resources/images/nihiloFolderSprite.gif b/js/dojo/dojox/form/resources/images/nihiloFolderSprite.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0034b548ca905f068253823c72550957d4f6c3d7
GIT binary patch
literal 331
zc$@)C0kr-{Nk%w1VITkv0K@<Q|JiD4WLLSOW_xEgmW5XT<(iU)Y{{4%i+M@^;*9^`
zh5zJ~|L3Cr+i{k8G5_6p|KEYRpIiUjcK_afu9HfYfJfiHT)DBGqoA0<k{Y?4QR=M|
zu81f9*k=F#|NsC0A^8LW0018VEC2ui03ZMj000HZ;3tX(XL87>j^&xICwFZ0cEn;l
z*Z28xwV;q@I%JN>B$6{AI0=p*r$Vg^n3$|~n+<R%jBr6fDVH07PKUw?c;4{%o4^r-
z8HGh6p_n|-Y8o5{a)lmO0tI+^dk_;6fE^kR7>06)1(|w$5D$=Pk^=@8q!)3e7XuCg
z3$1$zj(-548UqUq3kn3N2x@8-0<V01o{^FW2?ekn7R}ARk^&0T3bCJ{(Gb-V*wBFy
d5aAPkkj9b`4e8z9k{a&s@bMq<^za`c06V3+m2Ln4
diff --git a/js/dojo/dojox/form/resources/images/rating_empty.gif b/js/dojo/dojox/form/resources/images/rating_empty.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8662c4385e786fa0b055408945cb5a6676684ac0
GIT binary patch
literal 934
zc${<hbhEHb<Y(Y#_|5<VOP4NPw|@PWEnBv3-MVc%5bOYg-Me@1-MjDL!GniD;P5dZ
zIDY*22@p7U?%c(T7cYarl`B`SUcY|*#*LeI?%cg|_ui8yPoF$}_U`@rj~_pM{Pg+D
zS0MQI^&1d;|Ni~Q_a6}O^XJcBVDS472>fLj1*2eqfZ|UUMh1re3_2hVC{HkOG&B6?
zl=;EWc(9qBSs|uFq4{7di*SVpLtz3lkCK6j#R><9MrMAc85W63OfAf8EE+%D6P()l
zRf5)dBr>(IbFt`H{RnVc#wDyMlcS=+*wi7c88D$iA@N}ozmi)A!$F25R(=_sf)4?S
h3z>Mu*-Rt~5)YqhmTUi)9pJ!lXimO%7!L=7H2}kcnyml;
diff --git a/js/dojo/dojox/form/resources/images/rating_full.gif b/js/dojo/dojox/form/resources/images/rating_full.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6fe24bfcd97117f0efd1976566235661b6ac227c
GIT binary patch
literal 936
zc${<hbhEHb<Y(Y#_|5<V7b}(SbgAFzQM=Qjajn(hTC3sBF2j41)gI1Je==YF@f?jO
z3)G*lP<y>p@AY!s*DG}1t=4<DM(@oA&G*|i-|x`;xKaPx7UP?fyzk74yuUd8(dyEl
zC-i=wH28hO@b@W$-)9W|T-5z@S?A9s-9Oi~|6JAib6@?>O|3sSwEx`J{Buj|&mE0F
zcQpUp)A;jH?axE?KaW-aJXZVjRQ1nul|QePpYNW)FbYNi&4A)h7Dfh!{|q`H4k%AB
zaI`Y~=al)O&wQ|%omnAf#=)k8tt^5K4h)44*tk@+ax7LXY-nKQl3J3naS>xPBNJD~
zkM@I&?E>mCXBs9t9cgEm(9z>qsKmxAspFz^!(&4mlaOxQ42y#cjvZoA^jM%^sKn^P
qA#36D-~;0!Cth(SnHvQThgzqy^9m^Z%4cR|<|sb4Ho{PW!5RRwA(dnR
diff --git a/js/dojo/dojox/form/resources/images/soriaFolderSprite.gif b/js/dojo/dojox/form/resources/images/soriaFolderSprite.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..19e35c11c5a1ad633b875cd26969f1b89c2d07a9
GIT binary patch
literal 335
zc$@)G0kHl@Nk%w1VITkv0K@<Q%-Zp8gP2ccds=UV!O`y9=J$%5tk&Z7;_LZth^%IL
ziNeXw#MJMryU)<x^nR16yUp!CR&PUCZobg&$k*|Nm#g3D_?@Y-l%A|=f~k6ssDGKm
zU3QbW%k2OE|NsC0A^8LW0018VEC2ui03ZMj000Hdp!bbmz@3~xjv{HI>iVHvw%uDo
zkF<^Js2OfZyqyx6q;jd`L=;fPV8|I*2a*(K%k6Hn8U&(nFa*x$j=EzSc;4{%+hjmk
z$PNdEL4d3~8XO98gdPGM1_fjX4gh--erp;77=>~XhzFW^0DKdFfC35^qz!Qkq!$tb
z6?u)043MB25@KTksTTv09Rn2rz!ZCZpnwAwb_D<p%*?zR6~cR-#ej*5o3Njf4-9++
hveg;}nwyP$yw(Qm73~!d4;u3FAM5Py@bmN`06X1DoFf1L
diff --git a/js/dojo/dojox/form/resources/images/tundraFolderSprite.gif b/js/dojo/dojox/form/resources/images/tundraFolderSprite.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6cf8c0904e61f98da3893c1f1846b1d508cc25a4
GIT binary patch
literal 318
zc$@(~0m1%9Nk%w1VITkv0K^{vii(S$pPzGdb)}`Ie0+Sgw6&F%m%6*Vj*pO_qNHVI
zWrv4{uCK7Owz#OPuIA_H)YaF%z{1(u+pe&(rKqaE!NY=thT-Dl$;-{QxVpHxy3o<n
z-{9fL$;+y$s{jB0A^8LW0018VEC2ui03ZMj000HM;P(+gS%_%*LBz5Msv01PX9G#D
z2V!Y^2|!>t9H0Qdq!J)nD4)EhW=gG24b7)A`YBw#;PChKae54cv^t$Q92g9Vd`_1$
zvIfj!&+k7D6dQtrgn|@!9EpmHi5&?Ykdcy*30Vmcn3<XocL5cjprM~p3ji3WsHvwK
z9|jq(u(7XLWe5?sxVaGt4<85<z`?@62qFRr4av&O4IVud(9zP+Odkpk*xA|+2^+>1
Q;NjxnFxKPe7APSAI~H7(K>z>%
diff --git a/js/dojo/dojox/form/resources/uploader.swf b/js/dojo/dojox/form/resources/uploader.swf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dd5bdd239f863f2fcf41d47e9ed22c32dd6765ac
GIT binary patch
literal 16890
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
FTN2&9cX|K-
diff --git a/js/dojo/dojox/fx/Shadow.js b/js/dojo/dojox/fx/Shadow.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/Shadow.js
@@ -0,0 +1,119 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.Shadow"]){
+dojo._hasResource["dojox.fx.Shadow"]=true;
+dojo.provide("dojox.fx.Shadow");
+dojo.experimental("dojox.fx.Shadow");
+dojo.require("dijit._Widget");
+dojo.require("dojo.NodeList-fx");
+dojo.declare("dojox.fx.Shadow",dijit._Widget,{shadowPng:dojo.moduleUrl("dojox.fx","resources/shadow"),shadowThickness:7,shadowOffset:3,opacity:0.75,animate:false,node:null,startup:function(){
+this.inherited(arguments);
+this.node.style.position="relative";
+this.pieces={};
+var x1=-1*this.shadowThickness;
+var y0=this.shadowOffset;
+var y1=this.shadowOffset+this.shadowThickness;
+this._makePiece("tl","top",y0,"left",x1);
+this._makePiece("l","top",y1,"left",x1,"scale");
+this._makePiece("tr","top",y0,"left",0);
+this._makePiece("r","top",y1,"left",0,"scale");
+this._makePiece("bl","top",0,"left",x1);
+this._makePiece("b","top",0,"left",0,"crop");
+this._makePiece("br","top",0,"left",0);
+this.nodeList=dojo.query(".shadowPiece",this.node);
+this.setOpacity(this.opacity);
+this.resize();
+},_makePiece:function(_1,_2,_3,_4,_5,_6){
+var _7;
+var _8=this.shadowPng+_1.toUpperCase()+".png";
+if(dojo.isIE<7){
+_7=dojo.create("div");
+_7.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+_8+"'"+(_6?", sizingMethod='"+_6+"'":"")+")";
+}else{
+_7=dojo.create("img",{src:_8});
+}
+_7.style.position="absolute";
+_7.style[_2]=_3+"px";
+_7.style[_4]=_5+"px";
+_7.style.width=this.shadowThickness+"px";
+_7.style.height=this.shadowThickness+"px";
+dojo.addClass(_7,"shadowPiece");
+this.pieces[_1]=_7;
+this.node.appendChild(_7);
+},setOpacity:function(n,_9){
+if(dojo.isIE){
+return;
+}
+if(!_9){
+_9={};
+}
+if(this.animate){
+var _a=[];
+this.nodeList.forEach(function(_b){
+_a.push(dojo._fade(dojo.mixin(_9,{node:_b,end:n})));
+});
+dojo.fx.combine(_a).play();
+}else{
+this.nodeList.style("opacity",n);
+}
+},setDisabled:function(_c){
+if(_c){
+if(this.disabled){
+return;
+}
+if(this.animate){
+this.nodeList.fadeOut().play();
+}else{
+this.nodeList.style("visibility","hidden");
+}
+this.disabled=true;
+}else{
+if(!this.disabled){
+return;
+}
+if(this.animate){
+this.nodeList.fadeIn().play();
+}else{
+this.nodeList.style("visibility","visible");
+}
+this.disabled=false;
+}
+},resize:function(_d){
+var x;
+var y;
+if(_d){
+x=_d.x;
+y=_d.y;
+}else{
+var co=dojo._getBorderBox(this.node);
+x=co.w;
+y=co.h;
+}
+var _e=y-(this.shadowOffset+this.shadowThickness);
+if(_e<0){
+_e=0;
+}
+if(y<1){
+y=1;
+}
+if(x<1){
+x=1;
+}
+with(this.pieces){
+l.style.height=_e+"px";
+r.style.height=_e+"px";
+b.style.width=x+"px";
+bl.style.top=y+"px";
+b.style.top=y+"px";
+br.style.top=y+"px";
+tr.style.left=x+"px";
+r.style.left=x+"px";
+br.style.left=x+"px";
+}
+}});
+}
diff --git a/js/dojo/dojox/fx/ext-dojo/NodeList-style.js b/js/dojo/dojox/fx/ext-dojo/NodeList-style.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/ext-dojo/NodeList-style.js
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.NodeList-style"]){
+dojo._hasResource["dojox.fx.ext-dojo.NodeList-style"]=true;
+dojo.provide("dojox.fx.ext-dojo.NodeList-style");
+dojo.experimental("dojox.fx.ext-dojo.NodeList-style");
+dojo.require("dojo.NodeList-fx");
+dojo.require("dojox.fx.style");
+dojo.extend(dojo.NodeList,{addClassFx:function(_1,_2){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.addClass(n,_1,_2);
+}));
+},removeClassFx:function(_3,_4){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.removeClass(n,_3,_4);
+}));
+},toggleClassFx:function(_5,_6,_7){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.toggleClass(n,_5,_6,_7);
+}));
+}});
+}
diff --git a/js/dojo/dojox/fx/ext-dojo/NodeList.js b/js/dojo/dojox/fx/ext-dojo/NodeList.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/ext-dojo/NodeList.js
@@ -0,0 +1,25 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.NodeList"]){
+dojo._hasResource["dojox.fx.ext-dojo.NodeList"]=true;
+dojo.provide("dojox.fx.ext-dojo.NodeList");
+dojo.experimental("dojox.fx.ext-dojo.NodeList");
+dojo.require("dojo.NodeList-fx");
+dojo.require("dojox.fx");
+dojo.extend(dojo.NodeList,{sizeTo:function(_1){
+return this._anim(dojox.fx,"sizeTo",_1);
+},slideBy:function(_2){
+return this._anim(dojox.fx,"slideBy",_2);
+},highlight:function(_3){
+return this._anim(dojox.fx,"highlight",_3);
+},fadeTo:function(_4){
+return this._anim(dojo,"_fade",_4);
+},wipeTo:function(_5){
+return this._anim(dojox.fx,"wipeTo",_5);
+}});
+}
diff --git a/js/dojo/dojox/fx/flip.js b/js/dojo/dojox/fx/flip.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/flip.js
@@ -0,0 +1,183 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.flip"]){
+dojo._hasResource["dojox.fx.flip"]=true;
+dojo.provide("dojox.fx.flip");
+dojo.experimental("dojox.fx.flip");
+dojo.require("dojo.fx");
+(function(){
+var _1="border",_2="Width",_3="Height",_4="Top",_5="Right",_6="Left",_7="Bottom";
+dojox.fx.flip=function(_8){
+var _9=dojo.create("div"),_a=_8.node=dojo.byId(_8.node),s=_a.style,_b=null,hs=null,pn=null,_c=_8.lightColor||"#dddddd",_d=_8.darkColor||"#555555",_e=dojo.style(_a,"backgroundColor"),_f=_8.endColor||_e,_10={},_11=[],_12=_8.duration?_8.duration/2:250,dir=_8.dir||"left",_13=0.9,_14="transparent",_15=_8.whichAnim,_16=_8.axis||"center",_17=_8.depth;
+var _18=function(_19){
+return ((new dojo.Color(_19)).toHex()==="#000000")?"#000001":_19;
+};
+if(dojo.isIE<7){
+_f=_18(_f);
+_c=_18(_c);
+_d=_18(_d);
+_e=_18(_e);
+_14="black";
+_9.style.filter="chroma(color='#000000')";
+}
+var _1a=(function(n){
+return function(){
+var ret=dojo.coords(n,true);
+_b={top:ret.y,left:ret.x,width:ret.w,height:ret.h};
+};
+})(_a);
+_1a();
+hs={position:"absolute",top:_b["top"]+"px",left:_b["left"]+"px",height:"0",width:"0",zIndex:_8.zIndex||(s.zIndex||0),border:"0 solid "+_14,fontSize:"0",visibility:"hidden"};
+var _1b=[{},{top:_b["top"],left:_b["left"]}];
+var _1c={left:[_6,_5,_4,_7,_2,_3,"end"+_3+"Min",_6,"end"+_3+"Max"],right:[_5,_6,_4,_7,_2,_3,"end"+_3+"Min",_6,"end"+_3+"Max"],top:[_4,_7,_6,_5,_3,_2,"end"+_2+"Min",_4,"end"+_2+"Max"],bottom:[_7,_4,_6,_5,_3,_2,"end"+_2+"Min",_4,"end"+_2+"Max"]};
+pn=_1c[dir];
+if(typeof _17!="undefined"){
+_17=Math.max(0,Math.min(1,_17))/2;
+_13=0.4+(0.5-_17);
+}else{
+_13=Math.min(0.9,Math.max(0.4,_b[pn[5].toLowerCase()]/_b[pn[4].toLowerCase()]));
+}
+var p0=_1b[0];
+for(var i=4;i<6;i++){
+if(_16=="center"||_16=="cube"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()]*_13;
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()]/_13;
+}else{
+if(_16=="shortside"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()];
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()]/_13;
+}else{
+if(_16=="longside"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()]*_13;
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()];
+}
+}
+}
+}
+if(_16=="center"){
+p0[pn[2].toLowerCase()]=_b[pn[2].toLowerCase()]-(_b[pn[8]]-_b[pn[6]])/4;
+}else{
+if(_16=="shortside"){
+p0[pn[2].toLowerCase()]=_b[pn[2].toLowerCase()]-(_b[pn[8]]-_b[pn[6]])/2;
+}
+}
+_10[pn[5].toLowerCase()]=_b[pn[5].toLowerCase()]+"px";
+_10[pn[4].toLowerCase()]="0";
+_10[_1+pn[1]+_2]=_b[pn[4].toLowerCase()]+"px";
+_10[_1+pn[1]+"Color"]=_e;
+p0[_1+pn[1]+_2]=0;
+p0[_1+pn[1]+"Color"]=_d;
+p0[_1+pn[2]+_2]=p0[_1+pn[3]+_2]=_16!="cube"?(_b["end"+pn[5]+"Max"]-_b["end"+pn[5]+"Min"])/2:_b[pn[6]]/2;
+p0[pn[7].toLowerCase()]=_b[pn[7].toLowerCase()]+_b[pn[4].toLowerCase()]/2+(_8.shift||0);
+p0[pn[5].toLowerCase()]=_b[pn[6]];
+var p1=_1b[1];
+p1[_1+pn[0]+"Color"]={start:_c,end:_f};
+p1[_1+pn[0]+_2]=_b[pn[4].toLowerCase()];
+p1[_1+pn[2]+_2]=0;
+p1[_1+pn[3]+_2]=0;
+p1[pn[5].toLowerCase()]={start:_b[pn[6]],end:_b[pn[5].toLowerCase()]};
+dojo.mixin(hs,_10);
+dojo.style(_9,hs);
+dojo.body().appendChild(_9);
+var _1d=function(){
+dojo.destroy(_9);
+s.backgroundColor=_f;
+s.visibility="visible";
+};
+if(_15=="last"){
+for(i in p0){
+p0[i]={start:p0[i]};
+}
+p0[_1+pn[1]+"Color"]={start:_d,end:_f};
+p1=p0;
+}
+if(!_15||_15=="first"){
+_11.push(dojo.animateProperty({node:_9,duration:_12,properties:p0}));
+}
+if(!_15||_15=="last"){
+_11.push(dojo.animateProperty({node:_9,duration:_12,properties:p1,onEnd:_1d}));
+}
+dojo.connect(_11[0],"play",function(){
+_9.style.visibility="visible";
+s.visibility="hidden";
+});
+return dojo.fx.chain(_11);
+};
+dojox.fx.flipCube=function(_1e){
+var _1f=[],mb=dojo.marginBox(_1e.node),_20=mb.w/2,_21=mb.h/2,_22={top:{pName:"height",args:[{whichAnim:"first",dir:"top",shift:-_21},{whichAnim:"last",dir:"bottom",shift:_21}]},right:{pName:"width",args:[{whichAnim:"first",dir:"right",shift:_20},{whichAnim:"last",dir:"left",shift:-_20}]},bottom:{pName:"height",args:[{whichAnim:"first",dir:"bottom",shift:_21},{whichAnim:"last",dir:"top",shift:-_21}]},left:{pName:"width",args:[{whichAnim:"first",dir:"left",shift:-_20},{whichAnim:"last",dir:"right",shift:_20}]}};
+var d=_22[_1e.dir||"left"],p=d.args;
+_1e.duration=_1e.duration?_1e.duration*2:500;
+_1e.depth=0.8;
+_1e.axis="cube";
+for(var i=p.length-1;i>=0;i--){
+dojo.mixin(_1e,p[i]);
+_1f.push(dojox.fx.flip(_1e));
+}
+return dojo.fx.combine(_1f);
+};
+dojox.fx.flipPage=function(_23){
+var n=_23.node,_24=dojo.coords(n,true),x=_24.x,y=_24.y,w=_24.w,h=_24.h,_25=dojo.style(n,"backgroundColor"),_26=_23.lightColor||"#dddddd",_27=_23.darkColor,_28=dojo.create("div"),_29=[],hn=[],dir=_23.dir||"right",pn={left:["left","right","x","w"],top:["top","bottom","y","h"],right:["left","left","x","w"],bottom:["top","top","y","h"]},_2a={right:[1,-1],left:[-1,1],top:[-1,1],bottom:[1,-1]};
+dojo.style(_28,{position:"absolute",width:w+"px",height:h+"px",top:y+"px",left:x+"px",visibility:"hidden"});
+var hs=[];
+for(var i=0;i<2;i++){
+var r=i%2,d=r?pn[dir][1]:dir,wa=r?"last":"first",_2b=r?_25:_26,_2c=r?_2b:_23.startColor||n.style.backgroundColor;
+hn[i]=dojo.clone(_28);
+var _2d=function(x){
+return function(){
+dojo.destroy(hn[x]);
+};
+}(i);
+dojo.body().appendChild(hn[i]);
+hs[i]={backgroundColor:r?_2c:_25};
+hs[i][pn[dir][0]]=_24[pn[dir][2]]+_2a[dir][0]*i*_24[pn[dir][3]]+"px";
+dojo.style(hn[i],hs[i]);
+_29.push(dojox.fx.flip({node:hn[i],dir:d,axis:"shortside",depth:_23.depth,duration:_23.duration/2,shift:_2a[dir][i]*_24[pn[dir][3]]/2,darkColor:_27,lightColor:_26,whichAnim:wa,endColor:_2b}));
+dojo.connect(_29[i],"onEnd",_2d);
+}
+return dojo.fx.chain(_29);
+};
+dojox.fx.flipGrid=function(_2e){
+var _2f=_2e.rows||4,_30=_2e.cols||4,_31=[],_32=dojo.create("div"),n=_2e.node,_33=dojo.coords(n,true),x=_33.x,y=_33.y,nw=_33.w,nh=_33.h,w=_33.w/_30,h=_33.h/_2f,_34=[];
+dojo.style(_32,{position:"absolute",width:w+"px",height:h+"px",backgroundColor:dojo.style(n,"backgroundColor")});
+for(var i=0;i<_2f;i++){
+var r=i%2,d=r?"right":"left",_35=r?1:-1;
+var cn=dojo.clone(n);
+dojo.style(cn,{position:"absolute",width:nw+"px",height:nh+"px",top:y+"px",left:x+"px",clip:"rect("+i*h+"px,"+nw+"px,"+nh+"px,0)"});
+dojo.body().appendChild(cn);
+_31[i]=[];
+for(var j=0;j<_30;j++){
+var hn=dojo.clone(_32),l=r?j:_30-(j+1);
+var _36=function(xn,_37,_38){
+return function(){
+if(!(_37%2)){
+dojo.style(xn,{clip:"rect("+_37*h+"px,"+(nw-(_38+1)*w)+"px,"+((_37+1)*h)+"px,0px)"});
+}else{
+dojo.style(xn,{clip:"rect("+_37*h+"px,"+nw+"px,"+((_37+1)*h)+"px,"+((_38+1)*w)+"px)"});
+}
+};
+}(cn,i,j);
+dojo.body().appendChild(hn);
+dojo.style(hn,{left:x+l*w+"px",top:y+i*h+"px",visibility:"hidden"});
+var a=dojox.fx.flipPage({node:hn,dir:d,duration:_2e.duration||900,shift:_35*w/2,depth:0.2,darkColor:_2e.darkColor,lightColor:_2e.lightColor,startColor:_2e.startColor||_2e.node.style.backgroundColor}),_39=function(xn){
+return function(){
+dojo.destroy(xn);
+};
+}(hn);
+dojo.connect(a,"play",this,_36);
+dojo.connect(a,"play",this,_39);
+_31[i].push(a);
+}
+_34.push(dojo.fx.chain(_31[i]));
+}
+dojo.connect(_34[0],"play",function(){
+dojo.style(n,{visibility:"hidden"});
+});
+return dojo.fx.combine(_34);
+};
+})();
+}
diff --git a/js/dojo/dojox/fx/resources/shadowB.png b/js/dojo/dojox/fx/resources/shadowB.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0da8a2ad4783f171d1f36c0b58b3a85594dd3bc7
GIT binary patch
literal 470
zc$@*&0V)28P)<h;3K|Lk000e1NJLTq00+<j000OG1^@s6q4H$400004XF*Lt007q5
z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzXh}ptRCwC#
z-7#*%FboCI3h+^VjNG{B(4|8>u*sYyhTw=2-vc@swm#|9LCdIZ`@Y}40Dx**$MJUY
z+5i9ma7J_<A9Za2AfYWH?%DtV%W0j*M_pSs0P4J1H;;Y*PK!b3zH@%nYzF86u$b-f
z1N)yg0Kjst927U%E;)bZ?6T#|mU-=!Ym*)55wfRSI~MM1$Tnp*1N6_YZ9onH#XNVQ
z|7rsOET`%qxbgtKYPOZLTRY#{GiOtK#-`bUK1!%twnW)NZOdIdb6=zA+M}}r0F!y{
zK>yJO04T?f-h9_@UK9EzTlwdw_nm4@F+jhHK}Ws5$!=}6<+!#FO#lE(*dAZs+5iB{
z@u#1yEt_m=(>Icf@cVXNUlv-RZxhuf+kDx4u)s420C<BP=m5Z3c8;n|ZTf<H0_0?f
z<DTe?+SKNI5di449mnB+paTFiF`&{{+;af<6hk-n9DM}<iuo5{0DPooTI{oLP5=M^
M07*qoM6N<$g3tcXFaQ7m
diff --git a/js/dojo/dojox/fx/resources/shadowBL.png b/js/dojo/dojox/fx/resources/shadowBL.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..492628366ea17da52adc2520ffd004ce7d9ac7f1
GIT binary patch
literal 272
zc%17D@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmUfZd~z?Faq)=OI#yL
zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i<T@^o<wskmj*carb00*}khO<x2Q
zCw^i7{C~R3RF6Z~o_8tnCfhtVth)bw!IV!?uSM&cx9*Ss@FHvNS&7RQqUTIlIW4ZP
zXY1;iAyo5GZiVQHJ~qYBWqGeWiWTDi2FJ|zyLOBFvAc`K!NcbZWZWaCJ=I(~qfkb4
zjw<Km!zpvV?>i!K*~C}r)UM_K&u;R&Ezopt+uFI$Z$7Kk^GS_ttO&jz&&bALYnpUA
U#q`uNplcaCUHx3vIVCg!0E^;nRR910
diff --git a/js/dojo/dojox/fx/resources/shadowBR.png b/js/dojo/dojox/fx/resources/shadowBR.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ee704df903cf22e2989b4c620f830ba7d592fca9
GIT binary patch
literal 271
zc%17D@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmUfZd~z?Faq)=OI#yL
zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i<T^mK6yskmk0@5y&qfrsT#FZ28}
z!oM!sG#0xqZMoEPb#7<Wl8J_!Z@egtl~*d#T3V*S<o{(&_4~icg_%*W+irDsHfw1l
ztqo;6%gI=H@Me#p2wzvxxkD|?3NtlZHZ#Z`dO2q|t02EjvD25hX-^;BsPAHxl=N0V
z8Kr&v>Xb_d_{tA)KS_9#|1ioc^WJa4<T*YMzPA{I6bKx;v(0xO6Ay#roR*vKpV^B5
P9n0Y9>gTe~DWM4f;q7Qb
diff --git a/js/dojo/dojox/fx/resources/shadowL.png b/js/dojo/dojox/fx/resources/shadowL.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..67ebc2e597293a85b51801780855c770cf4eca59
GIT binary patch
literal 148
zc%17D@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQY`6?zK#qG*KS<#k1zuAB}-f*
zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%sd>6MhE&{2^6~HxNJ~w9`v3p`
s{RYg;%^DqPDJd);cQ%+vJ2WsdY+l5*isNQfDNqN4r>mdKI;Vst02(ALZvX%Q
diff --git a/js/dojo/dojox/fx/resources/shadowR.png b/js/dojo/dojox/fx/resources/shadowR.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8d0c99d9fbdbc542630943a2bfa78cc508d99124
GIT binary patch
literal 149
zc%17D@N?(olHy`uVBq!ia0vp^96-#-!3HEBGrV^OQY`6?zK#qG*KS<#k1zuAB}-f*
zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%se8IOhE&{2^6~W4OixJo!FEJm
uQd08%pWol#^G^8N*4p}1*+WL*0K=Ab+z$8UZ#n?AFnGH9xvX<aXaWFfbS`xO
diff --git a/js/dojo/dojox/fx/resources/shadowT.png b/js/dojo/dojox/fx/resources/shadowT.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ea99436c42ddec015c9e1c6c9ba7f9d6c364872f
GIT binary patch
literal 152
zc%17D@N?(olHy`uVBq!ia0vp^j6lr6!3HEPq^3FoDVB6cUm$($#ufhvBOqV0#5JNM
zI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ84N#Gmr;B4q#jPX{fB)wxNeKxLl74-D
v&TrqLdWeNZ$>;z7|Kf~=2a{qL7}*#$nzL`3IayN{sEfhV)z4*}Q$iB}dqFJr
diff --git a/js/dojo/dojox/fx/resources/shadowTL.png b/js/dojo/dojox/fx/resources/shadowTL.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..388742ae9099877c2724618926f9640b9f0e3c69
GIT binary patch
literal 271
zc%17D@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmUfZd~z?Faq)=OI#yL
zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i<T^mK6ysko)n=g8M$z{C9dN^0~}
zJ@y@+S>z7<mp{T-=(yqBs&<XQV`WXLksIDy7o7{scI9AvUU}&G?|sbMb2nGcdu!3B
z@nd~Zm+g7xNe_0dD~lD6&h{)2@JKtR$9DJShuZrx$vRPKoOVJ&4TZDR!uj~N%CNe3
zcJG?~qyN*5cQRM^zq%@HI=ShYx$QRV)egZwcRt~Kq4{Rx&clo3FZnkxGOXBQ`HH{v
RL^9B^44$rjF6*2UngAGZY3cv~
diff --git a/js/dojo/dojox/fx/resources/shadowTR.png b/js/dojo/dojox/fx/resources/shadowTR.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c9d4f04e8b162fe3234df5fc37fa67ab1878b2b8
GIT binary patch
literal 287
zc%17D@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmUfZd~z?Faq)=OI#yL
zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+5i=8^mK6yskkN6&&}7Oz~iz|Bk79j
zMCJ;X_fKMNC!Cau_*t@il8Nk$>z)^n7w-7IuX2`JnAgS^Q-Z9|2fyoz%3ds!(Y|Tv
z6up*&Z?)=-R!W~<h$b|iJH5%q@YtT*=$X%FTF=n#Y5He;Y)O<h@8JdOUMD@5@pejh
z)+0CZ)7EQR4ri<5RU?I%&akYw9@QPmU{_K7Ad}H<#r2ktYA5q9w8X|G9ND5Xhw-by
jld~sG_O1KR#KUl!B|-k__e&drj%V<6^>bP0l+XkKx_)ym
diff --git a/js/dojo/dojox/fx/split.js b/js/dojo/dojox/fx/split.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/split.js
@@ -0,0 +1,318 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.split"]){
+dojo._hasResource["dojox.fx.split"]=true;
+dojo.provide("dojox.fx.split");
+dojo.require("dojo.fx");
+dojo.require("dojo.fx.easing");
+dojo.mixin(dojox.fx,{_split:function(_1){
+_1.rows=_1.rows||3;
+_1.columns=_1.columns||3;
+_1.duration=_1.duration||1000;
+var _2=_1.node=dojo.byId(_1.node),_3=_2.parentNode,_4=_3,_5=dojo.body(),_6="position";
+while(_4&&_4!=_5&&dojo.style(_4,_6)=="static"){
+_4=_4.parentNode;
+}
+var _7=_4!=_5?dojo.position(_4,true):{x:0,y:0},_8=dojo.position(_2,true),_9=dojo.style(_2,"height"),_a=dojo.style(_2,"width"),_b=dojo.style(_2,"borderLeftWidth")+dojo.style(_2,"borderRightWidth"),_c=dojo.style(_2,"borderTopWidth")+dojo.style(_2,"borderBottomWidth"),_d=Math.ceil(_9/_1.rows),_e=Math.ceil(_a/_1.columns),_f=dojo.create(_2.tagName,{style:{position:"absolute",padding:0,margin:0,border:"none",top:_8.y-_7.y+"px",left:_8.x-_7.x+"px",height:_9+_c+"px",width:_a+_b+"px",background:"none",overflow:_1.crop?"hidden":"visible",zIndex:dojo.style(_2,"zIndex")}},_2,"after"),_10=[],_11=dojo.create(_2.tagName,{style:{position:"absolute",border:"none",padding:0,margin:0,height:_d+_b+"px",width:_e+_c+"px",overflow:"hidden"}});
+for(var y=0,ly=_1.rows;y<ly;y++){
+for(var x=0,lx=_1.columns;x<lx;x++){
+var _12=dojo.clone(_11),_13=dojo.clone(_2),_14=y*_d,_15=x*_e;
+_13.style.filter="";
+dojo.removeAttr(_13,"id");
+dojo.style(_12,{border:"none",overflow:"hidden",top:_14+"px",left:_15+"px"});
+dojo.style(_13,{position:"static",opacity:"1",marginTop:-_14+"px",marginLeft:-_15+"px"});
+_12.appendChild(_13);
+_f.appendChild(_12);
+var _16=_1.pieceAnimation(_12,x,y,_8);
+if(dojo.isArray(_16)){
+_10=_10.concat(_16);
+}else{
+_10.push(_16);
+}
+}
+}
+var _17=dojo.fx.combine(_10);
+dojo.connect(_17,"onEnd",_17,function(){
+_f.parentNode.removeChild(_f);
+});
+if(_1.onPlay){
+dojo.connect(_17,"onPlay",_17,_1.onPlay);
+}
+if(_1.onEnd){
+dojo.connect(_17,"onEnd",_17,_1.onEnd);
+}
+return _17;
+},explode:function(_18){
+var _19=_18.node=dojo.byId(_18.node);
+_18.rows=_18.rows||3;
+_18.columns=_18.columns||3;
+_18.distance=_18.distance||1;
+_18.duration=_18.duration||1000;
+_18.random=_18.random||0;
+if(!_18.fade){
+_18.fade=true;
+}
+if(typeof _18.sync=="undefined"){
+_18.sync=true;
+}
+_18.random=Math.abs(_18.random);
+_18.pieceAnimation=function(_1a,x,y,_1b){
+var _1c=_1b.h/_18.rows,_1d=_1b.w/_18.columns,_1e=_18.distance*2,_1f=_18.duration,ps=_1a.style,_20=parseInt(ps.top),_21=parseInt(ps.left),_22=0,_23=0,_24=0;
+if(_18.random){
+var _25=(Math.random()*_18.random)+Math.max(1-_18.random,0);
+_1e*=_25;
+_1f*=_25;
+_22=((_18.unhide&&_18.sync)||(!_18.unhide&&!_18.sync))?(_18.duration-_1f):0;
+_23=Math.random()-0.5;
+_24=Math.random()-0.5;
+}
+var _26=((_1b.h-_1c)/2-_1c*y),_27=((_1b.w-_1d)/2-_1d*x),_28=Math.sqrt(Math.pow(_27,2)+Math.pow(_26,2)),_29=parseInt(_20-_26*_1e+_28*_24),_2a=parseInt(_21-_27*_1e+_28*_23);
+var _2b=dojo.animateProperty({node:_1a,duration:_1f,delay:_22,easing:(_18.easing||(_18.unhide?dojo.fx.easing.sinOut:dojo.fx.easing.circOut)),beforeBegin:(_18.unhide?function(){
+if(_18.fade){
+dojo.style(_1a,{opacity:"0"});
+}
+ps.top=_29+"px";
+ps.left=_2a+"px";
+}:undefined),properties:{top:(_18.unhide?{start:_29,end:_20}:{start:_20,end:_29}),left:(_18.unhide?{start:_2a,end:_21}:{start:_21,end:_2a})}});
+if(_18.fade){
+var _2c=dojo.animateProperty({node:_1a,duration:_1f,delay:_22,easing:(_18.fadeEasing||dojo.fx.easing.quadOut),properties:{opacity:(_18.unhide?{start:"0",end:"1"}:{start:"1",end:"0"})}});
+return (_18.unhide?[_2c,_2b]:[_2b,_2c]);
+}else{
+return _2b;
+}
+};
+var _2d=dojox.fx._split(_18);
+if(_18.unhide){
+dojo.connect(_2d,"onEnd",null,function(){
+dojo.style(_19,{opacity:"1"});
+});
+}else{
+dojo.connect(_2d,"onPlay",null,function(){
+dojo.style(_19,{opacity:"0"});
+});
+}
+return _2d;
+},converge:function(_2e){
+_2e.unhide=true;
+return dojox.fx.explode(_2e);
+},disintegrate:function(_2f){
+var _30=_2f.node=dojo.byId(_2f.node);
+_2f.rows=_2f.rows||5;
+_2f.columns=_2f.columns||5;
+_2f.duration=_2f.duration||1500;
+_2f.interval=_2f.interval||_2f.duration/(_2f.rows+_2f.columns*2);
+_2f.distance=_2f.distance||1.5;
+_2f.random=_2f.random||0;
+if(typeof _2f.fade=="undefined"){
+_2f.fade=true;
+}
+var _31=Math.abs(_2f.random),_32=_2f.duration-(_2f.rows+_2f.columns)*_2f.interval;
+_2f.pieceAnimation=function(_33,x,y,_34){
+var _35=Math.random()*(_2f.rows+_2f.columns)*_2f.interval,ps=_33.style,_36=(_2f.reverseOrder||_2f.distance<0)?((x+y)*_2f.interval):(((_2f.rows+_2f.columns)-(x+y))*_2f.interval),_37=_35*_31+Math.max(1-_31,0)*_36,_38={};
+if(_2f.unhide){
+_38.top={start:(parseInt(ps.top)-_34.h*_2f.distance),end:parseInt(ps.top)};
+if(_2f.fade){
+_38.opacity={start:"0",end:"1"};
+}
+}else{
+_38.top={end:(parseInt(ps.top)+_34.h*_2f.distance)};
+if(_2f.fade){
+_38.opacity={end:"0"};
+}
+}
+var _39=dojo.animateProperty({node:_33,duration:_32,delay:_37,easing:(_2f.easing||(_2f.unhide?dojo.fx.easing.sinIn:dojo.fx.easing.circIn)),properties:_38,beforeBegin:(_2f.unhide?function(){
+if(_2f.fade){
+dojo.style(_33,{opacity:"0"});
+}
+ps.top=_38.top.start+"px";
+}:undefined)});
+return _39;
+};
+var _3a=dojox.fx._split(_2f);
+if(_2f.unhide){
+dojo.connect(_3a,"onEnd",_3a,function(){
+dojo.style(_30,{opacity:"1"});
+});
+}else{
+dojo.connect(_3a,"onPlay",_3a,function(){
+dojo.style(_30,{opacity:"0"});
+});
+}
+return _3a;
+},build:function(_3b){
+_3b.unhide=true;
+return dojox.fx.disintegrate(_3b);
+},shear:function(_3c){
+var _3d=_3c.node=dojo.byId(_3c.node);
+_3c.rows=_3c.rows||6;
+_3c.columns=_3c.columns||6;
+_3c.duration=_3c.duration||1000;
+_3c.interval=_3c.interval||0;
+_3c.distance=_3c.distance||1;
+_3c.random=_3c.random||0;
+if(typeof (_3c.fade)=="undefined"){
+_3c.fade=true;
+}
+var _3e=Math.abs(_3c.random),_3f=(_3c.duration-(_3c.rows+_3c.columns)*Math.abs(_3c.interval));
+_3c.pieceAnimation=function(_40,x,y,_41){
+var _42=!(x%2),_43=!(y%2),_44=Math.random()*_3f,_45=(_3c.reverseOrder)?(((_3c.rows+_3c.columns)-(x+y))*_3c.interval):((x+y)*_3c.interval),_46=_44*_3e+Math.max(1-_3e,0)*_45,_47={},ps=_40.style;
+if(_3c.fade){
+_47.opacity=(_3c.unhide?{start:"0",end:"1"}:{end:"0"});
+}
+if(_3c.columns==1){
+_42=_43;
+}else{
+if(_3c.rows==1){
+_43=!_42;
+}
+}
+var _48=parseInt(ps.left),top=parseInt(ps.top),_49=_3c.distance*_41.w,_4a=_3c.distance*_41.h;
+if(_3c.unhide){
+if(_42==_43){
+_47.left=_42?{start:(_48-_49),end:_48}:{start:(_48+_49),end:_48};
+}else{
+_47.top=_42?{start:(top+_4a),end:top}:{start:(top-_4a),end:top};
+}
+}else{
+if(_42==_43){
+_47.left=_42?{end:(_48-_49)}:{end:(_48+_49)};
+}else{
+_47.top=_42?{end:(top+_4a)}:{end:(top-_4a)};
+}
+}
+var _4b=dojo.animateProperty({node:_40,duration:_3f,delay:_46,easing:(_3c.easing||dojo.fx.easing.sinInOut),properties:_47,beforeBegin:(_3c.unhide?function(){
+if(_3c.fade){
+ps.opacity="0";
+}
+if(_42==_43){
+ps.left=_47.left.start+"px";
+}else{
+ps.top=_47.top.start+"px";
+}
+}:undefined)});
+return _4b;
+};
+var _4c=dojox.fx._split(_3c);
+if(_3c.unhide){
+dojo.connect(_4c,"onEnd",_4c,function(){
+dojo.style(_3d,{opacity:"1"});
+});
+}else{
+dojo.connect(_4c,"onPlay",_4c,function(){
+dojo.style(_3d,{opacity:"0"});
+});
+}
+return _4c;
+},unShear:function(_4d){
+_4d.unhide=true;
+return dojox.fx.shear(_4d);
+},pinwheel:function(_4e){
+var _4f=_4e.node=dojo.byId(_4e.node);
+_4e.rows=_4e.rows||4;
+_4e.columns=_4e.columns||4;
+_4e.duration=_4e.duration||1000;
+_4e.interval=_4e.interval||0;
+_4e.distance=_4e.distance||1;
+_4e.random=_4e.random||0;
+if(typeof _4e.fade=="undefined"){
+_4e.fade=true;
+}
+var _50=(_4e.duration-(_4e.rows+_4e.columns)*Math.abs(_4e.interval));
+_4e.pieceAnimation=function(_51,x,y,_52){
+var _53=_52.h/_4e.rows,_54=_52.w/_4e.columns,_55=!(x%2),_56=!(y%2),_57=Math.random()*_50,_58=(_4e.interval<0)?(((_4e.rows+_4e.columns)-(x+y))*_4e.interval*-1):((x+y)*_4e.interval),_59=_57*_4e.random+Math.max(1-_4e.random,0)*_58,_5a={},ps=_51.style;
+if(_4e.fade){
+_5a.opacity=(_4e.unhide?{start:0,end:1}:{end:0});
+}
+if(_4e.columns==1){
+_55=!_56;
+}else{
+if(_4e.rows==1){
+_56=_55;
+}
+}
+var _5b=parseInt(ps.left),top=parseInt(ps.top);
+if(_55){
+if(_56){
+_5a.top=_4e.unhide?{start:top+_53*_4e.distance,end:top}:{start:top,end:top+_53*_4e.distance};
+}else{
+_5a.left=_4e.unhide?{start:_5b+_54*_4e.distance,end:_5b}:{start:_5b,end:_5b+_54*_4e.distance};
+}
+}
+if(_55!=_56){
+_5a.width=_4e.unhide?{start:_54*(1-_4e.distance),end:_54}:{start:_54,end:_54*(1-_4e.distance)};
+}else{
+_5a.height=_4e.unhide?{start:_53*(1-_4e.distance),end:_53}:{start:_53,end:_53*(1-_4e.distance)};
+}
+var _5c=dojo.animateProperty({node:_51,duration:_50,delay:_59,easing:(_4e.easing||dojo.fx.easing.sinInOut),properties:_5a,beforeBegin:(_4e.unhide?function(){
+if(_4e.fade){
+dojo.style(_51,"opacity",0);
+}
+if(_55){
+if(_56){
+ps.top=(top+_53*(1-_4e.distance))+"px";
+}else{
+ps.left=(_5b+_54*(1-_4e.distance))+"px";
+}
+}else{
+ps.left=_5b+"px";
+ps.top=top+"px";
+}
+if(_55!=_56){
+ps.width=(_54*(1-_4e.distance))+"px";
+}else{
+ps.height=(_53*(1-_4e.distance))+"px";
+}
+}:undefined)});
+return _5c;
+};
+var _5d=dojox.fx._split(_4e);
+if(_4e.unhide){
+dojo.connect(_5d,"onEnd",_5d,function(){
+dojo.style(_4f,{opacity:"1"});
+});
+}else{
+dojo.connect(_5d,"play",_5d,function(){
+dojo.style(_4f,{opacity:"0"});
+});
+}
+return _5d;
+},unPinwheel:function(_5e){
+_5e.unhide=true;
+return dojox.fx.pinwheel(_5e);
+},blockFadeOut:function(_5f){
+var _60=_5f.node=dojo.byId(_5f.node);
+_5f.rows=_5f.rows||5;
+_5f.columns=_5f.columns||5;
+_5f.duration=_5f.duration||1000;
+_5f.interval=_5f.interval||_5f.duration/(_5f.rows+_5f.columns*2);
+_5f.random=_5f.random||0;
+var _61=Math.abs(_5f.random),_62=_5f.duration-(_5f.rows+_5f.columns)*_5f.interval;
+_5f.pieceAnimation=function(_63,x,y,_64){
+var _65=Math.random()*_5f.duration,_66=(_5f.reverseOrder)?(((_5f.rows+_5f.columns)-(x+y))*Math.abs(_5f.interval)):((x+y)*_5f.interval),_67=_65*_61+Math.max(1-_61,0)*_66,_68=dojo.animateProperty({node:_63,duration:_62,delay:_67,easing:(_5f.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_5f.unhide?{start:"0",end:"1"}:{start:"1",end:"0"})},beforeBegin:(_5f.unhide?function(){
+dojo.style(_63,{opacity:"0"});
+}:function(){
+_63.style.filter="";
+})});
+return _68;
+};
+var _69=dojox.fx._split(_5f);
+if(_5f.unhide){
+dojo.connect(_69,"onEnd",_69,function(){
+dojo.style(_60,{opacity:"1"});
+});
+}else{
+dojo.connect(_69,"onPlay",_69,function(){
+dojo.style(_60,{opacity:"0"});
+});
+}
+return _69;
+},blockFadeIn:function(_6a){
+_6a.unhide=true;
+return dojox.fx.blockFadeOut(_6a);
+}});
+}
diff --git a/js/dojo/dojox/fx/text.js b/js/dojo/dojox/fx/text.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/fx/text.js
@@ -0,0 +1,256 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.text"]){
+dojo._hasResource["dojox.fx.text"]=true;
+dojo.provide("dojox.fx.text");
+dojo.require("dojo.fx");
+dojo.require("dojo.fx.easing");
+dojox.fx.text._split=function(_1){
+var _2=_1.node=dojo.byId(_1.node),s=_2.style,cs=dojo.getComputedStyle(_2),_3=dojo.coords(_2,true);
+_1.duration=_1.duration||1000;
+_1.words=_1.words||false;
+var _4=(_1.text&&typeof (_1.text)=="string")?_1.text:_2.innerHTML,_5=s.height,_6=s.width,_7=[];
+dojo.style(_2,{height:cs.height,width:cs.width});
+var _8=/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)/g;
+var _9=(_1.words?/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)\s*|([^\s<]+\s*)/g:/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)\s*|([^\s<]\s*)/g);
+var _a=(typeof _1.text=="string")?_1.text.match(_9):_2.innerHTML.match(_9);
+var _b="";
+var _c=0;
+var _d=0;
+for(var i=0;i<_a.length;i++){
+var _e=_a[i];
+if(!_e.match(_8)){
+_b+="<span>"+_e+"</span>";
+_c++;
+}else{
+_b+=_e;
+}
+}
+_2.innerHTML=_b;
+function _f(_10){
+var _11=_10.nextSibling;
+if(_10.tagName=="SPAN"&&_10.childNodes.length==1&&_10.firstChild.nodeType==3){
+var _12=dojo.coords(_10,true);
+_d++;
+dojo.style(_10,{padding:0,margin:0,top:(_1.crop?"0px":_12.t+"px"),left:(_1.crop?"0px":_12.l+"px"),display:"inline"});
+var _13=_1.pieceAnimation(_10,_12,_3,_d,_c);
+if(dojo.isArray(_13)){
+_7=_7.concat(_13);
+}else{
+_7[_7.length]=_13;
+}
+}else{
+if(_10.firstChild){
+_f(_10.firstChild);
+}
+}
+if(_11){
+_f(_11);
+}
+};
+_f(_2.firstChild);
+var _14=dojo.fx.combine(_7);
+dojo.connect(_14,"onEnd",_14,function(){
+_2.innerHTML=_4;
+dojo.style(_2,{height:_5,width:_6});
+});
+if(_1.onPlay){
+dojo.connect(_14,"onPlay",_14,_1.onPlay);
+}
+if(_1.onEnd){
+dojo.connect(_14,"onEnd",_14,_1.onEnd);
+}
+return _14;
+};
+dojox.fx.text.explode=function(_15){
+var _16=_15.node=dojo.byId(_15.node);
+var s=_16.style;
+_15.distance=_15.distance||1;
+_15.duration=_15.duration||1000;
+_15.random=_15.random||0;
+if(typeof (_15.fade)=="undefined"){
+_15.fade=true;
+}
+if(typeof (_15.sync)=="undefined"){
+_15.sync=true;
+}
+_15.random=Math.abs(_15.random);
+_15.pieceAnimation=function(_17,_18,_19,_1a,_1b){
+var _1c=_18.h;
+var _1d=_18.w;
+var _1e=_15.distance*2;
+var _1f=_15.duration;
+var _20=parseFloat(_17.style.top);
+var _21=parseFloat(_17.style.left);
+var _22=0;
+var _23=0;
+var _24=0;
+if(_15.random){
+var _25=(Math.random()*_15.random)+Math.max(1-_15.random,0);
+_1e*=_25;
+_1f*=_25;
+_22=((_15.unhide&&_15.sync)||(!_15.unhide&&!_15.sync))?(_15.duration-_1f):0;
+_23=Math.random()-0.5;
+_24=Math.random()-0.5;
+}
+var _26=((_19.h-_1c)/2-(_18.y-_19.y));
+var _27=((_19.w-_1d)/2-(_18.x-_19.x));
+var _28=Math.sqrt(Math.pow(_27,2)+Math.pow(_26,2));
+var _29=_20-_26*_1e+_28*_24;
+var _2a=_21-_27*_1e+_28*_23;
+var _2b=dojo.animateProperty({node:_17,duration:_1f,delay:_22,easing:(_15.easing||(_15.unhide?dojo.fx.easing.sinOut:dojo.fx.easing.circOut)),beforeBegin:(_15.unhide?function(){
+if(_15.fade){
+dojo.style(_17,"opacity",0);
+}
+_17.style.position=_15.crop?"relative":"absolute";
+_17.style.top=_29+"px";
+_17.style.left=_2a+"px";
+}:function(){
+_17.style.position=_15.crop?"relative":"absolute";
+}),properties:{top:(_15.unhide?{start:_29,end:_20}:{start:_20,end:_29}),left:(_15.unhide?{start:_2a,end:_21}:{start:_21,end:_2a})}});
+if(_15.fade){
+var _2c=dojo.animateProperty({node:_17,duration:_1f,delay:_22,easing:(_15.fadeEasing||dojo.fx.easing.quadOut),properties:{opacity:(_15.unhide?{start:0,end:1}:{end:0})}});
+return (_15.unhide?[_2c,_2b]:[_2b,_2c]);
+}else{
+return _2b;
+}
+};
+var _2d=dojox.fx.text._split(_15);
+return _2d;
+};
+dojox.fx.text.converge=function(_2e){
+_2e.unhide=true;
+return dojox.fx.text.explode(_2e);
+};
+dojox.fx.text.disintegrate=function(_2f){
+var _30=_2f.node=dojo.byId(_2f.node);
+var s=_30.style;
+_2f.duration=_2f.duration||1500;
+_2f.distance=_2f.distance||1.5;
+_2f.random=_2f.random||0;
+if(!_2f.fade){
+_2f.fade=true;
+}
+var _31=Math.abs(_2f.random);
+_2f.pieceAnimation=function(_32,_33,_34,_35,_36){
+var _37=_33.h;
+var _38=_33.w;
+var _39=_2f.interval||(_2f.duration/(1.5*_36));
+var _3a=(_2f.duration-_36*_39);
+var _3b=Math.random()*_36*_39;
+var _3c=(_2f.reverseOrder||_2f.distance<0)?(_35*_39):((_36-_35)*_39);
+var _3d=_3b*_31+Math.max(1-_31,0)*_3c;
+var _3e={};
+if(_2f.unhide){
+_3e.top={start:(parseFloat(_32.style.top)-_34.h*_2f.distance),end:parseFloat(_32.style.top)};
+if(_2f.fade){
+_3e.opacity={start:0,end:1};
+}
+}else{
+_3e.top={end:(parseFloat(_32.style.top)+_34.h*_2f.distance)};
+if(_2f.fade){
+_3e.opacity={end:0};
+}
+}
+var _3f=dojo.animateProperty({node:_32,duration:_3a,delay:_3d,easing:(_2f.easing||(_2f.unhide?dojo.fx.easing.sinIn:dojo.fx.easing.circIn)),properties:_3e,beforeBegin:(_2f.unhide?function(){
+if(_2f.fade){
+dojo.style(_32,"opacity",0);
+}
+_32.style.position=_2f.crop?"relative":"absolute";
+_32.style.top=_3e.top.start+"px";
+}:function(){
+_32.style.position=_2f.crop?"relative":"absolute";
+})});
+return _3f;
+};
+var _40=dojox.fx.text._split(_2f);
+return _40;
+};
+dojox.fx.text.build=function(_41){
+_41.unhide=true;
+return dojox.fx.text.disintegrate(_41);
+};
+dojox.fx.text.blockFadeOut=function(_42){
+var _43=_42.node=dojo.byId(_42.node);
+var s=_43.style;
+_42.duration=_42.duration||1000;
+_42.random=_42.random||0;
+var _44=Math.abs(_42.random);
+_42.pieceAnimation=function(_45,_46,_47,_48,_49){
+var _4a=_42.interval||(_42.duration/(1.5*_49));
+var _4b=(_42.duration-_49*_4a);
+var _4c=Math.random()*_49*_4a;
+var _4d=(_42.reverseOrder)?((_49-_48)*_4a):(_48*_4a);
+var _4e=_4c*_44+Math.max(1-_44,0)*_4d;
+var _4f=dojo.animateProperty({node:_45,duration:_4b,delay:_4e,easing:(_42.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_42.unhide?{start:0,end:1}:{end:0})},beforeBegin:(_42.unhide?function(){
+dojo.style(_45,"opacity",0);
+}:undefined)});
+return _4f;
+};
+var _50=dojox.fx.text._split(_42);
+return _50;
+};
+dojox.fx.text.blockFadeIn=function(_51){
+_51.unhide=true;
+return dojox.fx.text.blockFadeOut(_51);
+};
+dojox.fx.text.backspace=function(_52){
+var _53=_52.node=dojo.byId(_52.node);
+var s=_53.style;
+_52.words=false;
+_52.duration=_52.duration||2000;
+_52.random=_52.random||0;
+var _54=Math.abs(_52.random);
+var _55=10;
+_52.pieceAnimation=function(_56,_57,_58,_59,_5a){
+var _5b=_52.interval||(_52.duration/(1.5*_5a));
+var _5c=_56.textContent;
+var _5d=_5c.match(/\s/g);
+if(typeof (_52.wordDelay)=="undefined"){
+_52.wordDelay=_5b*2;
+}
+if(!_52.unhide){
+_55=(_5a-_59-1)*_5b;
+}
+var _5e,_5f;
+if(_52.fixed){
+if(_52.unhide){
+var _5e=function(){
+dojo.style(_56,"opacity",0);
+};
+}
+}else{
+if(_52.unhide){
+var _5e=function(){
+_56.style.display="none";
+};
+var _5f=function(){
+_56.style.display="inline";
+};
+}else{
+var _5f=function(){
+_56.style.display="none";
+};
+}
+}
+var _60=dojo.animateProperty({node:_56,duration:1,delay:_55,easing:(_52.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_52.unhide?{start:0,end:1}:{end:0})},beforeBegin:_5e,onEnd:_5f});
+if(_52.unhide){
+var _61=Math.random()*_5c.length*_5b;
+var _62=_61*_54/2+Math.max(1-_54/2,0)*_52.wordDelay;
+_55+=_61*_54+Math.max(1-_54,0)*_5b*_5c.length+(_62*(_5d&&_5c.lastIndexOf(_5d[_5d.length-1])==_5c.length-1));
+}
+return _60;
+};
+var _63=dojox.fx.text._split(_52);
+return _63;
+};
+dojox.fx.text.type=function(_64){
+_64.unhide=true;
+return dojox.fx.text.backspace(_64);
+};
+}
diff --git a/js/dojo/dojox/gfx.js.uncompressed.js b/js/dojo/dojox/gfx.js.uncompressed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx.js.uncompressed.js
@@ -0,0 +1,945 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.matrix"] = true;
+dojo.provide("dojox.gfx.matrix");
+
+(function(){
+ var m = dojox.gfx.matrix;
+
+ // candidates for dojox.math:
+ var _degToRadCache = {};
+ m._degToRad = function(degree){
+ return _degToRadCache[degree] || (_degToRadCache[degree] = (Math.PI * degree / 180));
+ };
+ m._radToDeg = function(radian){ return radian / Math.PI * 180; };
+
+ m.Matrix2D = function(arg){
+ // summary: a 2D matrix object
+ // description: Normalizes a 2D matrix-like object. If arrays is passed,
+ // all objects of the array are normalized and multiplied sequentially.
+ // arg: Object
+ // a 2D matrix-like object, a number, or an array of such objects
+ if(arg){
+ if(typeof arg == "number"){
+ this.xx = this.yy = arg;
+ }else if(arg instanceof Array){
+ if(arg.length > 0){
+ var matrix = m.normalize(arg[0]);
+ // combine matrices
+ for(var i = 1; i < arg.length; ++i){
+ var l = matrix, r = dojox.gfx.matrix.normalize(arg[i]);
+ matrix = new m.Matrix2D();
+ matrix.xx = l.xx * r.xx + l.xy * r.yx;
+ matrix.xy = l.xx * r.xy + l.xy * r.yy;
+ matrix.yx = l.yx * r.xx + l.yy * r.yx;
+ matrix.yy = l.yx * r.xy + l.yy * r.yy;
+ matrix.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+ matrix.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+ }
+ dojo.mixin(this, matrix);
+ }
+ }else{
+ dojo.mixin(this, arg);
+ }
+ }
+ };
+
+ // the default (identity) matrix, which is used to fill in missing values
+ dojo.extend(m.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
+
+ dojo.mixin(m, {
+ // summary: class constants, and methods of dojox.gfx.matrix
+
+ // matrix constants
+
+ // identity: dojox.gfx.matrix.Matrix2D
+ // an identity matrix constant: identity * (x, y) == (x, y)
+ identity: new m.Matrix2D(),
+
+ // flipX: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
+ flipX: new m.Matrix2D({xx: -1}),
+
+ // flipY: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
+ flipY: new m.Matrix2D({yy: -1}),
+
+ // flipXY: dojox.gfx.matrix.Matrix2D
+ // a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
+ flipXY: new m.Matrix2D({xx: -1, yy: -1}),
+
+ // matrix creators
+
+ translate: function(a, b){
+ // summary: forms a translation matrix
+ // description: The resulting matrix is used to translate (move) points by specified offsets.
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+ if(arguments.length > 1){
+ return new m.Matrix2D({dx: a, dy: b}); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: dojox.gfx.Point: a point-like object, which specifies offsets for both dimensions
+ // b: null
+ return new m.Matrix2D({dx: a.x, dy: a.y}); // dojox.gfx.matrix.Matrix2D
+ },
+ scale: function(a, b){
+ // summary: forms a scaling matrix
+ // description: The resulting matrix is used to scale (magnify) points by specified offsets.
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ if(arguments.length > 1){
+ return new m.Matrix2D({xx: a, yy: b}); // dojox.gfx.matrix.Matrix2D
+ }
+ if(typeof a == "number"){
+ // branch
+ // a: Number: a uniform scaling factor used for the both coordinates
+ // b: null
+ return new m.Matrix2D({xx: a, yy: a}); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: dojox.gfx.Point: a point-like object, which specifies scale factors for both dimensions
+ // b: null
+ return new m.Matrix2D({xx: a.x, yy: a.y}); // dojox.gfx.matrix.Matrix2D
+ },
+ rotate: function(angle){
+ // summary: forms a rotating matrix
+ // description: The resulting matrix is used to rotate points
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an angle of rotation in radians (>0 for CW)
+ var c = Math.cos(angle);
+ var s = Math.sin(angle);
+ return new m.Matrix2D({xx: c, xy: -s, yx: s, yy: c}); // dojox.gfx.matrix.Matrix2D
+ },
+ rotateg: function(degree){
+ // summary: forms a rotating matrix
+ // description: The resulting matrix is used to rotate points
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.rotate() for comparison.
+ // degree: Number: an angle of rotation in degrees (>0 for CW)
+ return m.rotate(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ skewX: function(angle) {
+ // summary: forms an x skewing matrix
+ // description: The resulting matrix is used to skew points in the x dimension
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an skewing angle in radians
+ return new m.Matrix2D({xy: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXg: function(degree){
+ // summary: forms an x skewing matrix
+ // description: The resulting matrix is used to skew points in the x dimension
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.skewX() for comparison.
+ // degree: Number: an skewing angle in degrees
+ return m.skewX(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ skewY: function(angle){
+ // summary: forms a y skewing matrix
+ // description: The resulting matrix is used to skew points in the y dimension
+ // around the origin of coordinates (0, 0) by specified angle.
+ // angle: Number: an skewing angle in radians
+ return new m.Matrix2D({yx: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYg: function(degree){
+ // summary: forms a y skewing matrix
+ // description: The resulting matrix is used to skew points in the y dimension
+ // around the origin of coordinates (0, 0) by specified degree.
+ // See dojox.gfx.matrix.skewY() for comparison.
+ // degree: Number: an skewing angle in degrees
+ return m.skewY(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+ },
+ reflect: function(a, b){
+ // summary: forms a reflection matrix
+ // description: The resulting matrix is used to reflect points around a vector,
+ // which goes through the origin.
+ // a: dojox.gfx.Point: a point-like object, which specifies a vector of reflection
+ // b: null
+ if(arguments.length == 1){
+ b = a.y;
+ a = a.x;
+ }
+ // branch
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+
+ // make a unit vector
+ var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = 2 * a * b / n2;
+ return new m.Matrix2D({xx: 2 * a2 / n2 - 1, xy: xy, yx: xy, yy: 2 * b2 / n2 - 1}); // dojox.gfx.matrix.Matrix2D
+ },
+ project: function(a, b){
+ // summary: forms an orthogonal projection matrix
+ // description: The resulting matrix is used to project points orthogonally on a vector,
+ // which goes through the origin.
+ // a: dojox.gfx.Point: a point-like object, which specifies a vector of projection
+ // b: null
+ if(arguments.length == 1){
+ b = a.y;
+ a = a.x;
+ }
+ // branch
+ // a: Number: an x coordinate value
+ // b: Number: a y coordinate value
+
+ // make a unit vector
+ var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = a * b / n2;
+ return new m.Matrix2D({xx: a2 / n2, xy: xy, yx: xy, yy: b2 / n2}); // dojox.gfx.matrix.Matrix2D
+ },
+
+ // ensure matrix 2D conformance
+ normalize: function(matrix){
+ // summary: converts an object to a matrix, if necessary
+ // description: Converts any 2D matrix-like object or an array of
+ // such objects to a valid dojox.gfx.matrix.Matrix2D object.
+ // matrix: Object: an object, which is converted to a matrix, if necessary
+ return (matrix instanceof m.Matrix2D) ? matrix : new m.Matrix2D(matrix); // dojox.gfx.matrix.Matrix2D
+ },
+
+ // common operations
+
+ clone: function(matrix){
+ // summary: creates a copy of a 2D matrix
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
+ var obj = new m.Matrix2D();
+ for(var i in matrix){
+ if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
+ }
+ return obj; // dojox.gfx.matrix.Matrix2D
+ },
+ invert: function(matrix){
+ // summary: inverts a 2D matrix
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
+ var M = m.normalize(matrix),
+ D = M.xx * M.yy - M.xy * M.yx,
+ M = new m.Matrix2D({
+ xx: M.yy/D, xy: -M.xy/D,
+ yx: -M.yx/D, yy: M.xx/D,
+ dx: (M.xy * M.dy - M.yy * M.dx) / D,
+ dy: (M.yx * M.dx - M.xx * M.dy) / D
+ });
+ return M; // dojox.gfx.matrix.Matrix2D
+ },
+ _multiplyPoint: function(matrix, x, y){
+ // summary: applies a matrix to a point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // x: Number: an x coordinate of a point
+ // y: Number: a y coordinate of a point
+ return {x: matrix.xx * x + matrix.xy * y + matrix.dx, y: matrix.yx * x + matrix.yy * y + matrix.dy}; // dojox.gfx.Point
+ },
+ multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
+ // summary: applies a matrix to a point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // a: Number: an x coordinate of a point
+ // b: Number: a y coordinate of a point
+ var M = m.normalize(matrix);
+ if(typeof a == "number" && typeof b == "number"){
+ return m._multiplyPoint(M, a, b); // dojox.gfx.Point
+ }
+ // branch
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+ // a: dojox.gfx.Point: a point
+ // b: null
+ return m._multiplyPoint(M, a.x, a.y); // dojox.gfx.Point
+ },
+ multiply: function(matrix){
+ // summary: combines matrices by multiplying them sequentially in the given order
+ // matrix: dojox.gfx.matrix.Matrix2D...: a 2D matrix-like object,
+ // all subsequent arguments are matrix-like objects too
+ var M = m.normalize(matrix);
+ // combine matrices
+ for(var i = 1; i < arguments.length; ++i){
+ var l = M, r = m.normalize(arguments[i]);
+ M = new m.Matrix2D();
+ M.xx = l.xx * r.xx + l.xy * r.yx;
+ M.xy = l.xx * r.xy + l.xy * r.yy;
+ M.yx = l.yx * r.xx + l.yy * r.yx;
+ M.yy = l.yx * r.xy + l.yy * r.yy;
+ M.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+ M.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+ }
+ return M; // dojox.gfx.matrix.Matrix2D
+ },
+
+ // high level operations
+
+ _sandwich: function(matrix, x, y){
+ // summary: applies a matrix at a centrtal point
+ // matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
+ // x: Number: an x component of the central point
+ // y: Number: a y component of the central point
+ return m.multiply(m.translate(x, y), matrix, m.translate(-x, -y)); // dojox.gfx.matrix.Matrix2D
+ },
+ scaleAt: function(a, b, c, d){
+ // summary: scales a picture using a specified point as a center of scaling
+ // description: Compare with dojox.gfx.matrix.scale().
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ // c: Number: an x component of a central point
+ // d: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) uniform scale factor, Point
+ // 2) uniform scale factor, x, y
+ // 3) x scale, y scale, Point
+ // 4) x scale, y scale, x, y
+
+ switch(arguments.length){
+ case 4:
+ // a and b are scale factor components, c and d are components of a point
+ return m._sandwich(m.scale(a, b), c, d); // dojox.gfx.matrix.Matrix2D
+ case 3:
+ if(typeof c == "number"){
+ // branch
+ // a: Number: a uniform scaling factor used for both coordinates
+ // b: Number: an x component of a central point
+ // c: Number: a y component of a central point
+ // d: null
+ return m._sandwich(m.scale(a), b, c); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: Number: a scaling factor used for the x coordinate
+ // b: Number: a scaling factor used for the y coordinate
+ // c: dojox.gfx.Point: a central point
+ // d: null
+ return m._sandwich(m.scale(a, b), c.x, c.y); // dojox.gfx.matrix.Matrix2D
+ }
+ // branch
+ // a: Number: a uniform scaling factor used for both coordinates
+ // b: dojox.gfx.Point: a central point
+ // c: null
+ // d: null
+ return m._sandwich(m.scale(a), b.x, b.y); // dojox.gfx.matrix.Matrix2D
+ },
+ rotateAt: function(angle, a, b){
+ // summary: rotates a picture using a specified point as a center of rotation
+ // description: Compare with dojox.gfx.matrix.rotate().
+ // angle: Number: an angle of rotation in radians (>0 for CW)
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) rotation angle in radians, Point
+ // 2) rotation angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.rotate(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an angle of rotation in radians (>0 for CCW)
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.rotate(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ rotategAt: function(degree, a, b){
+ // summary: rotates a picture using a specified point as a center of rotation
+ // description: Compare with dojox.gfx.matrix.rotateg().
+ // degree: Number: an angle of rotation in degrees (>0 for CW)
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) rotation angle in degrees, Point
+ // 2) rotation angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.rotateg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an angle of rotation in degrees (>0 for CCW)
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.rotateg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXAt: function(angle, a, b){
+ // summary: skews a picture along the x axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewX().
+ // angle: Number: an skewing angle in radians
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in radians, Point
+ // 2) skew angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewX(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an skewing angle in radians
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewX(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewXgAt: function(degree, a, b){
+ // summary: skews a picture along the x axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewXg().
+ // degree: Number: an skewing angle in degrees
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in degrees, Point
+ // 2) skew angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewXg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an skewing angle in degrees
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewXg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYAt: function(angle, a, b){
+ // summary: skews a picture along the y axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewY().
+ // angle: Number: an skewing angle in radians
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in radians, Point
+ // 2) skew angle in radians, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewY(angle), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // angle: Number: an skewing angle in radians
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewY(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ },
+ skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
+ // summary: skews a picture along the y axis using a specified point as a center of skewing
+ // description: Compare with dojox.gfx.matrix.skewYg().
+ // degree: Number: an skewing angle in degrees
+ // a: Number: an x component of a central point
+ // b: Number: a y component of a central point
+
+ // accepts several signatures:
+ // 1) skew angle in degrees, Point
+ // 2) skew angle in degrees, x, y
+
+ if(arguments.length > 2){
+ return m._sandwich(m.skewYg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+ }
+
+ // branch
+ // degree: Number: an skewing angle in degrees
+ // a: dojox.gfx.Point: a central point
+ // b: null
+ return m._sandwich(m.skewYg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+ }
+
+ //TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
+
+ });
+})();
+
+// propagate Matrix2D up
+dojox.gfx.Matrix2D = dojox.gfx.matrix.Matrix2D;
+
+}
+
+if(!dojo._hasResource["dojox.gfx._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx._base"] = true;
+dojo.provide("dojox.gfx._base");
+
+(function(){
+ var g = dojox.gfx, b = g._base;
+
+ // candidates for dojox.style (work on VML and SVG nodes)
+ g._hasClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary:
+ // Returns whether or not the specified classes are a portion of the
+ // class list currently applied to the node.
+ // return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className) // Boolean
+ var cls = node.getAttribute("className");
+ return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0; // Boolean
+ }
+ g._addClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary:
+ // Adds the specified classes to the end of the class list on the
+ // passed node.
+ var cls = node.getAttribute("className") || "";
+ if(!cls || (" " + cls + " ").indexOf(" " + classStr + " ") < 0){
+ node.setAttribute("className", cls + (cls ? " " : "") + classStr);
+ }
+ }
+ g._removeClass = function(/*DomNode*/node, /*String*/classStr){
+ // summary: Removes classes from node.
+ var cls = node.getAttribute("className");
+ if(cls){
+ node.setAttribute(
+ "className",
+ cls.replace(new RegExp('(^|\\s+)' + classStr + '(\\s+|$)'), "$1$2")
+ );
+ }
+ }
+
+ // candidate for dojox.html.metrics (dynamic font resize handler is not implemented here)
+
+ // derived from Morris John's emResized measurer
+ b._getFontMeasurements = function(){
+ // summary:
+ // Returns an object that has pixel equivilents of standard font
+ // size values.
+ var heights = {
+ '1em': 0, '1ex': 0, '100%': 0, '12pt': 0, '16px': 0, 'xx-small': 0,
+ 'x-small': 0, 'small': 0, 'medium': 0, 'large': 0, 'x-large': 0,
+ 'xx-large': 0
+ };
+
+ if(dojo.isIE){
+ // we do a font-size fix if and only if one isn't applied already.
+ // NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+ dojo.doc.documentElement.style.fontSize="100%";
+ }
+
+ // set up the measuring node.
+ var div = dojo.doc.createElement("div");
+ var s = div.style;
+ s.position = "absolute";
+ s.left = "-100px";
+ s.top = "0px";
+ s.width = "30px";
+ s.height = "1000em";
+ s.border = "0px";
+ s.margin = "0px";
+ s.padding = "0px";
+ s.outline = "none";
+ s.lineHeight = "1";
+ s.overflow = "hidden";
+ dojo.body().appendChild(div);
+
+ // do the measurements.
+ for(var p in heights){
+ div.style.fontSize = p;
+ heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+ }
+
+ dojo.body().removeChild(div);
+ div = null;
+ return heights; // object
+ };
+
+ var fontMeasurements = null;
+
+ b._getCachedFontMeasurements = function(recalculate){
+ if(recalculate || !fontMeasurements){
+ fontMeasurements = b._getFontMeasurements();
+ }
+ return fontMeasurements;
+ };
+
+ // candidate for dojox.html.metrics
+
+ var measuringNode = null, empty = {};
+ b._getTextBox = function( /*String*/ text,
+ /*Object*/ style,
+ /*String?*/ className){
+ var m, s, al = arguments.length;
+ if(!measuringNode){
+ m = measuringNode = dojo.doc.createElement("div");
+ s = m.style;
+ s.position = "absolute";
+ s.left = "-10000px";
+ s.top = "0";
+ dojo.body().appendChild(m);
+ }else{
+ m = measuringNode;
+ s = m.style;
+ }
+ // reset styles
+ m.className = "";
+ s.border = "0";
+ s.margin = "0";
+ s.padding = "0";
+ s.outline = "0";
+ // set new style
+ if(al > 1 && style){
+ for(var i in style){
+ if(i in empty){ continue; }
+ s[i] = style[i];
+ }
+ }
+ // set classes
+ if(al > 2 && className){
+ m.className = className;
+ }
+ // take a measure
+ m.innerHTML = text;
+
+ if(m["getBoundingClientRect"]){
+ var bcr = m.getBoundingClientRect();
+ return {l: bcr.left, t: bcr.top, w: bcr.width || (bcr.right - bcr.left), h: bcr.height || (bcr.bottom - bcr.top)};
+ }else{
+ return dojo.marginBox(m);
+ }
+ };
+
+ // candidate for dojo.dom
+
+ var uniqueId = 0;
+ b._getUniqueId = function(){
+ // summary: returns a unique string for use with any DOM element
+ var id;
+ do{
+ id = dojo._scopeName + "Unique" + (++uniqueId);
+ }while(dojo.byId(id));
+ return id;
+ };
+})();
+
+dojo.mixin(dojox.gfx, {
+ // summary:
+ // defines constants, prototypes, and utility functions
+
+ // default shapes, which are used to fill in missing parameters
+ defaultPath: {
+ type: "path", path: ""
+ },
+ defaultPolyline: {
+ type: "polyline", points: []
+ },
+ defaultRect: {
+ type: "rect", x: 0, y: 0, width: 100, height: 100, r: 0
+ },
+ defaultEllipse: {
+ type: "ellipse", cx: 0, cy: 0, rx: 200, ry: 100
+ },
+ defaultCircle: {
+ type: "circle", cx: 0, cy: 0, r: 100
+ },
+ defaultLine: {
+ type: "line", x1: 0, y1: 0, x2: 100, y2: 100
+ },
+ defaultImage: {
+ type: "image", x: 0, y: 0, width: 0, height: 0, src: ""
+ },
+ defaultText: {
+ type: "text", x: 0, y: 0, text: "", align: "start",
+ decoration: "none", rotated: false, kerning: true
+ },
+ defaultTextPath: {
+ type: "textpath", text: "", align: "start",
+ decoration: "none", rotated: false, kerning: true
+ },
+
+ // default geometric attributes
+ defaultStroke: {
+ type: "stroke", color: "black", style: "solid", width: 1,
+ cap: "butt", join: 4
+ },
+ defaultLinearGradient: {
+ type: "linear", x1: 0, y1: 0, x2: 100, y2: 100,
+ colors: [
+ { offset: 0, color: "black" }, { offset: 1, color: "white" }
+ ]
+ },
+ defaultRadialGradient: {
+ type: "radial", cx: 0, cy: 0, r: 100,
+ colors: [
+ { offset: 0, color: "black" }, { offset: 1, color: "white" }
+ ]
+ },
+ defaultPattern: {
+ type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""
+ },
+ defaultFont: {
+ type: "font", style: "normal", variant: "normal",
+ weight: "normal", size: "10pt", family: "serif"
+ },
+
+ getDefault: (function(){
+ var typeCtorCache = {};
+ // a memoized delegate()
+ return function(/*String*/ type){
+ var t = typeCtorCache[type];
+ if(t){
+ return new t();
+ }
+ t = typeCtorCache[type] = new Function;
+ t.prototype = dojox.gfx[ "default" + type ];
+ return new t();
+ }
+ })(),
+
+ normalizeColor: function(/*Color*/ color){
+ // summary:
+ // converts any legal color representation to normalized
+ // dojo.Color object
+ return (color instanceof dojo.Color) ? color : new dojo.Color(color); // dojo.Color
+ },
+ normalizeParameters: function(existed, update){
+ // summary:
+ // updates an existing object with properties from an "update"
+ // object
+ // existed: Object
+ // the "target" object to be updated
+ // update: Object
+ // the "update" object, whose properties will be used to update
+ // the existed object
+ if(update){
+ var empty = {};
+ for(var x in existed){
+ if(x in update && !(x in empty)){
+ existed[x] = update[x];
+ }
+ }
+ }
+ return existed; // Object
+ },
+ makeParameters: function(defaults, update){
+ // summary:
+ // copies the original object, and all copied properties from the
+ // "update" object
+ // defaults: Object
+ // the object to be cloned before updating
+ // update: Object
+ // the object, which properties are to be cloned during updating
+ if(!update){
+ // return dojo.clone(defaults);
+ return dojo.delegate(defaults);
+ }
+ var result = {};
+ for(var i in defaults){
+ if(!(i in result)){
+ result[i] = dojo.clone((i in update) ? update[i] : defaults[i]);
+ }
+ }
+ return result; // Object
+ },
+ formatNumber: function(x, addSpace){
+ // summary: converts a number to a string using a fixed notation
+ // x: Number: number to be converted
+ // addSpace: Boolean?: if it is true, add a space before a positive number
+ var val = x.toString();
+ if(val.indexOf("e") >= 0){
+ val = x.toFixed(4);
+ }else{
+ var point = val.indexOf(".");
+ if(point >= 0 && val.length - point > 5){
+ val = x.toFixed(4);
+ }
+ }
+ if(x < 0){
+ return val; // String
+ }
+ return addSpace ? " " + val : val; // String
+ },
+ // font operations
+ makeFontString: function(font){
+ // summary: converts a font object to a CSS font string
+ // font: Object: font object (see dojox.gfx.defaultFont)
+ return font.style + " " + font.variant + " " + font.weight + " " + font.size + " " + font.family; // Object
+ },
+ splitFontString: function(str){
+ // summary:
+ // converts a CSS font string to a font object
+ // description:
+ // Converts a CSS font string to a gfx font object. The CSS font
+ // string components should follow the W3C specified order
+ // (see http://www.w3.org/TR/CSS2/fonts.html#font-shorthand):
+ // style, variant, weight, size, optional line height (will be
+ // ignored), and family.
+ // str: String
+ // a CSS font string
+ var font = dojox.gfx.getDefault("Font");
+ var t = str.split(/\s+/);
+ do{
+ if(t.length < 5){ break; }
+ font.style = t[0];
+ font.variant = t[1];
+ font.weight = t[2];
+ var i = t[3].indexOf("/");
+ font.size = i < 0 ? t[3] : t[3].substring(0, i);
+ var j = 4;
+ if(i < 0){
+ if(t[4] == "/"){
+ j = 6;
+ }else if(t[4].charAt(0) == "/"){
+ j = 5;
+ }
+ }
+ if(j < t.length){
+ font.family = t.slice(j).join(" ");
+ }
+ }while(false);
+ return font; // Object
+ },
+ // length operations
+ cm_in_pt: 72 / 2.54, // Number: points per centimeter
+ mm_in_pt: 7.2 / 2.54, // Number: points per millimeter
+ px_in_pt: function(){
+ // summary: returns a number of pixels per point
+ return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12; // Number
+ },
+ pt2px: function(len){
+ // summary: converts points to pixels
+ // len: Number: a value in points
+ return len * dojox.gfx.px_in_pt(); // Number
+ },
+ px2pt: function(len){
+ // summary: converts pixels to points
+ // len: Number: a value in pixels
+ return len / dojox.gfx.px_in_pt(); // Number
+ },
+ normalizedLength: function(len) {
+ // summary: converts any length value to pixels
+ // len: String: a length, e.g., "12pc"
+ if(len.length == 0) return 0;
+ if(len.length > 2){
+ var px_in_pt = dojox.gfx.px_in_pt();
+ var val = parseFloat(len);
+ switch(len.slice(-2)){
+ case "px": return val;
+ case "pt": return val * px_in_pt;
+ case "in": return val * 72 * px_in_pt;
+ case "pc": return val * 12 * px_in_pt;
+ case "mm": return val * dojox.gfx.mm_in_pt * px_in_pt;
+ case "cm": return val * dojox.gfx.cm_in_pt * px_in_pt;
+ }
+ }
+ return parseFloat(len); // Number
+ },
+
+ // a constant used to split a SVG/VML path into primitive components
+ pathVmlRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+ pathSvgRegExp: /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+
+ equalSources: function(a, b){
+ // summary: compares event sources, returns true if they are equal
+ return a && b && a == b;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx"] = true;
+dojo.provide("dojox.gfx");
+
+
+
+
+dojo.loadInit(function(){
+ //Since loaderInit can be fired before any dojo.provide/require calls,
+ //make sure the dojox.gfx object exists and only run this logic if dojox.gfx.renderer
+ //has not been defined yet.
+ var gfx = dojo.getObject("dojox.gfx", true), sl, flag, match;
+ if(!gfx.renderer){
+ //Have a way to force a GFX renderer, if so desired.
+ //Useful for being able to serialize GFX data in a particular format.
+ if(dojo.config.forceGfxRenderer){
+ dojox.gfx.renderer = dojo.config.forceGfxRenderer;
+ return;
+ }
+ var renderers = (typeof dojo.config.gfxRenderer == "string" ?
+ dojo.config.gfxRenderer : "svg,vml,silverlight,canvas").split(",");
+
+ // mobile platform detection
+ // TODO: move to the base?
+
+ var ua = navigator.userAgent, iPhoneOsBuild = 0, androidVersion = 0;
+ if(dojo.isSafari >= 3){
+ // detect mobile version of WebKit starting with "version 3"
+
+ // comprehensive iPhone test. Have to figure out whether it's SVG or Canvas based on the build.
+ // iPhone OS build numbers from en.wikipedia.org.
+ if(ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
+ // grab the build out of this. Expression is a little nasty because we want
+ // to be sure we have the whole version string.
+ match = ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);
+ if(match){
+ // grab the build out of the match. Only use the first three because of specific builds.
+ iPhoneOsBuild = parseInt(match[4].substr(0,3), 16);
+ }
+ }
+ }
+ if(dojo.isWebKit){
+ // Android detection
+ if(!iPhoneOsBuild){
+ match = ua.match(/Android\s+(\d+\.\d+)/);
+ if(match){
+ androidVersion = parseFloat(match[1]);
+ // Android 1.0-1.1 doesn't support SVG but supports Canvas
+ }
+ }
+ }
+
+ for(var i = 0; i < renderers.length; ++i){
+ switch(renderers[i]){
+ case "svg":
+ // iPhone OS builds greater than 5F1 should have SVG.
+ if(!dojo.isIE && (!iPhoneOsBuild || iPhoneOsBuild >= 0x5f1) && !androidVersion && !dojo.isAIR){
+ dojox.gfx.renderer = "svg";
+ }
+ break;
+ case "vml":
+ if(dojo.isIE){
+ dojox.gfx.renderer = "vml";
+ }
+ break;
+ case "silverlight":
+ try{
+ if(dojo.isIE){
+ sl = new ActiveXObject("AgControl.AgControl");
+ if(sl && sl.IsVersionSupported("1.0")){
+ flag = true;
+ }
+ }else{
+ if(navigator.plugins["Silverlight Plug-In"]){
+ flag = true;
+ }
+ }
+ }catch(e){
+ flag = false;
+ }finally{
+ sl = null;
+ }
+ if(flag){ dojox.gfx.renderer = "silverlight"; }
+ break;
+ case "canvas":
+ //TODO: need more comprehensive test for Canvas
+ if(!dojo.isIE){
+ dojox.gfx.renderer = "canvas";
+ }
+ break;
+ }
+ if(dojox.gfx.renderer){ break; }
+ }
+ if(dojo.config.isDebug){
+ console.log("gfx renderer = " + dojox.gfx.renderer);
+ }
+ }
+});
+
+// include a renderer conditionally
+dojo.requireIf(dojox.gfx.renderer == "svg", "dojox.gfx.svg");
+dojo.requireIf(dojox.gfx.renderer == "vml", "dojox.gfx.vml");
+dojo.requireIf(dojox.gfx.renderer == "silverlight", "dojox.gfx.silverlight");
+dojo.requireIf(dojox.gfx.renderer == "canvas", "dojox.gfx.canvas");
+
+}
+
diff --git a/js/dojo/dojox/gfx/Moveable.js b/js/dojo/dojox/gfx/Moveable.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/Moveable.js
@@ -0,0 +1,53 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.Moveable"]){
+dojo._hasResource["dojox.gfx.Moveable"]=true;
+dojo.provide("dojox.gfx.Moveable");
+dojo.require("dojox.gfx.Mover");
+dojo.declare("dojox.gfx.Moveable",null,{constructor:function(_1,_2){
+this.shape=_1;
+this.delay=(_2&&_2.delay>0)?_2.delay:0;
+this.mover=(_2&&_2.mover)?_2.mover:dojox.gfx.Mover;
+this.events=[this.shape.connect("onmousedown",this,"onMouseDown")];
+},destroy:function(){
+dojo.forEach(this.events,this.shape.disconnect,this.shape);
+this.events=this.shape=null;
+},onMouseDown:function(e){
+if(this.delay){
+this.events.push(this.shape.connect("onmousemove",this,"onMouseMove"));
+this.events.push(this.shape.connect("onmouseup",this,"onMouseUp"));
+this._lastX=e.clientX;
+this._lastY=e.clientY;
+}else{
+new this.mover(this.shape,e,this);
+}
+dojo.stopEvent(e);
+},onMouseMove:function(e){
+if(Math.abs(e.clientX-this._lastX)>this.delay||Math.abs(e.clientY-this._lastY)>this.delay){
+this.onMouseUp(e);
+new this.mover(this.shape,e,this);
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+this.shape.disconnect(this.events.pop());
+this.shape.disconnect(this.events.pop());
+},onMoveStart:function(_3){
+dojo.publish("/gfx/move/start",[_3]);
+dojo.addClass(dojo.body(),"dojoMove");
+},onMoveStop:function(_4){
+dojo.publish("/gfx/move/stop",[_4]);
+dojo.removeClass(dojo.body(),"dojoMove");
+},onFirstMove:function(_5){
+},onMove:function(_6,_7){
+this.onMoving(_6,_7);
+this.shape.applyLeftTransform(_7);
+this.onMoved(_6,_7);
+},onMoving:function(_8,_9){
+},onMoved:function(_a,_b){
+}});
+}
diff --git a/js/dojo/dojox/gfx/Mover.js b/js/dojo/dojox/gfx/Mover.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/Mover.js
@@ -0,0 +1,38 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.Mover"]){
+dojo._hasResource["dojox.gfx.Mover"]=true;
+dojo.provide("dojox.gfx.Mover");
+dojo.declare("dojox.gfx.Mover",null,{constructor:function(_1,e,_2){
+this.shape=_1;
+this.lastX=e.clientX;
+this.lastY=e.clientY;
+var h=this.host=_2,d=document,_3=dojo.connect(d,"onmousemove",this,"onFirstMove");
+this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"destroy"),dojo.connect(d,"ondragstart",dojo,"stopEvent"),dojo.connect(d,"onselectstart",dojo,"stopEvent"),_3];
+if(h&&h.onMoveStart){
+h.onMoveStart(this);
+}
+},onMouseMove:function(e){
+var x=e.clientX;
+var y=e.clientY;
+this.host.onMove(this,{dx:x-this.lastX,dy:y-this.lastY});
+this.lastX=x;
+this.lastY=y;
+dojo.stopEvent(e);
+},onFirstMove:function(){
+this.host.onFirstMove(this);
+dojo.disconnect(this.events.pop());
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+var h=this.host;
+if(h&&h.onMoveStop){
+h.onMoveStop(this);
+}
+this.events=this.shape=null;
+}});
+}
diff --git a/js/dojo/dojox/gfx/VectorText.js b/js/dojo/dojox/gfx/VectorText.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/VectorText.js
@@ -0,0 +1,366 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.VectorText"]){
+dojo._hasResource["dojox.gfx.VectorText"]=true;
+dojo.provide("dojox.gfx.VectorText");
+dojo.require("dojox.gfx");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.html.metrics");
+(function(){
+dojo.mixin(dojox.gfx,{vectorFontFitting:{NONE:0,FLOW:1,FIT:2},defaultVectorText:{type:"vectortext",x:0,y:0,width:null,height:null,text:"",align:"start",decoration:"none",fitting:0,leading:1.5},defaultVectorFont:{type:"vectorfont",size:"10pt",family:null},_vectorFontCache:{},_svgFontCache:{},getVectorFont:function(_1){
+if(dojox.gfx._vectorFontCache[_1]){
+return dojox.gfx._vectorFontCache[_1];
+}
+return new dojox.gfx.VectorFont(_1);
+}});
+dojo.declare("dojox.gfx.VectorFont",null,{_entityRe:/&(quot|apos|lt|gt|amp|#x[^;]+|#\d+);/g,_decodeEntitySequence:function(_2){
+if(!_2.match(this._entityRe)){
+return;
+}
+var _3={amp:"&",apos:"'",quot:"\"",lt:"<",gt:">"};
+var r,_4="";
+while((r=this._entityRe.exec(_2))!==null){
+if(r[1].charAt(1)=="x"){
+_4+=String.fromCharCode(r[1].slice(2),16);
+}else{
+if(!isNaN(parseInt(r[1].slice(1),10))){
+_4+=String.fromCharCode(r[1].slice(1));
+}else{
+_4+=_3(r[1]);
+}
+}
+}
+return _4;
+},_parse:function(_5,_6){
+var _7=dojox.gfx._svgFontCache[_6]||dojox.xml.DomParser.parse(_5);
+var f=_7.documentElement.byName("font")[0],_8=_7.documentElement.byName("font-face")[0];
+var _9=parseFloat(_8.getAttribute("units-per-em")||1000,10);
+var _a={x:parseFloat(f.getAttribute("horiz-adv-x"),10),y:parseFloat(f.getAttribute("vert-adv-y")||0,10)};
+if(!_a.y){
+_a.y=_9;
+}
+var _b={horiz:{x:parseFloat(f.getAttribute("horiz-origin-x")||0,10),y:parseFloat(f.getAttribute("horiz-origin-y")||0,10)},vert:{x:parseFloat(f.getAttribute("vert-origin-x")||0,10),y:parseFloat(f.getAttribute("vert-origin-y")||0,10)}};
+var _c=_8.getAttribute("font-family"),_d=_8.getAttribute("font-style")||"all",_e=_8.getAttribute("font-variant")||"normal",_f=_8.getAttribute("font-weight")||"all",_10=_8.getAttribute("font-stretch")||"normal",_11=_8.getAttribute("unicode-range")||"U+0-10FFFF",_12=_8.getAttribute("panose-1")||"0 0 0 0 0 0 0 0 0 0",_13=_8.getAttribute("cap-height"),_14=parseFloat(_8.getAttribute("ascent")||(_9-_b.vert.y),10),_15=parseFloat(_8.getAttribute("descent")||_b.vert.y,10),_16={};
+var _17=_c;
+if(_8.byName("font-face-name")[0]){
+_17=_8.byName("font-face-name")[0].getAttribute("name");
+}
+if(dojox.gfx._vectorFontCache[_17]){
+return;
+}
+dojo.forEach(["alphabetic","ideographic","mathematical","hanging"],function(_18){
+var a=_8.getAttribute(_18);
+if(a!==null){
+_16[_18]=parseFloat(a,10);
+}
+});
+var _19=parseFloat(_7.documentElement.byName("missing-glyph")[0].getAttribute("horiz-adv-x")||_a.x,10);
+var _1a={},_1b={},g=_7.documentElement.byName("glyph");
+dojo.forEach(g,function(_1c){
+var _1d=_1c.getAttribute("unicode"),_17=_1c.getAttribute("glyph-name"),_1e=parseFloat(_1c.getAttribute("horiz-adv-x")||_a.x,10),_1f=_1c.getAttribute("d");
+if(_1d.match(this._entityRe)){
+_1d=this._decodeEntitySequence(_1d);
+}
+var o={code:_1d,name:_17,xAdvance:_1e,path:_1f};
+_1a[_1d]=o;
+_1b[_17]=o;
+},this);
+var _20=_7.documentElement.byName("hkern");
+dojo.forEach(_20,function(_21,i){
+var k=-parseInt(_21.getAttribute("k"),10);
+var u1=_21.getAttribute("u1"),g1=_21.getAttribute("g1"),u2=_21.getAttribute("u2"),g2=_21.getAttribute("g2"),gl;
+if(u1){
+u1=this._decodeEntitySequence(u1);
+if(_1a[u1]){
+gl=_1a[u1];
+}
+}else{
+if(_1b[g1]){
+gl=_1b[g1];
+}
+}
+if(gl){
+if(!gl.kern){
+gl.kern={};
+}
+if(u2){
+u2=this._decodeEntitySequence(u2);
+gl.kern[u2]={x:k};
+}else{
+if(_1b[g2]){
+gl.kern[_1b[g2].code]={x:k};
+}
+}
+}
+},this);
+dojo.mixin(this,{family:_c,name:_17,style:_d,variant:_e,weight:_f,stretch:_10,range:_11,viewbox:{width:_9,height:_9},origin:_b,advance:dojo.mixin(_a,{missing:{x:_19,y:_19}}),ascent:_14,descent:_15,baseline:_16,glyphs:_1a});
+dojox.gfx._vectorFontCache[_17]=this;
+dojox.gfx._vectorFontCache[_6]=this;
+if(_17!=_c&&!dojox.gfx._vectorFontCache[_c]){
+dojox.gfx._vectorFontCache[_c]=this;
+}
+if(!dojox.gfx._svgFontCache[_6]){
+dojox.gfx._svgFontCache[_6]=_7;
+}
+},_clean:function(){
+var _22=this.name,_23=this.family;
+dojo.forEach(["family","name","style","variant","weight","stretch","range","viewbox","origin","advance","ascent","descent","baseline","glyphs"],function(_24){
+try{
+delete this[_24];
+}
+catch(e){
+}
+},this);
+if(dojox.gfx._vectorFontCache[_22]){
+delete dojox.gfx._vectorFontCache[_22];
+}
+if(dojox.gfx._vectorFontCache[_23]){
+delete dojox.gfx._vectorFontCache[_23];
+}
+return this;
+},constructor:function(url){
+this._defaultLeading=1.5;
+if(url!==undefined){
+this.load(url);
+}
+},load:function(url){
+this.onLoadBegin(url.toString());
+this._parse(dojox.gfx._svgFontCache[url.toString()]||dojo._getText(url.toString()),url.toString());
+this.onLoad(this);
+return this;
+},initialized:function(){
+return (this.glyphs!==null);
+},_round:function(n){
+return Math.round(1000*n)/1000;
+},_leading:function(_25){
+return this.viewbox.height*(_25||this._defaultLeading);
+},_normalize:function(str){
+return str.replace(/\s+/g,String.fromCharCode(32));
+},_getWidth:function(_26){
+var w=0,_27=0,_28=null;
+dojo.forEach(_26,function(_29,i){
+_27=_29.xAdvance;
+if(_26[i]&&_29.kern&&_29.kern[_26[i].code]){
+_27+=_29.kern[_26[i].code].x;
+}
+w+=_27;
+_28=_29;
+});
+if(_28&&_28.code==" "){
+w-=_28.xAdvance;
+}
+return this._round(w);
+},_getLongestLine:function(_2a){
+var _2b=0,idx=0;
+dojo.forEach(_2a,function(_2c,i){
+var max=Math.max(_2b,this._getWidth(_2c));
+if(max>_2b){
+_2b=max;
+idx=i;
+}
+},this);
+return {width:_2b,index:idx,line:_2a[idx]};
+},_trim:function(_2d){
+var fn=function(arr){
+if(!arr.length){
+return;
+}
+if(arr[arr.length-1].code==" "){
+arr.splice(arr.length-1,1);
+}
+if(!arr.length){
+return;
+}
+if(arr[0].code==" "){
+arr.splice(0,1);
+}
+};
+if(dojo.isArray(_2d[0])){
+dojo.forEach(_2d,fn);
+}else{
+fn(_2d);
+}
+return _2d;
+},_split:function(_2e,_2f){
+var w=this._getWidth(_2e),_30=Math.floor(w/_2f),_31=[],cw=0,c=[],_32=false;
+for(var i=0,l=_2e.length;i<l;i++){
+if(_2e[i].code==" "){
+_32=true;
+}
+cw+=_2e[i].xAdvance;
+if(i+1<l&&_2e[i].kern&&_2e[i].kern[_2e[i+1].code]){
+cw+=_2e[i].kern[_2e[i+1].code].x;
+}
+if(cw>=_30){
+var chr=_2e[i];
+while(_32&&chr.code!=" "&&i>=0){
+chr=c.pop();
+i--;
+}
+_31.push(c);
+c=[];
+cw=0;
+_32=false;
+}
+c.push(_2e[i]);
+}
+if(c.length){
+_31.push(c);
+}
+return this._trim(_31);
+},_getSizeFactor:function(_33){
+_33+="";
+var _34=dojox.html.metrics.getCachedFontMeasurements(),_35=this.viewbox.height,f=_34["1em"],_36=parseFloat(_33,10);
+if(_33.indexOf("em")>-1){
+return this._round((_34["1em"]*_36)/_35);
+}else{
+if(_33.indexOf("ex")>-1){
+return this._round((_34["1ex"]*_36)/_35);
+}else{
+if(_33.indexOf("pt")>-1){
+return this._round(((_34["12pt"]/12)*_36)/_35);
+}else{
+if(_33.indexOf("px")>-1){
+return this._round(((_34["16px"]/16)*_36)/_35);
+}else{
+if(_33.indexOf("%")>-1){
+return this._round((_34["1em"]*(_36/100))/_35);
+}else{
+f=_34[_33]||_34.medium;
+return this._round(f/_35);
+}
+}
+}
+}
+}
+},_getFitFactor:function(_37,w,h,l){
+if(!h){
+return this._round(w/this._getWidth(_37));
+}else{
+var _38=this._getLongestLine(_37).width,_39=(_37.length*(this.viewbox.height*l))-((this.viewbox.height*l)-this.viewbox.height);
+return this._round(Math.min(w/_38,h/_39));
+}
+},_getBestFit:function(_3a,w,h,_3b){
+var _3c=32,_3d=0,_3e=_3c;
+while(_3c>0){
+var f=this._getFitFactor(this._split(_3a,_3c),w,h,_3b);
+if(f>_3d){
+_3d=f;
+_3e=_3c;
+}
+_3c--;
+}
+return {scale:_3d,lines:this._split(_3a,_3e)};
+},_getBestFlow:function(_3f,w,_40){
+var _41=[],cw=0,c=[],_42=false;
+for(var i=0,l=_3f.length;i<l;i++){
+if(_3f[i].code==" "){
+_42=true;
+}
+var tw=_3f[i].xAdvance;
+if(i+1<l&&_3f[i].kern&&_3f[i].kern[_3f[i+1].code]){
+tw+=_3f[i].kern[_3f[i+1].code].x;
+}
+cw+=_40*tw;
+if(cw>=w){
+var chr=_3f[i];
+while(_42&&chr.code!=" "&&i>=0){
+chr=c.pop();
+i--;
+}
+_41.push(c);
+c=[];
+cw=0;
+_42=false;
+}
+c.push(_3f[i]);
+}
+if(c.length){
+_41.push(c);
+}
+return this._trim(_41);
+},getWidth:function(_43,_44){
+return this._getWidth(dojo.map(this._normalize(_43).split(""),function(chr){
+return this.glyphs[chr]||{xAdvance:this.advance.missing.x};
+},this))*(_44||1);
+},getLineHeight:function(_45){
+return this.viewbox.height*(_45||1);
+},getCenterline:function(_46){
+return (_46||1)*(this.viewbox.height/2);
+},getBaseline:function(_47){
+return (_47||1)*(this.viewbox.height+this.descent);
+},draw:function(_48,_49,_4a,_4b,_4c){
+if(!this.initialized()){
+throw new Error("dojox.gfx.VectorFont.draw(): we have not been initialized yet.");
+}
+var g=_48.createGroup();
+if(_49.x||_49.y){
+_48.applyTransform({dx:_49.x||0,dy:_49.y||0});
+}
+var _4d=dojo.map(this._normalize(_49.text).split(""),function(chr){
+return this.glyphs[chr]||{path:null,xAdvance:this.advance.missing.x};
+},this);
+var _4e=_4a.size,_4f=_49.fitting,_50=_49.width,_51=_49.height,_52=_49.align,_53=_49.leading||this._defaultLeading;
+if(_4f){
+if((_4f==dojox.gfx.vectorFontFitting.FLOW&&!_50)||(_4f==dojox.gfx.vectorFontFitting.FIT&&(!_50||!_51))){
+_4f=dojox.gfx.vectorFontFitting.NONE;
+}
+}
+var _54,_55;
+switch(_4f){
+case dojox.gfx.vectorFontFitting.FIT:
+var o=this._getBestFit(_4d,_50,_51,_53);
+_55=o.scale;
+_54=o.lines;
+break;
+case dojox.gfx.vectorFontFitting.FLOW:
+_55=this._getSizeFactor(_4e);
+_54=this._getBestFlow(_4d,_50,_55);
+break;
+default:
+_55=this._getSizeFactor(_4e);
+_54=[_4d];
+}
+_54=dojo.filter(_54,function(_56){
+return _56.length>0;
+});
+var cy=0,_57=this._getLongestLine(_54).width;
+for(var i=0,l=_54.length;i<l;i++){
+var cx=0,_58=_54[i],_59=this._getWidth(_58),lg=g.createGroup();
+for(var j=0;j<_58.length;j++){
+var _5a=_58[j];
+if(_5a.path!==null){
+var p=lg.createPath(_5a.path).setFill(_4b);
+if(_4c){
+p.setStroke(_4c);
+}
+p.setTransform([dojox.gfx.matrix.flipY,dojox.gfx.matrix.translate(cx,-this.viewbox.height-this.descent)]);
+}
+cx+=_5a.xAdvance;
+if(j+1<_58.length&&_5a.kern&&_5a.kern[_58[j+1].code]){
+cx+=_5a.kern[_58[j+1].code].x;
+}
+}
+var dx=0;
+if(_52=="middle"){
+dx=_57/2-_59/2;
+}else{
+if(_52=="end"){
+dx=_57-_59;
+}
+}
+lg.setTransform({dx:dx,dy:cy});
+cy+=this.viewbox.height*_53;
+}
+g.setTransform(dojox.gfx.matrix.scale(_55));
+return g;
+},onLoadBegin:function(url){
+},onLoad:function(_5b){
+}});
+})();
+}
diff --git a/js/dojo/dojox/gfx/fx.js b/js/dojo/dojox/gfx/fx.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/fx.js
@@ -0,0 +1,227 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.fx"]){
+dojo._hasResource["dojox.gfx.fx"]=true;
+dojo.provide("dojox.gfx.fx");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var d=dojo,g=dojox.gfx,m=g.matrix;
+var _1=function(_2,_3){
+this.start=_2,this.end=_3;
+};
+d.extend(_1,{getValue:function(r){
+return (this.end-this.start)*r+this.start;
+}});
+var _4=function(_5,_6,_7){
+this.start=_5,this.end=_6;
+this.units=_7;
+};
+d.extend(_4,{getValue:function(r){
+return (this.end-this.start)*r+this.start+this.units;
+}});
+var _8=function(_9,_a){
+this.start=_9,this.end=_a;
+this.temp=new dojo.Color();
+};
+d.extend(_8,{getValue:function(r){
+return d.blendColors(this.start,this.end,r,this.temp);
+}});
+var _b=function(_c){
+this.values=_c;
+this.length=_c.length;
+};
+d.extend(_b,{getValue:function(r){
+return this.values[Math.min(Math.floor(r*this.length),this.length-1)];
+}});
+var _d=function(_e,_f){
+this.values=_e;
+this.def=_f?_f:{};
+};
+d.extend(_d,{getValue:function(r){
+var ret=dojo.clone(this.def);
+for(var i in this.values){
+ret[i]=this.values[i].getValue(r);
+}
+return ret;
+}});
+var _10=function(_11,_12){
+this.stack=_11;
+this.original=_12;
+};
+d.extend(_10,{getValue:function(r){
+var ret=[];
+dojo.forEach(this.stack,function(t){
+if(t instanceof m.Matrix2D){
+ret.push(t);
+return;
+}
+if(t.name=="original"&&this.original){
+ret.push(this.original);
+return;
+}
+if(!(t.name in m)){
+return;
+}
+var f=m[t.name];
+if(typeof f!="function"){
+ret.push(f);
+return;
+}
+var val=dojo.map(t.start,function(v,i){
+return (t.end[i]-v)*r+v;
+}),_13=f.apply(m,val);
+if(_13 instanceof m.Matrix2D){
+ret.push(_13);
+}
+},this);
+return ret;
+}});
+var _14=new d.Color(0,0,0,0);
+var _15=function(_16,obj,_17,def){
+if(_16.values){
+return new _b(_16.values);
+}
+var _18,_19,end;
+if(_16.start){
+_19=g.normalizeColor(_16.start);
+}else{
+_19=_18=obj?(_17?obj[_17]:obj):def;
+}
+if(_16.end){
+end=g.normalizeColor(_16.end);
+}else{
+if(!_18){
+_18=obj?(_17?obj[_17]:obj):def;
+}
+end=_18;
+}
+return new _8(_19,end);
+};
+var _1a=function(_1b,obj,_1c,def){
+if(_1b.values){
+return new _b(_1b.values);
+}
+var _1d,_1e,end;
+if(_1b.start){
+_1e=_1b.start;
+}else{
+_1e=_1d=obj?obj[_1c]:def;
+}
+if(_1b.end){
+end=_1b.end;
+}else{
+if(typeof _1d!="number"){
+_1d=obj?obj[_1c]:def;
+}
+end=_1d;
+}
+return new _1(_1e,end);
+};
+g.fx.animateStroke=function(_1f){
+if(!_1f.easing){
+_1f.easing=d._defaultEasing;
+}
+var _20=new d.Animation(_1f),_21=_1f.shape,_22;
+d.connect(_20,"beforeBegin",_20,function(){
+_22=_21.getStroke();
+var _23=_1f.color,_24={},_25,_26,end;
+if(_23){
+_24.color=_15(_23,_22,"color",_14);
+}
+_23=_1f.style;
+if(_23&&_23.values){
+_24.style=new _b(_23.values);
+}
+_23=_1f.width;
+if(_23){
+_24.width=_1a(_23,_22,"width",1);
+}
+_23=_1f.cap;
+if(_23&&_23.values){
+_24.cap=new _b(_23.values);
+}
+_23=_1f.join;
+if(_23){
+if(_23.values){
+_24.join=new _b(_23.values);
+}else{
+_26=_23.start?_23.start:(_22&&_22.join||0);
+end=_23.end?_23.end:(_22&&_22.join||0);
+if(typeof _26=="number"&&typeof end=="number"){
+_24.join=new _1(_26,end);
+}
+}
+}
+this.curve=new _d(_24,_22);
+});
+d.connect(_20,"onAnimate",_21,"setStroke");
+return _20;
+};
+g.fx.animateFill=function(_27){
+if(!_27.easing){
+_27.easing=d._defaultEasing;
+}
+var _28=new d.Animation(_27),_29=_27.shape,_2a;
+d.connect(_28,"beforeBegin",_28,function(){
+_2a=_29.getFill();
+var _2b=_27.color,_2c={};
+if(_2b){
+this.curve=_15(_2b,_2a,"",_14);
+}
+});
+d.connect(_28,"onAnimate",_29,"setFill");
+return _28;
+};
+g.fx.animateFont=function(_2d){
+if(!_2d.easing){
+_2d.easing=d._defaultEasing;
+}
+var _2e=new d.Animation(_2d),_2f=_2d.shape,_30;
+d.connect(_2e,"beforeBegin",_2e,function(){
+_30=_2f.getFont();
+var _31=_2d.style,_32={},_33,_34,end;
+if(_31&&_31.values){
+_32.style=new _b(_31.values);
+}
+_31=_2d.variant;
+if(_31&&_31.values){
+_32.variant=new _b(_31.values);
+}
+_31=_2d.weight;
+if(_31&&_31.values){
+_32.weight=new _b(_31.values);
+}
+_31=_2d.family;
+if(_31&&_31.values){
+_32.family=new _b(_31.values);
+}
+_31=_2d.size;
+if(_31&&_31.units){
+_34=parseFloat(_31.start?_31.start:(_2f.font&&_2f.font.size||"0"));
+end=parseFloat(_31.end?_31.end:(_2f.font&&_2f.font.size||"0"));
+_32.size=new _4(_34,end,_31.units);
+}
+this.curve=new _d(_32,_30);
+});
+d.connect(_2e,"onAnimate",_2f,"setFont");
+return _2e;
+};
+g.fx.animateTransform=function(_35){
+if(!_35.easing){
+_35.easing=d._defaultEasing;
+}
+var _36=new d.Animation(_35),_37=_35.shape,_38;
+d.connect(_36,"beforeBegin",_36,function(){
+_38=_37.getTransform();
+this.curve=new _10(_35.transform,_38);
+});
+d.connect(_36,"onAnimate",_37,"setTransform");
+return _36;
+};
+})();
+}
diff --git a/js/dojo/dojox/gfx/resources/Gillius.svg b/js/dojo/dojox/gfx/resources/Gillius.svg
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/resources/Gillius.svg
@@ -0,0 +1,1272 @@
+<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
+<defs>
+ <font horiz-adv-x="985">
+ <font-face
+ font-family="Gillius ADF No2"
+ units-per-em="2048"
+ panose-1="2 11 5 3 5 0 0 2 0 3"
+ ascent="1536"
+ descent="-512"
+ alphabetic="0" />
+<missing-glyph horiz-adv-x="573" />
+<glyph unicode=" " glyph-name="space" horiz-adv-x="614" />
+<glyph unicode="!" glyph-name="exclam" horiz-adv-x="444" d="M185 176T221 176T284 147T311 80T284 14T221 -16T158 13T131 80T158 146ZM307 797L289 461H156L133 797V1417H307V797Z" />
+<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="737" d="M264 772H141V1231H264V772ZM596 772H473V1231H596V772Z" />
+<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="1265" d="M815 862H530L451 530H737L815 862ZM1241 862H928L854 530H1137V395H825L731 0H614L705 395H432L328 0H211L303 395H23V530H332L412 862H123V995H432L532 1393H651L555 995H844L938 1393H1053L963
+995H1241V862Z" />
+<glyph unicode="$" glyph-name="dollar" horiz-adv-x="954" d="M774 342Q774 367 769 389T757 427T736 459T710 484T677 504T641 520T599 533T557 544T512 555V125Q644 147 707 193T774 342ZM449 721V1130Q328 1117 266 1072T203 926Q203 884 215 853T248 801T301
+764T368 739T449 721ZM905 360Q905 38 512 2V-287H449V2Q367 2 255 28T66 88V246Q164 174 236 151T449 123V573Q66 641 66 909Q66 991 95 1055T177 1159T298 1222T449 1251V1477H512V1251Q618 1251 686 1233Q758 1216 829 1194V1044Q746 1093 690 1110Q588 1125
+512 1130V705Q583 694 638 679T745 637T831 574T885 484T905 360Z" />
+<glyph unicode="%" glyph-name="percent" horiz-adv-x="1613" d="M532 1061Q532 1116 523 1163T493 1250T435 1314T346 1337Q299 1337 263 1313T205 1248T173 1160T162 1061Q162 991 178 931T238 826T346 778Q398 778 436 802T493 869T522 959T532 1061ZM1450
+354Q1450 404 1441 450T1411 539T1354 606T1268 631Q1085 631 1081 354Q1081 302 1090 256T1119 168T1177 101T1268 76Q1316 76 1352 100T1408 165T1438 253T1450 354ZM635 1061Q635 987 619 921T569 801T478 714T346 682Q269 682 213 713T124 799T77 919T59 1061Q59
+1132 76 1198T126 1319T216 1408T346 1442Q404 1442 453 1420T535 1361T591 1274T624 1171T635 1061ZM1278 1442L453 -29H336L1161 1442H1278ZM1554 354Q1554 283 1538 218T1489 96T1399 5T1268 -29T1136 4T1044 93T993 215T975 354Q975 425 993 491T1046 611T1138
+698T1268 733Q1340 733 1396 699T1486 609T1537 488T1554 354Z" />
+<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="1306" d="M877 240L379 772Q290 696 246 621T201 444Q201 290 301 200T555 109Q649 109 723 140T877 240ZM1288 -4H1085L954 141Q753 -29 539 -29Q333 -29 201 98T68 432Q68 662 307 868Q269 919 240
+991Q219 1054 219 1118Q219 1260 311 1348Q406 1442 561 1442Q632 1442 712 1423T850 1374V1212Q713 1311 580 1311Q477 1311 416 1253Q348 1199 348 1118Q348 1063 379 1004Q413 946 492 864L963 362Q1031 458 1056 541T1087 752H1229Q1207 526 1040 266L1288
+-4Z" />
+<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="409" d="M276 1417Q274 1330 274 1259T268 1107T244 958H166L135 1169V1417H276Z" />
+<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="507" d="M477 -256H358Q82 197 82 610Q82 1013 358 1475H477Q347 1239 289 1047T227 610Q227 371 287 174T477 -256Z" />
+<glyph unicode=")" glyph-name="parenright" horiz-adv-x="509" d="M426 610Q426 402 349 171T150 -256H31Q161 -26 221 173T281 610Q281 847 220 1047T29 1475H150Q274 1271 350 1046T426 610Z" />
+<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="913" d="M848 811L811 727L498 918V555H416V918L104 727L66 811L387 1001L66 1188L104 1276L416 1077V1442H498V1077L811 1276L848 1188L520 999L848 811Z" />
+<glyph unicode="+" glyph-name="plus" horiz-adv-x="1107" d="M1083 467H614V0H496V467H23V594H496V1059H614V594H1083V467Z" />
+<glyph unicode="," glyph-name="comma" horiz-adv-x="454" d="M338 209V66Q336 -11 245 -102T74 -197Q116 -169 142 -118T168 -10Q168 33 154 68V209H338Z" />
+<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="749" d="M608 395H141V530H608V395Z" />
+<glyph unicode="." glyph-name="period" horiz-adv-x="477" d="M336 0H141V209H336V0Z" />
+<glyph unicode="/" glyph-name="slash" horiz-adv-x="643" d="M623 1417L150 -180H23L494 1417H623Z" />
+<glyph unicode="0" glyph-name="zero" horiz-adv-x="1126" d="M866 705Q866 1309 561 1309Q501 1309 453 1285T373 1224T320 1131T286 1025T269 908T261 800T260 705T261 610T268 503T286 388T320 282T374 190T453 130T561 106Q866 106 866 705ZM1012 705Q1012
+636 1007 570T989 429T954 290T898 166T817 64T706 -3T561 -29T417 -4T307 64T226 166T170 290T136 429T118 569T113 705Q113 774 117 839T135 979T168 1119T224 1244T304 1347T416 1416T561 1442T705 1417T816 1349T897 1246T954 1121T988 982T1007 841T1012 705Z"
+/>
+<glyph unicode="1" glyph-name="one" horiz-adv-x="585" d="M426 0H268V1264L55 1092V1251L256 1417H426V0Z" />
+<glyph unicode="2" glyph-name="two" d="M899 0H74V147Q110 185 335 433T578 702Q642 772 691 863T741 1030Q741 1153 660 1225T455 1298Q356 1298 268 1265T82 1169V1352Q155 1381 202 1397T317 1428T451 1442Q642 1442 764 1337T887 1040Q887 987 878 942T846
+851T804 776T748 692L262 147H899V0Z" />
+<glyph unicode="3" glyph-name="three" horiz-adv-x="1015" d="M911 410Q911 319 885 246T814 122T704 37T564 -13T401 -29Q250 -29 57 39V213Q134 159 210 138T397 117Q481 117 544 130T660 176T739 267T766 410Q766 481 741 535T669 622T564 670T434 686H289V825H440Q570
+825 651 882T735 1057Q735 1183 653 1240T434 1298Q371 1298 309 1287T208 1264T98 1227V1382Q285 1442 451 1442Q568 1442 663 1405T819 1284T881 1081Q881 971 817 889T635 764Q767 727 839 631T911 410Z" />
+<glyph unicode="4" glyph-name="four" horiz-adv-x="1040" d="M651 483V1264L166 483H651ZM997 338H805V0H651V338H51V516L600 1417H805V483H997V338Z" />
+<glyph unicode="5" glyph-name="five" horiz-adv-x="997" d="M911 451Q911 220 778 96T412 -29Q241 -29 70 31V209Q148 160 226 139T408 117Q571 117 667 202T764 451Q764 610 667 696T408 782Q304 782 260 771T127 715L213 1417H815V1268H315L264 895Q331 922
+440 928Q655 928 781 799T911 451Z" />
+<glyph unicode="6" glyph-name="six" horiz-adv-x="1075" d="M260 424Q260 276 341 191T565 106Q707 106 778 191T850 424Q850 574 777 671T565 768Q422 768 343 672T260 424ZM98 535Q98 685 136 833T236 1097T382 1298T555 1417H737Q654 1365 576 1293T433 1135T328
+954T287 768Q379 892 575 901Q712 901 809 838T951 668T997 424Q997 225 874 100T565 -29Q461 -29 380 1T247 83T160 208T112 362T98 535Z" />
+<glyph unicode="7" glyph-name="seven" horiz-adv-x="915" d="M866 1346L381 0H219L678 1266H33V1417H866V1346Z" />
+<glyph unicode="8" glyph-name="eight" horiz-adv-x="1097" d="M846 395Q846 531 766 606T547 682Q407 682 328 609T248 395Q248 253 327 180T547 106Q684 106 765 181T846 395ZM815 1061Q809 1193 736 1251T547 1309Q422 1309 353 1251T274 1061Q278 961 356
+889T543 817H547Q659 817 737 885T815 1061ZM989 395Q989 186 873 79T547 -29Q336 -29 218 78T100 395Q100 524 173 617T383 754Q252 801 192 869T131 1061Q131 1180 188 1268T339 1399T547 1442Q723 1442 841 1341T963 1061Q963 858 733 754Q982 665 989 395Z"
+/>
+<glyph unicode="9" glyph-name="nine" horiz-adv-x="1077" d="M813 965Q813 1113 732 1197T508 1282Q366 1282 295 1197T223 965Q223 893 240 832T292 723T381 648T508 621Q652 621 731 716T813 965ZM975 854Q975 703 937 556T837 292T691 90T518 -29H336Q505
+76 640 258T782 590Q723 534 663 514T498 487Q394 487 313 523T181 624T103 775T76 965Q76 1164 199 1289T508 1417Q612 1417 693 1387T826 1305T913 1180T961 1027T975 854Z" />
+<glyph unicode=":" glyph-name="colon" horiz-adv-x="477" d="M336 0H141V215H336V0ZM336 657H141V872H336V657Z" />
+<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="460" d="M334 209V66Q332 -11 241 -102T70 -197Q112 -169 138 -118T164 -10Q164 33 150 68V209H334ZM336 657H147V872H336V657Z" />
+<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="1177" d="M1100 78L39 465V592L1100 981V842L217 528L1100 217V78Z" />
+<glyph unicode="=" glyph-name="equal" horiz-adv-x="1345" d="M1204 291H141V420H1204V291ZM1204 639H141V766H1204V639Z" />
+<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="1179" d="M1141 465L78 78V217L961 528L78 842V981L1141 592V465Z" />
+<glyph unicode="?" glyph-name="question" horiz-adv-x="784" d="M302 176T338 176T401 147T428 80T401 14T338 -16T275 13T248 80T275 146ZM727 1112Q727 1067 718 1030T686 958T645 900T588 838L506 754Q471 714 460 700T433 663T414 619T409 571T406 496V375H264V524Q264
+622 293 683T395 823L475 907Q511 941 544 994T582 1102Q582 1200 514 1251T344 1303Q255 1303 185 1271T37 1171V1339Q126 1393 202 1417T377 1442Q535 1442 629 1356T727 1112Z" />
+<glyph unicode="@" glyph-name="at" horiz-adv-x="1689" d="M1098 508Q1098 640 1032 721Q959 797 852 797Q734 797 674 716T610 508Q610 384 674 302T854 219Q972 219 1033 300T1098 508ZM1628 625Q1628 375 1488 230T1100 82V209Q1056 154 980 120T819 86Q752
+86 696 110T601 174T535 269T494 383T481 508Q481 590 501 664T562 800T668 898T819 936Q1038 936 1100 811V920H1229V221Q1304 233 1360 269T1448 359T1497 478T1516 621Q1516 741 1470 857T1342 1065T1140 1213T881 1270H866Q714 1270 583 1209T364 1044T226
+803T176 514Q176 352 232 216T383 -11T603 -151T866 -201Q1095 -201 1294 -39L1370 -150Q1241 -245 1127 -290T866 -338Q703 -338 557 -277T304 -106T133 165T70 514Q70 645 101 768T199 1000T359 1190T587 1318T879 1366Q1049 1366 1192 1305T1429 1140T1576 904T1628
+625Z" />
+<glyph unicode="A" glyph-name="A" horiz-adv-x="1222" d="M872 516L614 1245L350 516H872ZM1206 0H1042L924 371H299L178 0H16L518 1417H702L1206 0Z" />
+<glyph unicode="B" glyph-name="B" horiz-adv-x="1146" d="M909 416Q909 563 832 623T602 684H297V141H602Q753 141 831 205T909 416ZM866 1051Q866 1269 580 1276H297V821H580Q707 821 785 878T866 1051ZM1063 395Q1063 292 1031 215T938 92T797 23T614 0H141V1417H594Q993
+1417 1008 1071Q1008 960 962 879T823 774V754Q936 720 999 622T1063 395Z" />
+<glyph unicode="C" glyph-name="C" horiz-adv-x="1196" d="M1130 104Q1050 42 939 7T719 -29Q562 -29 440 27T241 184T125 417T86 705Q86 829 110 938T184 1141T308 1300T487 1404T719 1442Q946 1442 1130 1311V1118Q1047 1214 953 1258T729 1303Q598 1303 502
+1257T350 1127T267 939T238 705Q238 602 255 515T309 352T403 224T542 141T729 111Q858 111 951 153T1130 291V104Z" />
+<glyph unicode="D" glyph-name="D" horiz-adv-x="1320" d="M1081 711Q1081 1005 949 1139T528 1276H295V141H528Q812 141 946 281T1081 711ZM1231 1085T1231 711T1053 169T500 0H141V1417H500Q875 1417 1053 1251Z" />
+<glyph unicode="E" glyph-name="E" horiz-adv-x="1030" d="M979 0H141V1417H963V1268H295V827H932V682H295V147H979V0Z" />
+<glyph unicode="F" glyph-name="F" horiz-adv-x="921" d="M889 1268H297V831H831V684H297V0H141V1417H889V1268Z" />
+<glyph unicode="G" glyph-name="G" horiz-adv-x="1316" d="M1221 127Q1014 -29 735 -29Q573 -29 448 25T245 178T126 410T86 705T125 1000T243 1232T446 1387T735 1442Q855 1442 973 1408T1186 1311V1120Q1083 1219 987 1261T750 1303Q613 1303 514 1260T356 1134T269
+947T238 705Q238 570 267 464T356 277T516 154T750 111Q919 111 1071 182V590H770V731H1221V127Z" />
+<glyph unicode="H" glyph-name="H" horiz-adv-x="1271" d="M1130 0H975V682H295V0H141V1417H295V827H975V1417H1130V0Z" />
+<glyph unicode="I" glyph-name="I" horiz-adv-x="436" d="M295 0H141V1417H295V0Z" />
+<glyph unicode="J" glyph-name="J" horiz-adv-x="428" d="M287 94Q287 -152 193 -276Q105 -387 -98 -387H-156V-244H-113Q30 -244 84 -172Q135 -96 135 94V1417H287V94Z" />
+<glyph unicode="K" glyph-name="K" horiz-adv-x="1171" d="M1174 0H961L297 692V0H141V1417H297V809L913 1417H1128L463 760L1174 0Z" />
+<glyph unicode="L" glyph-name="L" horiz-adv-x="962" d="M952 0H141V1417H297V147H952V0Z" />
+<glyph unicode="M" glyph-name="M" horiz-adv-x="1470" d="M1329 0H1176V1135L739 276L295 1135V0H141V1417H295L739 578L1176 1417H1329V0Z" />
+<glyph unicode="N" glyph-name="N" horiz-adv-x="1265" d="M1124 0H971L293 1141V0H141V1417H287L971 274V1417H1124V0Z" />
+<glyph unicode="O" glyph-name="O" horiz-adv-x="1374" d="M1133 705Q1133 797 1119 880T1070 1042T985 1177T856 1269T682 1303Q587 1303 510 1269T383 1177T299 1041T251 879T236 705Q236 617 251 534T300 373T384 237T511 144T682 109Q777 109 854 143T982
+235T1068 370T1118 531T1133 705ZM1284 824T1284 705T1262 479T1193 279T1076 117T906 10T682 -29Q532 -29 415 31T227 196T120 429T84 705Q84 820 106 926T175 1126T291 1291T460 1401T682 1442Q805 1442 906 1403T1076 1295T1193 1132T1262 931Z" />
+<glyph unicode="P" glyph-name="P" horiz-adv-x="1040" d="M825 995Q825 1133 751 1203T541 1276H295V719H541Q677 719 749 790T825 995ZM979 995Q979 783 866 679T541 575H295V0H141V1417H541Q753 1417 866 1312T979 995Z" />
+<glyph unicode="Q" glyph-name="Q" horiz-adv-x="1372" d="M1133 707Q1133 798 1119 881T1070 1043T985 1178T856 1269T682 1303Q587 1303 510 1269T383 1177T299 1041T251 880T236 707Q236 620 251 538T301 378T386 242T513 148T682 113T852 147T980 239T1066
+374T1117 534T1133 707ZM1284 707Q1284 192 928 20Q928 -17 985 -68T1075 -119Q1083 -121 1100 -121Q1144 -121 1197 -97T1282 -37Q1285 -105 1214 -175T1055 -246Q961 -246 873 -175T766 -20Q730 -20 713 -21T682 -23Q561 -23 461 16T292 124T176 285T106 484T84
+707Q84 822 106 927T175 1127T291 1291T460 1401T682 1442Q805 1442 906 1403T1076 1295T1193 1132T1262 932T1284 707Z" />
+<glyph unicode="R" glyph-name="R" horiz-adv-x="1112" d="M821 1016Q821 1269 539 1276H295V748H539Q672 748 746 816T821 1016ZM1092 0H930Q886 40 859 99T808 243T770 365Q656 606 520 606H506H295V0H141V1417H539Q973 1417 973 1016Q973 947 963 899T926 805T845
+727T709 672Q731 659 751 641T787 604T818 562T846 517T871 471T893 425T913 381T952 276T1015 120T1092 0Z" />
+<glyph unicode="S" glyph-name="S" horiz-adv-x="1067" d="M999 385Q999 295 974 224T904 106T796 28T659 -16T500 -29Q433 -29 354 -15T222 15T84 59V246Q293 109 500 109Q566 109 625 123T735 167T816 249T846 371Q846 436 827 481T766 557T682 604T569 639L461
+659Q387 676 333 695T230 744T151 814T104 910T86 1040Q86 1142 120 1220T215 1346T359 1418T541 1442Q631 1442 738 1422T922 1368V1200Q841 1241 801 1258T698 1289T559 1303Q490 1303 435 1291T333 1250T260 1173T231 1055Q231 1007 245 971T282 912T342 871T415
+844T502 823L616 803Q801 760 900 663T999 385Z" />
+<glyph unicode="T" glyph-name="T" horiz-adv-x="1142" d="M1122 1268H649V0H496V1268H20V1417H1122V1268Z" />
+<glyph unicode="U" glyph-name="U" horiz-adv-x="1253" d="M1124 528Q1124 265 1005 118T631 -29Q376 -29 253 117T129 528V1417H283V553Q283 468 291 404T323 282T385 188T485 130T631 109Q733 109 802 140T907 234T958 372T973 553V1417H1124V528Z" />
+<glyph unicode="V" glyph-name="V" horiz-adv-x="1226" d="M1206 1417L616 -29L20 1417H178L616 369L1044 1417H1206Z" />
+<glyph unicode="W" glyph-name="W" horiz-adv-x="1726" d="M1686 1417L1255 -29L860 1044L477 -29L43 1417H197L498 451L860 1450L1235 451L1532 1417H1686Z" />
+<glyph unicode="X" glyph-name="X" horiz-adv-x="1140" d="M1120 0H952L571 614L178 0H10L492 760L72 1417H240L582 881L926 1417H1094L666 737L1120 0Z" />
+<glyph unicode="Y" glyph-name="Y" horiz-adv-x="1091" d="M1094 1417L623 676V0H469V676L0 1417H168L547 821L926 1417H1094Z" />
+<glyph unicode="Z" glyph-name="Z" horiz-adv-x="1155" d="M1112 0H51V137L895 1266H70V1417H1090L1087 1282L244 147H1112V0Z" />
+<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="542" d="M508 -256H141V1477H508V1354H287V-137H508V-256Z" />
+<glyph unicode="\" glyph-name="backslash" horiz-adv-x="647" d="M623 -180H494L23 1417H150L623 -180Z" />
+<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="542" d="M401 -256H35V-137H256V1354H35V1477H401V-256Z" />
+<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="1234" d="M1198 887L1016 889L616 1260L217 889L37 887L530 1417H702L1198 887Z" />
+<glyph unicode="_" glyph-name="underscore" horiz-adv-x="921" d="M926 -459H-20V-322H926V-459Z" />
+<glyph unicode="`" glyph-name="grave" horiz-adv-x="573" d="M510 1040H375L72 1352H250L510 1040Z" />
+<glyph unicode="a" glyph-name="a" horiz-adv-x="1024" d="M709 365V381Q693 416 636 443T516 471Q478 471 444 468T368 452T297 420T247 364T225 281Q225 193 282 149T430 104Q557 106 633 168T709 365ZM967 139Q964 75 924 29T819 -25Q769 -21 739 17T709 121Q655
+52 570 14T387 -25Q246 -25 168 52T86 270Q86 357 119 420T210 517T339 568T496 584Q544 584 604 567T709 522V582Q706 711 639 765T446 819Q352 819 283 791T150 700V852Q208 894 296 920T461 946Q850 946 850 584V176Q847 116 897 104H903Q936 104 967 139Z"
+/>
+<glyph unicode="b" glyph-name="b" horiz-adv-x="1062" d="M295 778V141Q376 106 479 106Q644 110 727 201T811 461Q811 626 726 720T479 815Q368 810 295 778ZM141 1417H295V920Q391 946 487 946Q711 946 838 815T965 461Q962 240 840 108T498 -25Q302 -25 141 51V1417Z" />
+<glyph unicode="c" glyph-name="c" horiz-adv-x="925" d="M852 33Q692 -25 561 -25Q342 -25 220 107T94 461Q94 684 220 815T571 946Q693 946 852 891V737Q763 780 715 795T580 815Q418 815 333 721T248 461Q248 293 331 202T580 106Q618 106 648 109T702 118T750
+134T798 156T852 184V33Z" />
+<glyph unicode="d" glyph-name="d" horiz-adv-x="1056" d="M764 778Q691 810 580 815Q418 815 333 721T248 461Q248 293 331 202T580 106Q683 106 764 141V778ZM918 1417V51Q757 -25 561 -25Q342 -25 220 107T94 461Q94 684 220 815T571 946Q668 946 764 920V1417H918Z" />
+<glyph unicode="e" glyph-name="e" horiz-adv-x="1015" d="M784 588Q784 685 711 750T520 815Q409 815 341 751T258 588H784ZM934 463H252V446Q252 284 332 199T557 113Q682 113 733 127T901 199V45Q722 -25 547 -25Q338 -25 216 107T94 453Q94 550 122 638T203
+795T338 905T520 946Q632 944 713 909T841 809T911 663T934 477V463Z" />
+<glyph unicode="f" glyph-name="f" horiz-adv-x="657" d="M610 1286H459Q420 1286 389 1237T358 1067V924H621V801H358V0H205V801H55V924H205V1051Q213 1414 461 1417H610V1286Z" />
+<glyph unicode="g" glyph-name="g" horiz-adv-x="927" d="M461 811Q378 811 320 752T262 610T320 469T461 410Q543 410 601 468T659 610T601 752T461 811ZM436 154Q548 154 652 118T828 6T901 -172Q901 -298 764 -395T436 -492Q250 -492 131 -396T12 -170Q12 -89
+62 -19T201 96Q90 158 90 244Q90 303 135 340T229 379Q141 467 141 606Q145 744 242 842T471 942Q534 942 602 922H862V807H713Q780 714 780 606Q780 467 687 369T461 270Q429 270 377 279T303 307Q231 307 231 246Q231 215 274 184T385 152Q403 154 436 154ZM434
+23Q307 23 236 -31T164 -172T235 -312T434 -365Q564 -365 645 -311T727 -172T646 -32T434 23Z" />
+<glyph unicode="h" glyph-name="h" horiz-adv-x="1067" d="M938 0H788V553Q788 682 739 746T571 813Q452 811 374 732T293 522V0H141V1417H293V797Q385 946 608 946Q720 946 796 894T905 757T938 561V0Z" />
+<glyph unicode="i" glyph-name="i" horiz-adv-x="436" d="M183 1417T219 1417T282 1388T309 1321T282 1255T219 1225T156 1254T129 1321T156 1387ZM295 0H141V924H295V0Z" />
+<glyph unicode="j" glyph-name="j" horiz-adv-x="440" d="M183 1417T219 1417T282 1388T309 1321T282 1255T219 1225T156 1254T129 1321T156 1387ZM299 -172Q299 -347 223 -426Q182 -472 121 -492L57 -377Q84 -367 113 -336Q141 -297 141 -172V924H299V-172Z" />
+<glyph unicode="k" glyph-name="k" horiz-adv-x="1024" d="M1001 0H788L297 440V0H141V1417H297V541L772 924H981L461 496L1001 0Z" />
+<glyph unicode="l" glyph-name="l" horiz-adv-x="409" d="M270 1417V0H119V1417H270Z" />
+<glyph unicode="m" glyph-name="m" horiz-adv-x="1646" d="M1516 0H1372V553Q1372 678 1327 744T1171 811Q1040 811 972 734T901 522V0H756V553Q756 682 712 746T555 811H547Q437 811 367 730T293 522V0H141V926H293V801Q345 865 428 905T600 946Q697 946 771
+895T883 760Q939 846 1025 896T1214 946Q1296 946 1356 914T1450 826T1500 703T1516 557V0Z" />
+<glyph unicode="n" glyph-name="n" horiz-adv-x="1067" d="M938 0H788V553Q788 682 738 746T571 811Q448 811 372 733T293 522V0H141V926H293V799Q346 873 429 909T608 946Q776 946 857 840T938 557V0Z" />
+<glyph unicode="o" glyph-name="o" horiz-adv-x="1062" d="M813 461Q812 552 780 629T681 757T528 809Q436 808 372 760T278 637T248 467Q248 421 255 377T281 284T330 200T411 140T528 115Q653 115 732 217T813 461ZM965 461Q964 329 914 221T764 45T528 -25Q333
+-21 214 121T92 461Q94 672 210 809T528 946Q618 946 692 918T816 843T900 733T949 602T965 461Z" />
+<glyph unicode="p" glyph-name="p" horiz-adv-x="1056" d="M289 145Q363 114 473 109Q634 109 719 203T805 463Q805 631 722 722T473 817Q367 817 289 782V145ZM135 -494V872Q293 948 492 948Q710 948 832 816T958 463Q958 240 832 109T481 -23Q389 -23 289 4V-494H135Z" />
+<glyph unicode="q" glyph-name="q" horiz-adv-x="1054" d="M762 145V782Q684 817 578 817Q412 814 329 723T246 463Q246 298 331 204T578 109Q688 114 762 145ZM915 -494H762V4Q661 -23 569 -23Q345 -23 219 108T92 463Q95 684 217 816T559 948Q758 948 915 872V-494Z" />
+<glyph unicode="r" glyph-name="r" horiz-adv-x="757" d="M664 700L659 702Q633 735 568 771T467 807H463Q411 803 375 773T323 700T301 624T295 563V0H141V926H295V801Q327 864 383 899T512 938Q565 938 626 911T729 840L664 700Z" />
+<glyph unicode="s" glyph-name="s" horiz-adv-x="903" d="M817 256Q817 194 794 145T732 64T642 13T537 -16T426 -25Q297 -25 88 31V199Q164 162 182 154T246 130T329 111T430 104Q473 104 510 110T585 130T645 174T670 244Q670 286 649 314T593 357T515 382T430
+401L373 414Q244 439 175 497T102 674Q102 749 132 803T216 888T331 932T465 946Q644 946 772 897V743Q710 772 674 787T602 808T485 817Q442 817 404 812T328 792T266 750T240 680Q240 656 250 637T278 605T317 582T364 565T414 553T461 543L512 528Q582 515 631
+498T726 450T794 371T817 256Z" />
+<glyph unicode="t" glyph-name="t" horiz-adv-x="706" d="M659 10Q580 -25 498 -29Q327 -29 252 50T176 303V803H68V924H176L262 1188H328V924H600V803H328V303Q328 192 361 147T498 102Q574 102 659 141V10Z" />
+<glyph unicode="u" glyph-name="u" horiz-adv-x="1073" d="M932 0H774V121Q721 58 637 17T465 -25Q299 -25 215 83T131 365V924H281V369Q281 243 331 177T500 111Q636 111 705 188T774 401V924H932V0Z" />
+<glyph unicode="v" glyph-name="v" d="M944 924L494 -29L43 924H184L494 276L803 924H944Z" />
+<glyph unicode="w" glyph-name="w" horiz-adv-x="1363" d="M1305 924L975 -29L684 659L385 -29L61 924H193L410 297L684 946L958 297L1174 924H1305Z" />
+<glyph unicode="x" glyph-name="x" horiz-adv-x="968" d="M930 0H770L481 373L193 0H33L410 485L63 924H229L492 586L750 924H913L563 477L930 0Z" />
+<glyph unicode="y" glyph-name="y" horiz-adv-x="970" d="M936 924L381 -354Q344 -414 288 -452T174 -494L123 -389Q157 -389 207 -355T276 -276L434 96L31 924H176L510 248L795 924H936Z" />
+<glyph unicode="z" glyph-name="z" horiz-adv-x="921" d="M840 0H74V154L662 788H94V924H840V770L254 135H840V0Z" />
+<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="731" d="M702 -317H659Q447 -317 367 -246Q301 -180 301 27V256Q301 402 246 463Q195 520 55 520H12V641H55Q192 641 246 700Q301 758 301 901V1133Q301 1342 369 1407Q445 1474 659 1477H702V1358H653Q510
+1358 473 1313Q433 1270 430 1128V891Q430 736 391 684Q356 619 250 580Q360 544 391 483Q430 422 430 270V31Q430 -106 473 -152Q511 -194 653 -197H702V-317Z" />
+<glyph unicode="|" glyph-name="bar" horiz-adv-x="430" d="M289 -459H141V1483H289V-459Z" />
+<glyph unicode="}" glyph-name="braceright" horiz-adv-x="727" d="M715 520H674Q532 520 481 463Q428 404 428 256V27Q428 -176 358 -246Q284 -317 72 -317H29V-197H78Q216 -197 254 -154Q299 -109 299 31V270Q299 422 336 481Q370 545 483 580Q418 601 385 625T336
+684Q299 734 299 891V1128Q299 1272 254 1311Q217 1355 78 1358H29V1477H72Q282 1477 358 1407Q428 1344 428 1133V901Q428 757 481 698Q540 641 674 641H715V520Z" />
+<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="1277" d="M1167 537Q1096 477 1008 438Q926 413 858 410Q760 410 645 463L632 470Q619 476 596 485T544 503T477 519T403 526H397Q311 526 246 494Q190 471 106 385V526Q168 578 264 623Q340 651 418
+651Q454 651 535 631T657 590Q795 535 877 535Q937 535 1028 567Q1125 636 1167 674V537Z" />
+<hkern g1="parenleft" g2="J" k="-135" />
+<hkern g1="hyphen" g2="T" k="143" />
+<hkern g1="hyphen" g2="V" k="106" />
+<hkern g1="hyphen" g2="W" k="74" />
+<hkern g1="hyphen" g2="X" k="55" />
+<hkern g1="hyphen" g2="Y" k="131" />
+<hkern g1="A" g2="comma" k="-33" />
+<hkern g1="A" g2="period" k="-39" />
+<hkern g1="A" g2="A" k="-41" />
+<hkern g1="A" g2="C" k="41" />
+<hkern g1="A" g2="G" k="41" />
+<hkern g1="A" g2="O" k="39" />
+<hkern g1="A" g2="Q" k="39" />
+<hkern g1="A" g2="T" k="211" />
+<hkern g1="A" g2="U" k="39" />
+<hkern g1="A" g2="V" k="178" />
+<hkern g1="A" g2="W" k="141" />
+<hkern g1="A" g2="Y" k="190" />
+<hkern g1="A" g2="d" k="35" />
+<hkern g1="A" g2="f" k="51" />
+<hkern g1="A" g2="g" k="-25" />
+<hkern g1="A" g2="t" k="39" />
+<hkern g1="A" g2="v" k="88" />
+<hkern g1="A" g2="w" k="70" />
+<hkern g1="A" g2="y" k="82" />
+<hkern g1="A" g2="guillemotleft" k="33" />
+<hkern g1="A" g2="Adieresis" k="-41" />
+<hkern g1="A" g2="Ccedilla" k="41" />
+<hkern g1="A" g2="Ograve" k="39" />
+<hkern g1="A" g2="Oacute" k="39" />
+<hkern g1="A" g2="Ocircumflex" k="39" />
+<hkern g1="A" g2="Otilde" k="39" />
+<hkern g1="A" g2="Odieresis" k="39" />
+<hkern g1="A" g2="Ugrave" k="39" />
+<hkern g1="A" g2="Uacute" k="39" />
+<hkern g1="A" g2="Ucircumflex" k="39" />
+<hkern g1="A" g2="Udieresis" k="39" />
+<hkern g1="A" g2="Yacute" k="190" />
+<hkern g1="A" g2="ograve" k="29" />
+<hkern g1="A" g2="oacute" k="29" />
+<hkern g1="A" g2="ocircumflex" k="29" />
+<hkern g1="A" g2="otilde" k="25" />
+<hkern g1="A" g2="odieresis" k="20" />
+<hkern g1="A" g2="udieresis" k="20" />
+<hkern g1="A" g2="Ydieresis" k="190" />
+<hkern g1="A" g2="quoteright" k="104" />
+<hkern g1="A" g2="quotedblright" k="104" />
+<hkern g1="A" g2="guilsinglleft" k="33" />
+<hkern g1="B" g2="hyphen" k="-23" />
+<hkern g1="B" g2="V" k="51" />
+<hkern g1="B" g2="W" k="41" />
+<hkern g1="B" g2="Y" k="70" />
+<hkern g1="B" g2="y" k="29" />
+<hkern g1="C" g2="hyphen" k="307" />
+<hkern g1="C" g2="O" k="61" />
+<hkern g1="C" g2="v" k="184" />
+<hkern g1="C" g2="w" k="139" />
+<hkern g1="C" g2="y" k="182" />
+<hkern g1="C" g2="Oacute" k="61" />
+<hkern g1="C" g2="Odieresis" k="61" />
+<hkern g1="D" g2="A" k="47" />
+<hkern g1="D" g2="T" k="125" />
+<hkern g1="D" g2="V" k="63" />
+<hkern g1="D" g2="W" k="45" />
+<hkern g1="D" g2="X" k="86" />
+<hkern g1="D" g2="Y" k="98" />
+<hkern g1="D" g2="Agrave" k="47" />
+<hkern g1="D" g2="Aacute" k="47" />
+<hkern g1="D" g2="Acircumflex" k="47" />
+<hkern g1="D" g2="Atilde" k="47" />
+<hkern g1="D" g2="Adieresis" k="47" />
+<hkern g1="D" g2="Aring" k="47" />
+<hkern g1="E" g2="G" k="35" />
+<hkern g1="E" g2="c" k="55" />
+<hkern g1="E" g2="d" k="74" />
+<hkern g1="E" g2="v" k="39" />
+<hkern g1="E" g2="w" k="39" />
+<hkern g1="E" g2="y" k="31" />
+<hkern g1="F" g2="comma" k="199" />
+<hkern g1="F" g2="hyphen" k="195" />
+<hkern g1="F" g2="period" k="195" />
+<hkern g1="F" g2="A" k="152" />
+<hkern g1="F" g2="O" k="29" />
+<hkern g1="F" g2="a" k="76" />
+<hkern g1="F" g2="e" k="76" />
+<hkern g1="F" g2="o" k="72" />
+<hkern g1="F" g2="r" k="59" />
+<hkern g1="F" g2="u" k="51" />
+<hkern g1="F" g2="y" k="29" />
+<hkern g1="F" g2="Agrave" k="152" />
+<hkern g1="F" g2="Aacute" k="152" />
+<hkern g1="F" g2="Acircumflex" k="152" />
+<hkern g1="F" g2="Atilde" k="152" />
+<hkern g1="F" g2="Adieresis" k="152" />
+<hkern g1="F" g2="Aring" k="152" />
+<hkern g1="F" g2="Odieresis" k="29" />
+<hkern g1="F" g2="Oslash" k="39" />
+<hkern g1="F" g2="agrave" k="82" />
+<hkern g1="F" g2="aacute" k="86" />
+<hkern g1="F" g2="acircumflex" k="84" />
+<hkern g1="F" g2="atilde" k="74" />
+<hkern g1="F" g2="adieresis" k="74" />
+<hkern g1="F" g2="aring" k="74" />
+<hkern g1="F" g2="ae" k="76" />
+<hkern g1="F" g2="egrave" k="84" />
+<hkern g1="F" g2="eacute" k="86" />
+<hkern g1="F" g2="ecircumflex" k="86" />
+<hkern g1="F" g2="edieresis" k="78" />
+<hkern g1="F" g2="ograve" k="82" />
+<hkern g1="F" g2="oacute" k="84" />
+<hkern g1="F" g2="ocircumflex" k="82" />
+<hkern g1="F" g2="otilde" k="76" />
+<hkern g1="F" g2="odieresis" k="74" />
+<hkern g1="F" g2="oslash" k="80" />
+<hkern g1="F" g2="ugrave" k="63" />
+<hkern g1="F" g2="uacute" k="66" />
+<hkern g1="F" g2="ucircumflex" k="63" />
+<hkern g1="F" g2="udieresis" k="57" />
+<hkern g1="F" g2="oe" k="70" />
+<hkern g1="G" g2="T" k="31" />
+<hkern g1="G" g2="V" k="41" />
+<hkern g1="G" g2="W" k="41" />
+<hkern g1="G" g2="Y" k="43" />
+<hkern g1="K" g2="hyphen" k="98" />
+<hkern g1="K" g2="A" k="-49" />
+<hkern g1="K" g2="C" k="117" />
+<hkern g1="K" g2="G" k="117" />
+<hkern g1="K" g2="O" k="113" />
+<hkern g1="K" g2="Q" k="115" />
+<hkern g1="K" g2="U" k="43" />
+<hkern g1="K" g2="Y" k="-20" />
+<hkern g1="K" g2="a" k="29" />
+<hkern g1="K" g2="e" k="78" />
+<hkern g1="K" g2="o" k="82" />
+<hkern g1="K" g2="u" k="70" />
+<hkern g1="K" g2="v" k="201" />
+<hkern g1="K" g2="w" k="152" />
+<hkern g1="K" g2="y" k="182" />
+<hkern g1="K" g2="Adieresis" k="-49" />
+<hkern g1="K" g2="Aring" k="-49" />
+<hkern g1="K" g2="Ograve" k="113" />
+<hkern g1="K" g2="Oacute" k="113" />
+<hkern g1="K" g2="Ocircumflex" k="113" />
+<hkern g1="K" g2="Otilde" k="113" />
+<hkern g1="K" g2="Odieresis" k="113" />
+<hkern g1="K" g2="adieresis" k="35" />
+<hkern g1="K" g2="aring" k="39" />
+<hkern g1="K" g2="ae" k="29" />
+<hkern g1="K" g2="egrave" k="92" />
+<hkern g1="K" g2="eacute" k="94" />
+<hkern g1="K" g2="ecircumflex" k="92" />
+<hkern g1="K" g2="edieresis" k="86" />
+<hkern g1="K" g2="oacute" k="98" />
+<hkern g1="K" g2="odieresis" k="88" />
+<hkern g1="K" g2="udieresis" k="76" />
+<hkern g1="K" g2="OE" k="135" />
+<hkern g1="K" g2="oe" k="82" />
+<hkern g1="L" g2="hyphen" k="211" />
+<hkern g1="L" g2="A" k="-41" />
+<hkern g1="L" g2="C" k="135" />
+<hkern g1="L" g2="G" k="133" />
+<hkern g1="L" g2="O" k="129" />
+<hkern g1="L" g2="T" k="264" />
+<hkern g1="L" g2="U" k="102" />
+<hkern g1="L" g2="V" k="295" />
+<hkern g1="L" g2="W" k="221" />
+<hkern g1="L" g2="Y" k="244" />
+<hkern g1="L" g2="u" k="55" />
+<hkern g1="L" g2="y" k="190" />
+<hkern g1="L" g2="Aacute" k="-41" />
+<hkern g1="L" g2="Adieresis" k="-41" />
+<hkern g1="L" g2="Aring" k="-41" />
+<hkern g1="L" g2="AE" k="-43" />
+<hkern g1="L" g2="Ccedilla" k="137" />
+<hkern g1="L" g2="Ograve" k="129" />
+<hkern g1="L" g2="Oacute" k="129" />
+<hkern g1="L" g2="Ocircumflex" k="129" />
+<hkern g1="L" g2="Otilde" k="129" />
+<hkern g1="L" g2="Odieresis" k="129" />
+<hkern g1="L" g2="Udieresis" k="104" />
+<hkern g1="L" g2="udieresis" k="63" />
+<hkern g1="L" g2="quoteright" k="209" />
+<hkern g1="L" g2="quotedblright" k="209" />
+<hkern g1="N" g2="aacute" k="20" />
+<hkern g1="N" g2="eacute" k="23" />
+<hkern g1="N" g2="oacute" k="20" />
+<hkern g1="O" g2="comma" k="59" />
+<hkern g1="O" g2="period" k="49" />
+<hkern g1="O" g2="A" k="45" />
+<hkern g1="O" g2="T" k="117" />
+<hkern g1="O" g2="V" k="63" />
+<hkern g1="O" g2="W" k="49" />
+<hkern g1="O" g2="X" k="78" />
+<hkern g1="O" g2="Y" k="94" />
+<hkern g1="O" g2="Agrave" k="45" />
+<hkern g1="O" g2="Aacute" k="45" />
+<hkern g1="O" g2="Acircumflex" k="45" />
+<hkern g1="O" g2="Atilde" k="45" />
+<hkern g1="O" g2="Adieresis" k="45" />
+<hkern g1="O" g2="Aring" k="45" />
+<hkern g1="O" g2="AE" k="51" />
+<hkern g1="P" g2="comma" k="248" />
+<hkern g1="P" g2="hyphen" k="244" />
+<hkern g1="P" g2="period" k="244" />
+<hkern g1="P" g2="A" k="139" />
+<hkern g1="P" g2="a" k="66" />
+<hkern g1="P" g2="e" k="82" />
+<hkern g1="P" g2="i" k="37" />
+<hkern g1="P" g2="n" k="43" />
+<hkern g1="P" g2="o" k="80" />
+<hkern g1="P" g2="r" k="43" />
+<hkern g1="P" g2="s" k="47" />
+<hkern g1="P" g2="u" k="35" />
+<hkern g1="P" g2="Agrave" k="139" />
+<hkern g1="P" g2="Aacute" k="139" />
+<hkern g1="P" g2="Acircumflex" k="139" />
+<hkern g1="P" g2="Atilde" k="139" />
+<hkern g1="P" g2="Adieresis" k="139" />
+<hkern g1="P" g2="Aring" k="139" />
+<hkern g1="P" g2="AE" k="154" />
+<hkern g1="P" g2="agrave" k="74" />
+<hkern g1="P" g2="aacute" k="74" />
+<hkern g1="P" g2="acircumflex" k="63" />
+<hkern g1="P" g2="atilde" k="53" />
+<hkern g1="P" g2="adieresis" k="59" />
+<hkern g1="P" g2="aring" k="70" />
+<hkern g1="P" g2="ae" k="66" />
+<hkern g1="P" g2="egrave" k="94" />
+<hkern g1="P" g2="eacute" k="94" />
+<hkern g1="P" g2="ecircumflex" k="84" />
+<hkern g1="P" g2="edieresis" k="78" />
+<hkern g1="P" g2="ograve" k="92" />
+<hkern g1="P" g2="oacute" k="92" />
+<hkern g1="P" g2="ocircumflex" k="82" />
+<hkern g1="P" g2="otilde" k="74" />
+<hkern g1="P" g2="odieresis" k="74" />
+<hkern g1="P" g2="oslash" k="90" />
+<hkern g1="P" g2="ugrave" k="49" />
+<hkern g1="P" g2="uacute" k="49" />
+<hkern g1="P" g2="ucircumflex" k="43" />
+<hkern g1="P" g2="udieresis" k="39" />
+<hkern g1="P" g2="oe" k="78" />
+<hkern g1="Q" g2="A" k="43" />
+<hkern g1="Q" g2="Adieresis" k="43" />
+<hkern g1="R" g2="hyphen" k="29" />
+<hkern g1="R" g2="C" k="20" />
+<hkern g1="R" g2="G" k="20" />
+<hkern g1="R" g2="O" k="20" />
+<hkern g1="R" g2="Q" k="20" />
+<hkern g1="R" g2="T" k="78" />
+<hkern g1="R" g2="V" k="59" />
+<hkern g1="R" g2="W" k="47" />
+<hkern g1="R" g2="Y" k="76" />
+<hkern g1="R" g2="e" k="27" />
+<hkern g1="R" g2="o" k="29" />
+<hkern g1="R" g2="y" k="33" />
+<hkern g1="R" g2="Ccedilla" k="20" />
+<hkern g1="R" g2="Oacute" k="20" />
+<hkern g1="R" g2="Odieresis" k="20" />
+<hkern g1="R" g2="eacute" k="47" />
+<hkern g1="R" g2="oacute" k="51" />
+<hkern g1="R" g2="odieresis" k="39" />
+<hkern g1="R" g2="uacute" k="39" />
+<hkern g1="R" g2="udieresis" k="29" />
+<hkern g1="R" g2="OE" k="25" />
+<hkern g1="R" g2="oe" k="29" />
+<hkern g1="R" g2="quotesinglbase" k="-27" />
+<hkern g1="R" g2="quotedblbase" k="-27" />
+<hkern g1="S" g2="S" k="29" />
+<hkern g1="S" g2="T" k="33" />
+<hkern g1="S" g2="V" k="43" />
+<hkern g1="S" g2="W" k="47" />
+<hkern g1="S" g2="Y" k="41" />
+<hkern g1="S" g2="t" k="35" />
+<hkern g1="S" g2="quoteright" k="37" />
+<hkern g1="T" g2="comma" k="147" />
+<hkern g1="T" g2="hyphen" k="141" />
+<hkern g1="T" g2="period" k="141" />
+<hkern g1="T" g2="colon" k="141" />
+<hkern g1="T" g2="semicolon" k="143" />
+<hkern g1="T" g2="A" k="211" />
+<hkern g1="T" g2="C" k="117" />
+<hkern g1="T" g2="G" k="117" />
+<hkern g1="T" g2="H" k="23" />
+<hkern g1="T" g2="O" k="115" />
+<hkern g1="T" g2="S" k="41" />
+<hkern g1="T" g2="T" k="-51" />
+<hkern g1="T" g2="V" k="-39" />
+<hkern g1="T" g2="W" k="-27" />
+<hkern g1="T" g2="Y" k="-45" />
+<hkern g1="T" g2="a" k="242" />
+<hkern g1="T" g2="c" k="240" />
+<hkern g1="T" g2="e" k="240" />
+<hkern g1="T" g2="g" k="238" />
+<hkern g1="T" g2="h" k="27" />
+<hkern g1="T" g2="o" k="240" />
+<hkern g1="T" g2="r" k="236" />
+<hkern g1="T" g2="s" k="244" />
+<hkern g1="T" g2="u" k="238" />
+<hkern g1="T" g2="v" k="258" />
+<hkern g1="T" g2="w" k="256" />
+<hkern g1="T" g2="y" k="250" />
+<hkern g1="T" g2="z" k="248" />
+<hkern g1="T" g2="guillemotleft" k="248" />
+<hkern g1="T" g2="Agrave" k="211" />
+<hkern g1="T" g2="Aacute" k="211" />
+<hkern g1="T" g2="Acircumflex" k="211" />
+<hkern g1="T" g2="Atilde" k="211" />
+<hkern g1="T" g2="Adieresis" k="211" />
+<hkern g1="T" g2="Aring" k="211" />
+<hkern g1="T" g2="AE" k="223" />
+<hkern g1="T" g2="Ograve" k="115" />
+<hkern g1="T" g2="Oacute" k="115" />
+<hkern g1="T" g2="Ocircumflex" k="115" />
+<hkern g1="T" g2="Otilde" k="115" />
+<hkern g1="T" g2="Odieresis" k="115" />
+<hkern g1="T" g2="Oslash" k="123" />
+<hkern g1="T" g2="agrave" k="147" />
+<hkern g1="T" g2="aacute" k="238" />
+<hkern g1="T" g2="acircumflex" k="178" />
+<hkern g1="T" g2="atilde" k="113" />
+<hkern g1="T" g2="adieresis" k="119" />
+<hkern g1="T" g2="aring" k="115" />
+<hkern g1="T" g2="ae" k="242" />
+<hkern g1="T" g2="egrave" k="182" />
+<hkern g1="T" g2="eacute" k="244" />
+<hkern g1="T" g2="ecircumflex" k="199" />
+<hkern g1="T" g2="edieresis" k="137" />
+<hkern g1="T" g2="ograve" k="190" />
+<hkern g1="T" g2="oacute" k="248" />
+<hkern g1="T" g2="ocircumflex" k="203" />
+<hkern g1="T" g2="otilde" k="147" />
+<hkern g1="T" g2="odieresis" k="133" />
+<hkern g1="T" g2="oslash" k="244" />
+<hkern g1="T" g2="ugrave" k="186" />
+<hkern g1="T" g2="uacute" k="242" />
+<hkern g1="T" g2="ucircumflex" k="201" />
+<hkern g1="T" g2="udieresis" k="133" />
+<hkern g1="T" g2="OE" k="135" />
+<hkern g1="T" g2="oe" k="238" />
+<hkern g1="T" g2="guilsinglleft" k="248" />
+<hkern g1="U" g2="comma" k="45" />
+<hkern g1="U" g2="period" k="35" />
+<hkern g1="U" g2="A" k="41" />
+<hkern g1="U" g2="Aacute" k="41" />
+<hkern g1="U" g2="Acircumflex" k="41" />
+<hkern g1="U" g2="Atilde" k="41" />
+<hkern g1="U" g2="Adieresis" k="41" />
+<hkern g1="U" g2="Aring" k="41" />
+<hkern g1="U" g2="AE" k="47" />
+<hkern g1="V" g2="comma" k="168" />
+<hkern g1="V" g2="hyphen" k="104" />
+<hkern g1="V" g2="period" k="160" />
+<hkern g1="V" g2="colon" k="76" />
+<hkern g1="V" g2="semicolon" k="82" />
+<hkern g1="V" g2="A" k="178" />
+<hkern g1="V" g2="C" k="63" />
+<hkern g1="V" g2="G" k="63" />
+<hkern g1="V" g2="O" k="63" />
+<hkern g1="V" g2="S" k="29" />
+<hkern g1="V" g2="T" k="-37" />
+<hkern g1="V" g2="a" k="160" />
+<hkern g1="V" g2="e" k="160" />
+<hkern g1="V" g2="g" k="168" />
+<hkern g1="V" g2="i" k="27" />
+<hkern g1="V" g2="o" k="158" />
+<hkern g1="V" g2="r" k="133" />
+<hkern g1="V" g2="u" k="129" />
+<hkern g1="V" g2="y" k="94" />
+<hkern g1="V" g2="guillemotleft" k="172" />
+<hkern g1="V" g2="Agrave" k="178" />
+<hkern g1="V" g2="Aacute" k="178" />
+<hkern g1="V" g2="Acircumflex" k="178" />
+<hkern g1="V" g2="Atilde" k="178" />
+<hkern g1="V" g2="Adieresis" k="178" />
+<hkern g1="V" g2="Aring" k="178" />
+<hkern g1="V" g2="AE" k="190" />
+<hkern g1="V" g2="Ograve" k="63" />
+<hkern g1="V" g2="Oacute" k="63" />
+<hkern g1="V" g2="Ocircumflex" k="63" />
+<hkern g1="V" g2="Otilde" k="63" />
+<hkern g1="V" g2="Odieresis" k="63" />
+<hkern g1="V" g2="Oslash" k="70" />
+<hkern g1="V" g2="agrave" k="137" />
+<hkern g1="V" g2="aacute" k="162" />
+<hkern g1="V" g2="acircumflex" k="131" />
+<hkern g1="V" g2="atilde" k="100" />
+<hkern g1="V" g2="adieresis" k="113" />
+<hkern g1="V" g2="aring" k="109" />
+<hkern g1="V" g2="ae" k="160" />
+<hkern g1="V" g2="egrave" k="156" />
+<hkern g1="V" g2="eacute" k="168" />
+<hkern g1="V" g2="ecircumflex" k="143" />
+<hkern g1="V" g2="edieresis" k="125" />
+<hkern g1="V" g2="ograve" k="158" />
+<hkern g1="V" g2="oacute" k="168" />
+<hkern g1="V" g2="ocircumflex" k="145" />
+<hkern g1="V" g2="otilde" k="125" />
+<hkern g1="V" g2="odieresis" k="121" />
+<hkern g1="V" g2="oslash" k="166" />
+<hkern g1="V" g2="ugrave" k="135" />
+<hkern g1="V" g2="uacute" k="141" />
+<hkern g1="V" g2="ucircumflex" k="127" />
+<hkern g1="V" g2="udieresis" k="109" />
+<hkern g1="V" g2="OE" k="66" />
+<hkern g1="V" g2="oe" k="156" />
+<hkern g1="V" g2="quoteright" k="-20" />
+<hkern g1="V" g2="quotedblright" k="-20" />
+<hkern g1="V" g2="guilsinglleft" k="172" />
+<hkern g1="W" g2="comma" k="119" />
+<hkern g1="W" g2="hyphen" k="72" />
+<hkern g1="W" g2="period" k="111" />
+<hkern g1="W" g2="colon" k="55" />
+<hkern g1="W" g2="semicolon" k="59" />
+<hkern g1="W" g2="A" k="139" />
+<hkern g1="W" g2="C" k="47" />
+<hkern g1="W" g2="G" k="47" />
+<hkern g1="W" g2="O" k="45" />
+<hkern g1="W" g2="S" k="23" />
+<hkern g1="W" g2="T" k="-27" />
+<hkern g1="W" g2="a" k="117" />
+<hkern g1="W" g2="e" k="113" />
+<hkern g1="W" g2="g" k="121" />
+<hkern g1="W" g2="i" k="25" />
+<hkern g1="W" g2="o" k="113" />
+<hkern g1="W" g2="r" k="94" />
+<hkern g1="W" g2="u" k="92" />
+<hkern g1="W" g2="y" k="68" />
+<hkern g1="W" g2="guillemotleft" k="121" />
+<hkern g1="W" g2="Agrave" k="139" />
+<hkern g1="W" g2="Aacute" k="139" />
+<hkern g1="W" g2="Acircumflex" k="139" />
+<hkern g1="W" g2="Atilde" k="139" />
+<hkern g1="W" g2="Adieresis" k="139" />
+<hkern g1="W" g2="Aring" k="139" />
+<hkern g1="W" g2="AE" k="150" />
+<hkern g1="W" g2="Ograve" k="45" />
+<hkern g1="W" g2="Oacute" k="45" />
+<hkern g1="W" g2="Ocircumflex" k="45" />
+<hkern g1="W" g2="Otilde" k="45" />
+<hkern g1="W" g2="Odieresis" k="45" />
+<hkern g1="W" g2="Oslash" k="51" />
+<hkern g1="W" g2="agrave" k="117" />
+<hkern g1="W" g2="aacute" k="127" />
+<hkern g1="W" g2="acircumflex" k="106" />
+<hkern g1="W" g2="atilde" k="84" />
+<hkern g1="W" g2="adieresis" k="94" />
+<hkern g1="W" g2="aring" k="98" />
+<hkern g1="W" g2="ae" k="117" />
+<hkern g1="W" g2="egrave" k="121" />
+<hkern g1="W" g2="eacute" k="127" />
+<hkern g1="W" g2="ecircumflex" k="113" />
+<hkern g1="W" g2="edieresis" k="98" />
+<hkern g1="W" g2="ograve" k="123" />
+<hkern g1="W" g2="oacute" k="127" />
+<hkern g1="W" g2="ocircumflex" k="113" />
+<hkern g1="W" g2="otilde" k="98" />
+<hkern g1="W" g2="odieresis" k="98" />
+<hkern g1="W" g2="oslash" k="119" />
+<hkern g1="W" g2="ugrave" k="104" />
+<hkern g1="W" g2="uacute" k="109" />
+<hkern g1="W" g2="ucircumflex" k="98" />
+<hkern g1="W" g2="udieresis" k="86" />
+<hkern g1="W" g2="oe" k="111" />
+<hkern g1="W" g2="quoteright" k="-20" />
+<hkern g1="W" g2="quotedblright" k="-20" />
+<hkern g1="W" g2="guilsinglleft" k="121" />
+<hkern g1="X" g2="hyphen" k="55" />
+<hkern g1="X" g2="A" k="-31" />
+<hkern g1="X" g2="C" k="74" />
+<hkern g1="X" g2="G" k="74" />
+<hkern g1="X" g2="O" k="70" />
+<hkern g1="X" g2="Q" k="72" />
+<hkern g1="X" g2="e" k="51" />
+<hkern g1="X" g2="o" k="55" />
+<hkern g1="X" g2="u" k="47" />
+<hkern g1="X" g2="y" k="139" />
+<hkern g1="X" g2="Adieresis" k="-31" />
+<hkern g1="X" g2="Aring" k="-31" />
+<hkern g1="X" g2="Ograve" k="70" />
+<hkern g1="X" g2="Oacute" k="70" />
+<hkern g1="X" g2="Ocircumflex" k="70" />
+<hkern g1="X" g2="Otilde" k="70" />
+<hkern g1="X" g2="Odieresis" k="70" />
+<hkern g1="X" g2="adieresis" k="25" />
+<hkern g1="X" g2="egrave" k="70" />
+<hkern g1="X" g2="eacute" k="72" />
+<hkern g1="X" g2="ecircumflex" k="68" />
+<hkern g1="X" g2="edieresis" k="59" />
+<hkern g1="X" g2="ograve" k="72" />
+<hkern g1="X" g2="oacute" k="74" />
+<hkern g1="X" g2="ocircumflex" k="70" />
+<hkern g1="X" g2="otilde" k="63" />
+<hkern g1="X" g2="odieresis" k="61" />
+<hkern g1="X" g2="udieresis" k="55" />
+<hkern g1="X" g2="OE" k="84" />
+<hkern g1="X" g2="oe" k="55" />
+<hkern g1="Y" g2="comma" k="135" />
+<hkern g1="Y" g2="hyphen" k="131" />
+<hkern g1="Y" g2="period" k="131" />
+<hkern g1="Y" g2="colon" k="109" />
+<hkern g1="Y" g2="semicolon" k="113" />
+<hkern g1="Y" g2="A" k="190" />
+<hkern g1="Y" g2="C" k="94" />
+<hkern g1="Y" g2="G" k="94" />
+<hkern g1="Y" g2="O" k="94" />
+<hkern g1="Y" g2="S" k="43" />
+<hkern g1="Y" g2="T" k="-47" />
+<hkern g1="Y" g2="a" k="201" />
+<hkern g1="Y" g2="d" k="236" />
+<hkern g1="Y" g2="e" k="211" />
+<hkern g1="Y" g2="g" k="209" />
+<hkern g1="Y" g2="i" k="25" />
+<hkern g1="Y" g2="o" k="209" />
+<hkern g1="Y" g2="p" k="190" />
+<hkern g1="Y" g2="q" k="209" />
+<hkern g1="Y" g2="u" k="186" />
+<hkern g1="Y" g2="v" k="164" />
+<hkern g1="Y" g2="guillemotleft" k="227" />
+<hkern g1="Y" g2="Agrave" k="190" />
+<hkern g1="Y" g2="Aacute" k="190" />
+<hkern g1="Y" g2="Acircumflex" k="190" />
+<hkern g1="Y" g2="Atilde" k="190" />
+<hkern g1="Y" g2="Adieresis" k="190" />
+<hkern g1="Y" g2="Aring" k="190" />
+<hkern g1="Y" g2="AE" k="201" />
+<hkern g1="Y" g2="Ograve" k="94" />
+<hkern g1="Y" g2="Oacute" k="94" />
+<hkern g1="Y" g2="Ocircumflex" k="94" />
+<hkern g1="Y" g2="Otilde" k="94" />
+<hkern g1="Y" g2="Odieresis" k="94" />
+<hkern g1="Y" g2="Oslash" k="98" />
+<hkern g1="Y" g2="agrave" k="145" />
+<hkern g1="Y" g2="aacute" k="199" />
+<hkern g1="Y" g2="acircumflex" k="158" />
+<hkern g1="Y" g2="atilde" k="119" />
+<hkern g1="Y" g2="adieresis" k="129" />
+<hkern g1="Y" g2="aring" k="115" />
+<hkern g1="Y" g2="ae" k="201" />
+<hkern g1="Y" g2="egrave" k="178" />
+<hkern g1="Y" g2="eacute" k="213" />
+<hkern g1="Y" g2="ecircumflex" k="178" />
+<hkern g1="Y" g2="edieresis" k="147" />
+<hkern g1="Y" g2="ograve" k="186" />
+<hkern g1="Y" g2="oacute" k="217" />
+<hkern g1="Y" g2="ocircumflex" k="180" />
+<hkern g1="Y" g2="otilde" k="150" />
+<hkern g1="Y" g2="odieresis" k="145" />
+<hkern g1="Y" g2="oslash" k="215" />
+<hkern g1="Y" g2="ugrave" k="174" />
+<hkern g1="Y" g2="uacute" k="193" />
+<hkern g1="Y" g2="ucircumflex" k="168" />
+<hkern g1="Y" g2="udieresis" k="139" />
+<hkern g1="Y" g2="oe" k="209" />
+<hkern g1="Y" g2="guilsinglleft" k="229" />
+<hkern g1="Z" g2="O" k="86" />
+<hkern g1="Z" g2="v" k="168" />
+<hkern g1="Z" g2="y" k="158" />
+<hkern g1="Z" g2="Odieresis" k="86" />
+<hkern g1="a" g2="t" k="35" />
+<hkern g1="a" g2="v" k="70" />
+<hkern g1="a" g2="w" k="59" />
+<hkern g1="a" g2="y" k="63" />
+<hkern g1="b" g2="v" k="49" />
+<hkern g1="b" g2="w" k="39" />
+<hkern g1="b" g2="y" k="43" />
+<hkern g1="e" g2="t" k="27" />
+<hkern g1="e" g2="v" k="39" />
+<hkern g1="e" g2="w" k="33" />
+<hkern g1="e" g2="y" k="31" />
+<hkern g1="f" g2="comma" k="68" />
+<hkern g1="f" g2="hyphen" k="61" />
+<hkern g1="f" g2="period" k="61" />
+<hkern g1="f" g2="a" k="33" />
+<hkern g1="f" g2="e" k="63" />
+<hkern g1="f" g2="o" k="61" />
+<hkern g1="f" g2="s" k="29" />
+<hkern g1="f" g2="y" k="-31" />
+<hkern g1="f" g2="aacute" k="47" />
+<hkern g1="f" g2="adieresis" k="39" />
+<hkern g1="f" g2="aring" k="43" />
+<hkern g1="f" g2="ae" k="33" />
+<hkern g1="f" g2="egrave" k="78" />
+<hkern g1="f" g2="eacute" k="82" />
+<hkern g1="f" g2="ecircumflex" k="78" />
+<hkern g1="f" g2="edieresis" k="70" />
+<hkern g1="f" g2="idieresis" k="-31" />
+<hkern g1="f" g2="oacute" k="80" />
+<hkern g1="f" g2="odieresis" k="70" />
+<hkern g1="f" g2="oslash" k="70" />
+<hkern g1="f" g2="udieresis" k="20" />
+<hkern g1="f" g2="oe" k="59" />
+<hkern g1="g" g2="a" k="27" />
+<hkern g1="g" g2="e" k="29" />
+<hkern g1="g" g2="g" k="-70" />
+<hkern g1="g" g2="o" k="27" />
+<hkern g1="g" g2="adieresis" k="27" />
+<hkern g1="g" g2="aring" k="27" />
+<hkern g1="g" g2="ae" k="27" />
+<hkern g1="g" g2="egrave" k="29" />
+<hkern g1="g" g2="eacute" k="29" />
+<hkern g1="g" g2="ecircumflex" k="29" />
+<hkern g1="g" g2="edieresis" k="29" />
+<hkern g1="g" g2="oacute" k="27" />
+<hkern g1="g" g2="odieresis" k="27" />
+<hkern g1="h" g2="t" k="35" />
+<hkern g1="h" g2="y" k="35" />
+<hkern g1="h" g2="yacute" k="59" />
+<hkern g1="h" g2="ydieresis" k="51" />
+<hkern g1="h" g2="quoteright" k="252" />
+<hkern g1="k" g2="hyphen" k="133" />
+<hkern g1="k" g2="a" k="31" />
+<hkern g1="k" g2="e" k="78" />
+<hkern g1="k" g2="o" k="78" />
+<hkern g1="k" g2="u" k="29" />
+<hkern g1="k" g2="aacute" k="51" />
+<hkern g1="k" g2="adieresis" k="45" />
+<hkern g1="k" g2="aring" k="51" />
+<hkern g1="k" g2="ae" k="31" />
+<hkern g1="k" g2="eacute" k="100" />
+<hkern g1="k" g2="oacute" k="102" />
+<hkern g1="k" g2="odieresis" k="94" />
+<hkern g1="k" g2="udieresis" k="43" />
+<hkern g1="l" g2="v" k="47" />
+<hkern g1="l" g2="y" k="39" />
+<hkern g1="m" g2="v" k="43" />
+<hkern g1="m" g2="w" k="35" />
+<hkern g1="m" g2="y" k="35" />
+<hkern g1="n" g2="T" k="240" />
+<hkern g1="n" g2="v" k="43" />
+<hkern g1="n" g2="w" k="35" />
+<hkern g1="n" g2="y" k="35" />
+<hkern g1="o" g2="t" k="23" />
+<hkern g1="o" g2="v" k="47" />
+<hkern g1="o" g2="w" k="39" />
+<hkern g1="o" g2="x" k="51" />
+<hkern g1="o" g2="y" k="43" />
+<hkern g1="p" g2="t" k="25" />
+<hkern g1="p" g2="y" k="72" />
+<hkern g1="p" g2="yacute" k="72" />
+<hkern g1="p" g2="ydieresis" k="72" />
+<hkern g1="r" g2="comma" k="133" />
+<hkern g1="r" g2="hyphen" k="129" />
+<hkern g1="r" g2="period" k="129" />
+<hkern g1="r" g2="a" k="33" />
+<hkern g1="r" g2="c" k="57" />
+<hkern g1="r" g2="d" k="57" />
+<hkern g1="r" g2="e" k="59" />
+<hkern g1="r" g2="f" k="-20" />
+<hkern g1="r" g2="g" k="59" />
+<hkern g1="r" g2="h" k="23" />
+<hkern g1="r" g2="i" k="23" />
+<hkern g1="r" g2="j" k="23" />
+<hkern g1="r" g2="k" k="23" />
+<hkern g1="r" g2="m" k="23" />
+<hkern g1="r" g2="n" k="23" />
+<hkern g1="r" g2="o" k="55" />
+<hkern g1="r" g2="p" k="20" />
+<hkern g1="r" g2="q" k="55" />
+<hkern g1="r" g2="r" k="23" />
+<hkern g1="r" g2="s" k="20" />
+<hkern g1="r" g2="y" k="-20" />
+<hkern g1="r" g2="agrave" k="33" />
+<hkern g1="r" g2="aacute" k="33" />
+<hkern g1="r" g2="acircumflex" k="33" />
+<hkern g1="r" g2="adieresis" k="33" />
+<hkern g1="r" g2="aring" k="33" />
+<hkern g1="r" g2="ae" k="33" />
+<hkern g1="r" g2="ccedilla" k="55" />
+<hkern g1="r" g2="egrave" k="59" />
+<hkern g1="r" g2="eacute" k="59" />
+<hkern g1="r" g2="ecircumflex" k="59" />
+<hkern g1="r" g2="edieresis" k="59" />
+<hkern g1="r" g2="ograve" k="55" />
+<hkern g1="r" g2="oacute" k="55" />
+<hkern g1="r" g2="ocircumflex" k="55" />
+<hkern g1="r" g2="otilde" k="55" />
+<hkern g1="r" g2="odieresis" k="55" />
+<hkern g1="r" g2="oslash" k="63" />
+<hkern g1="r" g2="oe" k="53" />
+<hkern g1="r" g2="scaron" k="20" />
+<hkern g1="s" g2="s" k="25" />
+<hkern g1="t" g2="e" k="63" />
+<hkern g1="t" g2="h" k="25" />
+<hkern g1="t" g2="o" k="66" />
+<hkern g1="t" g2="t" k="25" />
+<hkern g1="t" g2="aacute" k="25" />
+<hkern g1="t" g2="atilde" k="23" />
+<hkern g1="t" g2="adieresis" k="23" />
+<hkern g1="t" g2="aring" k="25" />
+<hkern g1="t" g2="eacute" k="74" />
+<hkern g1="t" g2="oacute" k="76" />
+<hkern g1="t" g2="odieresis" k="74" />
+<hkern g1="t" g2="quoteright" k="86" />
+<hkern g1="u" g2="v" k="20" />
+<hkern g1="v" g2="comma" k="115" />
+<hkern g1="v" g2="hyphen" k="43" />
+<hkern g1="v" g2="period" k="104" />
+<hkern g1="v" g2="a" k="43" />
+<hkern g1="v" g2="c" k="47" />
+<hkern g1="v" g2="e" k="47" />
+<hkern g1="v" g2="g" k="55" />
+<hkern g1="v" g2="o" k="45" />
+<hkern g1="v" g2="s" k="29" />
+<hkern g1="v" g2="agrave" k="43" />
+<hkern g1="v" g2="aacute" k="43" />
+<hkern g1="v" g2="acircumflex" k="43" />
+<hkern g1="v" g2="atilde" k="43" />
+<hkern g1="v" g2="adieresis" k="43" />
+<hkern g1="v" g2="aring" k="43" />
+<hkern g1="v" g2="ae" k="43" />
+<hkern g1="v" g2="egrave" k="47" />
+<hkern g1="v" g2="eacute" k="47" />
+<hkern g1="v" g2="ecircumflex" k="47" />
+<hkern g1="v" g2="ograve" k="45" />
+<hkern g1="v" g2="oacute" k="45" />
+<hkern g1="v" g2="odieresis" k="45" />
+<hkern g1="v" g2="oslash" k="51" />
+<hkern g1="w" g2="comma" k="82" />
+<hkern g1="w" g2="hyphen" k="29" />
+<hkern g1="w" g2="period" k="74" />
+<hkern g1="w" g2="a" k="41" />
+<hkern g1="w" g2="c" k="39" />
+<hkern g1="w" g2="e" k="39" />
+<hkern g1="w" g2="g" k="47" />
+<hkern g1="w" g2="o" k="37" />
+<hkern g1="w" g2="s" k="27" />
+<hkern g1="w" g2="agrave" k="41" />
+<hkern g1="w" g2="aacute" k="41" />
+<hkern g1="w" g2="acircumflex" k="41" />
+<hkern g1="w" g2="atilde" k="41" />
+<hkern g1="w" g2="adieresis" k="41" />
+<hkern g1="w" g2="aring" k="41" />
+<hkern g1="w" g2="ae" k="41" />
+<hkern g1="w" g2="egrave" k="39" />
+<hkern g1="w" g2="eacute" k="39" />
+<hkern g1="w" g2="ecircumflex" k="39" />
+<hkern g1="w" g2="ograve" k="37" />
+<hkern g1="w" g2="oacute" k="37" />
+<hkern g1="w" g2="odieresis" k="37" />
+<hkern g1="w" g2="oslash" k="41" />
+<hkern g1="x" g2="c" k="49" />
+<hkern g1="x" g2="e" k="47" />
+<hkern g1="x" g2="o" k="49" />
+<hkern g1="x" g2="q" k="47" />
+<hkern g1="x" g2="eacute" k="47" />
+<hkern g1="x" g2="odieresis" k="49" />
+<hkern g1="y" g2="comma" k="109" />
+<hkern g1="y" g2="hyphen" k="35" />
+<hkern g1="y" g2="period" k="90" />
+<hkern g1="y" g2="semicolon" k="27" />
+<hkern g1="y" g2="a" k="35" />
+<hkern g1="y" g2="c" k="35" />
+<hkern g1="y" g2="d" k="35" />
+<hkern g1="y" g2="e" k="37" />
+<hkern g1="y" g2="g" k="66" />
+<hkern g1="y" g2="o" k="35" />
+<hkern g1="y" g2="q" k="63" />
+<hkern g1="y" g2="s" k="20" />
+<hkern g1="y" g2="agrave" k="35" />
+<hkern g1="y" g2="aacute" k="35" />
+<hkern g1="y" g2="acircumflex" k="35" />
+<hkern g1="y" g2="atilde" k="35" />
+<hkern g1="y" g2="adieresis" k="35" />
+<hkern g1="y" g2="aring" k="35" />
+<hkern g1="y" g2="ae" k="35" />
+<hkern g1="y" g2="egrave" k="37" />
+<hkern g1="y" g2="eacute" k="37" />
+<hkern g1="y" g2="ecircumflex" k="37" />
+<hkern g1="y" g2="ograve" k="35" />
+<hkern g1="y" g2="oacute" k="35" />
+<hkern g1="y" g2="odieresis" k="35" />
+<hkern g1="y" g2="oslash" k="43" />
+<hkern g1="y" g2="scaron" k="20" />
+<hkern g1="z" g2="c" k="41" />
+<hkern g1="z" g2="e" k="41" />
+<hkern g1="z" g2="o" k="41" />
+<hkern g1="z" g2="egrave" k="41" />
+<hkern g1="z" g2="eacute" k="41" />
+<hkern g1="z" g2="odieresis" k="41" />
+<hkern g1="z" g2="oslash" k="20" />
+<hkern g1="guillemotright" g2="A" k="35" />
+<hkern g1="guillemotright" g2="T" k="250" />
+<hkern g1="guillemotright" g2="V" k="172" />
+<hkern g1="guillemotright" g2="W" k="123" />
+<hkern g1="guillemotright" g2="Y" k="229" />
+<hkern g1="guillemotright" g2="Aacute" k="35" />
+<hkern g1="guillemotright" g2="Adieresis" k="35" />
+<hkern g1="guillemotright" g2="Aring" k="35" />
+<hkern g1="guillemotright" g2="AE" k="41" />
+<hkern g1="Agrave" g2="comma" k="-33" />
+<hkern g1="Agrave" g2="period" k="-39" />
+<hkern g1="Agrave" g2="C" k="41" />
+<hkern g1="Agrave" g2="G" k="41" />
+<hkern g1="Agrave" g2="O" k="39" />
+<hkern g1="Agrave" g2="Q" k="39" />
+<hkern g1="Agrave" g2="T" k="211" />
+<hkern g1="Agrave" g2="U" k="39" />
+<hkern g1="Agrave" g2="V" k="178" />
+<hkern g1="Agrave" g2="W" k="141" />
+<hkern g1="Agrave" g2="Y" k="190" />
+<hkern g1="Agrave" g2="d" k="35" />
+<hkern g1="Agrave" g2="v" k="88" />
+<hkern g1="Agrave" g2="w" k="70" />
+<hkern g1="Agrave" g2="y" k="82" />
+<hkern g1="Agrave" g2="Odieresis" k="51" />
+<hkern g1="Agrave" g2="Udieresis" k="51" />
+<hkern g1="Agrave" g2="quoteright" k="104" />
+<hkern g1="Aacute" g2="comma" k="-33" />
+<hkern g1="Aacute" g2="period" k="-39" />
+<hkern g1="Aacute" g2="C" k="41" />
+<hkern g1="Aacute" g2="G" k="41" />
+<hkern g1="Aacute" g2="O" k="39" />
+<hkern g1="Aacute" g2="Q" k="39" />
+<hkern g1="Aacute" g2="T" k="211" />
+<hkern g1="Aacute" g2="U" k="39" />
+<hkern g1="Aacute" g2="V" k="178" />
+<hkern g1="Aacute" g2="W" k="141" />
+<hkern g1="Aacute" g2="Y" k="190" />
+<hkern g1="Aacute" g2="d" k="35" />
+<hkern g1="Aacute" g2="g" k="-25" />
+<hkern g1="Aacute" g2="t" k="39" />
+<hkern g1="Aacute" g2="v" k="88" />
+<hkern g1="Aacute" g2="w" k="70" />
+<hkern g1="Aacute" g2="y" k="82" />
+<hkern g1="Aacute" g2="guillemotleft" k="33" />
+<hkern g1="Aacute" g2="Odieresis" k="51" />
+<hkern g1="Aacute" g2="Udieresis" k="51" />
+<hkern g1="Aacute" g2="udieresis" k="20" />
+<hkern g1="Aacute" g2="quoteright" k="104" />
+<hkern g1="Aacute" g2="guilsinglleft" k="33" />
+<hkern g1="Acircumflex" g2="comma" k="-33" />
+<hkern g1="Acircumflex" g2="period" k="-39" />
+<hkern g1="Acircumflex" g2="C" k="41" />
+<hkern g1="Acircumflex" g2="G" k="41" />
+<hkern g1="Acircumflex" g2="O" k="39" />
+<hkern g1="Acircumflex" g2="Q" k="39" />
+<hkern g1="Acircumflex" g2="T" k="211" />
+<hkern g1="Acircumflex" g2="U" k="39" />
+<hkern g1="Acircumflex" g2="V" k="178" />
+<hkern g1="Acircumflex" g2="W" k="141" />
+<hkern g1="Acircumflex" g2="Y" k="190" />
+<hkern g1="Acircumflex" g2="d" k="35" />
+<hkern g1="Acircumflex" g2="v" k="88" />
+<hkern g1="Acircumflex" g2="w" k="70" />
+<hkern g1="Acircumflex" g2="y" k="82" />
+<hkern g1="Acircumflex" g2="Odieresis" k="51" />
+<hkern g1="Acircumflex" g2="Udieresis" k="51" />
+<hkern g1="Acircumflex" g2="quoteright" k="104" />
+<hkern g1="Atilde" g2="comma" k="-33" />
+<hkern g1="Atilde" g2="period" k="-39" />
+<hkern g1="Atilde" g2="C" k="41" />
+<hkern g1="Atilde" g2="G" k="41" />
+<hkern g1="Atilde" g2="O" k="39" />
+<hkern g1="Atilde" g2="Q" k="39" />
+<hkern g1="Atilde" g2="T" k="211" />
+<hkern g1="Atilde" g2="U" k="39" />
+<hkern g1="Atilde" g2="V" k="178" />
+<hkern g1="Atilde" g2="W" k="141" />
+<hkern g1="Atilde" g2="Y" k="190" />
+<hkern g1="Atilde" g2="d" k="35" />
+<hkern g1="Atilde" g2="v" k="88" />
+<hkern g1="Atilde" g2="w" k="70" />
+<hkern g1="Atilde" g2="y" k="82" />
+<hkern g1="Atilde" g2="Odieresis" k="49" />
+<hkern g1="Atilde" g2="Udieresis" k="49" />
+<hkern g1="Atilde" g2="quoteright" k="104" />
+<hkern g1="Adieresis" g2="comma" k="-33" />
+<hkern g1="Adieresis" g2="period" k="-39" />
+<hkern g1="Adieresis" g2="A" k="-41" />
+<hkern g1="Adieresis" g2="C" k="41" />
+<hkern g1="Adieresis" g2="G" k="41" />
+<hkern g1="Adieresis" g2="O" k="39" />
+<hkern g1="Adieresis" g2="Q" k="39" />
+<hkern g1="Adieresis" g2="T" k="211" />
+<hkern g1="Adieresis" g2="U" k="39" />
+<hkern g1="Adieresis" g2="V" k="178" />
+<hkern g1="Adieresis" g2="W" k="141" />
+<hkern g1="Adieresis" g2="Y" k="190" />
+<hkern g1="Adieresis" g2="d" k="35" />
+<hkern g1="Adieresis" g2="f" k="51" />
+<hkern g1="Adieresis" g2="g" k="-25" />
+<hkern g1="Adieresis" g2="t" k="39" />
+<hkern g1="Adieresis" g2="v" k="88" />
+<hkern g1="Adieresis" g2="w" k="70" />
+<hkern g1="Adieresis" g2="y" k="82" />
+<hkern g1="Adieresis" g2="guillemotleft" k="33" />
+<hkern g1="Adieresis" g2="Adieresis" k="-35" />
+<hkern g1="Adieresis" g2="Ccedilla" k="41" />
+<hkern g1="Adieresis" g2="Ograve" k="51" />
+<hkern g1="Adieresis" g2="Oacute" k="51" />
+<hkern g1="Adieresis" g2="Ocircumflex" k="51" />
+<hkern g1="Adieresis" g2="Otilde" k="47" />
+<hkern g1="Adieresis" g2="Odieresis" k="51" />
+<hkern g1="Adieresis" g2="Ugrave" k="51" />
+<hkern g1="Adieresis" g2="Uacute" k="51" />
+<hkern g1="Adieresis" g2="Ucircumflex" k="51" />
+<hkern g1="Adieresis" g2="Udieresis" k="51" />
+<hkern g1="Adieresis" g2="Yacute" k="201" />
+<hkern g1="Adieresis" g2="ograve" k="29" />
+<hkern g1="Adieresis" g2="oacute" k="29" />
+<hkern g1="Adieresis" g2="ocircumflex" k="29" />
+<hkern g1="Adieresis" g2="otilde" k="25" />
+<hkern g1="Adieresis" g2="odieresis" k="20" />
+<hkern g1="Adieresis" g2="udieresis" k="20" />
+<hkern g1="Adieresis" g2="Ydieresis" k="195" />
+<hkern g1="Adieresis" g2="quoteright" k="104" />
+<hkern g1="Adieresis" g2="quotedblright" k="104" />
+<hkern g1="Adieresis" g2="guilsinglleft" k="33" />
+<hkern g1="Aring" g2="comma" k="-33" />
+<hkern g1="Aring" g2="period" k="-39" />
+<hkern g1="Aring" g2="C" k="41" />
+<hkern g1="Aring" g2="G" k="41" />
+<hkern g1="Aring" g2="O" k="39" />
+<hkern g1="Aring" g2="Q" k="39" />
+<hkern g1="Aring" g2="T" k="211" />
+<hkern g1="Aring" g2="U" k="39" />
+<hkern g1="Aring" g2="V" k="178" />
+<hkern g1="Aring" g2="W" k="141" />
+<hkern g1="Aring" g2="Y" k="190" />
+<hkern g1="Aring" g2="d" k="35" />
+<hkern g1="Aring" g2="f" k="51" />
+<hkern g1="Aring" g2="g" k="-25" />
+<hkern g1="Aring" g2="t" k="39" />
+<hkern g1="Aring" g2="v" k="88" />
+<hkern g1="Aring" g2="w" k="70" />
+<hkern g1="Aring" g2="y" k="82" />
+<hkern g1="Aring" g2="guillemotleft" k="33" />
+<hkern g1="Aring" g2="Odieresis" k="51" />
+<hkern g1="Aring" g2="Udieresis" k="51" />
+<hkern g1="Aring" g2="udieresis" k="20" />
+<hkern g1="Aring" g2="quoteright" k="104" />
+<hkern g1="Aring" g2="quotedblright" k="104" />
+<hkern g1="Aring" g2="guilsinglleft" k="33" />
+<hkern g1="AE" g2="hyphen" k="236" />
+<hkern g1="Eacute" g2="G" k="35" />
+<hkern g1="Eacute" g2="Q" k="33" />
+<hkern g1="Eacute" g2="c" k="55" />
+<hkern g1="Eth" g2="A" k="47" />
+<hkern g1="Eth" g2="V" k="63" />
+<hkern g1="Eth" g2="Y" k="98" />
+<hkern g1="Eth" g2="Adieresis" k="47" />
+<hkern g1="Eth" g2="Aring" k="47" />
+<hkern g1="Ograve" g2="T" k="117" />
+<hkern g1="Ograve" g2="V" k="63" />
+<hkern g1="Ograve" g2="Y" k="94" />
+<hkern g1="Oacute" g2="A" k="45" />
+<hkern g1="Oacute" g2="T" k="117" />
+<hkern g1="Oacute" g2="V" k="63" />
+<hkern g1="Oacute" g2="W" k="49" />
+<hkern g1="Oacute" g2="Y" k="94" />
+<hkern g1="Oacute" g2="Adieresis" k="55" />
+<hkern g1="Ocircumflex" g2="T" k="117" />
+<hkern g1="Ocircumflex" g2="V" k="63" />
+<hkern g1="Ocircumflex" g2="Y" k="94" />
+<hkern g1="Otilde" g2="T" k="117" />
+<hkern g1="Otilde" g2="V" k="63" />
+<hkern g1="Otilde" g2="Y" k="94" />
+<hkern g1="Odieresis" g2="comma" k="59" />
+<hkern g1="Odieresis" g2="period" k="49" />
+<hkern g1="Odieresis" g2="A" k="45" />
+<hkern g1="Odieresis" g2="T" k="117" />
+<hkern g1="Odieresis" g2="V" k="63" />
+<hkern g1="Odieresis" g2="W" k="49" />
+<hkern g1="Odieresis" g2="X" k="78" />
+<hkern g1="Odieresis" g2="Y" k="94" />
+<hkern g1="Odieresis" g2="Agrave" k="55" />
+<hkern g1="Odieresis" g2="Aacute" k="55" />
+<hkern g1="Odieresis" g2="Acircumflex" k="55" />
+<hkern g1="Odieresis" g2="Atilde" k="55" />
+<hkern g1="Odieresis" g2="Adieresis" k="55" />
+<hkern g1="Odieresis" g2="Aring" k="55" />
+<hkern g1="Odieresis" g2="AE" k="51" />
+<hkern g1="Oslash" g2="comma" k="72" />
+<hkern g1="Oslash" g2="period" k="55" />
+<hkern g1="Oslash" g2="A" k="51" />
+<hkern g1="Oslash" g2="X" k="35" />
+<hkern g1="Oslash" g2="Adieresis" k="51" />
+<hkern g1="Ugrave" g2="A" k="41" />
+<hkern g1="Ugrave" g2="Adieresis" k="53" />
+<hkern g1="Uacute" g2="comma" k="43" />
+<hkern g1="Uacute" g2="period" k="35" />
+<hkern g1="Uacute" g2="A" k="41" />
+<hkern g1="Uacute" g2="Adieresis" k="51" />
+<hkern g1="Ucircumflex" g2="A" k="41" />
+<hkern g1="Ucircumflex" g2="Adieresis" k="51" />
+<hkern g1="Udieresis" g2="comma" k="43" />
+<hkern g1="Udieresis" g2="period" k="35" />
+<hkern g1="Udieresis" g2="A" k="41" />
+<hkern g1="Udieresis" g2="Aacute" k="53" />
+<hkern g1="Udieresis" g2="Acircumflex" k="51" />
+<hkern g1="Udieresis" g2="Atilde" k="51" />
+<hkern g1="Udieresis" g2="Adieresis" k="51" />
+<hkern g1="Udieresis" g2="Aring" k="51" />
+<hkern g1="Udieresis" g2="AE" k="47" />
+<hkern g1="Thorn" g2="A" k="78" />
+<hkern g1="Thorn" g2="Aacute" k="78" />
+<hkern g1="Thorn" g2="Adieresis" k="78" />
+<hkern g1="Thorn" g2="Aring" k="78" />
+<hkern g1="Thorn" g2="AE" k="88" />
+<hkern g1="germandbls" g2="T" k="94" />
+<hkern g1="germandbls" g2="V" k="90" />
+<hkern g1="germandbls" g2="W" k="84" />
+<hkern g1="germandbls" g2="f" k="59" />
+<hkern g1="germandbls" g2="t" k="43" />
+<hkern g1="germandbls" g2="v" k="104" />
+<hkern g1="germandbls" g2="w" k="78" />
+<hkern g1="agrave" g2="t" k="49" />
+<hkern g1="agrave" g2="v" k="74" />
+<hkern g1="agrave" g2="w" k="63" />
+<hkern g1="agrave" g2="y" k="66" />
+<hkern g1="aacute" g2="t" k="51" />
+<hkern g1="aacute" g2="v" k="74" />
+<hkern g1="aacute" g2="w" k="63" />
+<hkern g1="aacute" g2="y" k="66" />
+<hkern g1="acircumflex" g2="t" k="47" />
+<hkern g1="adieresis" g2="t" k="47" />
+<hkern g1="adieresis" g2="v" k="74" />
+<hkern g1="adieresis" g2="w" k="63" />
+<hkern g1="adieresis" g2="y" k="66" />
+<hkern g1="adieresis" g2="germandbls" k="20" />
+<hkern g1="adieresis" g2="adieresis" k="20" />
+<hkern g1="aring" g2="t" k="49" />
+<hkern g1="aring" g2="v" k="74" />
+<hkern g1="aring" g2="w" k="63" />
+<hkern g1="aring" g2="y" k="66" />
+<hkern g1="ae" g2="v" k="37" />
+<hkern g1="ae" g2="w" k="33" />
+<hkern g1="ae" g2="y" k="29" />
+<hkern g1="egrave" g2="d" k="29" />
+<hkern g1="eacute" g2="d" k="29" />
+<hkern g1="eacute" g2="v" k="39" />
+<hkern g1="eacute" g2="w" k="33" />
+<hkern g1="eacute" g2="y" k="31" />
+<hkern g1="ecircumflex" g2="v" k="39" />
+<hkern g1="ecircumflex" g2="w" k="33" />
+<hkern g1="ecircumflex" g2="y" k="31" />
+<hkern g1="ograve" g2="v" k="47" />
+<hkern g1="ograve" g2="w" k="37" />
+<hkern g1="ograve" g2="y" k="41" />
+<hkern g1="oacute" g2="t" k="35" />
+<hkern g1="oacute" g2="v" k="47" />
+<hkern g1="oacute" g2="w" k="37" />
+<hkern g1="oacute" g2="y" k="41" />
+<hkern g1="ocircumflex" g2="t" k="33" />
+<hkern g1="ocircumflex" g2="v" k="47" />
+<hkern g1="odieresis" g2="t" k="31" />
+<hkern g1="odieresis" g2="v" k="47" />
+<hkern g1="odieresis" g2="w" k="37" />
+<hkern g1="odieresis" g2="x" k="51" />
+<hkern g1="odieresis" g2="y" k="41" />
+<hkern g1="udieresis" g2="v" k="20" />
+<hkern g1="yacute" g2="a" k="35" />
+<hkern g1="yacute" g2="c" k="35" />
+<hkern g1="yacute" g2="d" k="59" />
+<hkern g1="yacute" g2="e" k="37" />
+<hkern g1="yacute" g2="o" k="35" />
+<hkern g1="yacute" g2="adieresis" k="47" />
+<hkern g1="yacute" g2="odieresis" k="47" />
+<hkern g1="ydieresis" g2="a" k="35" />
+<hkern g1="ydieresis" g2="c" k="35" />
+<hkern g1="ydieresis" g2="d" k="51" />
+<hkern g1="ydieresis" g2="e" k="37" />
+<hkern g1="ydieresis" g2="o" k="35" />
+<hkern g1="ydieresis" g2="adieresis" k="43" />
+<hkern g1="ydieresis" g2="odieresis" k="45" />
+<hkern g1="ydieresis" g2="oslash" k="43" />
+<hkern g1="Scaron" g2="T" k="33" />
+<hkern g1="scaron" g2="w" k="33" />
+<hkern g1="quoteleft" g2="A" k="119" />
+<hkern g1="quoteleft" g2="T" k="-23" />
+<hkern g1="quoteleft" g2="V" k="-29" />
+<hkern g1="quoteleft" g2="W" k="-25" />
+<hkern g1="quoteleft" g2="Y" k="-29" />
+<hkern g1="quoteleft" g2="Aacute" k="119" />
+<hkern g1="quoteleft" g2="Adieresis" k="119" />
+<hkern g1="quoteleft" g2="Aring" k="119" />
+<hkern g1="quoteleft" g2="AE" k="131" />
+<hkern g1="quoteright" g2="A" k="125" />
+<hkern g1="quoteright" g2="d" k="254" />
+<hkern g1="quoteright" g2="t" k="55" />
+<hkern g1="quoteright" g2="Aacute" k="125" />
+<hkern g1="quoteright" g2="Adieresis" k="125" />
+<hkern g1="quoteright" g2="Aring" k="125" />
+<hkern g1="quoteright" g2="AE" k="139" />
+<hkern g1="quotedblleft" g2="A" k="119" />
+<hkern g1="quotedblleft" g2="T" k="-23" />
+<hkern g1="quotedblleft" g2="V" k="-29" />
+<hkern g1="quotedblleft" g2="W" k="-25" />
+<hkern g1="quotedblleft" g2="Y" k="-29" />
+<hkern g1="quotedblleft" g2="Aacute" k="119" />
+<hkern g1="quotedblleft" g2="Adieresis" k="119" />
+<hkern g1="quotedblleft" g2="Aring" k="119" />
+<hkern g1="quotedblleft" g2="AE" k="131" />
+<hkern g1="quotedblright" g2="A" k="125" />
+<hkern g1="quotedblright" g2="T" k="-27" />
+<hkern g1="quotedblright" g2="V" k="-29" />
+<hkern g1="quotedblright" g2="W" k="-25" />
+<hkern g1="quotedblright" g2="Y" k="-29" />
+<hkern g1="quotedblright" g2="Aacute" k="125" />
+<hkern g1="quotedblright" g2="Adieresis" k="125" />
+<hkern g1="quotedblright" g2="Aring" k="125" />
+<hkern g1="quotedblright" g2="AE" k="139" />
+<hkern g1="quotedblbase" g2="A" k="-51" />
+<hkern g1="quotedblbase" g2="T" k="131" />
+<hkern g1="quotedblbase" g2="V" k="156" />
+<hkern g1="quotedblbase" g2="W" k="106" />
+<hkern g1="quotedblbase" g2="Y" k="121" />
+<hkern g1="quotedblbase" g2="Adieresis" k="-51" />
+<hkern g1="quotedblbase" g2="AE" k="-51" />
+<hkern g1="guilsinglright" g2="A" k="35" />
+<hkern g1="guilsinglright" g2="T" k="250" />
+<hkern g1="guilsinglright" g2="V" k="172" />
+<hkern g1="guilsinglright" g2="W" k="123" />
+<hkern g1="guilsinglright" g2="Y" k="227" />
+<hkern g1="guilsinglright" g2="Aacute" k="35" />
+<hkern g1="guilsinglright" g2="Adieresis" k="35" />
+<hkern g1="guilsinglright" g2="Aring" k="35" />
+<hkern g1="guilsinglright" g2="AE" k="41" />
+</font>
+</defs>
+</svg>
diff --git a/js/dojo/dojox/gfx/resources/README b/js/dojo/dojox/gfx/resources/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/resources/README
@@ -0,0 +1,3 @@
+http://xmlgraphics.apache.org/batik/tools/font-converter.html
+
+
diff --git a/js/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html b/js/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html
@@ -0,0 +1,14 @@
+<html>
+ <head>
+ <script type="text/javascript">
+ djConfig = {forceGfxRenderer: "svg"};
+ </script>
+ <script type="text/javascript" src="../../../dojo/dojo.js" ></script>
+ <script type="text/javascript">
+ dojo.require("dojox.gfx");
+ dojo.require("dojox.gfx.utils");
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/js/dojo/dojox/gfx/resources/svg2gfx-simple.xsl b/js/dojo/dojox/gfx/resources/svg2gfx-simple.xsl
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/resources/svg2gfx-simple.xsl
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Super simple XSLT to convert Nils.svg and Lars.svg to our format -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <xsl:output method="text" version="1.0" encoding="UTF-8"/>
+ <xsl:template name="fill">
+ <xsl:param name="node"/>
+ <xsl:if test="count($node/@fill) &gt; 0">
+ <xsl:text>fill: "</xsl:text>
+ <xsl:value-of select="$node/@fill"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="stroke">
+ <xsl:param name="node"/>
+ <xsl:text>stroke: {</xsl:text>
+ <xsl:if test="count($node/@stroke) &gt; 0">
+ <xsl:text>color: "</xsl:text>
+ <xsl:value-of select="$node/@stroke"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="count($node/@stroke-width) &gt; 0">
+ <xsl:text>width: "</xsl:text>
+ <xsl:value-of select="$node/@stroke-width"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="count($node/@stroke-linecap) &gt; 0">
+ <xsl:text>cap: "</xsl:text>
+ <xsl:value-of select="$node/@stroke-linecap"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="count($node/@stroke-linejoin) &gt; 0">
+ <xsl:text>join: "</xsl:text>
+ <xsl:value-of select="$node/@stroke-linejoin"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+ <xsl:template match="g">
+ <xsl:text>{</xsl:text>
+ <xsl:if test="count(@id) &gt; 0">
+ <xsl:text>name: "</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:text>children: [</xsl:text>
+ <xsl:apply-templates select="g|path"/>
+ <xsl:text>]},</xsl:text>
+ </xsl:template>
+ <xsl:template match="path">
+ <xsl:text>{</xsl:text>
+ <xsl:if test="count(@id) &gt; 0">
+ <xsl:text>name: "</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:text>shape: {type: "path", path: "</xsl:text>
+ <xsl:value-of select="@d"/>
+ <xsl:text>"},</xsl:text>
+ <xsl:call-template name="fill">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:call-template name="stroke">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+ <xsl:template match="svg">
+ <xsl:text>[</xsl:text>
+ <xsl:apply-templates select="g|path"/>
+ <xsl:text>]</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/js/dojo/dojox/gfx/resources/svg2gfx.xsl b/js/dojo/dojox/gfx/resources/svg2gfx.xsl
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/gfx/resources/svg2gfx.xsl
@@ -0,0 +1,1046 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xsl:stylesheet [
+<!ENTITY SupportedElements "svg:a|svg:circle|svg:ellipse|svg:g|svg:image|svg:line|svg:path|svg:polygon|svg:polyline|svg:rect|svg:text|svg:textPath|svg:use">
+]>
+<!-- This is a complete rewrite of the original svg2gfx.xslt used for testing. -->
+<!--
+This version supports polygons, polylines, circles, ellipses, rectangles,
+lines, images, text, patterns, linear gradients, radial gradients, transforms
+(although gradient transforms are limited), and more in addition to the
+paths, strokes, groups, and constant fills supported by the original. It
+even handles little niceties like the SVG use element. All that being said,
+It does not even come close to supporting all of the features found in SVG,
+but should hopefully be a fairly useful subset.
+
+Caveats: Completely ignores many SVG features (such as named views, filters,
+object bounding box in gradient transforms, etc.). Now requires properly
+formed SVG (that is, SVG using the appropriate SVG namespace) which most
+editors create by default these days anyhow (the old version required that
+namespaces be stripped off). Can't convert to GFX constructs that cannot
+be reconstructed from JSON (such as textpath or using vector fonts).
+Requires EXSLT for many transforms. Handles nested styles in a simple way
+that is usually right but sometimes wrong.
+
+Questions / comments / bug reports can be sent to Feneric (on Twitter, IRC,
+GMail, etc.) or Eric (Saugus.net, ShellTown, etc.)
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:math="http://exslt.org/math"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:saxon="http://icl.com/saxon"
+ xmlns:xalan="http://xml.apache.org/Xalan"
+ extension-element-prefixes="math exsl saxon xalan">
+ <xsl:output method="text" version="1.0" encoding="UTF-8"/>
+ <xsl:strip-space elements="*"/>
+
+ <!-- We currently need this constant for some transformation calculations. -->
+ <!-- GFX enhancements could obviate it in the future. -->
+ <xsl:variable name="degressInRadian" select="57.295779513082322"/>
+
+ <!-- The following templates process little bits of things that can often occur in multiple contexts -->
+
+ <xsl:template name="kill-extra-spaces" mode="kill-extra-spaces">
+ <xsl:param name="string"/>
+ <!-- Some don't feel that SVG is verbose enough and thus add extra spaces, which when -->
+ <!-- untreated can look exactly like delimiters in point sets. -->
+ <xsl:choose>
+ <!-- Hopefully most cases won't have the extra spaces -->
+ <xsl:when test="not(contains($string,', '))">
+ <xsl:value-of select="$string"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- We split at comma / space pairs and recursively chop spaces -->
+ <xsl:call-template name="kill-extra-spaces">
+ <xsl:with-param name="string" select="substring-before($string,', ')"/>
+ </xsl:call-template>
+ <xsl:text>,</xsl:text>
+ <xsl:call-template name="kill-extra-spaces">
+ <xsl:with-param name="string" select="substring-after($string,', ')"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="arg-processor" mode="arg-processor">
+ <xsl:param name="values"/>
+ <xsl:param name="labels"/>
+ <!-- Recursively chew through the arguments in a traditional CAR / CDR pattern -->
+ <xsl:variable name="valuesCdr" select="substring-after($values,',')"/>
+ <!-- We're going "backwards" here to take advantage of tail recursion -->
+ <xsl:choose>
+ <xsl:when test="not($valuesCdr)">
+ <!-- handle the final argument -->
+ <xsl:value-of select="$labels"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$values"/>
+ <!-- This last trailing comma is needed in the (odd) case of multiple transforms -->
+ <xsl:text>,</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- handle the current argument -->
+ <xsl:value-of select="substring-before($labels,',')"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="substring-before($values,',')"/>
+ <xsl:text>,</xsl:text>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$valuesCdr"/>
+ <xsl:with-param name="labels" select="substring-after($labels,',')"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="background-processor" mode="background-processor">
+ <xsl:param name="background"/>
+ <xsl:choose>
+ <xsl:when test="starts-with($background,'url')">
+ <!-- Check if we have a URL (for a gradient or pattern) -->
+ <xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after($background,'('),')')),' ',',')"/>
+ <xsl:call-template name="url-processor">
+ <xsl:with-param name="url" select="$arguments"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- We probably have a solid color. -->
+ <xsl:call-template name="color-processor">
+ <xsl:with-param name="color" select="$background"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="color-processor">
+ <xsl:param name="color"/>
+ <xsl:choose>
+ <xsl:when test="starts-with($color,'rgb')">
+ <!-- Check if we have an RGB triple -->
+ <xsl:variable name="arguments" select="normalize-space(substring-before(substring-after($color,'('),')'))"/>
+ <xsl:call-template name="rgb-triple-processor">
+ <xsl:with-param name="triple" select="$arguments"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$color='none'">
+ <!-- Check if we have a literal 'none' -->
+ <!-- Literal nones seem to actually map to black in practice -->
+ <xsl:text>"#000000",</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- This color could either be by name or value. Either way, we -->
+ <!-- have to ensure that there are no bogus semi-colons. -->
+ <xsl:text>"</xsl:text>
+ <xsl:value-of select="normalize-space(translate($color,';',' '))"/>
+ <xsl:text>",</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="point-processor" mode="point-processor">
+ <xsl:param name="points"/>
+ <!-- Recursively process points in a traditional CAR / CDR pattern -->
+ <xsl:variable name="pointsCdr" select="normalize-space(substring-after($points,' '))"/>
+ <!-- We're going "backwards" here to take advantage of tail recursion -->
+ <xsl:choose>
+ <xsl:when test="not($pointsCdr)">
+ <!-- handle the final argument -->
+ <xsl:text>{x:</xsl:text>
+ <xsl:value-of select="substring-before($points,',')"/>
+ <xsl:text>,y:</xsl:text>
+ <xsl:value-of select="substring-after($points,',')"/>
+ <xsl:text>},</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- handle the current argument -->
+ <xsl:variable name="pointsCar" select="substring-before($points,' ')"/>
+ <xsl:text>{x:</xsl:text>
+ <xsl:value-of select="substring-before($pointsCar,',')"/>
+ <xsl:text>,y:</xsl:text>
+ <xsl:value-of select="substring-after($pointsCar,',')"/>
+ <xsl:text>},</xsl:text>
+ <xsl:call-template name="point-processor">
+ <xsl:with-param name="points" select="$pointsCdr"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="rgb-triple-processor" mode="rgb-triple-processor">
+ <xsl:param name="triple"/>
+ <!-- Note that as SVG triples cannot contain alpha values, we hardcode it to be fully opaque -->
+ <!-- This could theoretically be better handled by watching for fill-opacity -->
+ <xsl:variable name="red" select="substring-before($triple,',')"/>
+ <xsl:variable name="green" select="substring-before(substring-after($triple,concat($red,',')),',')"/>
+ <xsl:variable name="blue" select="substring-after($triple,concat($red,',',$green,','))"/>
+ <xsl:text>{"r":</xsl:text>
+ <xsl:value-of select="normalize-space($red)"/>
+ <xsl:text>,"g":</xsl:text>
+ <xsl:value-of select="normalize-space($green)"/>
+ <xsl:text>,"b":</xsl:text>
+ <xsl:value-of select="normalize-space($blue)"/>
+ <xsl:text>,"a":1},</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="styles-processor" mode="styles-processor">
+ <xsl:param name="styles"/>
+ <!-- Recursively chew through the styles in a traditional CAR / CDR pattern -->
+ <xsl:variable name="stylesCdr" select="substring-after($styles,';')"/>
+ <!-- We're going "backwards" here to take advantage of tail recursion -->
+ <xsl:choose>
+ <xsl:when test="not($stylesCdr)">
+ <!-- handle the final style -->
+ <xsl:attribute name="{normalize-space(substring-before($styles,':'))}">
+ <xsl:value-of select="normalize-space(substring-after($styles,':'))"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- handle the current style -->
+ <xsl:variable name="stylesCar" select="substring-before($styles,';')"/>
+ <xsl:attribute name="{normalize-space(substring-before($stylesCar,':'))}">
+ <xsl:value-of select="normalize-space(substring-after($stylesCar,':'))"/>
+ </xsl:attribute>
+ <xsl:call-template name="styles-processor">
+ <xsl:with-param name="styles" select="$stylesCdr"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="transform-processor" mode="transform-processor">
+ <xsl:param name="transforms"/>
+ <!-- Recursively chew through the transforms in a traditional CAR / CDR pattern -->
+ <xsl:variable name="transformsCdr" select="normalize-space(substring-after($transforms,')'))"/>
+ <xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after($transforms,'('),')')),' ',',')"/>
+ <xsl:choose>
+ <!-- We only handle simple (i.e. nonoverlapping) chained transforms. -->
+ <!-- This covers most real-world cases, and exceptions are generally -->
+ <!-- hand-generated and can likewise be hand fixed. -->
+ <xsl:when test="starts-with($transforms,'matrix')">
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$arguments"/>
+ <xsl:with-param name="labels" select="string('xx,yx,xy,yy,dx,dy')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="starts-with($transforms,'translate')">
+ <!-- If only one argument is provided, it's assumed for both -->
+ <xsl:choose>
+ <xsl:when test="contains($arguments,',')">
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$arguments"/>
+ <xsl:with-param name="labels" select="string('dx,dy')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="concat($arguments,',',$arguments)"/>
+ <xsl:with-param name="labels" select="string('dx,dy')"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="starts-with($transforms,'scale')">
+ <!-- If only one argument is provided, it's assumed for both -->
+ <xsl:choose>
+ <xsl:when test="contains($arguments,',')">
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$arguments"/>
+ <xsl:with-param name="labels" select="string('xx,yy')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="concat($arguments,',',$arguments)"/>
+ <xsl:with-param name="labels" select="string('xx,yy')"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="starts-with($transforms,'rotate')">
+ <!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+ <!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+ <!-- If you don't have the extensions, comment the following out (bye bye rotate). -->
+ <xsl:choose>
+ <xsl:when test="function-available('math:sin') and function-available('math:cos')">
+ <xsl:variable name="sinOfAngle" select="math:sin($arguments div $degressInRadian)"/>
+ <xsl:variable name="cosOfAngle" select="math:cos($arguments div $degressInRadian)"/>
+ <xsl:variable name="subarguments" select="concat($cosOfAngle,',',-$sinOfAngle,',',$sinOfAngle,',',$cosOfAngle)"/>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$subarguments"/>
+ <xsl:with-param name="labels" select="string('xx,yx,xy,yy')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>exslt:sin and exslt:cos must be supported for a rotation.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="starts-with($transforms,'skewX')">
+ <!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+ <!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+ <!-- If you don't have the extensions, comment the following out (bye bye skewX). -->
+ <xsl:choose>
+ <xsl:when test="function-available('math:tan')">
+ <xsl:variable name="tanOfAngle" select="math:tan($arguments div $degressInRadian)"/>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$tanOfAngle"/>
+ <xsl:with-param name="labels" select="string('xy')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>exslt:tan must be supported for a skewX.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="starts-with($transforms,'skewY')">
+ <!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+ <!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+ <!-- If you don't have the extensions, comment the following out (bye bye skewY). -->
+ <xsl:choose>
+ <xsl:when test="function-available('math:tan')">
+ <xsl:variable name="tanOfAngle" select="math:tan($arguments div $degressInRadian)"/>
+ <xsl:call-template name="arg-processor">
+ <xsl:with-param name="values" select="$tanOfAngle"/>
+ <xsl:with-param name="labels" select="string('yx')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>exslt:tan must be supported for a skewY.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:if test="$transformsCdr">
+ <!-- handle the other transforms -->
+ <xsl:call-template name="transform-processor">
+ <xsl:with-param name="transforms" select="$transformsCdr"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="url-processor" mode="url-processor">
+ <xsl:param name="url"/>
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- We can only handle local references; that's probably all we should get anyway -->
+ <xsl:if test="starts-with($url,'#')">
+ <xsl:apply-templates select="id(substring-after($url,'#'))">
+ <xsl:with-param name="groupAttrs" select="$groupAttrs"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- The following templates help with gradient transforms -->
+
+ <!-- We're temporarily supporting a few SVG features that GFX does not currently support. -->
+ <!-- The biggest of these is gradient transforms; when GFX natively supports it all the -->
+ <!-- kluges made to support it here (including all the following code) should be removed. -->
+
+ <xsl:template name="gradient-transform-helper" mode="gradient-transform-helper">
+ <!-- This nasty little routine helps gradient adjuster and can be -->
+ <!-- removed when GFX gets gradientTransform support. -->
+ <xsl:param name="cxa"/>
+ <xsl:param name="cya"/>
+ <xsl:param name="x1a"/>
+ <xsl:param name="y1a"/>
+ <xsl:param name="x2a"/>
+ <xsl:param name="y2a"/>
+ <xsl:param name="xx"/>
+ <xsl:param name="xy"/>
+ <xsl:param name="yx"/>
+ <xsl:param name="yy"/>
+ <xsl:param name="dx"/>
+ <xsl:param name="dy"/>
+ <xsl:choose>
+ <xsl:when test="local-name()='radialGradient'">
+ <xsl:variable name="cx" select="$xx*$cxa+$xy*$cya+$dx"/>
+ <xsl:text>cx:</xsl:text>
+ <xsl:value-of select="$cx"/>
+ <xsl:text>,</xsl:text>
+ <xsl:variable name="cy" select="$yx*$cxa+$yy*$cya+$dy"/>
+ <xsl:text>cy:</xsl:text>
+ <xsl:value-of select="$cy"/>
+ <xsl:text>,</xsl:text>
+ <!-- The results for r here are going to just be approximate -->
+ <xsl:variable name="r" select="($cx+$cy) div 2"/>
+ <xsl:text>r:</xsl:text>
+ <xsl:value-of select="$r"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="x1" select="$xx*$x1a+$xy*$y1a+$dx"/>
+ <xsl:text>x1:</xsl:text>
+ <xsl:value-of select="$x1"/>
+ <xsl:text>,</xsl:text>
+ <xsl:variable name="y1" select="$yx*$x1a+$yy*$y1a+$dy"/>
+ <xsl:text>y1:</xsl:text>
+ <xsl:value-of select="$y1"/>
+ <xsl:text>,</xsl:text>
+ <xsl:variable name="x2" select="$xx*$x2a+$xy*$y2a+$dx"/>
+ <xsl:text>x2:</xsl:text>
+ <xsl:value-of select="$x2"/>
+ <xsl:text>,</xsl:text>
+ <xsl:variable name="y2" select="$yx*$x2a+$yy*$y2a+$dy"/>
+ <xsl:text>y2:</xsl:text>
+ <xsl:value-of select="$y2"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="gradient-adjuster" mode="gradient-adjuster">
+ <xsl:param name="node"/>
+ <!-- This code is awful and only meant to serve until GFX gets gradientTransform support. -->
+ <!-- Once GFX does gradientTransforms, the following should be destroyed and forgotten. -->
+ <!-- While this support is better than nothing, it cannot 100% reproduce the effects -->
+ <!-- that true gradientTransform support in GFX could provide. -->
+ <xsl:choose>
+ <xsl:when test="starts-with($node/@gradientTransform,'matrix')">
+ <xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'matrix('),')'))"/>
+ <xsl:variable name="xx" select="substring-before($args,' ')"/>
+ <xsl:variable name="yx" select="substring-before(substring-after($args,' '),' ')"/>
+ <xsl:variable name="xy" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ')),' ')"/>
+ <xsl:variable name="yy" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ',$xy,' ')),' ')"/>
+ <xsl:variable name="dx" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ',$xy,' ',$yy,' ')),' ')"/>
+ <xsl:variable name="dy" select="substring-after($args,concat($xx,' ',$yx,' ',$xy,' ',$yy,' ',$dx,' '))"/>
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="$xx"/>
+ <xsl:with-param name="yx" select="$yx"/>
+ <xsl:with-param name="xy" select="$xy"/>
+ <xsl:with-param name="yy" select="$yy"/>
+ <xsl:with-param name="dx" select="$dx"/>
+ <xsl:with-param name="dy" select="$dy"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="starts-with($node/@gradientTransform,'translate')">
+ <xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'translate('),')'))"/>
+ <!-- If only one argument is provided, it's assumed for both -->
+ <xsl:choose>
+ <xsl:when test="contains($args,',')">
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="1"/>
+ <xsl:with-param name="yx" select="0"/>
+ <xsl:with-param name="xy" select="1"/>
+ <xsl:with-param name="yy" select="0"/>
+ <xsl:with-param name="dx" select="substring-before($args,' ')"/>
+ <xsl:with-param name="dy" select="substring-after($args,' ')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="1"/>
+ <xsl:with-param name="yx" select="0"/>
+ <xsl:with-param name="xy" select="1"/>
+ <xsl:with-param name="yy" select="0"/>
+ <xsl:with-param name="dx" select="$args"/>
+ <xsl:with-param name="dy" select="$args"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="starts-with($node/@gradientTransform,'scale')">
+ <xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'scale('),')'))"/>
+ <!-- If only one argument is provided, it's assumed for both -->
+ <xsl:choose>
+ <xsl:when test="contains($args,',')">
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="substring-before($args,' ')"/>
+ <xsl:with-param name="yx" select="0"/>
+ <xsl:with-param name="xy" select="substring-after($args,' ')"/>
+ <xsl:with-param name="yy" select="0"/>
+ <xsl:with-param name="dx" select="0"/>
+ <xsl:with-param name="dy" select="0"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="$args"/>
+ <xsl:with-param name="yx" select="0"/>
+ <xsl:with-param name="xy" select="$args"/>
+ <xsl:with-param name="yy" select="0"/>
+ <xsl:with-param name="dx" select="0"/>
+ <xsl:with-param name="dy" select="0"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise> <!-- Otherwise it's got to be a rotation -->
+ <xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'rotate('),')'))"/>
+ <xsl:choose>
+ <xsl:when test="function-available('math:sin') and function-available('math:cos')">
+ <xsl:variable name="sinOfAngle" select="math:sin($args div $degressInRadian)"/>
+ <xsl:variable name="cosOfAngle" select="math:cos($args div $degressInRadian)"/>
+ <xsl:call-template name="gradient-transform-helper">
+ <xsl:with-param name="cxa" select="$node/@cx"/>
+ <xsl:with-param name="cya" select="$node/@cy"/>
+ <xsl:with-param name="x1a" select="$node/@x1"/>
+ <xsl:with-param name="y1a" select="$node/@y1"/>
+ <xsl:with-param name="x2a" select="$node/@x2"/>
+ <xsl:with-param name="y2a" select="$node/@y2"/>
+ <xsl:with-param name="xx" select="$cosOfAngle"/>
+ <xsl:with-param name="yx" select="-$sinOfAngle"/>
+ <xsl:with-param name="xy" select="$sinOfAngle"/>
+ <xsl:with-param name="yy" select="$cosOfAngle"/>
+ <xsl:with-param name="dy" select="0"/>
+ <xsl:with-param name="dy" select="0"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>exslt:sin and exslt:cos must be supported for a gradient rotation.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>,</xsl:text>
+ </xsl:template>
+
+ <!-- The following templates handle related batches of attributes -->
+
+ <xsl:template name="font">
+ <xsl:param name="node"/>
+ <!-- Only include if we have at least some font properties defined -->
+ <xsl:if test="$node/@font-style or $node/@font-variant or $node/@font-weight or $node/@font-size or $node/@font-family">
+ <xsl:text>font:{ type:"font",</xsl:text>
+ <xsl:if test="$node/@font-style">
+ <xsl:text>style:"</xsl:text>
+ <xsl:value-of select="$node/@font-style"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@font-variant">
+ <xsl:text>variant:"</xsl:text>
+ <xsl:value-of select="$node/@font-variant"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@font-weight">
+ <xsl:text>weight:"</xsl:text>
+ <xsl:value-of select="$node/@font-weight"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@font-size">
+ <xsl:text>size:"</xsl:text>
+ <xsl:value-of select="$node/@font-size"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@font-family">
+ <xsl:text>family:"</xsl:text>
+ <xsl:value-of select="$node/@font-family"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:text>},</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="stroke">
+ <xsl:param name="node"/>
+ <!-- Only include if we have at least some stroke properties defined -->
+ <xsl:if test="$node/@stroke or $node/@stroke-width or $node/@stroke-linecap or $node/@stroke-linejoin">
+ <xsl:text>stroke:{</xsl:text>
+ <!-- We don't currently handle stroke-dasharray or stroke-dashoffset -->
+ <!-- Note that while we'll pass stroke background info, GFX won't yet use it. -->
+ <xsl:if test="$node/@stroke">
+ <xsl:text>color:</xsl:text>
+ <xsl:call-template name="background-processor">
+ <xsl:with-param name="background" select="$node/@stroke"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="$node/@stroke-width">
+ <xsl:text>width:"</xsl:text>
+ <xsl:value-of select="$node/@stroke-width"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@stroke-linecap">
+ <xsl:text>cap:"</xsl:text>
+ <xsl:value-of select="$node/@stroke-linecap"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:if test="$node/@stroke-linejoin">
+ <xsl:text>join:"</xsl:text>
+ <xsl:value-of select="$node/@stroke-linejoin"/>
+ <xsl:text>",</xsl:text>
+ </xsl:if>
+ <xsl:choose>
+ <!-- This is really cheesy but better than nothing. -->
+ <!-- We probably ought to match a few specific cases when we can. %FIX% -->
+ <xsl:when test="$node/@stroke-dasharray">
+ <xsl:text>style:"Dash",</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>style:"Solid",</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>},</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="common-attributes">
+ <xsl:param name="node"/>
+ <!-- Pretty much every shape has to handle this same batch of attributes. -->
+ <xsl:apply-templates select="$node/@style"/>
+ <!-- Note that we make no effort to guard against overlapping styles. -->
+ <xsl:apply-templates select="$node/@fill"/>
+ <xsl:call-template name="stroke">
+ <xsl:with-param name="node" select="$node"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="$node/@transform"/>
+ <!-- Fonts are actually illegal in most shapes, but including them here doesn't -->
+ <!-- really slow things down much and does clean up code a bit for the shapes -->
+ <!-- that do allow them. -->
+ <xsl:call-template name="font">
+ <xsl:with-param name="node" select="$node"/>
+ </xsl:call-template>
+ <!-- Ditto for stop-colors. -->
+ <xsl:apply-templates select="$node/@stop-color"/>
+ </xsl:template>
+
+ <!-- SVG Attribute Handling -->
+
+ <xsl:template match="@id">
+ <xsl:text>name:"</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>",</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="@x|@y|@x1|@x2|@y1|@y2|@cx|@cy|@r|@rx|@ry|@fx|@fy|@width|@height|@offset">
+ <!-- Generic attribute followed by comma -->
+ <xsl:value-of select="local-name()"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>,</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="@d">
+ <!-- Used only by path objects; often has tons of extra whitespace -->
+ <xsl:text>path:"</xsl:text>
+ <xsl:value-of select="normalize-space(.)"/>
+ <xsl:text>",</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="@fill">
+ <!-- Used by most shapes and can have a URL, a solid color, or "none" -->
+ <xsl:if test=". != 'none'">
+ <xsl:text>fill:</xsl:text>
+ <xsl:call-template name="background-processor">
+ <xsl:with-param name="background" select="."/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="@stop-color">
+ <xsl:call-template name="color-processor">
+ <xsl:with-param name="color" select="."/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@style">
+ <!-- A style property is really a bunch of other properties crammed together. -->
+ <!-- We therefore make a dummy element and process it as normal. -->
+ <xsl:variable name="dummy">
+ <dummy>
+ <xsl:call-template name="styles-processor">
+ <xsl:with-param name="styles" select="."/>
+ </xsl:call-template>
+ </dummy>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- Using a dummy element requires node-set capability. Straight XSLT 1.0 -->
+ <!-- lacks this, but pretty much every XSLT processor offers it as an extension. -->
+ <xsl:when test="function-available('exsl:node-set')">
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="exsl:node-set($dummy)/dummy"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="function-available('saxon:node-set')">
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="saxon:node-set($dummy)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="function-available('xalan:nodeSet')">
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="xalan:nodeSet($dummy)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>exslt:node-set is required for processing the style attribute.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="@transform|@gradientTransform">
+ <!-- Several transform types are supported -->
+ <xsl:text>transform:{</xsl:text>
+ <xsl:call-template name="transform-processor">
+ <xsl:with-param name="transforms" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <!-- SVG Element Handling -->
+
+ <xsl:template match="svg:a">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- Anchors are actually meaningless to us, but their contents should usually be processed. -->
+ <xsl:variable name="newGroupAttrs">
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:apply-templates select="@style"/>
+ <!-- Note that we make no effort to guard against overlapping styles; we just order -->
+ <!-- them to be consistent. This naive approach will usually, but not always, work. -->
+ <xsl:apply-templates select="@fill"/>
+ <xsl:call-template name="stroke">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="&SupportedElements;">
+ <xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+ <xsl:template match="svg:circle">
+ <xsl:param name="groupAttrs" select="''"/>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"circle",</xsl:text>
+ <xsl:apply-templates select="@cx|@cy|@r"/>
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:ellipse">
+ <xsl:param name="groupAttrs" select="''"/>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"ellipse",</xsl:text>
+ <xsl:apply-templates select="@cx|@cy|@rx|@ry"/>
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:g">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- The basic grouping type can contain shapes, other groups, and have a transform -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>children:[</xsl:text>
+ <!-- Note that GFX does not yet support fills etc. on a group, even though SVG does. -->
+ <!-- It's a planned enhancement though, so when GFX gets the ability to handle these, -->
+ <!-- remove the following ten lines and stop propagating groupAttrs. -->
+ <xsl:variable name="newGroupAttrs">
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:apply-templates select="@style"/>
+ <!-- Note that we make no effort to guard against overlapping styles; we just order -->
+ <!-- them to be consistent. This naive approach will usually, but not always, work. -->
+ <xsl:apply-templates select="@fill"/>
+ <xsl:call-template name="stroke">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:apply-templates select="&SupportedElements;">
+ <xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+ </xsl:apply-templates>
+ <xsl:text>],</xsl:text>
+ <!-- When GFX gets group fills etc., remove the following line and uncomment the ones below. -->
+ <xsl:apply-templates select="@transform"/>
+ <!--<xsl:call-template name="common-attributes">-->
+ <!-- <xsl:with-param name="node" select="."/>-->
+ <!--</xsl:call-template>-->
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:image">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- Note that images must be GIF, JPEG, or PNG. -->
+ <xsl:if test="not(parent::pattern)">
+ <!-- When being used as a background pattern we don't want type info. -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"image",</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="@x|@y|@width|@height"/>
+ <xsl:text>src:"</xsl:text>
+ <xsl:value-of select="@xlink:href"/>
+ <xsl:text>",</xsl:text>
+ <xsl:if test="not(parent::pattern)">
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="svg:line">
+ <xsl:param name="groupAttrs" select="''"/>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"line",</xsl:text>
+ <xsl:apply-templates select="@x1|@y1|@x2|@y2"/>
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:linearGradient">
+ <xsl:text>{type:"linear",</xsl:text>
+ <!-- Kluge alert - GFX doesn't handle gradientTransforms. We can help in -->
+ <!-- the common case of matrix transforms in user space. Other cases we ignore. -->
+ <!-- Even for this one case the results aren't anywhere near as good as real support in GFX. -->
+ <xsl:choose>
+ <!-- Kluge alert - this code is only meant to serve until GFX gets gradientTransform support. -->
+ <!-- Once GFX does gradientTransforms, only the straight apply-templates should be kept. -->
+ <xsl:when test="starts-with(@gradientTransform,'matrix') and @gradientUnits='userSpaceOnUse'">
+ <xsl:call-template name="gradient-adjuster">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="@x1|@x2|@y1|@y2"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>colors:[</xsl:text>
+ <xsl:apply-templates select="svg:stop"/>
+ <!-- Unfortunately GFX doesn't do gradientTransforms. -->
+ <!-- Uncommenting the following would support it here. -->
+ <!-- <xsl:apply-templates select="@x1|@x2|@y1|@y2"/> -->
+ <!-- <xsl:apply-templates select="@gradientTransform"/> -->
+ <xsl:text>]},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:path">
+ <xsl:param name="groupAttrs" select="''"/>
+ <xsl:if test="not(parent::textpath)">
+ <!-- When being used within a textpath we don't want type info. -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"path",</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="@d"/>
+ <xsl:if test="not(parent::textpath)">
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="svg:pattern">
+ <!-- GFX only seems to handle image pattern type fills, so that's all we do -->
+ <xsl:text>{type:"pattern",</xsl:text>
+ <xsl:apply-templates select="@width|@height|@xlink:href"/>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:polygon|svg:polyline">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- Polygons are mostly treated as polylines -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"polyline",points:[</xsl:text>
+ <!-- We just have to ensure that endpoints match for a polygon; it's assumed in SVG -->
+ <xsl:variable name="seminormalizedPoints" select="normalize-space(@points)"/>
+ <xsl:variable name="normalizedPoints">
+ <xsl:call-template name="kill-extra-spaces">
+ <xsl:with-param name="string" select="$seminormalizedPoints"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="firstPoint" select="substring-before($normalizedPoints,' ')"/>
+ <xsl:choose>
+ <xsl:when test="contains(local-name(),'polygon') and
+ $firstPoint!=substring($normalizedPoints,string-length($normalizedPoints)-string-length($firstPoint)+1)">
+ <xsl:call-template name="point-processor">
+ <xsl:with-param name="points" select="concat($normalizedPoints,' ',$firstPoint)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="point-processor">
+ <xsl:with-param name="points" select="$normalizedPoints"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>]},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:radialGradient">
+ <xsl:text>{type:"radial",</xsl:text>
+ <!-- Kluge alert - GFX doesn't handle gradientTransforms. We can help in -->
+ <!-- the common case of matrix transforms in user space. Other cases we ignore. -->
+ <!-- Even for this one case the results aren't anywhere near as good as real support in GFX. -->
+ <xsl:choose>
+ <!-- Kluge alert - this code is only meant to serve until GFX gets gradientTransform support. -->
+ <!-- Once GFX does gradientTransforms, only the straight apply-templates should be kept. -->
+ <xsl:when test="starts-with(@gradientTransform,'matrix') and @gradientUnits='userSpaceOnUse'">
+ <xsl:call-template name="gradient-adjuster">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="@cx|@cy|@r"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- GFX doesn't currently support fx & fy -->
+ <!-- Uncommenting the following would support it here. -->
+ <!-- <xsl:apply-templates select="@fx|@fy"/> -->
+ <xsl:text>colors:[</xsl:text>
+ <xsl:apply-templates select="svg:stop"/>
+ <!-- Unfortunately GFX doesn't do gradientTransforms. -->
+ <!-- Uncommenting the following would support it here. -->
+ <!-- <xsl:apply-templates select="@cx|@cy|@r"/> -->
+ <!-- <xsl:apply-templates select="@gradientTransform"/> -->
+ <xsl:text>]},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:rect">
+ <xsl:param name="groupAttrs" select="''"/>
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:text>shape:{type:"rect",</xsl:text>
+ <xsl:apply-templates select="@x|@y|@width|@height"/>
+ <xsl:if test="@rx and @ry">
+ <!-- Do approximate rounded corners if both an rx and ry are present. -->
+ <xsl:variable name="r" select="(@rx+@ry) div 2"/>
+ <xsl:text>r:</xsl:text>
+ <xsl:value-of select="$r"/>
+ </xsl:if>
+ <xsl:text>},</xsl:text>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:stop">
+ <!-- Both gradient types use the same sort of stops -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@offset"/>
+ <xsl:text>color:</xsl:text>
+ <xsl:apply-templates select="@style"/>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:text|svg:textPath">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- Support for textPath is not functional as GFX doesn't seem to have a -->
+ <!-- complete serialized form at this time. %FIX% -->
+ <xsl:text>{</xsl:text>
+ <xsl:apply-templates select="@id"/>
+ <xsl:choose>
+ <xsl:when test="contains(local-name(),'textpath')">
+ <xsl:text>shape:{type:"textpath",text:"</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>",</xsl:text>
+ <xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after(@xlink:href,'('),')')),' ',',')"/>
+ <xsl:call-template name="url-processor">
+ <xsl:with-param name="url" select="$arguments"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Regular text has slightly different attributes -->
+ <xsl:choose>
+ <!-- It's possible for a text element to contain a textpath element. -->
+ <xsl:when test="not(textpath)">
+ <xsl:text>shape:{type:"text",text:"</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>",</xsl:text>
+ <xsl:apply-templates select="@x|@y"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>},</xsl:text>
+ <!-- Kluge alert - if no fill is defined, GFX won't display anything -->
+ <!-- Our quick fix here is to force a fill of some sort. -->
+ <xsl:if test="not(@fill)">
+ <xsl:text>fill:"#000000",</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:call-template name="common-attributes">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:text>},</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="svg:use">
+ <xsl:param name="groupAttrs" select="''"/>
+ <!-- Use just refers to an existing element, essentially duplicating it. -->
+ <xsl:variable name="newGroupAttrs">
+ <xsl:value-of select="$groupAttrs"/>
+ <xsl:apply-templates select="@style"/>
+ <!-- Note that we make no effort to guard against overlapping styles; we just order -->
+ <!-- them to be consistent. This naive approach will usually, but not always, work. -->
+ <xsl:apply-templates select="@fill"/>
+ <xsl:call-template name="stroke">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ <xsl:apply-templates select="@transform"/>
+ </xsl:variable>
+ <xsl:call-template name="url-processor">
+ <xsl:with-param name="url" select="normalize-space(@xlink:href)"/>
+ <xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <!-- The main SVG element itself -->
+
+ <xsl:template match="/svg:svg">
+ <xsl:text>[</xsl:text>
+ <xsl:apply-templates select="&SupportedElements;"/>
+ <xsl:text>]</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/DataGrid.js b/js/dojo/dojox/grid/DataGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/DataGrid.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};this.length=0;},add:function(_1){if(this._hash[_1.id]){throw new Error("Tried to register widget with id=="+_1.id+" but that id is already registered");}this._hash[_1.id]=_1;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_2,_3){_3=_3||dojo.global;var i=0,id;for(id in this._hash){_2.call(_3,this._hash[id],i++,this._hash);}return this;},filter:function(_4,_5){_5=_5||dojo.global;var _6=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_4.call(_5,w,i++,this._hash)){_6.add(w);}}return _6;},byId:function(id){return this._hash[id];},byClass:function(_7){var _8=new dijit.WidgetSet(),id,_9;for(id in this._hash){_9=this._hash[id];if(_9.declaredClass==_7){_8.add(_9);}}return _8;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_a,_b){return dojo.map(this.toArray(),_a,_b);},every:function(_c,_d){_d=_d||dojo.global;var x=0,i;for(i in this._hash){if(!_c.call(_d,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_e,_f){_f=_f||dojo.global;var x=0,i;for(i in this._hash){if(_e.call(_f,this._hash[i],x++,this._hash)){return true;}}return false;}});dijit.registry=new dijit.WidgetSet();dijit._widgetTypeCtr={};dijit.getUniqueId=function(_10){var id;do{id=_10+"_"+(_10 in dijit._widgetTypeCtr?++dijit._widgetTypeCtr[_10]:dijit._widgetTypeCtr[_10]=0);}while(dijit.byId(id));return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_11){var _12=[];function _13(_14){for(var _15=_14.firstChild;_15;_15=_15.nextSibling){if(_15.nodeType==1){var _16=_15.getAttribute("widgetId");if(_16){var _17=dijit.byId(_16);_12.push(_17);}else{_13(_15);}}}};_13(_11);return _12;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_18){if(!_18._destroyed){if(_18.destroyRecursive){_18.destroyRecursive();}else{if(_18.destroy){_18.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byId=function(id){return typeof id=="string"?dijit.registry._hash[id]:id;};dijit.byNode=function(_19){return dijit.registry.byId(_19.getAttribute("widgetId"));};dijit.getEnclosingWidget=function(_1a){while(_1a){var id=_1a.getAttribute&&_1a.getAttribute("widgetId");if(id){return dijit.byId(id);}_1a=_1a.parentNode;}return null;};dijit._isElementShown=function(_1b){var _1c=dojo.style(_1b);return (_1c.visibility!="hidden")&&(_1c.visibility!="collapsed")&&(_1c.display!="none")&&(dojo.attr(_1b,"type")!="hidden");};dijit.isTabNavigable=function(_1d){if(dojo.attr(_1d,"disabled")){return false;}else{if(dojo.hasAttr(_1d,"tabIndex")){return dojo.attr(_1d,"tabIndex")>=0;}else{switch(_1d.nodeName.toLowerCase()){case "a":return dojo.hasAttr(_1d,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){return _1d.contentDocument.designMode=="on";}else{if(dojo.isWebKit){var doc=_1d.contentDocument,_1e=doc&&doc.body;return _1e&&_1e.contentEditable=="true";}else{try{doc=_1d.contentWindow.document;_1e=doc&&doc.body;return _1e&&_1e.firstChild&&_1e.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _1d.contentEditable=="true";}}}};dijit._getTabNavigable=function(_1f){var _20,_21,_22,_23,_24,_25;var _26=function(_27){dojo.query("> *",_27).forEach(function(_28){var _29=dijit._isElementShown(_28);if(_29&&dijit.isTabNavigable(_28)){var _2a=dojo.attr(_28,"tabIndex");if(!dojo.hasAttr(_28,"tabIndex")||_2a==0){if(!_20){_20=_28;}_21=_28;}else{if(_2a>0){if(!_22||_2a<_23){_23=_2a;_22=_28;}if(!_24||_2a>=_25){_25=_2a;_24=_28;}}}}if(_29&&_28.nodeName.toUpperCase()!="SELECT"){_26(_28);}});};if(dijit._isElementShown(_1f)){_26(_1f);}return {first:_20,last:_21,lowest:_22,highest:_24};};dijit.getFirstInTabbingOrder=function(_2b){var _2c=dijit._getTabNavigable(dojo.byId(_2b));return _2c.lowest?_2c.lowest:_2c.first;};dijit.getLastInTabbingOrder=function(_2d){var _2e=dijit._getTabNavigable(dojo.byId(_2d));return _2e.last?_2e.last:_2e.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;}if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_2f){var _30=dojo.doc,_31=_2f.mark;if(_31){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_31.pRange){var r=_31;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_31);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_30.selection&&_31){var rg;if(_31.pRange){rg=_31.range;}else{if(dojo.isArray(_31)){rg=_30.body.createControlRange();dojo.forEach(_31,function(n){rg.addElement(n);});}else{rg=_30.body.createTextRange();rg.moveToBookmark(_31);}}rg.select();}}}},getFocus:function(_32,_33){var _34=!dijit._curFocus||(_32&&dojo.isDescendant(dijit._curFocus,_32.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_34,bookmark:(_34==dijit._curFocus)&&dojo.withGlobal(_33||dojo.global,dijit.getBookmark),openedForWindow:_33};},focus:function(_35){if(!_35){return;}var _36="node" in _35?_35.node:_35,_37=_35.bookmark,_38=_35.openedForWindow,_39=_37?_37.isCollapsed:false;if(_36){var _3a=(_36.tagName.toLowerCase()=="iframe")?_36.contentWindow:_36;if(_3a&&_3a.focus){try{_3a.focus();}catch(e){}}dijit._onFocusNode(_36);}if(_37&&dojo.withGlobal(_38||dojo.global,dijit.isCollapsed)&&!_39){if(_38){_38.focus();}try{dojo.withGlobal(_38||dojo.global,dijit.moveToBookmark,null,[_37]);}catch(e2){}}},_activeStack:[],registerIframe:function(_3b){return dijit.registerWin(_3b.contentWindow,_3b);},unregisterIframe:function(_3c){dijit.unregisterWin(_3c);},registerWin:function(_3d,_3e){var _3f=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);dijit._onTouchNode(_3e||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_3d.document.documentElement:_3d.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_3f);var _40=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_3e||evt.srcElement);}else{dijit._onTouchNode(_3e||evt.srcElement);}};doc.attachEvent("onactivate",_40);var _41=function(evt){dijit._onBlurNode(_3e||evt.srcElement);};doc.attachEvent("ondeactivate",_41);return function(){doc.detachEvent("onmousedown",_3f);doc.detachEvent("onactivate",_40);doc.detachEvent("ondeactivate",_41);doc=null;};}else{doc.addEventListener("mousedown",_3f,true);var _42=function(evt){dijit._onFocusNode(_3e||evt.target);};doc.addEventListener("focus",_42,true);var _43=function(evt){dijit._onBlurNode(_3e||evt.target);};doc.addEventListener("blur",_43,true);return function(){doc.removeEventListener("mousedown",_3f,true);doc.removeEventListener("focus",_42,true);doc.removeEventListener("blur",_43,true);doc=null;};}}},unregisterWin:function(_44){_44&&_44();},_onBlurNode:function(_45){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_46,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _47=[];try{while(_46){var _48=dojo.attr(_46,"dijitPopupParent");if(_48){_46=dijit.byId(_48).domNode;}else{if(_46.tagName&&_46.tagName.toLowerCase()=="body"){if(_46===dojo.body()){break;}_46=dijit.getDocumentWindow(_46.ownerDocument).frameElement;}else{var id=_46.getAttribute&&_46.getAttribute("widgetId");if(id){_47.unshift(id);}_46=_46.parentNode;}}}}catch(e){}dijit._setStack(_47,by);},_onFocusNode:function(_49){if(!_49){return;}if(_49.nodeType==9){return;}dijit._onTouchNode(_49);if(_49==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_49;dojo.publish("focusNode",[_49]);},_setStack:function(_4a,by){var _4b=dijit._activeStack;dijit._activeStack=_4a;for(var _4c=0;_4c<Math.min(_4b.length,_4a.length);_4c++){if(_4b[_4c]!=_4a[_4c]){break;}}var _4d;for(var i=_4b.length-1;i>=_4c;i--){_4d=dijit.byId(_4b[i]);if(_4d){_4d._focused=false;_4d._hasBeenBlurred=true;if(_4d._onBlur){_4d._onBlur(by);}if(_4d._setStateClass){_4d._setStateClass();}dojo.publish("widgetBlur",[_4d,by]);}}for(i=_4c;i<_4a.length;i++){_4d=dijit.byId(_4a[i]);if(_4d){_4d._focused=true;if(_4d._onFocus){_4d._onFocus(by);}if(_4d._setStateClass){_4d._setStateClass();}dojo.publish("widgetFocus",[_4d,by]);}}}});dojo.addOnLoad(function(){var _4e=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_4e);_4e=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_4f){this.pairs=[];this.returnWrappers=_4f||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_50,_51,_52,_53,_54){this.pairs[((_54)?"unshift":"push")]([_50,_51,_52,_53]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _55=this.pairs[i];if(_55[1].apply(this,arguments)){if((_55[3])||(this.returnWrappers)){return _55[2];}else{return _55[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_56){for(var i=0;i<this.pairs.length;i++){var _57=this.pairs[i];if(_57[0]==_56){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){var _58=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _59=dojo._docScroll();return {w:_58.clientWidth,h:_58.clientHeight,l:_59.x,t:_59.y};};dijit.placeOnScreen=function(_5a,pos,_5b,_5c){var _5d=dojo.map(_5b,function(_5e){var c={corner:_5e,pos:{x:pos.x,y:pos.y}};if(_5c){c.pos.x+=_5e.charAt(1)=="L"?_5c.x:-_5c.x;c.pos.y+=_5e.charAt(0)=="T"?_5c.y:-_5c.y;}return c;});return dijit._place(_5a,_5d);};dijit._place=function(_5f,_60,_61){var _62=dijit.getViewport();if(!_5f.parentNode||String(_5f.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_5f);}var _63=null;dojo.some(_60,function(_64){var _65=_64.corner;var pos=_64.pos;if(_61){_61(_5f,_64.aroundCorner,_65);}var _66=_5f.style;var _67=_66.display;var _68=_66.visibility;_66.visibility="hidden";_66.display="";var mb=dojo.marginBox(_5f);_66.display=_67;_66.visibility=_68;var _69=Math.max(_62.l,_65.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_6a=Math.max(_62.t,_65.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_6b=Math.min(_62.l+_62.w,_65.charAt(1)=="L"?(_69+mb.w):pos.x),_6c=Math.min(_62.t+_62.h,_65.charAt(0)=="T"?(_6a+mb.h):pos.y),_6d=_6b-_69,_6e=_6c-_6a,_6f=(mb.w-_6d)+(mb.h-_6e);if(_63==null||_6f<_63.overflow){_63={corner:_65,aroundCorner:_64.aroundCorner,x:_69,y:_6a,w:_6d,h:_6e,overflow:_6f};}return !_6f;});_5f.style.left=_63.x+"px";_5f.style.top=_63.y+"px";if(_63.overflow&&_61){_61(_5f,_63.aroundCorner,_63.corner);}return _63;};dijit.placeOnScreenAroundNode=function(_70,_71,_72,_73){_71=dojo.byId(_71);var _74=_71.style.display;_71.style.display="";var _75=dojo.position(_71,true);_71.style.display=_74;return dijit._placeOnScreenAroundRect(_70,_75.x,_75.y,_75.w,_75.h,_72,_73);};dijit.placeOnScreenAroundRectangle=function(_76,_77,_78,_79){return dijit._placeOnScreenAroundRect(_76,_77.x,_77.y,_77.width,_77.height,_78,_79);};dijit._placeOnScreenAroundRect=function(_7a,x,y,_7b,_7c,_7d,_7e){var _7f=[];for(var _80 in _7d){_7f.push({aroundCorner:_80,corner:_7d[_80],pos:{x:x+(_80.charAt(1)=="L"?0:_7b),y:y+(_80.charAt(0)=="T"?0:_7c)}});}return dijit._place(_7a,_7f,_7e);};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_81,_82,_83,_84){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAlignment=function(_85,_86){var _87={};dojo.forEach(_85,function(pos){switch(pos){case "after":_87[_86?"BR":"BL"]=_86?"BL":"BR";break;case "before":_87[_86?"BL":"BR"]=_86?"BR":"BL";break;case "below":_87[_86?"BL":"BR"]=_86?"TL":"TR";_87[_86?"BR":"BL"]=_86?"TR":"TL";break;case "above":default:_87[_86?"TL":"TR"]=_86?"BL":"BR";_87[_86?"TR":"TL"]=_86?"BR":"BL";break;}});return _87;};dijit.getPopupAroundAlignment=function(_88,_89){var _8a={};dojo.forEach(_88,function(pos){switch(pos){case "after":_8a[_89?"BR":"BL"]=_89?"BL":"BR";break;case "before":_8a[_89?"BL":"BR"]=_89?"BR":"BL";break;case "below":_8a[_89?"BL":"BR"]=_89?"TL":"TR";_8a[_89?"BR":"BL"]=_89?"TR":"TL";break;case "above":default:_8a[_89?"TL":"TR"]=_89?"BL":"BR";_8a[_89?"TR":"TL"]=_89?"BR":"BL";break;}});return _8a;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){if(dojo.isIE&&window!==document.parentWindow&&!doc._parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc._parentWindow||doc.parentWindow||doc.defaultView;};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup=new function(){var _8b=[],_8c=1000,_8d=1;this.moveOffScreen=function(_8e){var s=_8e.style;s.visibility="hidden";s.position="absolute";s.top="-9999px";if(s.display=="none"){s.display="";}dojo.body().appendChild(_8e);};var _8f=function(){for(var pi=_8b.length-1;pi>0&&_8b[pi].parent===_8b[pi-1].widget;pi--){}return _8b[pi];};var _90=[];this.open=function(_91){var _92=_91.popup,_93=_91.orient||(dojo._isBodyLtr()?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_94=_91.around,id=(_91.around&&_91.around.id)?(_91.around.id+"_dropdown"):("popup_"+_8d++);var _95=_90.pop(),_96,_97;if(!_95){_96=dojo.create("div",{"class":"dijitPopup"},dojo.body());dijit.setWaiRole(_96,"presentation");}else{_96=_95[0];_97=_95[1];}dojo.attr(_96,{id:id,style:{zIndex:_8c+_8b.length,visibility:"hidden",top:"-9999px"},dijitPopupParent:_91.parent?_91.parent.id:""});var s=_92.domNode.style;s.display="";s.visibility="";s.position="";s.top="0px";_96.appendChild(_92.domNode);if(!_97){_97=new dijit.BackgroundIframe(_96);}else{_97.resize(_96);}var _98=_94?dijit.placeOnScreenAroundElement(_96,_94,_93,_92.orient?dojo.hitch(_92,"orient"):null):dijit.placeOnScreen(_96,_91,_93=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_91.padding);_96.style.visibility="visible";var _99=[];_99.push(dojo.connect(_96,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_91.onCancel){dojo.stopEvent(evt);_91.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _9a=_8f();if(_9a&&_9a.onCancel){_9a.onCancel();}}}}));if(_92.onCancel){_99.push(dojo.connect(_92,"onCancel",_91.onCancel));}_99.push(dojo.connect(_92,_92.onExecute?"onExecute":"onChange",function(){var _9b=_8f();if(_9b&&_9b.onExecute){_9b.onExecute();}}));_8b.push({wrapper:_96,iframe:_97,widget:_92,parent:_91.parent,onExecute:_91.onExecute,onCancel:_91.onCancel,onClose:_91.onClose,handlers:_99});if(_92.onOpen){_92.onOpen(_98);}return _98;};this.close=function(_9c){while(dojo.some(_8b,function(_9d){return _9d.widget==_9c;})){var top=_8b.pop(),_9e=top.wrapper,_9f=top.iframe,_a0=top.widget,_a1=top.onClose;if(_a0.onClose){_a0.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_a0&&_a0.domNode){this.moveOffScreen(_a0.domNode);}_9e.style.top="-9999px";_9e.style.visibility="hidden";_90.push([_9e,_9f]);if(_a1){_a1();}}};}();dijit._frames=new function(){var _a2=[];this.pop=function(){var _a3;if(_a2.length){_a3=_a2.pop();_a3.style.display="";}else{if(dojo.isIE){var _a4=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var _a5="<iframe src='"+_a4+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_a3=dojo.doc.createElement(_a5);}else{_a3=dojo.create("iframe");_a3.src="javascript:\"\"";_a3.className="dijitBackgroundIframe";dojo.style(_a3,"opacity",0.1);}_a3.tabIndex=-1;}return _a3;};this.push=function(_a6){_a6.style.display="none";_a2.push(_a6);};}();dijit.BackgroundIframe=function(_a7){if(!_a7.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _a8=dijit._frames.pop();_a7.appendChild(_a8);if(dojo.isIE<7){this.resize(_a7);this._conn=dojo.connect(_a7,"onresize",this,function(){this.resize(_a7);});}else{dojo.style(_a8,{width:"100%",height:"100%"});}this.iframe=_a8;}};dojo.extend(dijit.BackgroundIframe,{resize:function(_a9){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:_a9.offsetWidth+"px",height:_a9.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_aa,pos){try{_aa=dojo.byId(_aa);var doc=_aa.ownerDocument||dojo.doc,_ab=doc.body||dojo.body(),_ac=doc.documentElement||_ab.parentNode,_ad=dojo.isIE,_ae=dojo.isWebKit;if((!(dojo.isMoz||_ad||_ae)||_aa==_ab||_aa==_ac)&&(typeof _aa.scrollIntoView!="undefined")){_aa.scrollIntoView(false);return;}var _af=doc.compatMode=="BackCompat",_b0=_af?_ab:_ac,_b1=_ae?_ab:_b0,_b2=_b0.clientWidth,_b3=_b0.clientHeight,rtl=!dojo._isBodyLtr(),_b4=pos||dojo.position(_aa),el=_aa.parentNode,_b5=function(el){return ((_ad<=6||(_ad&&_af))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_b5(_aa)){return;}while(el){if(el==_ab){el=_b1;}var _b6=dojo.position(el),_b7=_b5(el);with(_b6){if(el==_b1){w=_b2,h=_b3;if(_b1==_ac&&_ad&&rtl){x+=_b1.offsetWidth-w;}if(x<0||!_ad){x=0;}if(y<0||!_ad){y=0;}}else{var pb=dojo._getPadBorderExtents(el);w-=pb.w;h-=pb.h;x+=pb.l;y+=pb.t;}with(el){if(el!=_b1){var _b8=clientWidth,_b9=w-_b8;if(_b8>0&&_b9>0){w=_b8;if(_ad&&rtl){x+=_b9;}}_b8=clientHeight;_b9=h-_b8;if(_b8>0&&_b9>0){h=_b8;}}if(_b7){if(y<0){h+=y,y=0;}if(x<0){w+=x,x=0;}if(y+h>_b3){h=_b3-y;}if(x+w>_b2){w=_b2-x;}}var l=_b4.x-x,t=_b4.y-Math.max(y,0),r=l+_b4.w-w,bot=t+_b4.h-h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_b4.x+=scrollLeft;scrollLeft+=(_ad>=8&&!_af&&rtl)?-s:s;_b4.x-=scrollLeft;}if(bot*t>0){_b4.y+=scrollTop;scrollTop+=Math[t<0?"max":"min"](t,bot);_b4.y-=scrollTop;}}}el=(el!=_b1)&&!_b7&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_aa.scrollIntoView(false);}};}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");(function(){var d=dojo,_ba=d.doc.documentElement,ie=d.isIE,_bb=d.isOpera,maj=Math.floor,ff=d.isFF,_bc=d.boxModel.replace(/-/,""),_bd={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_iequirks:ie&&d.isQuirks,dj_opera:_bb,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_bd["dj_"+_bc]=true;for(var p in _bd){if(_bd[p]){if(_ba.className){_ba.className+=" "+p;}else{_ba.className=p;}}}dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){_ba.className+=" dijitRtl";for(var p in _bd){if(_bd[p]){_ba.className+=" "+p+"-rtl";}}}});})();}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),10);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_be,_bf,_c0,obj,_c1,_c2){if(obj!=this._obj){this.stop();this._initialDelay=_c2||500;this._subsequentDelay=_c1||0.9;this._obj=obj;this._evt=evt;this._node=_bf;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_be,_c0);this._fireEventAndReload();}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_c3,_c4,_c5,_c6,_c7,_c8){if(_c4.keyCode){_c4.charOrCode=_c4.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_c4.charCode){_c4.charOrCode=String.fromCharCode(_c4.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(_c3,"onkeypress",this,function(evt){if(evt.charOrCode==_c4.charOrCode&&(_c4.ctrlKey===undefined||_c4.ctrlKey==evt.ctrlKey)&&(_c4.altKey===undefined||_c4.altKey==evt.altKey)&&(_c4.metaKey===undefined||_c4.metaKey==(evt.metaKey||false))&&(_c4.shiftKey===undefined||_c4.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(_c4,_c5,_c3,_c6,_c4,_c7,_c8);}else{if(dijit.typematic._obj==_c4){dijit.typematic.stop();}}}),dojo.connect(_c3,"onkeyup",this,function(evt){if(dijit.typematic._obj==_c4){dijit.typematic.stop();}})];},addMouseListener:function(_c9,_ca,_cb,_cc,_cd){var dc=dojo.connect;return [dc(_c9,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_ca,_c9,_cb,_c9,_cc,_cd);}),dc(_c9,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_c9,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_c9,"mousemove",this,function(evt){dojo.stopEvent(evt);}),dc(_c9,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_ca,_c9,_cb,_c9,_cc,_cd);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_ce,_cf,_d0,_d1,_d2,_d3,_d4){return this.addKeyListener(_cf,_d0,_d1,_d2,_d3,_d4).concat(this.addMouseListener(_ce,_d1,_d2,_d3,_d4));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _d5=cs.backgroundImage;var _d6=(cs.borderTopColor==cs.borderRightColor)||(_d5!=null&&(_d5=="none"||_d5=="url(invalid-url:)"));dojo[_d6?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(_d7,_d8){var _d9=this.getWaiRole(_d7);return _d8?(_d9.indexOf(_d8)>-1):(_d9.length>0);},getWaiRole:function(_da){return dojo.trim((dojo.attr(_da,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(_db,_dc){var _dd=dojo.attr(_db,"role")||"";if(!this._XhtmlRoles.test(_dd)){dojo.attr(_db,"role",_dc);}else{if((" "+_dd+" ").indexOf(" "+_dc+" ")<0){var _de=dojo.trim(_dd.replace(this._XhtmlRoles,""));var _df=dojo.trim(_dd.replace(_de,""));dojo.attr(_db,"role",_df+(_df?" ":"")+_dc);}}},removeWaiRole:function(_e0,_e1){var _e2=dojo.attr(_e0,"role");if(!_e2){return;}if(_e1){var t=dojo.trim((" "+_e2+" ").replace(" "+_e1+" "," "));dojo.attr(_e0,"role",t);}else{_e0.removeAttribute("role");}},hasWaiState:function(_e3,_e4){return _e3.hasAttribute?_e3.hasAttribute("aria-"+_e4):!!_e3.getAttribute("aria-"+_e4);},getWaiState:function(_e5,_e6){return _e5.getAttribute("aria-"+_e6)||"";},setWaiState:function(_e7,_e8,_e9){_e7.setAttribute("aria-"+_e8,_e9);},removeWaiState:function(_ea,_eb){_ea.removeAttribute("aria-"+_eb);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_ec,_ed){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _ee=dojo.date.stamp._isoRegExp.exec(_ec),_ef=null;if(_ee){_ee.shift();if(_ee[1]){_ee[1]--;}if(_ee[6]){_ee[6]*=1000;}if(_ed){_ed=new Date(_ed);dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_f0){return _ed["get"+_f0]();}).forEach(function(_f1,_f2){if(_ee[_f2]===undefined){_ee[_f2]=_f1;}});}_ef=new Date(_ee[0]||1970,_ee[1]||0,_ee[2]||1,_ee[3]||0,_ee[4]||0,_ee[5]||0,_ee[6]||0);if(_ee[0]<100){_ef.setFullYear(_ee[0]||1970);}var _f3=0,_f4=_ee[7]&&_ee[7].charAt(0);if(_f4!="Z"){_f3=((_ee[8]||0)*60)+(Number(_ee[9])||0);if(_f4!="-"){_f3*=-1;}}if(_f4){_f3-=_ef.getTimezoneOffset();}if(_f3){_ef.setTime(_ef.getTime()+_f3*60000);}}return _ef;};dojo.date.stamp.toISOString=function(_f5,_f6){var _f7=function(n){return (n<10)?"0"+n:n;};_f6=_f6||{};var _f8=[],_f9=_f6.zulu?"getUTC":"get",_fa="";if(_f6.selector!="time"){var _fb=_f5[_f9+"FullYear"]();_fa=["0000".substr((_fb+"").length)+_fb,_f7(_f5[_f9+"Month"]()+1),_f7(_f5[_f9+"Date"]())].join("-");}_f8.push(_fa);if(_f6.selector!="date"){var _fc=[_f7(_f5[_f9+"Hours"]()),_f7(_f5[_f9+"Minutes"]()),_f7(_f5[_f9+"Seconds"]())].join(":");var _fd=_f5[_f9+"Milliseconds"]();if(_f6.milliseconds){_fc+="."+(_fd<100?"0":"")+_f7(_fd);}if(_f6.zulu){_fc+="Z";}else{if(_f6.selector!="time"){var _fe=_f5.getTimezoneOffset();var _ff=Math.abs(_fe);_fc+=(_fe>0?"-":"+")+_f7(Math.floor(_ff/60))+":"+_f7(_ff%60);}}_f8.push(_fc);}return _f8.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _100(_101){if(d.isString(_101)){return "string";}if(typeof _101=="number"){return "number";}if(typeof _101=="boolean"){return "boolean";}if(d.isFunction(_101)){return "function";}if(d.isArray(_101)){return "array";}if(_101 instanceof Date){return "date";}if(_101 instanceof d._Url){return "url";}return "object";};function _102(_103,type){switch(type){case "string":return _103;case "number":return _103.length?Number(_103):NaN;case "boolean":return typeof _103=="boolean"?_103:!(_103.toLowerCase()=="false");case "function":if(d.isFunction(_103)){_103=_103.toString();_103=d.trim(_103.substring(_103.indexOf("{")+1,_103.length-1));}try{if(_103.search(/[^\w\.]+/i)!=-1){return new Function(_103);}else{return d.getObject(_103,false);}}catch(e){return new Function();}case "array":return _103?_103.split(/\s*,\s*/):[];case "date":switch(_103){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_103);}case "url":return d.baseUrl+_103;default:return d.fromJson(_103);}};var _104={};dojo.connect(dojo,"extend",function(){_104={};});function _105(_106){if(!_104[_106]){var cls=d.getObject(_106);if(!d.isFunction(cls)){throw new Error("Could not load class '"+_106+"'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");}var _107=cls.prototype;var _108={},_109={};for(var name in _107){if(name.charAt(0)=="_"){continue;}if(name in _109){continue;}var _10a=_107[name];_108[name]=_100(_10a);}_104[_106]={cls:cls,params:_108};}return _104[_106];};this._functionFromScript=function(_10b){var _10c="";var _10d="";var _10e=_10b.getAttribute("args");if(_10e){d.forEach(_10e.split(/\s*,\s*/),function(part,idx){_10c+="var "+part+" = arguments["+idx+"]; ";});}var _10f=_10b.getAttribute("with");if(_10f&&_10f.length){d.forEach(_10f.split(/\s*,\s*/),function(part){_10c+="with("+part+"){";_10d+="}";});}return new Function(_10c+_10b.innerHTML+_10d);};this.instantiate=function(_110,_111,args){var _112=[],dp=dojo.parser;_111=_111||{};args=args||{};d.forEach(_110,function(node){if(!node){return;}var type=dp._attrName in _111?_111[dp._attrName]:node.getAttribute(dp._attrName);if(!type||!type.length){return;}var _113=_105(type),_114=_113.cls,ps=_114._noScript||_114.prototype._noScript;var _115={},_116=node.attributes;for(var name in _113.params){var item=name in _111?{value:_111[name],specified:true}:_116.getNamedItem(name);if(!item||(!item.specified&&(!dojo.isIE||name.toLowerCase()!="value"))){continue;}var _117=item.value;switch(name){case "class":_117="className" in _111?_111.className:node.className;break;case "style":_117="style" in _111?_111.style:(node.style&&node.style.cssText);}var _118=_113.params[name];if(typeof _117=="string"){_115[name]=_102(_117,_118);}else{_115[name]=_117;}}if(!ps){var _119=[],_11a=[];d.query("> script[type^='dojo/']",node).orphan().forEach(function(_11b){var _11c=_11b.getAttribute("event"),type=_11b.getAttribute("type"),nf=d.parser._functionFromScript(_11b);if(_11c){if(type=="dojo/connect"){_119.push({event:_11c,func:nf});}else{_115[_11c]=nf;}}else{_11a.push(nf);}});}var _11d=_114.markupFactory||_114.prototype&&_114.prototype.markupFactory;var _11e=_11d?_11d(_115,node,_114):new _114(_115,node);_112.push(_11e);var _11f=node.getAttribute("jsId");if(_11f){d.setObject(_11f,_11e);}if(!ps){d.forEach(_119,function(_120){d.connect(_11e,_120.event,null,_120.func);});d.forEach(_11a,function(func){func.call(_11e);});}});if(!_111._started){d.forEach(_112,function(_121){if(!args.noStart&&_121&&_121.startup&&!_121._started&&(!_121.getParent||!_121.getParent())){_121.startup();}});}return _112;};this.parse=function(_122,args){var root;if(!args&&_122&&_122.rootNode){args=_122;root=args.rootNode;}else{root=_122;}var list=d.query(this._query,root);return this.instantiate(list,null,args);};}();(function(){var _123=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_123);}else{dojo._loaders.unshift(_123);}})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_124,_125){if(_124&&dojo.isFunction(_124._onConnect)){_124._onConnect(_125);}});dijit._connectOnUseEventHandler=function(_126){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _127=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_127);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_127);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _128={},_129=function(_12a){var dc=_12a.declaredClass;if(!_128[dc]){var r=[],_12b,_12c=_12a.constructor.prototype;for(var _12d in _12c){if(dojo.isFunction(_12c[_12d])&&(_12b=_12d.match(/^_set([a-zA-Z]*)Attr$/))&&_12b[1]){r.push(_12b[1].charAt(0).toLowerCase()+_12b[1].substr(1));}}_128[dc]=r;}return _128[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_12e,_12f){this.create(_12e,_12f);},create:function(_130,_131){this.srcNodeRef=dojo.byId(_131);this._connects=[];this._subscribes=[];this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_130){this.params=_130;dojo.mixin(this,_130);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _132=this.srcNodeRef;if(_132&&_132.parentNode){_132.parentNode.replaceChild(this.domNode,_132);}for(attr in this.params){this._onConnect(attr);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _133=function(attr,_134){if((_134.params&&attr in _134.params)||_134[attr]){_134.attr(attr,_134[attr]);}};for(var attr in this.attributeMap){_133(attr,this);}dojo.forEach(_129(this),function(a){if(!(a in this.attributeMap)){_133(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){},startup:function(){this._started=true;},destroyRecursive:function(_135){this._beingDestroyed=true;this.destroyDescendants(_135);this.destroy(_135);},destroy:function(_136){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_137){dfe(_137,d.disconnect);});dfe(this._subscribes,function(_138){dun(_138);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_136);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_139){if(this.bgIframe){this.bgIframe.destroy(_139);delete this.bgIframe;}if(this.domNode){if(_139){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_139){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_13a){dojo.forEach(this.getChildren(),function(_13b){if(_13b.destroyRecursive){_13b.destroyRecursive(_13a);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_13c){if(_13c in this._deferredConnects){var _13d=this[this._deferredConnects[_13c]||"domNode"];this.connect(_13d,_13c.toLowerCase(),_13c);delete this._deferredConnects[_13c];}},_setClassAttr:function(_13e){var _13f=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_13f,this["class"]);this["class"]=_13e;dojo.addClass(_13f,_13e);},_setStyleAttr:function(_140){var _141=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_140)){dojo.style(_141,_140);}else{if(_141.style.cssText){_141.style.cssText+="; "+_140;}else{_141.style.cssText=_140;}}this.style=_140;},setAttribute:function(attr,_142){dojo.deprecated(this.declaredClass+"::setAttribute() is deprecated. Use attr() instead.","","2.0");this.attr(attr,_142);},_attrToDom:function(attr,_143){var _144=this.attributeMap[attr];dojo.forEach(dojo.isArray(_144)?_144:[_144],function(_145){var _146=this[_145.node||_145||"domNode"];var type=_145.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_143)){_143=dojo.hitch(this,_143);}var _147=_145.attribute?_145.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_146,_147,_143);break;case "innerText":_146.innerHTML="";_146.appendChild(dojo.doc.createTextNode(_143));break;case "innerHTML":_146.innerHTML=_143;break;case "class":dojo.removeClass(_146,this[attr]);dojo.addClass(_146,_143);break;}},this);this[attr]=_143;},attr:function(name,_148){var args=arguments.length;if(args==1&&!dojo.isString(name)){for(var x in name){this.attr(x,name[x]);}return this;}var _149=this._getAttrNames(name);if(args>=2){if(this[_149.s]){args=dojo._toArray(arguments,1);return this[_149.s].apply(this,args)||this;}else{if(name in this.attributeMap){this._attrToDom(name,_148);}this[name]=_148;}return this;}else{return this[_149.g]?this[_149.g]():this[name];}},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},nodesWithKeyClick:["input","button"],connect:function(obj,_14a,_14b){var d=dojo,dc=d._connect,_14c=[];if(_14a=="ondijitclick"){if(!this.nodesWithKeyClick[obj.tagName.toLowerCase()]){var m=d.hitch(this,_14b);_14c.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;d.stopEvent(e);}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}_14a="onclick";}_14c.push(dc(obj,_14a,this,_14b));this._connects.push(_14c);return _14c;},disconnect:function(_14d){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_14d){dojo.forEach(_14d,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_14e,_14f){var d=dojo,_150=d.subscribe(_14e,this,_14f);this._subscribes.push(_150);return _150;},unsubscribe:function(_151){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_151){dojo.unsubscribe(_151);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_152,_153){if(_152.declaredClass&&_152.addChild){_152.addChild(this,_153);}else{dojo.place(this.domNode,_152,_153);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_154,map,_155,_156){_156=_156||dojo.global;_155=_155?dojo.hitch(_156,_155):function(v){return v;};return _154.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_157,key,_158){var _159=dojo.getObject(key,false,map);if(_158){_159=dojo.getObject(_158,false,_156).call(_156,_159,key);}return _155(_159,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.trim:function(str){str=str.replace(/^\s+/,"");for(var i=str.length-1;i>=0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");(function(){var _15a={};dojo.cache=function(_15b,url,_15c){if(typeof _15b=="string"){var _15d=dojo.moduleUrl(_15b,url);}else{_15d=_15b;_15c=url;}var key=_15d.toString();var val=_15c;if(_15c!==undefined&&!dojo.isString(_15c)){val=("value" in _15c?_15c.value:undefined);}var _15e=_15c&&_15c.sanitize?true:false;if(val||val===null){if(val==null){delete _15a[key];}else{val=_15a[key]=_15e?dojo.cache._sanitize(val):val;}}else{if(!(key in _15a)){val=dojo._getText(key);_15a[key]=_15e?dojo.cache._sanitize(val):val;}val=_15a[key];}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _15f=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_15f){val=_15f[1];}}else{val="";}return val;};})();}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];},_stringRepl:function(tmpl){var _160=this.declaredClass,_161=this;return dojo.string.substitute(tmpl,this,function(_162,key){if(key.charAt(0)=="!"){_162=dojo.getObject(key.substr(1),false,_161);}if(typeof _162=="undefined"){throw new Error(_160+" template:"+key);}if(_162==null){return "";}return key.charAt(0)=="!"?_162:_162.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _163=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_163)){node=dojo._toDom(this._stringRepl(_163));if(node.nodeType!=1){throw new Error("Invalid template: "+_163);}}else{node=_163.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _164=dojo.parser,qry,attr;if(_164._query!="[dojoType]"){qry=_164._query;attr=_164._attrName;_164._query="[dojoType]";_164._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup}));if(qry){_164._query=qry;_164._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_165){var dest=this.containerNode;if(_165&&dest){while(_165.hasChildNodes()){dest.appendChild(_165.firstChild);}}},_attachTemplateNodes:function(_166,_167){_167=_167||function(n,p){return n.getAttribute(p);};var _168=dojo.isArray(_166)?_166:(_166.all||_166.getElementsByTagName("*"));var x=dojo.isArray(_166)?0:-1;for(;x<_168.length;x++){var _169=(x==-1)?_166:_168[x];if(this.widgetsInTemplate&&_167(_169,"dojoType")){continue;}var _16a=_167(_169,"dojoAttachPoint");if(_16a){var _16b,_16c=_16a.split(/\s*,\s*/);while((_16b=_16c.shift())){if(dojo.isArray(this[_16b])){this[_16b].push(_169);}else{this[_16b]=_169;}this._attachPoints.push(_16b);}}var _16d=_167(_169,"dojoAttachEvent");if(_16d){var _16e,_16f=_16d.split(/\s*,\s*/);var trim=dojo.trim;while((_16e=_16f.shift())){if(_16e){var _170=null;if(_16e.indexOf(":")!=-1){var _171=_16e.split(":");_16e=trim(_171[0]);_170=trim(_171[1]);}else{_16e=trim(_16e);}if(!_170){_170=_16e;}this.connect(_169,_16e,_170);}}}var role=_167(_169,"waiRole");if(role){dijit.setWaiRole(_169,role);}var _172=_167(_169,"waiState");if(_172){dojo.forEach(_172.split(/\s*,\s*/),function(_173){if(_173.indexOf("-")!=-1){var pair=_173.split("-");dijit.setWaiState(_169,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_174){delete this[_174];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_175,_176,_177){var _178=dijit._Templated._templateCache;var key=_176||_175;var _179=_178[key];if(_179){try{if(!_179.ownerDocument||_179.ownerDocument==dojo.doc){return _179;}}catch(e){}dojo.destroy(_179);}if(!_176){_176=dojo.cache(_175,{sanitize:true});}_176=dojo.string.trim(_176);if(_177||_176.match(/\$\{([^\}]+)\}/g)){return (_178[key]=_176);}else{var node=dojo._toDom(_176);if(node.nodeType!=1){throw new Error("Invalid template: "+_176);}return (_178[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _17a=dijit._Templated._templateCache;for(var key in _17a){var _17b=_17a[key];if(typeof _17b=="object"){dojo.destroy(_17b);}delete _17a[key];}});}dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Container",null,{isContainer:true,buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},addChild:function(_17c,_17d){var _17e=this.containerNode;if(_17d&&typeof _17d=="number"){var _17f=this.getChildren();if(_17f&&_17f.length>=_17d){_17e=_17f[_17d-1].domNode;_17d="after";}}dojo.place(_17c.domNode,_17e,_17d);if(this._started&&!_17c._started){_17c.startup();}},removeChild:function(_180){if(typeof _180=="number"&&_180>0){_180=this.getChildren()[_180];}if(_180&&_180.domNode){var node=_180.domNode;node.parentNode.removeChild(node);}},getChildren:function(){return dojo.query("> [widgetId]",this.containerNode).map(dijit.byNode);},hasChildren:function(){return dojo.query("> [widgetId]",this.containerNode).length>0;},destroyDescendants:function(_181){dojo.forEach(this.getChildren(),function(_182){_182.destroyRecursive(_181);});},_getSiblingOfChild:function(_183,dir){var node=_183.domNode,_184=(dir>0?"nextSibling":"previousSibling");do{node=node[_184];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_185){return dojo.indexOf(this.getChildren(),_185);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_186){_186.startup();});this.inherited(arguments);}});}if(!dojo._hasResource["dijit._Contained"]){dojo._hasResource["dijit._Contained"]=true;dojo.provide("dijit._Contained");dojo.declare("dijit._Contained",null,{getParent:function(){var _187=dijit.getEnclosingWidget(this.domNode.parentNode);return _187&&_187.isContainer?_187:null;},_getSibling:function(_188){var node=this.domNode;do{node=node[_188+"Sibling"];}while(node&&node.nodeType!=1);return node&&dijit.byNode(node);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");},getIndexInParent:function(){var p=this.getParent();if(!p||!p.getIndexOfChild){return -1;}return p.getIndexOfChild(this);}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");dojo.addClass(this.domNode,this.baseClass);this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _189=this.getParent&&this.getParent();if(!(_189&&_189.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_18a,_18b){var node=this.domNode;if(_18a){dojo.marginBox(node,_18a);if(_18a.t){node.style.top=_18a.t+"px";}if(_18a.l){node.style.left=_18a.l+"px";}}var mb=_18b||{};dojo.mixin(mb,_18a||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(node),mb);}var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var be=dojo._getBorderExtents(node,cs);var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});var pe=dojo._getPadExtents(node,cs);this._contentBox={l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};this.layout();},layout:function(){},_setupChild:function(_18c){dojo.addClass(_18c.domNode,this.baseClass+"-child");if(_18c.baseClass){dojo.addClass(_18c.domNode,this.baseClass+"-"+_18c.baseClass);}},addChild:function(_18d,_18e){this.inherited(arguments);if(this._started){this._setupChild(_18d);}},removeChild:function(_18f){dojo.removeClass(_18f.domNode,this.baseClass+"-child");if(_18f.baseClass){dojo.removeClass(_18f.domNode,this.baseClass+"-"+_18f.baseClass);}this.inherited(arguments);}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _190=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_191,dim){_191.resize?_191.resize(dim):dojo.marginBox(_191.domNode,dim);dojo.mixin(_191,dojo.marginBox(_191.domNode));dojo.mixin(_191,dim);};dijit.layout.layoutChildren=function(_192,dim,_193){dim=dojo.mixin({},dim);dojo.addClass(_192,"dijitLayoutContainer");_193=dojo.filter(_193,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_193,function(item){return item.layoutAlign=="client";}));dojo.forEach(_193,function(_194){var elm=_194.domNode,pos=_194.layoutAlign;var _195=elm.style;_195.left=dim.l+"px";_195.top=dim.t+"px";_195.bottom=_195.right="auto";dojo.addClass(elm,"dijitAlign"+_190(pos));if(pos=="top"||pos=="bottom"){size(_194,{w:dim.w});dim.h-=_194.h;if(pos=="top"){dim.t+=_194.h;}else{_195.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_194,{h:dim.h});dim.w-=_194.w;if(pos=="left"){dim.l+=_194.w;}else{_195.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_194,dim);}}}});};})();}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated],{baseClass:"",name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},_setDisabledAttr:function(_196){this.disabled=_196;dojo.attr(this.focusNode,"disabled",_196);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_196);}dijit.setWaiState(this.focusNode,"disabled",_196);if(_196){this._hovering=false;this._active=false;this.focusNode.setAttribute("tabIndex","-1");}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}this._setStateClass();},setDisabled:function(_197){dojo.deprecated("setDisabled("+_197+") is deprecated. Use attr('disabled',"+_197+") instead.","","2.0");this.attr("disabled",_197);},_onFocus:function(e){if(this.scrollOnFocus){dijit.scrollIntoView(this.domNode);}this.inherited(arguments);},_onMouse:function(_198){var _199=_198.currentTarget;if(_199&&_199.getAttribute){this.stateModifier=_199.getAttribute("stateModifier")||"";}if(!this.disabled){switch(_198.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseout":case "mouseleave":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _19a=this.connect(dojo.body(),"onmouseup",function(){if(this._mouseDown&&this.isFocusable()){this.focus();}this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_19a);});break;}this._setStateClass();}},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},_setStateClass:function(){var _19b=this.baseClass.split(" ");function _19c(_19d){_19b=_19b.concat(dojo.map(_19b,function(c){return c+_19d;}),"dijit"+_19d);};if(this.checked){_19c("Checked");}if(this.state){_19c(this.state);}if(this.selected){_19c("Selected");}if(this.disabled){_19c("Disabled");}else{if(this.readOnly){_19c("ReadOnly");}else{if(this._active){_19c(this.stateModifier+"Active");}else{if(this._focused){_19c("Focused");}if(this._hovering){_19c(this.stateModifier+"Hover");}}}}var tn=this.stateNode||this.domNode,_19e={};dojo.forEach(tn.className.split(" "),function(c){_19e[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _19e[c];});}dojo.forEach(_19b,function(c){_19e[c]=true;});var _19f=[];for(var c in _19e){_19f.push(c);}tn.className=_19f.join(" ");this._stateClasses=_19b;},compare:function(val1,val2){if(typeof val1=="number"&&typeof val2=="number"){return (isNaN(val1)&&isNaN(val2))?0:val1-val2;}else{if(val1>val2){return 1;}else{if(val1<val2){return -1;}else{return 0;}}}},onChange:function(_1a0){},_onChangeActive:false,_handleOnChange:function(_1a1,_1a2){this._lastValue=_1a1;if(this._lastValueReported==undefined&&(_1a2===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1a1;}if((this.intermediateChanges||_1a2||_1a2===undefined)&&((typeof _1a1!=typeof this._lastValueReported)||this.compare(_1a1,this._lastValueReported)!=0)){this._lastValueReported=_1a1;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1a1);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;this._setStateClass();},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1a3){dojo.deprecated("dijit.form._FormWidget:setValue("+_1a3+") is deprecated. Use attr('value',"+_1a3+") instead.","","2.0");this.attr("value",_1a3);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use attr('value') instead.","","2.0");return this.attr("value");}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1a4){this.readOnly=_1a4;dojo.attr(this.focusNode,"readOnly",_1a4);dijit.setWaiState(this.focusNode,"readonly",_1a4);this._setStateClass();},postCreate:function(){if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1a5,_1a6){this.value=_1a5;this._handleOnChange(_1a5,_1a6);},_getValueAttr:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},_onKeyDown:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){var te;if(dojo.isIE){e.preventDefault();te=document.createEventObject();te.keyCode=dojo.keys.ESCAPE;te.shiftKey=e.shiftKey;e.srcElement.fireEvent("onkeypress",te);}}},_layoutHackIE7:function(){if(dojo.isIE==7){var _1a7=this.domNode;var _1a8=_1a7.parentNode;var _1a9=_1a7.firstChild||_1a7;var _1aa=_1a9.style.filter;while(_1a8&&_1a8.clientHeight==0){_1a8._disconnectHandle=this.connect(_1a8,"onscroll",dojo.hitch(this,function(e){this.disconnect(_1a8._disconnectHandle);_1a8.removeAttribute("_disconnectHandle");_1a9.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1a9.style.filter=_1aa;},0);}));_1a8=_1a8.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}if(!dojo._hasResource["dijit._KeyNavContainer"]){dojo._hasResource["dijit._KeyNavContainer"]=true;dojo.provide("dijit._KeyNavContainer");dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1ab,_1ac){var _1ad=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_1ab,function(code){_1ad[code]=prev;});dojo.forEach(_1ac,function(code){_1ad[code]=next;});this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_1ae,_1af){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_1ae);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _1b0=this._getFirstFocusableChild();if(_1b0){this.focusChild(_1b0);}},focusNext:function(){var _1b1=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_1b1);},focusPrev:function(){var _1b2=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_1b2,true);},focusChild:function(_1b3,last){if(this.focusedChild&&_1b3!==this.focusedChild){this._onChildBlur(this.focusedChild);}_1b3.focus(last?"end":"start");this.focusedChild=_1b3;},_startupChild:function(_1b4){_1b4.attr("tabIndex","-1");this.connect(_1b4,"_onFocus",function(){_1b4.attr("tabIndex",this.tabIndex);});this.connect(_1b4,"_onBlur",function(){_1b4.attr("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode){return;}this.focusFirstChild();dojo.attr(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){dojo.attr(this.domNode,"tabIndex",this.tabIndex);}this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.charOrCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_1b5){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_1b6,dir){if(_1b6){_1b6=this._getSiblingOfChild(_1b6,dir);}var _1b7=this.getChildren();for(var i=0;i<_1b7.length;i++){if(!_1b6){_1b6=_1b7[(dir>0)?0:(_1b7.length-1)];}if(_1b6.isFocusable()){return _1b6;}_1b6=this._getSiblingOfChild(_1b6,dir);}return null;}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\">\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_1b8){if(_1b8&&!("label" in this.params)){this.attr("label",_1b8.innerHTML);}},postCreate:function(){dojo.setSelectable(this.domNode,false);var _1b9=this.id+"_text";dojo.attr(this.containerNode,"id",_1b9);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_1b9+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_1b9);},_onHover:function(){dojo.addClass(this.domNode,"dijitMenuItemHover");this.getParent().onItemHover(this);},_onUnhover:function(){dojo.removeClass(this.domNode,"dijitMenuItemHover");this.getParent().onItemUnhover(this);},_onClick:function(evt){this.getParent().onItemClick(this,evt);dojo.stopEvent(evt);},onClick:function(evt){},focus:function(){try{if(dojo.isIE==8){this.containerNode.focus();}dijit.focus(this.focusNode);}catch(e){}},_onFocus:function(){this._setSelected(true);this.getParent()._onItemFocus(this);this.inherited(arguments);},_setSelected:function(_1ba){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_1ba);},setLabel:function(_1bb){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated. Use attr('label', ...) instead.","","2.0");this.attr("label",_1bb);},setDisabled:function(_1bc){dojo.deprecated("dijit.Menu.setDisabled() is deprecated. Use attr('disabled', bool) instead.","","2.0");this.attr("disabled",_1bc);},_setDisabledAttr:function(_1bd){this.disabled=_1bd;dojo[_1bd?"addClass":"removeClass"](this.domNode,"dijitMenuItemDisabled");dijit.setWaiState(this.focusNode,"disabled",_1bd?"true":"false");},_setAccelKeyAttr:function(_1be){this.accelKey=_1be;this.accelKeyNode.style.display=_1be?"":"none";this.accelKeyNode.innerHTML=_1be;dojo.attr(this.containerNode,"colSpan",_1be?"1":"2");}});}if(!dojo._hasResource["dijit.PopupMenuItem"]){dojo._hasResource["dijit.PopupMenuItem"]=true;dojo.provide("dijit.PopupMenuItem");dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _1bf=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_1bf[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}this.inherited(arguments);if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.domNode.style.display="none";if(this.arrowWrapper){dojo.style(this.arrowWrapper,"visibility","");}dijit.setWaiState(this.focusNode,"haspopup","true");},destroyDescendants:function(){if(this.popup){if(!this.popup._destroyed){this.popup.destroyRecursive();}delete this.popup;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.CheckedMenuItem"]){dojo._hasResource["dijit.CheckedMenuItem"]=true;dojo.provide("dijit.CheckedMenuItem");dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_1c0){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_1c0);dijit.setWaiState(this.domNode,"checked",_1c0);this.checked=_1c0;},onChange:function(_1c1){},_onClick:function(e){if(!this.disabled){this.attr("checked",!this.checked);this.onChange(this.checked);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.MenuSeparator"]){dojo._hasResource["dijit.MenuSeparator"]=true;dojo.provide("dijit.MenuSeparator");dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td colspan=\"4\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_1c2){_1c2.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_1c3){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _1c4=this._getTopMenu();if(_1c4&&_1c4._isMenuBar){_1c4.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _1c5=this.currentPopup.parentMenu;if(_1c5.focusedChild){_1c5.focusedChild._setSelected(false);}_1c5.focusedChild=this.currentPopup.from_item;_1c5.focusedChild._setSelected(true);this._stopPendingCloseTimer(this.currentPopup);}},onItemHover:function(item){if(this.isActive){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}}if(this.focusedChild){this.focusChild(item);}this._hoveredChild=item;},_onChildBlur:function(item){this._stopPopupTimer();item._setSelected(false);var _1c6=item.popup;if(_1c6){this._stopPendingCloseTimer(_1c6);_1c6._pendingClose_timer=setTimeout(function(){_1c6._pendingClose_timer=null;if(_1c6.parentMenu){_1c6.parentMenu.currentPopup=null;}dijit.popup.close(_1c6);},this.popupDelay);}},onItemUnhover:function(item){if(this.isActive){this._stopPopupTimer();}if(this._hoveredChild==item){this._hoveredChild=null;}},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_stopPendingCloseTimer:function(_1c7){if(_1c7._pendingClose_timer){clearTimeout(_1c7._pendingClose_timer);_1c7._pendingClose_timer=null;}},_stopFocusTimer:function(){if(this._focus_timer){clearTimeout(this._focus_timer);this._focus_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item,evt){if(item.disabled){return false;}if(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _1c8=this.focusedChild;if(!_1c8){return;}var _1c9=_1c8.popup;if(_1c9.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_1c9.parentMenu=this;_1c9.from_item=_1c8;var self=this;dijit.popup.open({parent:this,popup:_1c9,around:_1c8.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){self.focusChild(_1c8);self._cleanUp();_1c8._setSelected(true);self.focusedChild=_1c8;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_1c9;_1c9.connect(_1c9.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_1c9.focus){_1c9._focus_timer=setTimeout(dojo.hitch(_1c9,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.addClass(this.domNode,"dijitMenuActive");dojo.removeClass(this.domNode,"dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.removeClass(this.domNode,"dijitMenuActive");dojo.addClass(this.domNode,"dijitMenuPassive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=null;}if(this.currentPopup){dijit.popup.close(this.currentPopup);this.currentPopup=null;}},_onItemFocus:function(item){if(this._hoveredChild&&this._hoveredChild!=item){this._hoveredChild._onUnhover();}},_onBlur:function(){this._cleanUp();this.inherited(arguments);},_cleanUp:function(){this._closeChild();if(typeof this.isShowingNow=="undefined"){this._markInactive();}}});dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){this._bindings=[];},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,_contextMenuWithMouse:false,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}var k=dojo.keys,l=this.isLeftToRight();this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case this._openSubMenuKey:this._moveToPopup(evt);dojo.stopEvent(evt);break;case this._closeSubMenuKey:if(this.parentMenu){if(this.parentMenu._isMenuBar){this.parentMenu.focusPrev();}else{this.onCancel(false);}}else{dojo.stopEvent(evt);}break;}},_iframeContentWindow:function(_1ca){var win=dijit.getDocumentWindow(this._iframeContentDocument(_1ca))||this._iframeContentDocument(_1ca)["__parent__"]||(_1ca.name&&dojo.doc.frames[_1ca.name])||null;return win;},_iframeContentDocument:function(_1cb){var doc=_1cb.contentDocument||(_1cb.contentWindow&&_1cb.contentWindow.document)||(_1cb.name&&dojo.doc.frames[_1cb.name]&&dojo.doc.frames[_1cb.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _1cc=node,win=this._iframeContentWindow(_1cc);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _1cd={node:node,iframe:_1cc};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_1cd));var _1ce=dojo.hitch(this,function(cn){return [dojo.connect(cn,(this.leftClickToOpen)?"onclick":"oncontextmenu",this,function(evt){this._openMyself(evt,cn,_1cc);}),dojo.connect(cn,"onkeydown",this,"_contextKey"),dojo.connect(cn,"onmousedown",this,"_contextMouse")];});_1cd.connects=cn?_1ce(cn):[];if(_1cc){_1cd.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_1cc);cn=dojo.withGlobal(win,dojo.body);_1cd.connects=_1ce(cn);});if(_1cc.addEventListener){_1cc.addEventListener("load",_1cd.onloadHandler,false);}else{_1cc.attachEvent("onload",_1cd.onloadHandler);}}},unBindDomNode:function(_1cf){var node;try{node=dojo.byId(_1cf);}catch(e){return;}var _1d0="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_1d0)){var bid=dojo.attr(node,_1d0)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _1d1=b.iframe;if(_1d1){if(_1d1.removeEventListener){_1d1.removeEventListener("load",b.onloadHandler,false);}else{_1d1.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_1d0);delete this._bindings[bid];}},_contextKey:function(e){this._contextMenuWithMouse=false;if(e.keyCode==dojo.keys.F10){dojo.stopEvent(e);if(e.shiftKey&&e.type=="keydown"){var _1d2={target:e.target,pageX:e.pageX,pageY:e.pageY};_1d2.preventDefault=_1d2.stopPropagation=function(){};window.setTimeout(dojo.hitch(this,function(){this._openMyself(_1d2);}),1);}}},_contextMouse:function(e){this._contextMenuWithMouse=true;},_openMyself:function(e,node,_1d3){if(this.leftClickToOpen&&e.button>0){return;}dojo.stopEvent(e);var x,y;if(dojo.isSafari||this._contextMenuWithMouse){x=e.pageX;y=e.pageY;if(_1d3){var od=e.target.ownerDocument,ifc=dojo.position(_1d3,true),win=this._iframeContentWindow(_1d3),_1d4=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_1d3),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_1d3,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_1d3,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_1d3,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_1d3,cs.borderTopWidth):0);x+=ifc.x+left-_1d4.x;y+=ifc.y+top-_1d4.y;}}else{var _1d5=dojo.position(e.target,true);x=_1d5.x+10;y=_1d5.y+10;}var self=this;var _1d6=dijit.getFocus(this);function _1d7(){if(self.refocus){dijit.focus(_1d6);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:x,y:y,onExecute:_1d7,onCancel:_1d7,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){this.inherited("_onBlur",arguments);dijit.popup.close(this);};},uninitialize:function(){dojo.forEach(this._bindings,function(b){if(b){this.unBindDomNode(b.node);}},this);this.inherited(arguments);}});}if(!dojo._hasResource["dojox.html.metrics"]){dojo._hasResource["dojox.html.metrics"]=true;dojo.provide("dojox.html.metrics");(function(){var dhm=dojox.html.metrics;dhm.getFontMeasurements=function(){var _1d8={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};if(dojo.isIE){dojo.doc.documentElement.style.fontSize="100%";}var div=dojo.doc.createElement("div");var ds=div.style;ds.position="absolute";ds.left="-100px";ds.top="0";ds.width="30px";ds.height="1000em";ds.border="0";ds.margin="0";ds.padding="0";ds.outline="0";ds.lineHeight="1";ds.overflow="hidden";dojo.body().appendChild(div);for(var p in _1d8){ds.fontSize=p;_1d8[p]=Math.round(div.offsetHeight*12/16)*16/12/1000;}dojo.body().removeChild(div);div=null;return _1d8;};var _1d9=null;dhm.getCachedFontMeasurements=function(_1da){if(_1da||!_1d9){_1d9=dhm.getFontMeasurements();}return _1d9;};var _1db=null,_1dc={};dhm.getTextBox=function(text,_1dd,_1de){var m;if(!_1db){m=_1db=dojo.doc.createElement("div");m.style.position="absolute";m.style.left="0px";m.style.top="-10000px";dojo.body().appendChild(m);}else{m=_1db;}m.className="";m.style.border="0";m.style.margin="0";m.style.padding="0";m.style.outline="0";if(arguments.length>1&&_1dd){for(var i in _1dd){if(i in _1dc){continue;}m.style[i]=_1dd[i];}}if(arguments.length>2&&_1de){m.className=_1de;}m.innerHTML=text;return dojo.marginBox(m);};var _1df={w:16,h:16};dhm.getScrollbar=function(){return {w:_1df.w,h:_1df.h};};dhm._fontResizeNode=null;dhm.initOnFontResize=function(_1e0){var f=dhm._fontResizeNode=dojo.doc.createElement("iframe");var fs=f.style;fs.position="absolute";fs.width="5em";fs.height="10em";fs.top="-10000px";if(dojo.isIE){f.onreadystatechange=function(){if(f.contentWindow.document.readyState=="complete"){f.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;}};}else{f.onload=function(){f.contentWindow.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;};}f.setAttribute("src","javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");dojo.body().appendChild(f);dhm.initOnFontResize=function(){};};dhm.onFontResize=function(){};dhm._fontresize=function(){dhm.onFontResize();};dojo.addOnUnload(function(){var f=dhm._fontResizeNode;if(f){if(dojo.isIE&&f.onresize){f.onresize=null;}else{if(f.contentWindow&&f.contentWindow.onresize){f.contentWindow.onresize=null;}}dhm._fontResizeNode=null;}});dojo.addOnLoad(function(){try{var n=dojo.doc.createElement("div");n.style.cssText="top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";dojo.body().appendChild(n);_1df.w=n.offsetWidth-n.clientWidth;_1df.h=n.offsetHeight-n.clientHeight;dojo.body().removeChild(n);delete n;}catch(e){}if("fontSizeWatch" in dojo.config&&!!dojo.config.fontSizeWatch){dhm.initOnFontResize();}});})();}if(!dojo._hasResource["dojox.grid.util"]){dojo._hasResource["dojox.grid.util"]=true;dojo.provide("dojox.grid.util");(function(){var dgu=dojox.grid.util;dgu.na="...";dgu.rowIndexTag="gridRowIndex";dgu.gridViewTag="gridView";dgu.fire=function(ob,ev,args){var fn=ob&&ev&&ob[ev];return fn&&(args?fn.apply(ob,args):ob[ev]());};dgu.setStyleHeightPx=function(_1e1,_1e2){if(_1e2>=0){var s=_1e1.style;var v=_1e2+"px";if(_1e1&&s["height"]!=v){s["height"]=v;}}};dgu.mouseEvents=["mouseover","mouseout","mousedown","mouseup","click","dblclick","contextmenu"];dgu.keyEvents=["keyup","keydown","keypress"];dgu.funnelEvents=function(_1e3,_1e4,_1e5,_1e6){var evts=(_1e6?_1e6:dgu.mouseEvents.concat(dgu.keyEvents));for(var i=0,l=evts.length;i<l;i++){_1e4.connect(_1e3,"on"+evts[i],_1e5);}};dgu.removeNode=function(_1e7){_1e7=dojo.byId(_1e7);_1e7&&_1e7.parentNode&&_1e7.parentNode.removeChild(_1e7);return _1e7;};dgu.arrayCompare=function(inA,inB){for(var i=0,l=inA.length;i<l;i++){if(inA[i]!=inB[i]){return false;}}return (inA.length==inB.length);};dgu.arrayInsert=function(_1e8,_1e9,_1ea){if(_1e8.length<=_1e9){_1e8[_1e9]=_1ea;}else{_1e8.splice(_1e9,0,_1ea);}};dgu.arrayRemove=function(_1eb,_1ec){_1eb.splice(_1ec,1);};dgu.arraySwap=function(_1ed,inI,inJ){var _1ee=_1ed[inI];_1ed[inI]=_1ed[inJ];_1ed[inJ]=_1ee;};})();}if(!dojo._hasResource["dojox.grid._Scroller"]){dojo._hasResource["dojox.grid._Scroller"]=true;dojo.provide("dojox.grid._Scroller");(function(){var _1ef=function(_1f0){var i=0,n,p=_1f0.parentNode;while((n=p.childNodes[i++])){if(n==_1f0){return i-1;}}return -1;};var _1f1=function(_1f2){if(!_1f2){return;}var _1f3=function(inW){return inW.domNode&&dojo.isDescendant(inW.domNode,_1f2,true);};var ws=dijit.registry.filter(_1f3);for(var i=0,w;(w=ws[i]);i++){w.destroy();}delete ws;};var _1f4=function(_1f5){var node=dojo.byId(_1f5);return (node&&node.tagName?node.tagName.toLowerCase():"");};var _1f6=function(_1f7,_1f8){var _1f9=[];var i=0,n;while((n=_1f7.childNodes[i])){i++;if(_1f4(n)==_1f8){_1f9.push(n);}}return _1f9;};var _1fa=function(_1fb){return _1f6(_1fb,"div");};dojo.declare("dojox.grid._Scroller",null,{constructor:function(_1fc){this.setContentNodes(_1fc);this.pageHeights=[];this.pageNodes=[];this.stack=[];},rowCount:0,defaultRowHeight:32,keepRows:100,contentNode:null,scrollboxNode:null,defaultPageHeight:0,keepPages:10,pageCount:0,windowHeight:0,firstVisibleRow:0,lastVisibleRow:0,averageRowHeight:0,page:0,pageTop:0,init:function(_1fd,_1fe,_1ff){switch(arguments.length){case 3:this.rowsPerPage=_1ff;case 2:this.keepRows=_1fe;case 1:this.rowCount=_1fd;default:break;}this.defaultPageHeight=this.defaultRowHeight*this.rowsPerPage;this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);this.setKeepInfo(this.keepRows);this.invalidate();if(this.scrollboxNode){this.scrollboxNode.scrollTop=0;this.scroll(0);this.scrollboxNode.onscroll=dojo.hitch(this,"onscroll");}},_getPageCount:function(_200,_201){return _200?(Math.ceil(_200/_201)||1):0;},destroy:function(){this.invalidateNodes();delete this.contentNodes;delete this.contentNode;delete this.scrollboxNode;},setKeepInfo:function(_202){this.keepRows=_202;this.keepPages=!this.keepRows?this.keepPages:Math.max(Math.ceil(this.keepRows/this.rowsPerPage),2);},setContentNodes:function(_203){this.contentNodes=_203;this.colCount=(this.contentNodes?this.contentNodes.length:0);this.pageNodes=[];for(var i=0;i<this.colCount;i++){this.pageNodes[i]=[];}},getDefaultNodes:function(){return this.pageNodes[0]||[];},invalidate:function(){this._invalidating=true;this.invalidateNodes();this.pageHeights=[];this.height=(this.pageCount?(this.pageCount-1)*this.defaultPageHeight+this.calcLastPageHeight():0);this.resize();this._invalidating=false;},updateRowCount:function(_204){this.invalidateNodes();this.rowCount=_204;var _205=this.pageCount;if(_205===0){this.height=1;}this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);if(this.pageCount<_205){for(var i=_205-1;i>=this.pageCount;i--){this.height-=this.getPageHeight(i);delete this.pageHeights[i];}}else{if(this.pageCount>_205){this.height+=this.defaultPageHeight*(this.pageCount-_205-1)+this.calcLastPageHeight();}}this.resize();},pageExists:function(_206){return Boolean(this.getDefaultPageNode(_206));},measurePage:function(_207){if(this.grid.rowHeight){var _208=this.grid.rowHeight+1;return ((_207+1)*this.rowsPerPage>this.rowCount?this.rowCount-_207*this.rowsPerPage:this.rowsPerPage)*_208;}var n=this.getDefaultPageNode(_207);return (n&&n.innerHTML)?n.offsetHeight:undefined;},positionPage:function(_209,_20a){for(var i=0;i<this.colCount;i++){this.pageNodes[i][_209].style.top=_20a+"px";}},repositionPages:function(_20b){var _20c=this.getDefaultNodes();var last=0;for(var i=0;i<this.stack.length;i++){last=Math.max(this.stack[i],last);}var n=_20c[_20b];var y=(n?this.getPageNodePosition(n)+this.getPageHeight(_20b):0);for(var p=_20b+1;p<=last;p++){n=_20c[p];if(n){if(this.getPageNodePosition(n)==y){return;}this.positionPage(p,y);}y+=this.getPageHeight(p);}},installPage:function(_20d){for(var i=0;i<this.colCount;i++){this.contentNodes[i].appendChild(this.pageNodes[i][_20d]);}},preparePage:function(_20e,_20f){var p=(_20f?this.popPage():null);for(var i=0;i<this.colCount;i++){var _210=this.pageNodes[i];var _211=(p===null?this.createPageNode():this.invalidatePageNode(p,_210));_211.pageIndex=_20e;_210[_20e]=_211;}},renderPage:function(_212){var _213=[];var i,j;for(i=0;i<this.colCount;i++){_213[i]=this.pageNodes[i][_212];}for(i=0,j=_212*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){this.renderRow(j,_213);}},removePage:function(_214){for(var i=0,j=_214*this.rowsPerPage;i<this.rowsPerPage;i++,j++){this.removeRow(j);}},destroyPage:function(_215){for(var i=0;i<this.colCount;i++){var n=this.invalidatePageNode(_215,this.pageNodes[i]);if(n){dojo.destroy(n);}}},pacify:function(_216){},pacifying:false,pacifyTicks:200,setPacifying:function(_217){if(this.pacifying!=_217){this.pacifying=_217;this.pacify(this.pacifying);}},startPacify:function(){this.startPacifyTicks=new Date().getTime();},doPacify:function(){var _218=(new Date().getTime()-this.startPacifyTicks)>this.pacifyTicks;this.setPacifying(true);this.startPacify();return _218;},endPacify:function(){this.setPacifying(false);},resize:function(){if(this.scrollboxNode){this.windowHeight=this.scrollboxNode.clientHeight;}for(var i=0;i<this.colCount;i++){dojox.grid.util.setStyleHeightPx(this.contentNodes[i],Math.max(1,this.height));}var _219=(!this._invalidating);if(!_219){var ah=this.grid.attr("autoHeight");if(typeof ah=="number"&&ah<=Math.min(this.rowsPerPage,this.rowCount)){_219=true;}}if(_219){this.needPage(this.page,this.pageTop);}var _21a=(this.page<this.pageCount-1)?this.rowsPerPage:((this.rowCount%this.rowsPerPage)||this.rowsPerPage);var _21b=this.getPageHeight(this.page);this.averageRowHeight=(_21b>0&&_21a>0)?(_21b/_21a):0;},calcLastPageHeight:function(){if(!this.pageCount){return 0;}var _21c=this.pageCount-1;var _21d=((this.rowCount%this.rowsPerPage)||(this.rowsPerPage))*this.defaultRowHeight;this.pageHeights[_21c]=_21d;return _21d;},updateContentHeight:function(inDh){this.height+=inDh;this.resize();},updatePageHeight:function(_21e,_21f){if(this.pageExists(_21e)){var oh=this.getPageHeight(_21e);var h=(this.measurePage(_21e));if(h===undefined){h=oh;}this.pageHeights[_21e]=h;if(oh!=h){this.updateContentHeight(h-oh);var ah=this.grid.attr("autoHeight");if((typeof ah=="number"&&ah>this.rowCount)||(ah===true&&!_21f)){this.grid.sizeChange();}else{this.repositionPages(_21e);}}return h;}return 0;},rowHeightChanged:function(_220){this.updatePageHeight(Math.floor(_220/this.rowsPerPage),false);},invalidateNodes:function(){while(this.stack.length){this.destroyPage(this.popPage());}},createPageNode:function(){var p=document.createElement("div");dojo.attr(p,"role","presentation");p.style.position="absolute";p.style[dojo._isBodyLtr()?"left":"right"]="0";return p;},getPageHeight:function(_221){var ph=this.pageHeights[_221];return (ph!==undefined?ph:this.defaultPageHeight);},pushPage:function(_222){return this.stack.push(_222);},popPage:function(){return this.stack.shift();},findPage:function(_223){var i=0,h=0;for(var ph=0;i<this.pageCount;i++,h+=ph){ph=this.getPageHeight(i);if(h+ph>=_223){break;}}this.page=i;this.pageTop=h;},buildPage:function(_224,_225,_226){this.preparePage(_224,_225);this.positionPage(_224,_226);this.installPage(_224);this.renderPage(_224);this.pushPage(_224);},needPage:function(_227,_228){var h=this.getPageHeight(_227),oh=h;if(!this.pageExists(_227)){this.buildPage(_227,this.keepPages&&(this.stack.length>=this.keepPages),_228);h=this.updatePageHeight(_227,true);}else{this.positionPage(_227,_228);}return h;},onscroll:function(){this.scroll(this.scrollboxNode.scrollTop);},scroll:function(_229){this.grid.scrollTop=_229;if(this.colCount){this.startPacify();this.findPage(_229);var h=this.height;var b=this.getScrollBottom(_229);for(var p=this.page,y=this.pageTop;(p<this.pageCount)&&((b<0)||(y<b));p++){y+=this.needPage(p,y);}this.firstVisibleRow=this.getFirstVisibleRow(this.page,this.pageTop,_229);this.lastVisibleRow=this.getLastVisibleRow(p-1,y,b);if(h!=this.height){this.repositionPages(p-1);}this.endPacify();}},getScrollBottom:function(_22a){return (this.windowHeight>=0?_22a+this.windowHeight:-1);},processNodeEvent:function(e,_22b){var t=e.target;while(t&&(t!=_22b)&&t.parentNode&&(t.parentNode.parentNode!=_22b)){t=t.parentNode;}if(!t||!t.parentNode||(t.parentNode.parentNode!=_22b)){return false;}var page=t.parentNode;e.topRowIndex=page.pageIndex*this.rowsPerPage;e.rowIndex=e.topRowIndex+_1ef(t);e.rowTarget=t;return true;},processEvent:function(e){return this.processNodeEvent(e,this.contentNode);},renderRow:function(_22c,_22d){},removeRow:function(_22e){},getDefaultPageNode:function(_22f){return this.getDefaultNodes()[_22f];},positionPageNode:function(_230,_231){},getPageNodePosition:function(_232){return _232.offsetTop;},invalidatePageNode:function(_233,_234){var p=_234[_233];if(p){delete _234[_233];this.removePage(_233,p);_1f1(p);p.innerHTML="";}return p;},getPageRow:function(_235){return _235*this.rowsPerPage;},getLastPageRow:function(_236){return Math.min(this.rowCount,this.getPageRow(_236+1))-1;},getFirstVisibleRow:function(_237,_238,_239){if(!this.pageExists(_237)){return 0;}var row=this.getPageRow(_237);var _23a=this.getDefaultNodes();var rows=_1fa(_23a[_237]);for(var i=0,l=rows.length;i<l&&_238<_239;i++,row++){_238+=rows[i].offsetHeight;}return (row?row-1:row);},getLastVisibleRow:function(_23b,_23c,_23d){if(!this.pageExists(_23b)){return 0;}var _23e=this.getDefaultNodes();var row=this.getLastPageRow(_23b);var rows=_1fa(_23e[_23b]);for(var i=rows.length-1;i>=0&&_23c>_23d;i--,row--){_23c-=rows[i].offsetHeight;}return row+1;},findTopRow:function(_23f){var _240=this.getDefaultNodes();var rows=_1fa(_240[this.page]);for(var i=0,l=rows.length,t=this.pageTop,h;i<l;i++){h=rows[i].offsetHeight;t+=h;if(t>=_23f){this.offset=h-(t-_23f);return i+this.page*this.rowsPerPage;}}return -1;},findScrollTop:function(_241){var _242=Math.floor(_241/this.rowsPerPage);var t=0;var i,l;for(i=0;i<_242;i++){t+=this.getPageHeight(i);}this.pageTop=t;this.needPage(_242,this.pageTop);var _243=this.getDefaultNodes();var rows=_1fa(_243[_242]);var r=_241-this.rowsPerPage*_242;for(i=0,l=rows.length;i<l&&i<r;i++){t+=rows[i].offsetHeight;}return t;},dummy:0});})();}if(!dojo._hasResource["dojox.grid.cells._base"]){dojo._hasResource["dojox.grid.cells._base"]=true;dojo.provide("dojox.grid.cells._base");dojo.declare("dojox.grid._DeferredTextWidget",dijit._Widget,{deferred:null,_destroyOnRemove:true,postCreate:function(){if(this.deferred){this.deferred.addBoth(dojo.hitch(this,function(text){if(this.domNode){this.domNode.innerHTML=text;}}));}}});(function(){var _244=function(_245){try{dojox.grid.util.fire(_245,"focus");dojox.grid.util.fire(_245,"select");}catch(e){}};var _246=function(){setTimeout(dojo.hitch.apply(dojo,arguments),0);};var dgc=dojox.grid.cells;dojo.declare("dojox.grid.cells._Base",null,{styles:"",classes:"",editable:false,alwaysEditing:false,formatter:null,defaultValue:"...",value:null,hidden:false,noresize:false,draggable:true,_valueProp:"value",_formatPending:false,constructor:function(_247){this._props=_247||{};dojo.mixin(this,_247);if(this.draggable===undefined){this.draggable=true;}},_defaultFormat:function(_248,_249){var s=this.grid.formatterScope||this;var f=this.formatter;if(f&&s&&typeof f=="string"){f=this.formatter=s[f];}var v=(_248!=this.defaultValue&&f)?f.apply(s,_249):_248;if(typeof v=="undefined"){return this.defaultValue;}if(v&&v.addBoth){v=new dojox.grid._DeferredTextWidget({deferred:v},dojo.create("span",{innerHTML:this.defaultValue}));}if(v&&v.declaredClass&&v.startup){return "<div class='dojoxGridStubNode' linkWidget='"+v.id+"' cellIdx='"+this.index+"'>"+this.defaultValue+"</div>";}return v;},format:function(_24a,_24b){var f,i=this.grid.edit.info,d=this.get?this.get(_24a,_24b):(this.value||this.defaultValue);d=(d&&d.replace&&this.grid.escapeHTMLInData)?d.replace(/&/g,"&amp;").replace(/</g,"&lt;"):d;if(this.editable&&(this.alwaysEditing||(i.rowIndex==_24a&&i.cell==this))){return this.formatEditing(d,_24a);}else{return this._defaultFormat(d,[d,_24a,this]);}},formatEditing:function(_24c,_24d){},getNode:function(_24e){return this.view.getCellNode(_24e,this.index);},getHeaderNode:function(){return this.view.getHeaderCellNode(this.index);},getEditNode:function(_24f){return (this.getNode(_24f)||0).firstChild||0;},canResize:function(){var uw=this.unitWidth;return uw&&(uw!=="auto");},isFlex:function(){var uw=this.unitWidth;return uw&&dojo.isString(uw)&&(uw=="auto"||uw.slice(-1)=="%");},applyEdit:function(_250,_251){this.grid.edit.applyCellEdit(_250,this,_251);},cancelEdit:function(_252){this.grid.doCancelEdit(_252);},_onEditBlur:function(_253){if(this.grid.edit.isEditCell(_253,this.index)){this.grid.edit.apply();}},registerOnBlur:function(_254,_255){if(this.commitOnBlur){dojo.connect(_254,"onblur",function(e){setTimeout(dojo.hitch(this,"_onEditBlur",_255),250);});}},needFormatNode:function(_256,_257){this._formatPending=true;_246(this,"_formatNode",_256,_257);},cancelFormatNode:function(){this._formatPending=false;},_formatNode:function(_258,_259){if(this._formatPending){this._formatPending=false;dojo.setSelectable(this.grid.domNode,true);this.formatNode(this.getEditNode(_259),_258,_259);}},formatNode:function(_25a,_25b,_25c){if(dojo.isIE){_246(this,"focus",_25c,_25a);}else{this.focus(_25c,_25a);}},dispatchEvent:function(m,e){if(m in this){return this[m](e);}},getValue:function(_25d){return this.getEditNode(_25d)[this._valueProp];},setValue:function(_25e,_25f){var n=this.getEditNode(_25e);if(n){n[this._valueProp]=_25f;}},focus:function(_260,_261){_244(_261||this.getEditNode(_260));},save:function(_262){this.value=this.value||this.getValue(_262);},restore:function(_263){this.setValue(_263,this.value);},_finish:function(_264){dojo.setSelectable(this.grid.domNode,false);this.cancelFormatNode();},apply:function(_265){this.applyEdit(this.getValue(_265),_265);this._finish(_265);},cancel:function(_266){this.cancelEdit(_266);this._finish(_266);}});dgc._Base.markupFactory=function(node,_267){var d=dojo;var _268=d.trim(d.attr(node,"formatter")||"");if(_268){_267.formatter=dojo.getObject(_268)||_268;}var get=d.trim(d.attr(node,"get")||"");if(get){_267.get=dojo.getObject(get);}var _269=function(attr,cell,_26a){var _26b=d.trim(d.attr(node,attr)||"");if(_26b){cell[_26a||attr]=!(_26b.toLowerCase()=="false");}};_269("sortDesc",_267);_269("editable",_267);_269("alwaysEditing",_267);_269("noresize",_267);_269("draggable",_267);var _26c=d.trim(d.attr(node,"loadingText")||d.attr(node,"defaultValue")||"");if(_26c){_267.defaultValue=_26c;}var _26d=function(attr,cell,_26e){var _26f=d.trim(d.attr(node,attr)||"")||undefined;if(_26f){cell[_26e||attr]=_26f;}};_26d("styles",_267);_26d("headerStyles",_267);_26d("cellStyles",_267);_26d("classes",_267);_26d("headerClasses",_267);_26d("cellClasses",_267);};dojo.declare("dojox.grid.cells.Cell",dgc._Base,{constructor:function(){this.keyFilter=this.keyFilter;},keyFilter:null,formatEditing:function(_270,_271){this.needFormatNode(_270,_271);return "<input class=\"dojoxGridInput\" type=\"text\" value=\""+_270+"\">";},formatNode:function(_272,_273,_274){this.inherited(arguments);this.registerOnBlur(_272,_274);},doKey:function(e){if(this.keyFilter){var key=String.fromCharCode(e.charCode);if(key.search(this.keyFilter)==-1){dojo.stopEvent(e);}}},_finish:function(_275){this.inherited(arguments);var n=this.getEditNode(_275);try{dojox.grid.util.fire(n,"blur");}catch(e){}}});dgc.Cell.markupFactory=function(node,_276){dgc._Base.markupFactory(node,_276);var d=dojo;var _277=d.trim(d.attr(node,"keyFilter")||"");if(_277){_276.keyFilter=new RegExp(_277);}};dojo.declare("dojox.grid.cells.RowIndex",dgc.Cell,{name:"Row",postscript:function(){this.editable=false;},get:function(_278){return _278+1;}});dgc.RowIndex.markupFactory=function(node,_279){dgc.Cell.markupFactory(node,_279);};dojo.declare("dojox.grid.cells.Select",dgc.Cell,{options:null,values:null,returnIndex:-1,constructor:function(_27a){this.values=this.values||this.options;},formatEditing:function(_27b,_27c){this.needFormatNode(_27b,_27c);var h=["<select class=\"dojoxGridSelect\">"];for(var i=0,o,v;((o=this.options[i])!==undefined)&&((v=this.values[i])!==undefined);i++){h.push("<option",(_27b==v?" selected":"")," value=\""+v+"\"",">",o,"</option>");}h.push("</select>");return h.join("");},getValue:function(_27d){var n=this.getEditNode(_27d);if(n){var i=n.selectedIndex,o=n.options[i];return this.returnIndex>-1?i:o.value||o.innerHTML;}}});dgc.Select.markupFactory=function(node,cell){dgc.Cell.markupFactory(node,cell);var d=dojo;var _27e=d.trim(d.attr(node,"options")||"");if(_27e){var o=_27e.split(",");if(o[0]!=_27e){cell.options=o;}}var _27f=d.trim(d.attr(node,"values")||"");if(_27f){var v=_27f.split(",");if(v[0]!=_27f){cell.values=v;}}};dojo.declare("dojox.grid.cells.AlwaysEdit",dgc.Cell,{alwaysEditing:true,_formatNode:function(_280,_281){this.formatNode(this.getEditNode(_281),_280,_281);},applyStaticValue:function(_282){var e=this.grid.edit;e.applyCellEdit(this.getValue(_282),this,_282);e.start(this,_282,true);}});dgc.AlwaysEdit.markupFactory=function(node,cell){dgc.Cell.markupFactory(node,cell);};dojo.declare("dojox.grid.cells.Bool",dgc.AlwaysEdit,{_valueProp:"checked",formatEditing:function(_283,_284){return "<input class=\"dojoxGridInput\" type=\"checkbox\""+(_283?" checked=\"checked\"":"")+" style=\"width: auto\" />";},doclick:function(e){if(e.target.tagName=="INPUT"){this.applyStaticValue(e.rowIndex);}}});dgc.Bool.markupFactory=function(node,cell){dgc.AlwaysEdit.markupFactory(node,cell);};})();}if(!dojo._hasResource["dojox.grid.cells"]){dojo._hasResource["dojox.grid.cells"]=true;dojo.provide("dojox.grid.cells");}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKeyPressed;dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++dojo.dnd._uniqueId);}while(dojo.byId(id));return id;};dojo.dnd._empty={};dojo.dnd.isFormElement=function(e){var t=e.target;if(t.nodeType==3){t=t.parentNode;}return " button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;};}if(!dojo._hasResource["dojo.dnd.autoscroll"]){dojo._hasResource["dojo.dnd.autoscroll"]=true;dojo.provide("dojo.dnd.autoscroll");dojo.dnd.getViewport=function(){var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();if(dojo.isMozilla){return {w:dd.clientWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&w.innerWidth){return {w:w.innerWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&dd&&dd.clientWidth){return {w:dd.clientWidth,h:dd.clientHeight};}else{if(b.clientWidth){return {w:b.clientWidth,h:b.clientHeight};}}}}return null;};dojo.dnd.V_TRIGGER_AUTOSCROLL=32;dojo.dnd.H_TRIGGER_AUTOSCROLL=32;dojo.dnd.V_AUTOSCROLL_VALUE=16;dojo.dnd.H_AUTOSCROLL_VALUE=16;dojo.dnd.autoScroll=function(e){var v=dojo.dnd.getViewport(),dx=0,dy=0;if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=-dojo.dnd.H_AUTOSCROLL_VALUE;}else{if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=dojo.dnd.H_AUTOSCROLL_VALUE;}}if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=-dojo.dnd.V_AUTOSCROLL_VALUE;}else{if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=dojo.dnd.V_AUTOSCROLL_VALUE;}}window.scrollBy(dx,dy);};dojo.dnd._validNodes={"div":1,"p":1,"td":1};dojo.dnd._validOverflow={"auto":1,"scroll":1};dojo.dnd.autoScrollNodes=function(e){for(var n=e.target;n;){if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){var s=dojo.getComputedStyle(n);if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){var b=dojo._getContentBox(n,s),t=dojo.position(n,true);var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;if(dojo.isWebKit||dojo.isOpera){rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;}if(rx>0&&rx<b.w){if(rx<w){dx=-w;}else{if(rx>b.w-w){dx=w;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-h;}else{if(ry>b.h-h){dy=h;}}}var _285=n.scrollLeft,_286=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_285!=n.scrollLeft||_286!=n.scrollTop){return;}}}try{n=n.parentNode;}catch(x){n=null;}}dojo.dnd.autoScroll(e);};}if(!dojo._hasResource["dojo.dnd.Mover"]){dojo._hasResource["dojo.dnd.Mover"]=true;dojo.provide("dojo.dnd.Mover");dojo.declare("dojo.dnd.Mover",null,{constructor:function(node,e,host){this.node=dojo.byId(node);this.marginBox={l:e.pageX,t:e.pageY};this.mouseButton=e.button;var h=this.host=host,d=node.ownerDocument,_287=dojo.connect(d,"onmousemove",this,"onFirstMove");this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent),_287];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox;this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY});dojo.stopEvent(e);},onMouseUp:function(e){if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){this.destroy();}dojo.stopEvent(e);},onFirstMove:function(){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left));t=Math.round(parseFloat(s.top));break;default:s.position="absolute";var m=dojo.marginBox(this.node);var b=dojo.doc.body;var bs=dojo.getComputedStyle(b);var bm=dojo._getMarginBox(b,bs);var bc=dojo._getContentBox(b,bs);l=m.l-(bc.l-bm.l);t=m.t-(bc.t-bm.t);break;}this.marginBox.l=l-this.marginBox.l;this.marginBox.t=t-this.marginBox.t;if(h&&h.onFirstMove){h.onFirstMove(this);}dojo.disconnect(this.events.pop());},destroy:function(){dojo.forEach(this.events,dojo.disconnect);var h=this.host;if(h&&h.onMoveStop){h.onMoveStop(this);}this.events=this.node=this.host=null;}});}if(!dojo._hasResource["dojo.dnd.Moveable"]){dojo._hasResource["dojo.dnd.Moveable"]=true;dojo.provide("dojo.dnd.Moveable");dojo.declare("dojo.dnd.Moveable",null,{handle:"",delay:0,skip:false,constructor:function(node,_288){this.node=dojo.byId(node);if(!_288){_288={};}this.handle=_288.handle?dojo.byId(_288.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_288.delay>0?_288.delay:0;this.skip=_288.skip;this.mover=_288.mover?_288.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_289,node){return new dojo.dnd.Moveable(node,_289);},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.events=this.node=this.handle=null;},onMouseDown:function(e){if(this.skip&&dojo.dnd.isFormElement(e)){return;}if(this.delay){this.events.push(dojo.connect(this.handle,"onmousemove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));this._lastX=e.pageX;this._lastY=e.pageY;}else{this.onDragDetected(e);}dojo.stopEvent(e);},onMouseMove:function(e){if(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay){this.onMouseUp(e);this.onDragDetected(e);}dojo.stopEvent(e);},onMouseUp:function(e){for(var i=0;i<2;++i){dojo.disconnect(this.events.pop());}dojo.stopEvent(e);},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onDragDetected:function(e){new this.mover(this.node,e,this);},onMoveStart:function(_28a){dojo.publish("/dnd/move/start",[_28a]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_28b){dojo.publish("/dnd/move/stop",[_28b]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_28c){},onMove:function(_28d,_28e){this.onMoving(_28d,_28e);var s=_28d.node.style;s.left=_28e.l+"px";s.top=_28e.t+"px";this.onMoved(_28d,_28e);},onMoving:function(_28f,_290){},onMoved:function(_291,_292){}});}if(!dojo._hasResource["dojox.grid._Builder"]){dojo._hasResource["dojox.grid._Builder"]=true;dojo.provide("dojox.grid._Builder");(function(){var dg=dojox.grid;var _293=function(td){return td.cellIndex>=0?td.cellIndex:dojo.indexOf(td.parentNode.cells,td);};var _294=function(tr){return tr.rowIndex>=0?tr.rowIndex:dojo.indexOf(tr.parentNode.childNodes,tr);};var _295=function(_296,_297){return _296&&((_296.rows||0)[_297]||_296.childNodes[_297]);};var _298=function(node){for(var n=node;n&&n.tagName!="TABLE";n=n.parentNode){}return n;};var _299=function(_29a,_29b){for(var n=_29a;n&&_29b(n);n=n.parentNode){}return n;};var _29c=function(_29d){var name=_29d.toUpperCase();return function(node){return node.tagName!=name;};};var _29e=dojox.grid.util.rowIndexTag;var _29f=dojox.grid.util.gridViewTag;dg._Builder=dojo.extend(function(view){if(view){this.view=view;this.grid=view.grid;}},{view:null,_table:"<table class=\"dojoxGridRowTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"",getTableArray:function(){var html=[this._table];if(this.view.viewWidth){html.push([" style=\"width:",this.view.viewWidth,";\""].join(""));}html.push(">");return html;},generateCellMarkup:function(_2a0,_2a1,_2a2,_2a3){var _2a4=[],html;if(_2a3){var _2a5=_2a0.index!=_2a0.grid.getSortIndex()?"":_2a0.grid.sortInfo>0?"aria-sort=\"ascending\"":"aria-sort=\"descending\"";if(!_2a0.id){_2a0.id=this.grid.id+"Hdr"+_2a0.index;}html=["<th tabIndex=\"-1\" aria-readonly=\"true\" role=\"columnheader\"",_2a5,"id=\"",_2a0.id,"\""];}else{var _2a6=this.grid.editable&&!_2a0.editable?"aria-readonly=\"true\"":"";html=["<td tabIndex=\"-1\" role=\"gridcell\"",_2a6];}if(_2a0.colSpan){html.push(" colspan=\"",_2a0.colSpan,"\"");}if(_2a0.rowSpan){html.push(" rowspan=\"",_2a0.rowSpan,"\"");}html.push(" class=\"dojoxGridCell ");if(_2a0.classes){html.push(_2a0.classes," ");}if(_2a2){html.push(_2a2," ");}_2a4.push(html.join(""));_2a4.push("");html=["\" idx=\"",_2a0.index,"\" style=\""];if(_2a1&&_2a1[_2a1.length-1]!=";"){_2a1+=";";}html.push(_2a0.styles,_2a1||"",_2a0.hidden?"display:none;":"");if(_2a0.unitWidth){html.push("width:",_2a0.unitWidth,";");}_2a4.push(html.join(""));_2a4.push("");html=["\""];if(_2a0.attrs){html.push(" ",_2a0.attrs);}html.push(">");_2a4.push(html.join(""));_2a4.push("");_2a4.push(_2a3?"</th>":"</td>");return _2a4;},isCellNode:function(_2a7){return Boolean(_2a7&&_2a7!=dojo.doc&&dojo.attr(_2a7,"idx"));},getCellNodeIndex:function(_2a8){return _2a8?Number(dojo.attr(_2a8,"idx")):-1;},getCellNode:function(_2a9,_2aa){for(var i=0,row;(row=_295(_2a9.firstChild,i));i++){for(var j=0,cell;(cell=row.cells[j]);j++){if(this.getCellNodeIndex(cell)==_2aa){return cell;}}}return null;},findCellTarget:function(_2ab,_2ac){var n=_2ab;while(n&&(!this.isCellNode(n)||(n.offsetParent&&_29f in n.offsetParent.parentNode&&n.offsetParent.parentNode[_29f]!=this.view.id))&&(n!=_2ac)){n=n.parentNode;}return n!=_2ac?n:null;},baseDecorateEvent:function(e){e.dispatch="do"+e.type;e.grid=this.grid;e.sourceView=this.view;e.cellNode=this.findCellTarget(e.target,e.rowNode);e.cellIndex=this.getCellNodeIndex(e.cellNode);e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);},findTarget:function(_2ad,_2ae){var n=_2ad;while(n&&(n!=this.domNode)&&(!(_2ae in n)||(_29f in n&&n[_29f]!=this.view.id))){n=n.parentNode;}return (n!=this.domNode)?n:null;},findRowTarget:function(_2af){return this.findTarget(_2af,_29e);},isIntraNodeEvent:function(e){try{return (e.cellNode&&e.relatedTarget&&dojo.isDescendant(e.relatedTarget,e.cellNode));}catch(x){return false;}},isIntraRowEvent:function(e){try{var row=e.relatedTarget&&this.findRowTarget(e.relatedTarget);return !row&&(e.rowIndex==-1)||row&&(e.rowIndex==row.gridRowIndex);}catch(x){return false;}},dispatchEvent:function(e){if(e.dispatch in this){return this[e.dispatch](e);}return false;},domouseover:function(e){if(e.cellNode&&(e.cellNode!=this.lastOverCellNode)){this.lastOverCellNode=e.cellNode;this.grid.onMouseOver(e);}this.grid.onMouseOverRow(e);},domouseout:function(e){if(e.cellNode&&(e.cellNode==this.lastOverCellNode)&&!this.isIntraNodeEvent(e,this.lastOverCellNode)){this.lastOverCellNode=null;this.grid.onMouseOut(e);if(!this.isIntraRowEvent(e)){this.grid.onMouseOutRow(e);}}},domousedown:function(e){if(e.cellNode){this.grid.onMouseDown(e);}this.grid.onMouseDownRow(e);}});dg._ContentBuilder=dojo.extend(function(view){dg._Builder.call(this,view);},dg._Builder.prototype,{update:function(){this.prepareHtml();},prepareHtml:function(){var _2b0=this.grid.get,_2b1=this.view.structure.cells;for(var j=0,row;(row=_2b1[j]);j++){for(var i=0,cell;(cell=row[i]);i++){cell.get=cell.get||(cell.value==undefined)&&_2b0;cell.markup=this.generateCellMarkup(cell,cell.cellStyles,cell.cellClasses,false);if(!this.grid.editable&&cell.editable){this.grid.editable=true;}}}},generateHtml:function(_2b2,_2b3){var html=this.getTableArray(),v=this.view,_2b4=v.structure.cells,item=this.grid.getItem(_2b3);dojox.grid.util.fire(this.view,"onBeforeRow",[_2b3,_2b4]);for(var j=0,row;(row=_2b4[j]);j++){if(row.hidden||row.header){continue;}html.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");for(var i=0,cell,m,cc,cs;(cell=row[i]);i++){m=cell.markup;cc=cell.customClasses=[];cs=cell.customStyles=[];m[5]=cell.format(_2b3,item);m[1]=cc.join(" ");m[3]=cs.join(";");html.push.apply(html,m);}html.push("</tr>");}html.push("</table>");return html.join("");},decorateEvent:function(e){e.rowNode=this.findRowTarget(e.target);if(!e.rowNode){return false;}e.rowIndex=e.rowNode[_29e];this.baseDecorateEvent(e);e.cell=this.grid.getCell(e.cellIndex);return true;}});dg._HeaderBuilder=dojo.extend(function(view){this.moveable=null;dg._Builder.call(this,view);},dg._Builder.prototype,{_skipBogusClicks:false,overResizeWidth:4,minColWidth:1,update:function(){if(this.tableMap){this.tableMap.mapRows(this.view.structure.cells);}else{this.tableMap=new dg._TableMap(this.view.structure.cells);}},generateHtml:function(_2b5,_2b6){var html=this.getTableArray(),_2b7=this.view.structure.cells;dojox.grid.util.fire(this.view,"onBeforeRow",[-1,_2b7]);for(var j=0,row;(row=_2b7[j]);j++){if(row.hidden){continue;}html.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");for(var i=0,cell,_2b8;(cell=row[i]);i++){cell.customClasses=[];cell.customStyles=[];if(this.view.simpleStructure){if(cell.draggable){if(cell.headerClasses){if(cell.headerClasses.indexOf("dojoDndItem")==-1){cell.headerClasses+=" dojoDndItem";}}else{cell.headerClasses="dojoDndItem";}}if(cell.attrs){if(cell.attrs.indexOf("dndType='gridColumn_")==-1){cell.attrs+=" dndType='gridColumn_"+this.grid.id+"'";}}else{cell.attrs="dndType='gridColumn_"+this.grid.id+"'";}}_2b8=this.generateCellMarkup(cell,cell.headerStyles,cell.headerClasses,true);_2b8[5]=(_2b6!=undefined?_2b6:_2b5(cell));_2b8[3]=cell.customStyles.join(";");_2b8[1]=cell.customClasses.join(" ");html.push(_2b8.join(""));}html.push("</tr>");}html.push("</table>");return html.join("");},getCellX:function(e){var n,x=e.layerX;if(dojo.isMoz){n=_299(e.target,_29c("th"));x-=(n&&n.offsetLeft)||0;var t=e.sourceView.getScrollbarWidth();if(!dojo._isBodyLtr()&&e.sourceView.headerNode.scrollLeft<t){x-=t;}}n=_299(e.target,function(){if(!n||n==e.cellNode){return false;}x+=(n.offsetLeft<0?0:n.offsetLeft);return true;});return x;},decorateEvent:function(e){this.baseDecorateEvent(e);e.rowIndex=-1;e.cellX=this.getCellX(e);return true;},prepareResize:function(e,mod){do{var i=_293(e.cellNode);e.cellNode=(i?e.cellNode.parentNode.cells[i+mod]:null);e.cellIndex=(e.cellNode?this.getCellNodeIndex(e.cellNode):-1);}while(e.cellNode&&e.cellNode.style.display=="none");return Boolean(e.cellNode);},canResize:function(e){if(!e.cellNode||e.cellNode.colSpan>1){return false;}var cell=this.grid.getCell(e.cellIndex);return !cell.noresize&&cell.canResize();},overLeftResizeArea:function(e){if(dojo.hasClass(dojo.body(),"dojoDndMove")){return false;}if(dojo.isIE){var tN=e.target;if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){return false;}}if(dojo._isBodyLtr()){return (e.cellIndex>0)&&(e.cellX<this.overResizeWidth)&&this.prepareResize(e,-1);}var t=e.cellNode&&(e.cellX<this.overResizeWidth);return t;},overRightResizeArea:function(e){if(dojo.hasClass(dojo.body(),"dojoDndMove")){return false;}if(dojo.isIE){var tN=e.target;if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){return false;}}if(dojo._isBodyLtr()){return e.cellNode&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth);}return (e.cellIndex>0)&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth)&&this.prepareResize(e,-1);},domousemove:function(e){if(!this.moveable){var c=(this.overRightResizeArea(e)?"dojoxGridColResize":(this.overLeftResizeArea(e)?"dojoxGridColResize":""));if(c&&!this.canResize(e)){c="dojoxGridColNoResize";}dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColNoResize",(c=="dojoxGridColNoResize"));dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColResize",(c=="dojoxGridColResize"));if(dojo.isIE){var t=e.sourceView.headerNode.scrollLeft;e.sourceView.headerNode.scrollLeft=t;}if(c){dojo.stopEvent(e);}}},domousedown:function(e){if(!this.moveable){if((this.overRightResizeArea(e)||this.overLeftResizeArea(e))&&this.canResize(e)){this.beginColumnResize(e);}else{this.grid.onMouseDown(e);this.grid.onMouseOverRow(e);}}},doclick:function(e){if(this._skipBogusClicks){dojo.stopEvent(e);return true;}return false;},colResizeSetup:function(e,_2b9){var _2ba=dojo.contentBox(e.sourceView.headerNode);if(_2b9){this.lineDiv=document.createElement("div");var vw=(dojo.position||dojo._abs)(e.sourceView.headerNode,true);var _2bb=dojo.contentBox(e.sourceView.domNode);dojo.style(this.lineDiv,{top:vw.y+"px",left:e.clientX+"px",height:(_2bb.h+_2ba.h)+"px"});dojo.addClass(this.lineDiv,"dojoxGridResizeColLine");this.lineDiv._origLeft=e.clientX;dojo.body().appendChild(this.lineDiv);}var _2bc=[],_2bd=this.tableMap.findOverlappingNodes(e.cellNode);for(var i=0,cell;(cell=_2bd[i]);i++){_2bc.push({node:cell,index:this.getCellNodeIndex(cell),width:cell.offsetWidth});}var view=e.sourceView;var adj=dojo._isBodyLtr()?1:-1;var _2be=e.grid.views.views;var _2bf=[];for(var j=view.idx+adj,_2c0;(_2c0=_2be[j]);j=j+adj){_2bf.push({node:_2c0.headerNode,left:window.parseInt(_2c0.headerNode.style.left)});}var _2c1=view.headerContentNode.firstChild;var drag={scrollLeft:e.sourceView.headerNode.scrollLeft,view:view,node:e.cellNode,index:e.cellIndex,w:dojo.contentBox(e.cellNode).w,vw:_2ba.w,table:_2c1,tw:dojo.contentBox(_2c1).w,spanners:_2bc,followers:_2bf};return drag;},beginColumnResize:function(e){this.moverDiv=document.createElement("div");dojo.style(this.moverDiv,{position:"absolute",left:0});dojo.body().appendChild(this.moverDiv);dojo.addClass(this.grid.domNode,"dojoxGridColumnResizing");var m=(this.moveable=new dojo.dnd.Moveable(this.moverDiv));var drag=this.colResizeSetup(e,true);m.onMove=dojo.hitch(this,"doResizeColumn",drag);dojo.connect(m,"onMoveStop",dojo.hitch(this,function(){this.endResizeColumn(drag);if(drag.node.releaseCapture){drag.node.releaseCapture();}this.moveable.destroy();delete this.moveable;this.moveable=null;dojo.removeClass(this.grid.domNode,"dojoxGridColumnResizing");}));if(e.cellNode.setCapture){e.cellNode.setCapture();}m.onMouseDown(e);},doResizeColumn:function(_2c2,_2c3,_2c4){var _2c5=_2c4.l;var data={deltaX:_2c5,w:_2c2.w+_2c5,vw:_2c2.vw+_2c5,tw:_2c2.tw+_2c5};this.dragRecord={inDrag:_2c2,mover:_2c3,leftTop:_2c4};if(data.w>=this.minColWidth){if(!_2c3){this.doResizeNow(_2c2,data);}else{dojo.style(this.lineDiv,"left",(this.lineDiv._origLeft+data.deltaX)+"px");}}},endResizeColumn:function(_2c6){if(this.dragRecord){var _2c7=this.dragRecord.leftTop;var _2c8=dojo._isBodyLtr()?_2c7.l:-_2c7.l;_2c8+=Math.max(_2c6.w+_2c8,this.minColWidth)-(_2c6.w+_2c8);if(dojo.isWebKit&&_2c6.spanners.length){_2c8+=dojo._getPadBorderExtents(_2c6.spanners[0].node).w;}var data={deltaX:_2c8,w:_2c6.w+_2c8,vw:_2c6.vw+_2c8,tw:_2c6.tw+_2c8};this.doResizeNow(_2c6,data);}dojo.destroy(this.lineDiv);dojo.destroy(this.moverDiv);dojo.destroy(this.moverDiv);delete this.moverDiv;this._skipBogusClicks=true;_2c6.view.update();this._skipBogusClicks=false;this.grid.onResizeColumn(_2c6.index);},doResizeNow:function(_2c9,data){_2c9.view.convertColPctToFixed();if(_2c9.view.flexCells&&!_2c9.view.testFlexCells()){var t=_298(_2c9.node);if(t){(t.style.width="");}}var i,s,sw,f,fl;for(i=0;(s=_2c9.spanners[i]);i++){sw=s.width+data.deltaX;s.node.style.width=sw+"px";_2c9.view.setColWidth(s.index,sw);}for(i=0;(f=_2c9.followers[i]);i++){fl=f.left+data.deltaX;f.node.style.left=fl+"px";}_2c9.node.style.width=data.w+"px";_2c9.view.setColWidth(_2c9.index,data.w);_2c9.view.headerNode.style.width=data.vw+"px";_2c9.view.setColumnsWidth(data.tw);if(!dojo._isBodyLtr()){_2c9.view.headerNode.scrollLeft=_2c9.scrollLeft+data.deltaX;}}});dg._TableMap=dojo.extend(function(rows){this.mapRows(rows);},{map:null,mapRows:function(_2ca){var _2cb=_2ca.length;if(!_2cb){return;}this.map=[];var row;for(var k=0;(row=_2ca[k]);k++){this.map[k]=[];}for(var j=0;(row=_2ca[j]);j++){for(var i=0,x=0,cell,_2cc,_2cd;(cell=row[i]);i++){while(this.map[j][x]){x++;}this.map[j][x]={c:i,r:j};_2cd=cell.rowSpan||1;_2cc=cell.colSpan||1;for(var y=0;y<_2cd;y++){for(var s=0;s<_2cc;s++){this.map[j+y][x+s]=this.map[j][x];}}x+=_2cc;}}},dumpMap:function(){for(var j=0,row,h="";(row=this.map[j]);j++,h=""){for(var i=0,cell;(cell=row[i]);i++){h+=cell.r+","+cell.c+" ";}}},getMapCoords:function(_2ce,_2cf){for(var j=0,row;(row=this.map[j]);j++){for(var i=0,cell;(cell=row[i]);i++){if(cell.c==_2cf&&cell.r==_2ce){return {j:j,i:i};}}}return {j:-1,i:-1};},getNode:function(_2d0,_2d1,_2d2){var row=_2d0&&_2d0.rows[_2d1];return row&&row.cells[_2d2];},_findOverlappingNodes:function(_2d3,_2d4,_2d5){var _2d6=[];var m=this.getMapCoords(_2d4,_2d5);for(var j=0,row;(row=this.map[j]);j++){if(j==m.j){continue;}var rw=row[m.i];var n=(rw?this.getNode(_2d3,rw.r,rw.c):null);if(n){_2d6.push(n);}}return _2d6;},findOverlappingNodes:function(_2d7){return this._findOverlappingNodes(_298(_2d7),_294(_2d7.parentNode),_293(_2d7));}});})();}if(!dojo._hasResource["dojo.dnd.Container"]){dojo._hasResource["dojo.dnd.Container"]=true;dojo.provide("dojo.dnd.Container");dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(node,_2d8){this.node=dojo.byId(node);if(!_2d8){_2d8={};}this.creator=_2d8.creator||null;this.skipForm=_2d8.skipForm;this.parent=_2d8.dropParent&&dojo.byId(_2d8.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_2d8&&_2d8._skipStartup)){this.startup();}this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];},creator:function(){},getItem:function(key){return this.map[key];},setItem:function(key,data){this.map[key]=data;},delItem:function(key){delete this.map[key];},forInItems:function(f,o){o=o||dojo.global;var m=this.map,e=dojo.dnd._empty;for(var i in m){if(i in e){continue;}f.call(o,m[i],i,this);}return o;},clearItems:function(){this.map={};},getAllNodes:function(){return dojo.query("> .dojoDndItem",this.parent);},sync:function(){var map={};this.getAllNodes().forEach(function(node){if(node.id){var item=this.getItem(node.id);if(item){map[node.id]=item;return;}}else{node.id=dojo.dnd.getUniqueId();}var type=node.getAttribute("dndType"),data=node.getAttribute("dndData");map[node.id]={data:data||node.innerHTML,type:type?type.split(/\s*,\s*/):["text"]};},this);this.map=map;return this;},insertNodes:function(data,_2d9,_2da){if(!this.parent.firstChild){_2da=null;}else{if(_2d9){if(!_2da){_2da=this.parent.firstChild;}}else{if(_2da){_2da=_2da.nextSibling;}}}if(_2da){for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.insertBefore(t.node,_2da);}}else{for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.appendChild(t.node);}}return this;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.clearItems();this.node=this.parent=this.current=null;},markupFactory:function(_2db,node){_2db._skipStartup=true;return new dojo.dnd.Container(node,_2db);},startup:function(){if(!this.parent){this.parent=this.node;if(this.parent.tagName.toLowerCase()=="table"){var c=this.parent.getElementsByTagName("tbody");if(c&&c.length){this.parent=c[0];}}}this.defaultCreator=dojo.dnd._defaultCreator(this.parent);this.sync();},onMouseOver:function(e){var n=e.relatedTarget;while(n){if(n==this.node){break;}try{n=n.parentNode;}catch(x){n=null;}}if(!n){this._changeState("Container","Over");this.onOverEvent();}n=this._getChildByEvent(e);if(this.current==n){return;}if(this.current){this._removeItemClass(this.current,"Over");}if(n){this._addItemClass(n,"Over");}this.current=n;},onMouseOut:function(e){for(var n=e.relatedTarget;n;){if(n==this.node){return;}try{n=n.parentNode;}catch(x){n=null;}}if(this.current){this._removeItemClass(this.current,"Over");this.current=null;}this._changeState("Container","");this.onOutEvent();},onSelectStart:function(e){if(!this.skipForm||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onOverEvent:function(){},onOutEvent:function(){},_changeState:function(type,_2dc){var _2dd="dojoDnd"+type;var _2de=type.toLowerCase()+"State";dojo.removeClass(this.node,_2dd+this[_2de]);dojo.addClass(this.node,_2dd+_2dc);this[_2de]=_2dc;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},_getChildByEvent:function(e){var node=e.target;if(node){for(var _2df=node.parentNode;_2df;node=_2df,_2df=node.parentNode){if(_2df==this.parent&&dojo.hasClass(node,"dojoDndItem")){return node;}}}return null;},_normalizedCreator:function(item,hint){var t=(this.creator||this.defaultCreator).call(this,item,hint);if(!dojo.isArray(t.type)){t.type=["text"];}if(!t.node.id){t.node.id=dojo.dnd.getUniqueId();}dojo.addClass(t.node,"dojoDndItem");return t;}});dojo.dnd._createNode=function(tag){if(!tag){return dojo.dnd._createSpan;}return function(text){return dojo.create(tag,{innerHTML:text});};};dojo.dnd._createTrTd=function(text){var tr=dojo.create("tr");dojo.create("td",{innerHTML:text},tr);return tr;};dojo.dnd._createSpan=function(text){return dojo.create("span",{innerHTML:text});};dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};dojo.dnd._defaultCreator=function(node){var tag=node.tagName.toLowerCase();var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);return function(item,hint){var _2e0=item&&dojo.isObject(item),data,type,n;if(_2e0&&item.tagName&&item.nodeType&&item.getAttribute){data=item.getAttribute("dndData")||item.innerHTML;type=item.getAttribute("dndType");type=type?type.split(/\s*,\s*/):["text"];n=item;}else{data=(_2e0&&item.data)?item.data:item;type=(_2e0&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}n.id=dojo.dnd.getUniqueId();return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dojo.dnd.Selector"]){dojo._hasResource["dojo.dnd.Selector"]=true;dojo.provide("dojo.dnd.Selector");dojo.declare("dojo.dnd.Selector",dojo.dnd.Container,{constructor:function(node,_2e1){if(!_2e1){_2e1={};}this.singular=_2e1.singular;this.autoSync=_2e1.autoSync;this.selection={};this.anchor=null;this.simpleSelection=false;this.events.push(dojo.connect(this.node,"onmousedown",this,"onMouseDown"),dojo.connect(this.node,"onmouseup",this,"onMouseUp"));},singular:false,getSelectedNodes:function(){var t=new dojo.NodeList();var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}t.push(dojo.byId(i));}return t;},selectNone:function(){return this._removeSelection()._removeAnchor();},selectAll:function(){this.forInItems(function(data,id){this._addItemClass(dojo.byId(id),"Selected");this.selection[id]=1;},this);return this._removeAnchor();},deleteSelectedNodes:function(){var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}var n=dojo.byId(i);this.delItem(i);dojo.destroy(n);}this.anchor=null;this.selection={};return this;},forInSelectedItems:function(f,o){o=o||dojo.global;var s=this.selection,e=dojo.dnd._empty;for(var i in s){if(i in e){continue;}f.call(o,this.getItem(i),i,this);}},sync:function(){dojo.dnd.Selector.superclass.sync.call(this);if(this.anchor){if(!this.getItem(this.anchor.id)){this.anchor=null;}}var t=[],e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}if(!this.getItem(i)){t.push(i);}}dojo.forEach(t,function(i){delete this.selection[i];},this);return this;},insertNodes:function(_2e2,data,_2e3,_2e4){var _2e5=this._normalizedCreator;this._normalizedCreator=function(item,hint){var t=_2e5.call(this,item,hint);if(_2e2){if(!this.anchor){this.anchor=t.node;this._removeItemClass(t.node,"Selected");this._addItemClass(this.anchor,"Anchor");}else{if(this.anchor!=t.node){this._removeItemClass(t.node,"Anchor");this._addItemClass(t.node,"Selected");}}this.selection[t.node.id]=1;}else{this._removeItemClass(t.node,"Selected");this._removeItemClass(t.node,"Anchor");}return t;};dojo.dnd.Selector.superclass.insertNodes.call(this,data,_2e3,_2e4);this._normalizedCreator=_2e5;return this;},destroy:function(){dojo.dnd.Selector.superclass.destroy.call(this);this.selection=this.anchor=null;},markupFactory:function(_2e6,node){_2e6._skipStartup=true;return new dojo.dnd.Selector(node,_2e6);},onMouseDown:function(e){if(this.autoSync){this.sync();}if(!this.current){return;}if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){this.simpleSelection=true;if(e.button===dojo.mouseButtons.LEFT){dojo.stopEvent(e);}return;}if(!this.singular&&e.shiftKey){if(!dojo.isCopyKey(e)){this._removeSelection();}var c=this.getAllNodes();if(c.length){if(!this.anchor){this.anchor=c[0];this._addItemClass(this.anchor,"Anchor");}this.selection[this.anchor.id]=1;if(this.anchor!=this.current){var i=0;for(;i<c.length;++i){var node=c[i];if(node==this.anchor||node==this.current){break;}}for(++i;i<c.length;++i){var node=c[i];if(node==this.anchor||node==this.current){break;}this._addItemClass(node,"Selected");this.selection[node.id]=1;}this._addItemClass(this.current,"Selected");this.selection[this.current.id]=1;}}}else{if(this.singular){if(this.anchor==this.current){if(dojo.isCopyKey(e)){this.selectNone();}}else{this.selectNone();this.anchor=this.current;this._addItemClass(this.anchor,"Anchor");this.selection[this.current.id]=1;}}else{if(dojo.isCopyKey(e)){if(this.anchor==this.current){delete this.selection[this.anchor.id];this._removeAnchor();}else{if(this.current.id in this.selection){this._removeItemClass(this.current,"Selected");delete this.selection[this.current.id];}else{if(this.anchor){this._removeItemClass(this.anchor,"Anchor");this._addItemClass(this.anchor,"Selected");}this.anchor=this.current;this._addItemClass(this.current,"Anchor");this.selection[this.current.id]=1;}}}else{if(!(this.current.id in this.selection)){this.selectNone();this.anchor=this.current;this._addItemClass(this.current,"Anchor");this.selection[this.current.id]=1;}}}}dojo.stopEvent(e);},onMouseUp:function(e){if(!this.simpleSelection){return;}this.simpleSelection=false;this.selectNone();if(this.current){this.anchor=this.current;this._addItemClass(this.anchor,"Anchor");this.selection[this.current.id]=1;}},onMouseMove:function(e){this.simpleSelection=false;},onOverEvent:function(){this.onmousemoveEvent=dojo.connect(this.node,"onmousemove",this,"onMouseMove");},onOutEvent:function(){dojo.disconnect(this.onmousemoveEvent);delete this.onmousemoveEvent;},_removeSelection:function(){var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}var node=dojo.byId(i);if(node){this._removeItemClass(node,"Selected");}}this.selection={};return this;},_removeAnchor:function(){if(this.anchor){this._removeItemClass(this.anchor,"Anchor");this.anchor=null;}return this;}});}if(!dojo._hasResource["dojo.dnd.Avatar"]){dojo._hasResource["dojo.dnd.Avatar"]=true;dojo.provide("dojo.dnd.Avatar");dojo.declare("dojo.dnd.Avatar",null,{constructor:function(_2e7){this.manager=_2e7;this.construct();},construct:function(){this.isA11y=dojo.hasClass(dojo.body(),"dijit_a11y");var a=dojo.create("table",{"class":"dojoDndAvatar",style:{position:"absolute",zIndex:"1999",margin:"0px"}}),_2e8=this.manager.source,node,b=dojo.create("tbody",null,a),tr=dojo.create("tr",null,b),td=dojo.create("td",null,tr),icon=this.isA11y?dojo.create("span",{id:"a11yIcon",innerHTML:this.manager.copy?"+":"<"},td):null,span=dojo.create("span",{innerHTML:_2e8.generateText?this._generateText():""},td),k=Math.min(5,this.manager.nodes.length),i=0;dojo.attr(tr,{"class":"dojoDndAvatarHeader",style:{opacity:0.9}});for(;i<k;++i){if(_2e8.creator){node=_2e8._normalizedCreator(_2e8.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _2e9=dojo.create("table"),_2ea=dojo.create("tbody",null,_2e9);_2ea.appendChild(node);node=_2e9;}}node.id="";tr=dojo.create("tr",null,b);td=dojo.create("td",null,tr);td.appendChild(node);dojo.attr(tr,{"class":"dojoDndAvatarItem",style:{opacity:(9-i)/10}});}this.node=a;},destroy:function(){dojo.destroy(this.node);this.node=false;},update:function(){dojo[(this.manager.canDropFlag?"add":"remove")+"Class"](this.node,"dojoDndAvatarCanDrop");if(this.isA11y){var icon=dojo.byId("a11yIcon");var text="+";if(this.manager.canDropFlag&&!this.manager.copy){text="< ";}else{if(!this.manager.canDropFlag&&!this.manager.copy){text="o";}else{if(!this.manager.canDropFlag){text="x";}}}icon.innerHTML=text;}dojo.query(("tr.dojoDndAvatarHeader td span"+(this.isA11y?" span":"")),this.node).forEach(function(node){node.innerHTML=this._generateText();},this);},_generateText:function(){return this.manager.nodes.length.toString();}});}if(!dojo._hasResource["dojo.dnd.Manager"]){dojo._hasResource["dojo.dnd.Manager"]=true;dojo.provide("dojo.dnd.Manager");dojo.declare("dojo.dnd.Manager",null,{constructor:function(){this.avatar=null;this.source=null;this.nodes=[];this.copy=true;this.target=null;this.canDropFlag=false;this.events=[];},OFFSET_X:16,OFFSET_Y:16,overSource:function(_2eb){if(this.avatar){this.target=(_2eb&&_2eb.targetState!="Disabled")?_2eb:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_2eb]);},outSource:function(_2ec){if(this.avatar){if(this.target==_2ec){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_2ed,_2ee,copy){this.source=_2ed;this.nodes=_2ee;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_2ed,_2ee,this.copy]);this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];var c="dojoDnd"+(copy?"Copy":"Move");dojo.addClass(dojo.body(),c);},canDrop:function(flag){var _2ef=Boolean(this.target&&flag);if(this.canDropFlag!=_2ef){this.canDropFlag=_2ef;this.avatar.update();}},stopDrag:function(){dojo.removeClass(dojo.body(),"dojoDndCopy");dojo.removeClass(dojo.body(),"dojoDndMove");dojo.forEach(this.events,dojo.disconnect);this.events=[];this.avatar.destroy();this.avatar=null;this.source=this.target=null;this.nodes=[];},makeAvatar:function(){return new dojo.dnd.Avatar(this);},updateAvatar:function(){this.avatar.update();},onMouseMove:function(e){var a=this.avatar;if(a){dojo.dnd.autoScrollNodes(e);var s=a.node.style;s.left=(e.pageX+this.OFFSET_X)+"px";s.top=(e.pageY+this.OFFSET_Y)+"px";var copy=Boolean(this.source.copyState(dojo.isCopyKey(e)));if(this.copy!=copy){this._setCopyStatus(copy);}}},onMouseUp:function(e){if(this.avatar){if(this.target&&this.canDropFlag){var copy=Boolean(this.source.copyState(dojo.isCopyKey(e))),_2f0=[this.source,this.nodes,copy,this.target];dojo.publish("/dnd/drop/before",_2f0);dojo.publish("/dnd/drop",_2f0);}else{dojo.publish("/dnd/cancel");}this.stopDrag();}},onKeyDown:function(e){if(this.avatar){switch(e.keyCode){case dojo.keys.CTRL:var copy=Boolean(this.source.copyState(true));if(this.copy!=copy){this._setCopyStatus(copy);}break;case dojo.keys.ESCAPE:dojo.publish("/dnd/cancel");this.stopDrag();break;}}},onKeyUp:function(e){if(this.avatar&&e.keyCode==dojo.keys.CTRL){var copy=Boolean(this.source.copyState(false));if(this.copy!=copy){this._setCopyStatus(copy);}}},_setCopyStatus:function(copy){this.copy=copy;this.source._markDndStatus(this.copy);this.updateAvatar();dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy"));dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"));}});dojo.dnd._manager=null;dojo.dnd.manager=function(){if(!dojo.dnd._manager){dojo.dnd._manager=new dojo.dnd.Manager();}return dojo.dnd._manager;};}if(!dojo._hasResource["dojo.dnd.Source"]){dojo._hasResource["dojo.dnd.Source"]=true;dojo.provide("dojo.dnd.Source");dojo.declare("dojo.dnd.Source",dojo.dnd.Selector,{isSource:true,horizontal:false,copyOnly:false,selfCopy:false,selfAccept:true,skipForm:false,withHandles:false,autoSync:false,delay:0,accept:["text"],generateText:true,constructor:function(node,_2f1){dojo.mixin(this,dojo.mixin({},_2f1));var type=this.accept;if(type.length){this.accept={};for(var i=0;i<type.length;++i){this.accept[type[i]]=1;}}this.isDragging=false;this.mouseDown=false;this.targetAnchor=null;this.targetBox=null;this.before=true;this._lastX=0;this._lastY=0;this.sourceState="";if(this.isSource){dojo.addClass(this.node,"dojoDndSource");}this.targetState="";if(this.accept){dojo.addClass(this.node,"dojoDndTarget");}if(this.horizontal){dojo.addClass(this.node,"dojoDndHorizontal");}this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")];},checkAcceptance:function(_2f2,_2f3){if(this==_2f2){return !this.copyOnly||this.selfAccept;}for(var i=0;i<_2f3.length;++i){var type=_2f2.getItem(_2f3[i].id).type;var flag=false;for(var j=0;j<type.length;++j){if(type[j] in this.accept){flag=true;break;}}if(!flag){return false;}}return true;},copyState:function(_2f4,self){if(_2f4){return true;}if(arguments.length<2){self=this==dojo.dnd.manager().target;}if(self){if(this.copyOnly){return this.selfCopy;}}else{return this.copyOnly;}return false;},destroy:function(){dojo.dnd.Source.superclass.destroy.call(this);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},markupFactory:function(_2f5,node){_2f5._skipStartup=true;return new dojo.dnd.Source(node,_2f5);},onMouseMove:function(e){if(this.isDragging&&this.targetState=="Disabled"){return;}dojo.dnd.Source.superclass.onMouseMove.call(this,e);var m=dojo.dnd.manager();if(this.isDragging){var _2f6=false;if(this.current){if(!this.targetBox||this.targetAnchor!=this.current){this.targetBox=dojo.position(this.current,true);}if(this.horizontal){_2f6=(e.pageX-this.targetBox.x)<(this.targetBox.w/2);}else{_2f6=(e.pageY-this.targetBox.y)<(this.targetBox.h/2);}}if(this.current!=this.targetAnchor||_2f6!=this.before){this._markTargetAnchor(_2f6);m.canDrop(!this.current||m.source!=this||!(this.current.id in this.selection));}}else{if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay)){var _2f7=this.getSelectedNodes();if(_2f7.length){m.startDrag(this,_2f7,this.copyState(dojo.isCopyKey(e),true));}}}},onMouseDown:function(e){if(!this.mouseDown&&this._legalMouseDown(e)&&(!this.skipForm||!dojo.dnd.isFormElement(e))){this.mouseDown=true;this._lastX=e.pageX;this._lastY=e.pageY;dojo.dnd.Source.superclass.onMouseDown.call(this,e);}},onMouseUp:function(e){if(this.mouseDown){this.mouseDown=false;dojo.dnd.Source.superclass.onMouseUp.call(this,e);}},onDndSourceOver:function(_2f8){if(this!=_2f8){this.mouseDown=false;if(this.targetAnchor){this._unmarkTargetAnchor();}}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(this.targetState!="Disabled"&&(!this.current||m.source!=this||!(this.current.id in this.selection)));}}},onDndStart:function(_2f9,_2fa,copy){if(this.autoSync){this.sync();}if(this.isSource){this._changeState("Source",this==_2f9?(copy?"Copied":"Moved"):"");}var _2fb=this.accept&&this.checkAcceptance(_2f9,_2fa);this._changeState("Target",_2fb?"":"Disabled");if(this==_2f9){dojo.dnd.manager().overSource(this);}this.isDragging=true;},onDndDrop:function(_2fc,_2fd,copy,_2fe){if(this==_2fe){this.onDrop(_2fc,_2fd,copy);}this.onDndCancel();},onDndCancel:function(){if(this.targetAnchor){this._unmarkTargetAnchor();this.targetAnchor=null;}this.before=true;this.isDragging=false;this.mouseDown=false;this._changeState("Source","");this._changeState("Target","");},onDrop:function(_2ff,_300,copy){if(this!=_2ff){this.onDropExternal(_2ff,_300,copy);}else{this.onDropInternal(_300,copy);}},onDropExternal:function(_301,_302,copy){var _303=this._normalizedCreator;if(this.creator){this._normalizedCreator=function(node,hint){return _303.call(this,_301.getItem(node.id).data,hint);};}else{if(copy){this._normalizedCreator=function(node,hint){var t=_301.getItem(node.id);var n=node.cloneNode(true);n.id=dojo.dnd.getUniqueId();return {node:n,data:t.data,type:t.type};};}else{this._normalizedCreator=function(node,hint){var t=_301.getItem(node.id);_301.delItem(node.id);return {node:node,data:t.data,type:t.type};};}}this.selectNone();if(!copy&&!this.creator){_301.selectNone();}this.insertNodes(true,_302,this.before,this.current);if(!copy&&this.creator){_301.deleteSelectedNodes();}this._normalizedCreator=_303;},onDropInternal:function(_304,copy){var _305=this._normalizedCreator;if(this.current&&this.current.id in this.selection){return;}if(copy){if(this.creator){this._normalizedCreator=function(node,hint){return _305.call(this,this.getItem(node.id).data,hint);};}else{this._normalizedCreator=function(node,hint){var t=this.getItem(node.id);var n=node.cloneNode(true);n.id=dojo.dnd.getUniqueId();return {node:n,data:t.data,type:t.type};};}}else{if(!this.current){return;}this._normalizedCreator=function(node,hint){var t=this.getItem(node.id);return {node:node,data:t.data,type:t.type};};}this._removeSelection();this.insertNodes(true,_304,this.before,this.current);this._normalizedCreator=_305;},onDraggingOver:function(){},onDraggingOut:function(){},onOverEvent:function(){dojo.dnd.Source.superclass.onOverEvent.call(this);dojo.dnd.manager().overSource(this);if(this.isDragging&&this.targetState!="Disabled"){this.onDraggingOver();}},onOutEvent:function(){dojo.dnd.Source.superclass.onOutEvent.call(this);dojo.dnd.manager().outSource(this);if(this.isDragging&&this.targetState!="Disabled"){this.onDraggingOut();}},_markTargetAnchor:function(_306){if(this.current==this.targetAnchor&&this.before==_306){return;}if(this.targetAnchor){this._removeItemClass(this.targetAnchor,this.before?"Before":"After");}this.targetAnchor=this.current;this.targetBox=null;this.before=_306;if(this.targetAnchor){this._addItemClass(this.targetAnchor,this.before?"Before":"After");}},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor,this.before?"Before":"After");this.targetAnchor=null;this.targetBox=null;this.before=true;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");},_legalMouseDown:function(e){if(!dojo.mouseButtons.isLeft(e)){return false;}if(!this.withHandles){return true;}for(var node=e.target;node&&node!==this.node;node=node.parentNode){if(dojo.hasClass(node,"dojoDndHandle")){return true;}if(dojo.hasClass(node,"dojoDndItem")||dojo.hasClass(node,"dojoDndIgnore")){break;}}return false;}});dojo.declare("dojo.dnd.Target",dojo.dnd.Source,{constructor:function(node,_307){this.isSource=false;dojo.removeClass(this.node,"dojoDndSource");},markupFactory:function(_308,node){_308._skipStartup=true;return new dojo.dnd.Target(node,_308);}});dojo.declare("dojo.dnd.AutoSource",dojo.dnd.Source,{constructor:function(node,_309){this.autoSync=true;},markupFactory:function(_30a,node){_30a._skipStartup=true;return new dojo.dnd.AutoSource(node,_30a);}});}if(!dojo._hasResource["dojox.grid._View"]){dojo._hasResource["dojox.grid._View"]=true;dojo.provide("dojox.grid._View");(function(){var _30b=function(_30c,_30d){return _30c.style.cssText==undefined?_30c.getAttribute("style"):_30c.style.cssText;};dojo.declare("dojox.grid._View",[dijit._Widget,dijit._Templated],{defaultWidth:"18em",viewWidth:"",templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",themeable:false,classTag:"dojoxGrid",marginBottom:0,rowPad:2,_togglingColumn:-1,_headerBuilderClass:dojox.grid._HeaderBuilder,_contentBuilderClass:dojox.grid._ContentBuilder,postMixInProperties:function(){this.rowNodes={};},postCreate:function(){this.connect(this.scrollboxNode,"onscroll","doscroll");dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);this.content=new this._contentBuilderClass(this);this.header=new this._headerBuilderClass(this);if(!dojo._isBodyLtr()){this.headerNodeContainer.style.width="";}},destroy:function(){dojo.destroy(this.headerNode);delete this.headerNode;for(var i in this.rowNodes){dojo.destroy(this.rowNodes[i]);}this.rowNodes={};if(this.source){this.source.destroy();}this.inherited(arguments);},focus:function(){if(dojo.isIE||dojo.isWebKit||dojo.isOpera){this.hiddenFocusNode.focus();}else{this.scrollboxNode.focus();}},setStructure:function(_30e){var vs=(this.structure=_30e);if(vs.width&&!isNaN(vs.width)){this.viewWidth=vs.width+"em";}else{this.viewWidth=vs.width||(vs.noscroll?"auto":this.viewWidth);}this._onBeforeRow=vs.onBeforeRow||function(){};this._onAfterRow=vs.onAfterRow||function(){};this.noscroll=vs.noscroll;if(this.noscroll){this.scrollboxNode.style.overflow="hidden";}this.simpleStructure=Boolean(vs.cells.length==1);this.testFlexCells();this.updateStructure();},_cleanupRowWidgets:function(_30f){if(_30f){dojo.forEach(dojo.query("[widgetId]",_30f).map(dijit.byNode),function(w){if(w._destroyOnRemove){w.destroy();delete w;}else{if(w.domNode&&w.domNode.parentNode){w.domNode.parentNode.removeChild(w.domNode);}}});}},onBeforeRow:function(_310,_311){this._onBeforeRow(_310,_311);if(_310>=0){this._cleanupRowWidgets(this.getRowNode(_310));}},onAfterRow:function(_312,_313,_314){this._onAfterRow(_312,_313,_314);var g=this.grid;dojo.forEach(dojo.query(".dojoxGridStubNode",_314),function(n){if(n&&n.parentNode){var lw=n.getAttribute("linkWidget");var _315=window.parseInt(dojo.attr(n,"cellIdx"),10);var _316=g.getCell(_315);var w=dijit.byId(lw);if(w){n.parentNode.replaceChild(w.domNode,n);if(!w._started){w.startup();}}else{n.innerHTML="";}}},this);},testFlexCells:function(){this.flexCells=false;for(var j=0,row;(row=this.structure.cells[j]);j++){for(var i=0,cell;(cell=row[i]);i++){cell.view=this;this.flexCells=this.flexCells||cell.isFlex();}}return this.flexCells;},updateStructure:function(){this.header.update();this.content.update();},getScrollbarWidth:function(){var _317=this.hasVScrollbar();var _318=dojo.style(this.scrollboxNode,"overflow");if(this.noscroll||!_318||_318=="hidden"){_317=false;}else{if(_318=="scroll"){_317=true;}}return (_317?dojox.html.metrics.getScrollbar().w:0);},getColumnsWidth:function(){var h=this.headerContentNode;return h&&h.firstChild?h.firstChild.offsetWidth:0;},setColumnsWidth:function(_319){this.headerContentNode.firstChild.style.width=_319+"px";if(this.viewWidth){this.viewWidth=_319+"px";}},getWidth:function(){return this.viewWidth||(this.getColumnsWidth()+this.getScrollbarWidth())+"px";},getContentWidth:function(){return Math.max(0,dojo._getContentBox(this.domNode).w-this.getScrollbarWidth())+"px";},render:function(){this.scrollboxNode.style.height="";this.renderHeader();if(this._togglingColumn>=0){this.setColumnsWidth(this.getColumnsWidth()-this._togglingColumn);this._togglingColumn=-1;}var _31a=this.grid.layout.cells;var _31b=dojo.hitch(this,function(node,_31c){var inc=_31c?-1:1;var idx=this.header.getCellNodeIndex(node)+inc;var cell=_31a[idx];while(cell&&cell.getHeaderNode()&&cell.getHeaderNode().style.display=="none"){idx+=inc;cell=_31a[idx];}if(cell){return cell.getHeaderNode();}return null;});if(this.grid.columnReordering&&this.simpleStructure){if(this.source){this.source.destroy();}var _31d="dojoxGrid_bottomMarker";var _31e="dojoxGrid_topMarker";if(this.bottomMarker){dojo.destroy(this.bottomMarker);}this.bottomMarker=dojo.byId(_31d);if(this.topMarker){dojo.destroy(this.topMarker);}this.topMarker=dojo.byId(_31e);if(!this.bottomMarker){this.bottomMarker=dojo.create("div",{"id":_31d,"class":"dojoxGridColPlaceBottom"},dojo.body());this._hide(this.bottomMarker);this.topMarker=dojo.create("div",{"id":_31e,"class":"dojoxGridColPlaceTop"},dojo.body());this._hide(this.topMarker);}this.arrowDim=dojo.contentBox(this.bottomMarker);var _31f=dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;this.source=new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0],{horizontal:true,accept:["gridColumn_"+this.grid.id],viewIndex:this.index,generateText:false,onMouseDown:dojo.hitch(this,function(e){this.header.decorateEvent(e);if((this.header.overRightResizeArea(e)||this.header.overLeftResizeArea(e))&&this.header.canResize(e)&&!this.header.moveable){this.header.beginColumnResize(e);}else{if(this.grid.headerMenu){this.grid.headerMenu.onCancel(true);}if(e.button===(dojo.isIE?1:0)){dojo.dnd.Source.prototype.onMouseDown.call(this.source,e);}}}),onMouseOver:dojo.hitch(this,function(e){var src=this.source;if(src._getChildByEvent(e)){dojo.dnd.Source.prototype.onMouseOver.apply(src,arguments);}}),_markTargetAnchor:dojo.hitch(this,function(_320){var src=this.source;if(src.current==src.targetAnchor&&src.before==_320){return;}if(src.targetAnchor&&_31b(src.targetAnchor,src.before)){src._removeItemClass(_31b(src.targetAnchor,src.before),src.before?"After":"Before");}dojo.dnd.Source.prototype._markTargetAnchor.call(src,_320);var _321=_320?src.targetAnchor:_31b(src.targetAnchor,src.before);var _322=0;if(!_321){_321=src.targetAnchor;_322=dojo.contentBox(_321).w+this.arrowDim.w/2+2;}var pos=(dojo.position||dojo._abs)(_321,true);var left=Math.floor(pos.x-this.arrowDim.w/2+_322);dojo.style(this.bottomMarker,"visibility","visible");dojo.style(this.topMarker,"visibility","visible");dojo.style(this.bottomMarker,{"left":left+"px","top":(_31f+pos.y)+"px"});dojo.style(this.topMarker,{"left":left+"px","top":(pos.y-this.arrowDim.h)+"px"});if(src.targetAnchor&&_31b(src.targetAnchor,src.before)){src._addItemClass(_31b(src.targetAnchor,src.before),src.before?"After":"Before");}}),_unmarkTargetAnchor:dojo.hitch(this,function(){var src=this.source;if(!src.targetAnchor){return;}if(src.targetAnchor&&_31b(src.targetAnchor,src.before)){src._removeItemClass(_31b(src.targetAnchor,src.before),src.before?"After":"Before");}this._hide(this.bottomMarker);this._hide(this.topMarker);dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);}),destroy:dojo.hitch(this,function(){dojo.disconnect(this._source_conn);dojo.unsubscribe(this._source_sub);dojo.dnd.Source.prototype.destroy.call(this.source);if(this.bottomMarker){dojo.destroy(this.bottomMarker);delete this.bottomMarker;}if(this.topMarker){dojo.destroy(this.topMarker);delete this.topMarker;}}),onDndCancel:dojo.hitch(this,function(){dojo.dnd.Source.prototype.onDndCancel.call(this.source);this._hide(this.bottomMarker);this._hide(this.topMarker);})});this._source_conn=dojo.connect(this.source,"onDndDrop",this,"_onDndDrop");this._source_sub=dojo.subscribe("/dnd/drop/before",this,"_onDndDropBefore");this.source.startup();}},_hide:function(node){dojo.style(node,{left:"-10000px",top:"-10000px","visibility":"hidden"});},_onDndDropBefore:function(_323,_324,copy){if(dojo.dnd.manager().target!==this.source){return;}this.source._targetNode=this.source.targetAnchor;this.source._beforeTarget=this.source.before;var _325=this.grid.views.views;var _326=_325[_323.viewIndex];var _327=_325[this.index];if(_327!=_326){_326.convertColPctToFixed();_327.convertColPctToFixed();}},_onDndDrop:function(_328,_329,copy){if(dojo.dnd.manager().target!==this.source){if(dojo.dnd.manager().source===this.source){this._removingColumn=true;}return;}this._hide(this.bottomMarker);this._hide(this.topMarker);var _32a=function(n){return n?dojo.attr(n,"idx"):null;};var w=dojo.marginBox(_329[0]).w;if(_328.viewIndex!==this.index){var _32b=this.grid.views.views;var _32c=_32b[_328.viewIndex];var _32d=_32b[this.index];if(_32c.viewWidth&&_32c.viewWidth!="auto"){_32c.setColumnsWidth(_32c.getColumnsWidth()-w);}if(_32d.viewWidth&&_32d.viewWidth!="auto"){_32d.setColumnsWidth(_32d.getColumnsWidth());}}var stn=this.source._targetNode;var stb=this.source._beforeTarget;var _32e=this.grid.layout;var idx=this.index;delete this.source._targetNode;delete this.source._beforeTarget;_32e.moveColumn(_328.viewIndex,idx,_32a(_329[0]),_32a(stn),stb);},renderHeader:function(){this.headerContentNode.innerHTML=this.header.generateHtml(this._getHeaderContent);if(this.flexCells){this.contentWidth=this.getContentWidth();this.headerContentNode.firstChild.style.width=this.contentWidth;}dojox.grid.util.fire(this,"onAfterRow",[-1,this.structure.cells,this.headerContentNode]);},_getHeaderContent:function(_32f){var n=_32f.name||_32f.grid.getCellName(_32f);var ret=["<div class=\"dojoxGridSortNode"];if(_32f.index!=_32f.grid.getSortIndex()){ret.push("\">");}else{ret=ret.concat([" ",_32f.grid.sortInfo>0?"dojoxGridSortUp":"dojoxGridSortDown","\"><div class=\"dojoxGridArrowButtonChar\">",_32f.grid.sortInfo>0?"&#9650;":"&#9660;","</div><div class=\"dojoxGridArrowButtonNode\" role=\"presentation\"></div>"]);}ret=ret.concat([n,"</div>"]);return ret.join("");},resize:function(){this.adaptHeight();this.adaptWidth();},hasHScrollbar:function(_330){var _331=this._hasHScroll||false;if(this._hasHScroll==undefined||_330){if(this.noscroll){this._hasHScroll=false;}else{var _332=dojo.style(this.scrollboxNode,"overflow");if(_332=="hidden"){this._hasHScroll=false;}else{if(_332=="scroll"){this._hasHScroll=true;}else{this._hasHScroll=(this.scrollboxNode.offsetWidth-this.getScrollbarWidth()<this.contentNode.offsetWidth);}}}}if(_331!==this._hasHScroll){this.grid.update();}return this._hasHScroll;},hasVScrollbar:function(_333){var _334=this._hasVScroll||false;if(this._hasVScroll==undefined||_333){if(this.noscroll){this._hasVScroll=false;}else{var _335=dojo.style(this.scrollboxNode,"overflow");if(_335=="hidden"){this._hasVScroll=false;}else{if(_335=="scroll"){this._hasVScroll=true;}else{this._hasVScroll=(this.scrollboxNode.scrollHeight>this.scrollboxNode.clientHeight);}}}}if(_334!==this._hasVScroll){this.grid.update();}return this._hasVScroll;},convertColPctToFixed:function(){var _336=false;this.grid.initialWidth="";var _337=dojo.query("th",this.headerContentNode);var _338=dojo.map(_337,function(c,vIdx){var w=c.style.width;dojo.attr(c,"vIdx",vIdx);if(w&&w.slice(-1)=="%"){_336=true;}else{if(w&&w.slice(-2)=="px"){return window.parseInt(w,10);}}return dojo.contentBox(c).w;});if(_336){dojo.forEach(this.grid.layout.cells,function(cell,idx){if(cell.view==this){var _339=cell.view.getHeaderCellNode(cell.index);if(_339&&dojo.hasAttr(_339,"vIdx")){var vIdx=window.parseInt(dojo.attr(_339,"vIdx"));this.setColWidth(idx,_338[vIdx]);dojo.removeAttr(_339,"vIdx");}}},this);return true;}return false;},adaptHeight:function(_33a){if(!this.grid._autoHeight){var h=(this.domNode.style.height&&parseInt(this.domNode.style.height.replace(/px/,""),10))||this.domNode.clientHeight;var self=this;var _33b=function(){var v;for(var i in self.grid.views.views){v=self.grid.views.views[i];if(v!==self&&v.hasHScrollbar()){return true;}}return false;};if(_33a||(this.noscroll&&_33b())){h-=dojox.html.metrics.getScrollbar().h;}dojox.grid.util.setStyleHeightPx(this.scrollboxNode,h);}this.hasVScrollbar(true);},adaptWidth:function(){if(this.flexCells){this.contentWidth=this.getContentWidth();this.headerContentNode.firstChild.style.width=this.contentWidth;}var w=this.scrollboxNode.offsetWidth-this.getScrollbarWidth();if(!this._removingColumn){w=Math.max(w,this.getColumnsWidth())+"px";}else{w=Math.min(w,this.getColumnsWidth())+"px";this._removingColumn=false;}var cn=this.contentNode;cn.style.width=w;this.hasHScrollbar(true);},setSize:function(w,h){var ds=this.domNode.style;var hs=this.headerNode.style;if(w){ds.width=w;hs.width=w;}ds.height=(h>=0?h+"px":"");},renderRow:function(_33c){var _33d=this.createRowNode(_33c);this.buildRow(_33c,_33d);this.grid.edit.restore(this,_33c);return _33d;},createRowNode:function(_33e){var node=document.createElement("div");node.className=this.classTag+"Row";if(this instanceof dojox.grid._RowSelector){dojo.attr(node,"role","presentation");}else{dojo.attr(node,"role","row");if(this.grid.selectionMode!="none"){dojo.attr(node,"aria-selected","false");}}node[dojox.grid.util.gridViewTag]=this.id;node[dojox.grid.util.rowIndexTag]=_33e;this.rowNodes[_33e]=node;return node;},buildRow:function(_33f,_340){this.buildRowContent(_33f,_340);this.styleRow(_33f,_340);},buildRowContent:function(_341,_342){_342.innerHTML=this.content.generateHtml(_341,_341);if(this.flexCells&&this.contentWidth){_342.firstChild.style.width=this.contentWidth;}dojox.grid.util.fire(this,"onAfterRow",[_341,this.structure.cells,_342]);},rowRemoved:function(_343){if(_343>=0){this._cleanupRowWidgets(this.getRowNode(_343));}this.grid.edit.save(this,_343);delete this.rowNodes[_343];},getRowNode:function(_344){return this.rowNodes[_344];},getCellNode:function(_345,_346){var row=this.getRowNode(_345);if(row){return this.content.getCellNode(row,_346);}},getHeaderCellNode:function(_347){if(this.headerContentNode){return this.header.getCellNode(this.headerContentNode,_347);}},styleRow:function(_348,_349){_349._style=_30b(_349);this.styleRowNode(_348,_349);},styleRowNode:function(_34a,_34b){if(_34b){this.doStyleRowNode(_34a,_34b);}},doStyleRowNode:function(_34c,_34d){this.grid.styleRowNode(_34c,_34d);},updateRow:function(_34e){var _34f=this.getRowNode(_34e);if(_34f){_34f.style.height="";this.buildRow(_34e,_34f);}return _34f;},updateRowStyles:function(_350){this.styleRowNode(_350,this.getRowNode(_350));},lastTop:0,firstScroll:0,doscroll:function(_351){var _352=dojo._isBodyLtr();if(this.firstScroll<2){if((!_352&&this.firstScroll==1)||(_352&&this.firstScroll===0)){var s=dojo.marginBox(this.headerNodeContainer);if(dojo.isIE){this.headerNodeContainer.style.width=s.w+this.getScrollbarWidth()+"px";}else{if(dojo.isMoz){this.headerNodeContainer.style.width=s.w-this.getScrollbarWidth()+"px";this.scrollboxNode.scrollLeft=_352?this.scrollboxNode.clientWidth-this.scrollboxNode.scrollWidth:this.scrollboxNode.scrollWidth-this.scrollboxNode.clientWidth;}}}this.firstScroll++;}this.headerNode.scrollLeft=this.scrollboxNode.scrollLeft;var top=this.scrollboxNode.scrollTop;if(top!==this.lastTop){this.grid.scrollTo(top);}},setScrollTop:function(_353){this.lastTop=_353;this.scrollboxNode.scrollTop=_353;return this.scrollboxNode.scrollTop;},doContentEvent:function(e){if(this.content.decorateEvent(e)){this.grid.onContentEvent(e);}},doHeaderEvent:function(e){if(this.header.decorateEvent(e)){this.grid.onHeaderEvent(e);}},dispatchContentEvent:function(e){return this.content.dispatchEvent(e);},dispatchHeaderEvent:function(e){return this.header.dispatchEvent(e);},setColWidth:function(_354,_355){this.grid.setCellWidth(_354,_355+"px");},update:function(){if(!this.domNode){return;}this.content.update();this.grid.update();var left=this.scrollboxNode.scrollLeft;this.scrollboxNode.scrollLeft=left;this.headerNode.scrollLeft=left;}});dojo.declare("dojox.grid._GridAvatar",dojo.dnd.Avatar,{construct:function(){var dd=dojo.doc;var a=dd.createElement("table");a.cellPadding=a.cellSpacing="0";a.className="dojoxGridDndAvatar";a.style.position="absolute";a.style.zIndex=1999;a.style.margin="0px";var b=dd.createElement("tbody");var tr=dd.createElement("tr");var td=dd.createElement("td");var img=dd.createElement("td");tr.className="dojoxGridDndAvatarItem";img.className="dojoxGridDndAvatarItemImage";img.style.width="16px";var _356=this.manager.source,node;if(_356.creator){node=_356._normalizedCreator(_356.getItem(this.manager.nodes[0].id).data,"avatar").node;}else{node=this.manager.nodes[0].cloneNode(true);var _357,_358;if(node.tagName.toLowerCase()=="tr"){_357=dd.createElement("table");_358=dd.createElement("tbody");_358.appendChild(node);_357.appendChild(_358);node=_357;}else{if(node.tagName.toLowerCase()=="th"){_357=dd.createElement("table");_358=dd.createElement("tbody");var r=dd.createElement("tr");_357.cellPadding=_357.cellSpacing="0";r.appendChild(node);_358.appendChild(r);_357.appendChild(_358);node=_357;}}}node.id="";td.appendChild(node);tr.appendChild(img);tr.appendChild(td);dojo.style(tr,"opacity",0.9);b.appendChild(tr);a.appendChild(b);this.node=a;var m=dojo.dnd.manager();this.oldOffsetY=m.OFFSET_Y;m.OFFSET_Y=1;},destroy:function(){dojo.dnd.manager().OFFSET_Y=this.oldOffsetY;this.inherited(arguments);}});var _359=dojo.dnd.manager().makeAvatar;dojo.dnd.manager().makeAvatar=function(){var src=this.source;if(src.viewIndex!==undefined&&!dojo.hasClass(dojo.body(),"dijit_a11y")){return new dojox.grid._GridAvatar(this);}return _359.call(dojo.dnd.manager());};})();}if(!dojo._hasResource["dojox.grid._RowSelector"]){dojo._hasResource["dojox.grid._RowSelector"]=true;dojo.provide("dojox.grid._RowSelector");dojo.declare("dojox.grid._RowSelector",dojox.grid._View,{defaultWidth:"2em",noscroll:true,padBorderWidth:2,buildRendering:function(){this.inherited("buildRendering",arguments);this.scrollboxNode.style.overflow="hidden";this.headerNode.style.visibility="hidden";},getWidth:function(){return this.viewWidth||this.defaultWidth;},buildRowContent:function(_35a,_35b){var w=this.contentWidth||0;_35b.innerHTML="<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;height:1px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr><td class=\"dojoxGridRowbarInner\">&nbsp;</td></tr></table>";},renderHeader:function(){},updateRow:function(){},resize:function(){this.adaptHeight();},adaptWidth:function(){if(!("contentWidth" in this)&&this.contentNode){this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;}},doStyleRowNode:function(_35c,_35d){var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];if(this.grid.rows.isOver(_35c)){n.push("dojoxGridRowbarOver");}if(this.grid.selection.isSelected(_35c)){n.push("dojoxGridRowbarSelected");}_35d.className=n.join(" ");},domouseover:function(e){this.grid.onMouseOverRow(e);},domouseout:function(e){if(!this.isIntraRowEvent(e)){this.grid.onMouseOutRow(e);}}});}if(!dojo._hasResource["dojox.grid._Layout"]){dojo._hasResource["dojox.grid._Layout"]=true;dojo.provide("dojox.grid._Layout");dojo.declare("dojox.grid._Layout",null,{constructor:function(_35e){this.grid=_35e;},cells:[],structure:null,defaultWidth:"6em",moveColumn:function(_35f,_360,_361,_362,_363){var _364=this.structure[_35f].cells[0];var _365=this.structure[_360].cells[0];var cell=null;var _366=0;var _367=0;for(var i=0,c;c=_364[i];i++){if(c.index==_361){_366=i;break;}}cell=_364.splice(_366,1)[0];cell.view=this.grid.views.views[_360];for(i=0,c=null;c=_365[i];i++){if(c.index==_362){_367=i;break;}}if(!_363){_367+=1;}_365.splice(_367,0,cell);var _368=this.grid.getCell(this.grid.getSortIndex());if(_368){_368._currentlySorted=this.grid.getSortAsc();}this.cells=[];_361=0;var v;for(i=0;v=this.structure[i];i++){for(var j=0,cs;cs=v.cells[j];j++){for(var k=0;c=cs[k];k++){c.index=_361;this.cells.push(c);if("_currentlySorted" in c){var si=_361+1;si*=c._currentlySorted?1:-1;this.grid.sortInfo=si;delete c._currentlySorted;}_361++;}}}this.grid.setupHeaderMenu();},setColumnVisibility:function(_369,_36a){var cell=this.cells[_369];if(cell.hidden==_36a){cell.hidden=!_36a;var v=cell.view,w=v.viewWidth;if(w&&w!="auto"){v._togglingColumn=dojo.marginBox(cell.getHeaderNode()).w||0;}v.update();return true;}else{return false;}},addCellDef:function(_36b,_36c,_36d){var self=this;var _36e=function(_36f){var w=0;if(_36f.colSpan>1){w=0;}else{w=_36f.width||self._defaultCellProps.width||self.defaultWidth;if(!isNaN(w)){w=w+"em";}}return w;};var _370={grid:this.grid,subrow:_36b,layoutIndex:_36c,index:this.cells.length};if(_36d&&_36d instanceof dojox.grid.cells._Base){var _371=dojo.clone(_36d);_370.unitWidth=_36e(_371._props);_371=dojo.mixin(_371,this._defaultCellProps,_36d._props,_370);return _371;}var _372=_36d.type||this._defaultCellProps.type||dojox.grid.cells.Cell;_370.unitWidth=_36e(_36d);return new _372(dojo.mixin({},this._defaultCellProps,_36d,_370));},addRowDef:function(_373,_374){var _375=[];var _376=0,_377=0,_378=true;for(var i=0,def,cell;(def=_374[i]);i++){cell=this.addCellDef(_373,i,def);_375.push(cell);this.cells.push(cell);if(_378&&cell.relWidth){_376+=cell.relWidth;}else{if(cell.width){var w=cell.width;if(typeof w=="string"&&w.slice(-1)=="%"){_377+=window.parseInt(w,10);}else{if(w=="auto"){_378=false;}}}}}if(_376&&_378){dojo.forEach(_375,function(cell){if(cell.relWidth){cell.width=cell.unitWidth=((cell.relWidth/_376)*(100-_377))+"%";}});}return _375;},addRowsDef:function(_379){var _37a=[];if(dojo.isArray(_379)){if(dojo.isArray(_379[0])){for(var i=0,row;_379&&(row=_379[i]);i++){_37a.push(this.addRowDef(i,row));}}else{_37a.push(this.addRowDef(0,_379));}}return _37a;},addViewDef:function(_37b){this._defaultCellProps=_37b.defaultCell||{};if(_37b.width&&_37b.width=="auto"){delete _37b.width;}return dojo.mixin({},_37b,{cells:this.addRowsDef(_37b.rows||_37b.cells)});},setStructure:function(_37c){this.fieldIndex=0;this.cells=[];var s=this.structure=[];if(this.grid.rowSelector){var sel={type:dojox._scopeName+".grid._RowSelector"};if(dojo.isString(this.grid.rowSelector)){var _37d=this.grid.rowSelector;if(_37d=="false"){sel=null;}else{if(_37d!="true"){sel["width"]=_37d;}}}else{if(!this.grid.rowSelector){sel=null;}}if(sel){s.push(this.addViewDef(sel));}}var _37e=function(def){return ("name" in def||"field" in def||"get" in def);};var _37f=function(def){if(dojo.isArray(def)){if(dojo.isArray(def[0])||_37e(def[0])){return true;}}return false;};var _380=function(def){return (def!==null&&dojo.isObject(def)&&("cells" in def||"rows" in def||("type" in def&&!_37e(def))));};if(dojo.isArray(_37c)){var _381=false;for(var i=0,st;(st=_37c[i]);i++){if(_380(st)){_381=true;break;}}if(!_381){s.push(this.addViewDef({cells:_37c}));}else{for(i=0;(st=_37c[i]);i++){if(_37f(st)){s.push(this.addViewDef({cells:st}));}else{if(_380(st)){s.push(this.addViewDef(st));}}}}}else{if(_380(_37c)){s.push(this.addViewDef(_37c));}}this.cellCount=this.cells.length;this.grid.setupHeaderMenu();}});}if(!dojo._hasResource["dojox.grid._ViewManager"]){dojo._hasResource["dojox.grid._ViewManager"]=true;dojo.provide("dojox.grid._ViewManager");dojo.declare("dojox.grid._ViewManager",null,{constructor:function(_382){this.grid=_382;},defaultWidth:200,views:[],resize:function(){this.onEach("resize");},render:function(){this.onEach("render");},addView:function(_383){_383.idx=this.views.length;this.views.push(_383);},destroyViews:function(){for(var i=0,v;v=this.views[i];i++){v.destroy();}this.views=[];},getContentNodes:function(){var _384=[];for(var i=0,v;v=this.views[i];i++){_384.push(v.contentNode);}return _384;},forEach:function(_385){for(var i=0,v;v=this.views[i];i++){_385(v,i);}},onEach:function(_386,_387){_387=_387||[];for(var i=0,v;v=this.views[i];i++){if(_386 in v){v[_386].apply(v,_387);}}},normalizeHeaderNodeHeight:function(){var _388=[];for(var i=0,v;(v=this.views[i]);i++){if(v.headerContentNode.firstChild){_388.push(v.headerContentNode);}}this.normalizeRowNodeHeights(_388);},normalizeRowNodeHeights:function(_389){var h=0;var _38a=[];if(this.grid.rowHeight){h=this.grid.rowHeight;}else{if(_389.length<=1){return;}for(var i=0,n;(n=_389[i]);i++){if(!dojo.hasClass(n,"dojoxGridNonNormalizedCell")){_38a[i]=n.firstChild.offsetHeight;h=Math.max(h,_38a[i]);}}h=(h>=0?h:0);if(dojo.isMoz&&h){h++;}}for(i=0;(n=_389[i]);i++){if(_38a[i]!=h){n.firstChild.style.height=h+"px";}}},resetHeaderNodeHeight:function(){for(var i=0,v,n;(v=this.views[i]);i++){n=v.headerContentNode.firstChild;if(n){n.style.height="";}}},renormalizeRow:function(_38b){var _38c=[];for(var i=0,v,n;(v=this.views[i])&&(n=v.getRowNode(_38b));i++){n.firstChild.style.height="";_38c.push(n);}this.normalizeRowNodeHeights(_38c);},getViewWidth:function(_38d){return this.views[_38d].getWidth()||this.defaultWidth;},measureHeader:function(){this.resetHeaderNodeHeight();this.forEach(function(_38e){_38e.headerContentNode.style.height="";});var h=0;this.forEach(function(_38f){h=Math.max(_38f.headerNode.offsetHeight,h);});return h;},measureContent:function(){var h=0;this.forEach(function(_390){h=Math.max(_390.domNode.offsetHeight,h);});return h;},findClient:function(_391){var c=this.grid.elasticView||-1;if(c<0){for(var i=1,v;(v=this.views[i]);i++){if(v.viewWidth){for(i=1;(v=this.views[i]);i++){if(!v.viewWidth){c=i;break;}}break;}}}if(c<0){c=Math.floor(this.views.length/2);}return c;},arrange:function(l,w){var i,v,vw,len=this.views.length;var c=(w<=0?len:this.findClient());var _392=function(v,l){var ds=v.domNode.style;var hs=v.headerNode.style;if(!dojo._isBodyLtr()){ds.right=l+"px";if(dojo.isMoz){hs.right=l+v.getScrollbarWidth()+"px";hs.width=parseInt(hs.width,10)-v.getScrollbarWidth()+"px";}else{hs.right=l+"px";}}else{ds.left=l+"px";hs.left=l+"px";}ds.top=0+"px";hs.top=0;};for(i=0;(v=this.views[i])&&(i<c);i++){vw=this.getViewWidth(i);v.setSize(vw,0);_392(v,l);if(v.headerContentNode&&v.headerContentNode.firstChild){vw=v.getColumnsWidth()+v.getScrollbarWidth();}else{vw=v.domNode.offsetWidth;}l+=vw;}i++;var r=w;for(var j=len-1;(v=this.views[j])&&(i<=j);j--){vw=this.getViewWidth(j);v.setSize(vw,0);vw=v.domNode.offsetWidth;r-=vw;_392(v,r);}if(c<len){v=this.views[c];vw=Math.max(1,r-l);v.setSize(vw+"px",0);_392(v,l);}return l;},renderRow:function(_393,_394,_395){var _396=[];for(var i=0,v,n,_397;(v=this.views[i])&&(n=_394[i]);i++){_397=v.renderRow(_393);n.appendChild(_397);_396.push(_397);}if(!_395){this.normalizeRowNodeHeights(_396);}},rowRemoved:function(_398){this.onEach("rowRemoved",[_398]);},updateRow:function(_399,_39a){for(var i=0,v;v=this.views[i];i++){v.updateRow(_399);}if(!_39a){this.renormalizeRow(_399);}},updateRowStyles:function(_39b){this.onEach("updateRowStyles",[_39b]);},setScrollTop:function(_39c){var top=_39c;for(var i=0,v;v=this.views[i];i++){top=v.setScrollTop(_39c);if(dojo.isIE&&v.headerNode&&v.scrollboxNode){v.headerNode.scrollLeft=v.scrollboxNode.scrollLeft;}}return top;},getFirstScrollingView:function(){for(var i=0,v;(v=this.views[i]);i++){if(v.hasHScrollbar()||v.hasVScrollbar()){return v;}}return null;}});}if(!dojo._hasResource["dojox.grid._RowManager"]){dojo._hasResource["dojox.grid._RowManager"]=true;dojo.provide("dojox.grid._RowManager");(function(){var _39d=function(_39e,_39f){if(_39e.style.cssText==undefined){_39e.setAttribute("style",_39f);}else{_39e.style.cssText=_39f;}};dojo.declare("dojox.grid._RowManager",null,{constructor:function(_3a0){this.grid=_3a0;},linesToEms:2,overRow:-2,prepareStylingRow:function(_3a1,_3a2){return {index:_3a1,node:_3a2,odd:Boolean(_3a1&1),selected:!!this.grid.selection.isSelected(_3a1),over:this.isOver(_3a1),customStyles:"",customClasses:"dojoxGridRow"};},styleRowNode:function(_3a3,_3a4){var row=this.prepareStylingRow(_3a3,_3a4);this.grid.onStyleRow(row);this.applyStyles(row);},applyStyles:function(_3a5){var i=_3a5;i.node.className=i.customClasses;var h=i.node.style.height;_39d(i.node,i.customStyles+";"+(i.node._style||""));i.node.style.height=h;},updateStyles:function(_3a6){this.grid.updateRowStyles(_3a6);},setOverRow:function(_3a7){var last=this.overRow;this.overRow=_3a7;if((last!=this.overRow)&&(dojo.isString(last)||last>=0)){this.updateStyles(last);}this.updateStyles(this.overRow);},isOver:function(_3a8){return (this.overRow==_3a8&&!dojo.hasClass(this.grid.domNode,"dojoxGridColumnResizing"));}});})();}if(!dojo._hasResource["dojox.grid._FocusManager"]){dojo._hasResource["dojox.grid._FocusManager"]=true;dojo.provide("dojox.grid._FocusManager");dojo.declare("dojox.grid._FocusManager",null,{constructor:function(_3a9){this.grid=_3a9;this.cell=null;this.rowIndex=-1;this._connects=[];this.headerMenu=this.grid.headerMenu;this._connects.push(dojo.connect(this.grid.domNode,"onfocus",this,"doFocus"));this._connects.push(dojo.connect(this.grid.domNode,"onblur",this,"doBlur"));this._connects.push(dojo.connect(this.grid.domNode,"oncontextmenu",this,"doContextMenu"));this._connects.push(dojo.connect(this.grid.lastFocusNode,"onfocus",this,"doLastNodeFocus"));this._connects.push(dojo.connect(this.grid.lastFocusNode,"onblur",this,"doLastNodeBlur"));this._connects.push(dojo.connect(this.grid,"_onFetchComplete",this,"_delayedCellFocus"));this._connects.push(dojo.connect(this.grid,"postrender",this,"_delayedHeaderFocus"));},destroy:function(){dojo.forEach(this._connects,dojo.disconnect);delete this.grid;delete this.cell;},_colHeadNode:null,_colHeadFocusIdx:null,_contextMenuBindNode:null,tabbingOut:false,focusClass:"dojoxGridCellFocus",focusView:null,initFocusView:function(){this.focusView=this.grid.views.getFirstScrollingView()||this.focusView;this._initColumnHeaders();},isFocusCell:function(_3aa,_3ab){return (this.cell==_3aa)&&(this.rowIndex==_3ab);},isLastFocusCell:function(){if(this.cell){return (this.rowIndex==this.grid.rowCount-1)&&(this.cell.index==this.grid.layout.cellCount-1);}return false;},isFirstFocusCell:function(){if(this.cell){return (this.rowIndex===0)&&(this.cell.index===0);}return false;},isNoFocusCell:function(){return (this.rowIndex<0)||!this.cell;},isNavHeader:function(){return (!!this._colHeadNode);},getHeaderIndex:function(){if(this._colHeadNode){return dojo.indexOf(this._findHeaderCells(),this._colHeadNode);}else{return -1;}},_focusifyCellNode:function(_3ac){var n=this.cell&&this.cell.getNode(this.rowIndex);if(n){dojo.toggleClass(n,this.focusClass,_3ac);if(_3ac){var sl=this.scrollIntoView();try{if(!this.grid.edit.isEditing()){dojox.grid.util.fire(n,"focus");if(sl){this.cell.view.scrollboxNode.scrollLeft=sl;}}}catch(e){}}}},_delayedCellFocus:function(){if(this.isNavHeader()||!this.grid._focused){return;}var n=this.cell&&this.cell.getNode(this.rowIndex);if(n){try{if(!this.grid.edit.isEditing()){dojo.toggleClass(n,this.focusClass,true);this.blurHeader();dojox.grid.util.fire(n,"focus");}}catch(e){}}},_delayedHeaderFocus:function(){if(this.isNavHeader()){this.focusHeader();this.grid.domNode.focus();}},_initColumnHeaders:function(){var _3ad=this._findHeaderCells();for(var i=0;i<_3ad.length;i++){this._connects.push(dojo.connect(_3ad[i],"onfocus",this,"doColHeaderFocus"));this._connects.push(dojo.connect(_3ad[i],"onblur",this,"doColHeaderBlur"));}},_findHeaderCells:function(){var _3ae=dojo.query("th",this.grid.viewsHeaderNode);var _3af=[];for(var i=0;i<_3ae.length;i++){var _3b0=_3ae[i];var _3b1=dojo.hasAttr(_3b0,"tabIndex");var _3b2=dojo.attr(_3b0,"tabIndex");if(_3b1&&_3b2<0){_3af.push(_3b0);}}return _3af;},_setActiveColHeader:function(_3b3,_3b4,_3b5){dojo.attr(this.grid.domNode,"aria-activedescendant",_3b3.id);if(_3b5!=null&&_3b5>=0&&_3b5!=_3b4){dojo.toggleClass(this._findHeaderCells()[_3b5],this.focusClass,false);}dojo.toggleClass(_3b3,this.focusClass,true);this._colHeadNode=_3b3;this._colHeadFocusIdx=_3b4;this._scrollHeader(this._colHeadFocusIdx);},scrollIntoView:function(){var info=(this.cell?this._scrollInfo(this.cell):null);if(!info||!info.s){return null;}var rt=this.grid.scroller.findScrollTop(this.rowIndex);if(info.n&&info.sr){if(info.n.offsetLeft+info.n.offsetWidth>info.sr.l+info.sr.w){info.s.scrollLeft=info.n.offsetLeft+info.n.offsetWidth-info.sr.w;}else{if(info.n.offsetLeft<info.sr.l){info.s.scrollLeft=info.n.offsetLeft;}}}if(info.r&&info.sr){if(rt+info.r.offsetHeight>info.sr.t+info.sr.h){this.grid.setScrollTop(rt+info.r.offsetHeight-info.sr.h);}else{if(rt<info.sr.t){this.grid.setScrollTop(rt);}}}return info.s.scrollLeft;},_scrollInfo:function(cell,_3b6){if(cell){var cl=cell,sbn=cl.view.scrollboxNode,sbnr={w:sbn.clientWidth,l:sbn.scrollLeft,t:sbn.scrollTop,h:sbn.clientHeight},rn=cl.view.getRowNode(this.rowIndex);return {c:cl,s:sbn,sr:sbnr,n:(_3b6?_3b6:cell.getNode(this.rowIndex)),r:rn};}return null;},_scrollHeader:function(_3b7){var info=null;if(this._colHeadNode){var cell=this.grid.getCell(_3b7);info=this._scrollInfo(cell,cell.getNode(0));}if(info&&info.s&&info.sr&&info.n){var _3b8=info.sr.l+info.sr.w;if(info.n.offsetLeft+info.n.offsetWidth>_3b8){info.s.scrollLeft=info.n.offsetLeft+info.n.offsetWidth-info.sr.w;}else{if(info.n.offsetLeft<info.sr.l){info.s.scrollLeft=info.n.offsetLeft;}else{if(dojo.isIE<=7&&cell&&cell.view.headerNode){cell.view.headerNode.scrollLeft=info.s.scrollLeft;}}}}},_isHeaderHidden:function(){var _3b9=this.focusView;if(!_3b9){for(var i=0,_3ba;(_3ba=this.grid.views.views[i]);i++){if(_3ba.headerNode){_3b9=_3ba;break;}}}return (_3b9&&dojo.getComputedStyle(_3b9.headerNode).display=="none");},colSizeAdjust:function(e,_3bb,_3bc){var _3bd=this._findHeaderCells();var view=this.focusView;if(!view){for(var i=0,_3be;(_3be=this.grid.views.views[i]);i++){if(_3be.header.tableMap.map){view=_3be;break;}}}var _3bf=_3bd[_3bb];if(!view||(_3bb==_3bd.length-1&&_3bb===0)){return;}view.content.baseDecorateEvent(e);e.cellNode=_3bf;e.cellIndex=view.content.getCellNodeIndex(e.cellNode);e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);if(view.header.canResize(e)){var _3c0={l:_3bc};var drag=view.header.colResizeSetup(e,false);view.header.doResizeColumn(drag,null,_3c0);view.update();}},styleRow:function(_3c1){return;},setFocusIndex:function(_3c2,_3c3){this.setFocusCell(this.grid.getCell(_3c3),_3c2);},setFocusCell:function(_3c4,_3c5){if(_3c4&&!this.isFocusCell(_3c4,_3c5)){this.tabbingOut=false;if(this._colHeadNode){this.blurHeader();}this._colHeadNode=this._colHeadFocusIdx=null;this.focusGridView();this._focusifyCellNode(false);this.cell=_3c4;this.rowIndex=_3c5;this._focusifyCellNode(true);}if(dojo.isOpera){setTimeout(dojo.hitch(this.grid,"onCellFocus",this.cell,this.rowIndex),1);}else{this.grid.onCellFocus(this.cell,this.rowIndex);}},next:function(){if(this.cell){var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1,rc=this.grid.rowCount-1;if(col>cc){col=0;row++;}if(row>rc){col=cc;row=rc;}if(this.grid.edit.isEditing()){var _3c6=this.grid.getCell(col);if(!this.isLastFocusCell()&&!_3c6.editable){this.cell=_3c6;this.rowIndex=row;this.next();return;}}this.setFocusIndex(row,col);}},previous:function(){if(this.cell){var row=(this.rowIndex||0),col=(this.cell.index||0)-1;if(col<0){col=this.grid.layout.cellCount-1;row--;}if(row<0){row=0;col=0;}if(this.grid.edit.isEditing()){var _3c7=this.grid.getCell(col);if(!this.isFirstFocusCell()&&!_3c7.editable){this.cell=_3c7;this.rowIndex=row;this.previous();return;}}this.setFocusIndex(row,col);}},move:function(_3c8,_3c9){var _3ca=_3c9<0?-1:1;if(this.isNavHeader()){var _3cb=this._findHeaderCells();var _3cc=currentIdx=dojo.indexOf(_3cb,this._colHeadNode);currentIdx+=_3c9;while(currentIdx>=0&&currentIdx<_3cb.length&&_3cb[currentIdx].style.display=="none"){currentIdx+=_3ca;}if((currentIdx>=0)&&(currentIdx<_3cb.length)){this._setActiveColHeader(_3cb[currentIdx],currentIdx,_3cc);}}else{if(this.cell){var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,row=Math.min(rc,Math.max(0,r+_3c8));if(_3c8){if(_3c8>0){if(row>sc.getLastPageRow(sc.page)){this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));}}else{if(_3c8<0){if(row<=sc.getPageRow(sc.page)){this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));}}}}var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_3c9));var cell=this.grid.getCell(col);while(col>=0&&col<cc&&cell&&cell.hidden===true){col+=_3ca;cell=this.grid.getCell(col);}if(!cell||cell.hidden===true){col=i;}this.setFocusIndex(row,col);if(_3c8){this.grid.updateRow(r);}}}},previousKey:function(e){if(this.grid.edit.isEditing()){dojo.stopEvent(e);this.previous();}else{if(!this.isNavHeader()&&!this._isHeaderHidden()){this.grid.domNode.focus();dojo.stopEvent(e);}else{this.tabOut(this.grid.domNode);if(this._colHeadFocusIdx!=null){dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx],this.focusClass,false);this._colHeadFocusIdx=null;}this._focusifyCellNode(false);}}},nextKey:function(e){var _3cd=(this.grid.rowCount===0);if(e.target===this.grid.domNode&&this._colHeadFocusIdx==null){this.focusHeader();dojo.stopEvent(e);}else{if(this.isNavHeader()){this.blurHeader();if(!this.findAndFocusGridCell()){this.tabOut(this.grid.lastFocusNode);}this._colHeadNode=this._colHeadFocusIdx=null;}else{if(this.grid.edit.isEditing()){dojo.stopEvent(e);this.next();}else{this.tabOut(this.grid.lastFocusNode);}}}},tabOut:function(_3ce){this.tabbingOut=true;_3ce.focus();},focusGridView:function(){dojox.grid.util.fire(this.focusView,"focus");},focusGrid:function(_3cf){this.focusGridView();this._focusifyCellNode(true);},findAndFocusGridCell:function(){var _3d0=true;var _3d1=(this.grid.rowCount===0);if(this.isNoFocusCell()&&!_3d1){var _3d2=0;var cell=this.grid.getCell(_3d2);if(cell.hidden){_3d2=this.isNavHeader()?this._colHeadFocusIdx:0;}this.setFocusIndex(0,_3d2);}else{if(this.cell&&!_3d1){if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){this.grid.scrollToRow(this.rowIndex);}this.focusGrid();}else{_3d0=false;}}this._colHeadNode=this._colHeadFocusIdx=null;return _3d0;},focusHeader:function(){var _3d3=this._findHeaderCells();var _3d4=this._colHeadFocusIdx;if(this._isHeaderHidden()){this.findAndFocusGridCell();}else{if(!this._colHeadFocusIdx){if(this.isNoFocusCell()){this._colHeadFocusIdx=0;}else{this._colHeadFocusIdx=this.cell.index;}}}this._colHeadNode=_3d3[this._colHeadFocusIdx];while(this._colHeadNode&&this._colHeadFocusIdx>=0&&this._colHeadFocusIdx<_3d3.length&&this._colHeadNode.style.display=="none"){this._colHeadFocusIdx++;this._colHeadNode=_3d3[this._colHeadFocusIdx];}if(this._colHeadNode&&this._colHeadNode.style.display!="none"){if(this.headerMenu&&this._contextMenuBindNode!=this.grid.domNode){this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);this.headerMenu.bindDomNode(this.grid.domNode);this._contextMenuBindNode=this.grid.domNode;}this._setActiveColHeader(this._colHeadNode,this._colHeadFocusIdx,_3d4);this._scrollHeader(this._colHeadFocusIdx);this._focusifyCellNode(false);}else{this.findAndFocusGridCell();}},blurHeader:function(){dojo.removeClass(this._colHeadNode,this.focusClass);dojo.removeAttr(this.grid.domNode,"aria-activedescendant");if(this.headerMenu&&this._contextMenuBindNode==this.grid.domNode){var _3d5=this.grid.viewsHeaderNode;this.headerMenu.unBindDomNode(this.grid.domNode);this.headerMenu.bindDomNode(_3d5);this._contextMenuBindNode=_3d5;}},doFocus:function(e){if(e&&e.target!=e.currentTarget){dojo.stopEvent(e);return;}if(!this.tabbingOut){this.focusHeader();}this.tabbingOut=false;dojo.stopEvent(e);},doBlur:function(e){dojo.stopEvent(e);},doContextMenu:function(e){if(!this.headerMenu){dojo.stopEvent(e);}},doLastNodeFocus:function(e){if(this.tabbingOut){this._focusifyCellNode(false);}else{if(this.grid.rowCount>0){if(this.isNoFocusCell()){this.setFocusIndex(0,0);}this._focusifyCellNode(true);}else{this.focusHeader();}}this.tabbingOut=false;dojo.stopEvent(e);},doLastNodeBlur:function(e){dojo.stopEvent(e);},doColHeaderFocus:function(e){this._setActiveColHeader(e.target,dojo.attr(e.target,"idx"),this._colHeadFocusIdx);this._scrollHeader(this.getHeaderIndex());dojo.stopEvent(e);},doColHeaderBlur:function(e){dojo.toggleClass(e.target,this.focusClass,false);}});}if(!dojo._hasResource["dojox.grid._EditManager"]){dojo._hasResource["dojox.grid._EditManager"]=true;dojo.provide("dojox.grid._EditManager");dojo.declare("dojox.grid._EditManager",null,{constructor:function(_3d6){this.grid=_3d6;this.connections=[];if(dojo.isIE){this.connections.push(dojo.connect(document.body,"onfocus",dojo.hitch(this,"_boomerangFocus")));}},info:{},destroy:function(){dojo.forEach(this.connections,dojo.disconnect);},cellFocus:function(_3d7,_3d8){if(this.grid.singleClickEdit||this.isEditRow(_3d8)){this.setEditCell(_3d7,_3d8);}else{this.apply();}if(this.isEditing()||(_3d7&&_3d7.editable&&_3d7.alwaysEditing)){this._focusEditor(_3d7,_3d8);}},rowClick:function(e){if(this.isEditing()&&!this.isEditRow(e.rowIndex)){this.apply();}},styleRow:function(_3d9){if(_3d9.index==this.info.rowIndex){_3d9.customClasses+=" dojoxGridRowEditing";}},dispatchEvent:function(e){var c=e.cell,ed=(c&&c["editable"])?c:0;return ed&&ed.dispatchEvent(e.dispatch,e);},isEditing:function(){return this.info.rowIndex!==undefined;},isEditCell:function(_3da,_3db){return (this.info.rowIndex===_3da)&&(this.info.cell.index==_3db);},isEditRow:function(_3dc){return this.info.rowIndex===_3dc;},setEditCell:function(_3dd,_3de){if(!this.isEditCell(_3de,_3dd.index)&&this.grid.canEdit&&this.grid.canEdit(_3dd,_3de)){this.start(_3dd,_3de,this.isEditRow(_3de)||_3dd.editable);}},_focusEditor:function(_3df,_3e0){dojox.grid.util.fire(_3df,"focus",[_3e0]);},focusEditor:function(){if(this.isEditing()){this._focusEditor(this.info.cell,this.info.rowIndex);}},_boomerangWindow:500,_shouldCatchBoomerang:function(){return this._catchBoomerang>new Date().getTime();},_boomerangFocus:function(){if(this._shouldCatchBoomerang()){this.grid.focus.focusGrid();this.focusEditor();this._catchBoomerang=0;}},_doCatchBoomerang:function(){if(dojo.isIE){this._catchBoomerang=new Date().getTime()+this._boomerangWindow;}},start:function(_3e1,_3e2,_3e3){this.grid.beginUpdate();this.editorApply();if(this.isEditing()&&!this.isEditRow(_3e2)){this.applyRowEdit();this.grid.updateRow(_3e2);}if(_3e3){this.info={cell:_3e1,rowIndex:_3e2};this.grid.doStartEdit(_3e1,_3e2);this.grid.updateRow(_3e2);}else{this.info={};}this.grid.endUpdate();this.grid.focus.focusGrid();this._focusEditor(_3e1,_3e2);this._doCatchBoomerang();},_editorDo:function(_3e4){var c=this.info.cell;if(c&&c.editable){c[_3e4](this.info.rowIndex);}},editorApply:function(){this._editorDo("apply");},editorCancel:function(){this._editorDo("cancel");},applyCellEdit:function(_3e5,_3e6,_3e7){if(this.grid.canEdit(_3e6,_3e7)){this.grid.doApplyCellEdit(_3e5,_3e7,_3e6.field);}},applyRowEdit:function(){this.grid.doApplyEdit(this.info.rowIndex,this.info.cell.field);},apply:function(){if(this.isEditing()){this.grid.beginUpdate();this.editorApply();this.applyRowEdit();this.info={};this.grid.endUpdate();this.grid.focus.focusGrid();this._doCatchBoomerang();}},cancel:function(){if(this.isEditing()){this.grid.beginUpdate();this.editorCancel();this.info={};this.grid.endUpdate();this.grid.focus.focusGrid();this._doCatchBoomerang();}},save:function(_3e8,_3e9){var c=this.info.cell;if(this.isEditRow(_3e8)&&(!_3e9||c.view==_3e9)&&c.editable){c.save(c,this.info.rowIndex);}},restore:function(_3ea,_3eb){var c=this.info.cell;if(this.isEditRow(_3eb)&&c.view==_3ea&&c.editable){c.restore(c,this.info.rowIndex);}}});}if(!dojo._hasResource["dojox.grid.Selection"]){dojo._hasResource["dojox.grid.Selection"]=true;dojo.provide("dojox.grid.Selection");dojo.declare("dojox.grid.Selection",null,{constructor:function(_3ec){this.grid=_3ec;this.selected=[];this.setMode(_3ec.selectionMode);},mode:"extended",selected:null,updating:0,selectedIndex:-1,setMode:function(mode){if(this.selected.length){this.deselectAll();}if(mode!="extended"&&mode!="multiple"&&mode!="single"&&mode!="none"){this.mode="extended";}else{this.mode=mode;}},onCanSelect:function(_3ed){return this.grid.onCanSelect(_3ed);},onCanDeselect:function(_3ee){return this.grid.onCanDeselect(_3ee);},onSelected:function(_3ef){},onDeselected:function(_3f0){},onChanging:function(){},onChanged:function(){},isSelected:function(_3f1){if(this.mode=="none"){return false;}return this.selected[_3f1];},getFirstSelected:function(){if(!this.selected.length||this.mode=="none"){return -1;}for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){return i;}}return -1;},getNextSelected:function(_3f2){if(this.mode=="none"){return -1;}for(var i=_3f2+1,l=this.selected.length;i<l;i++){if(this.selected[i]){return i;}}return -1;},getSelected:function(){var _3f3=[];for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){_3f3.push(i);}}return _3f3;},getSelectedCount:function(){var c=0;for(var i=0;i<this.selected.length;i++){if(this.selected[i]){c++;}}return c;},_beginUpdate:function(){if(this.updating===0){this.onChanging();}this.updating++;},_endUpdate:function(){this.updating--;if(this.updating===0){this.onChanged();}},select:function(_3f4){if(this.mode=="none"){return;}if(this.mode!="multiple"){this.deselectAll(_3f4);this.addToSelection(_3f4);}else{this.toggleSelect(_3f4);}},addToSelection:function(_3f5){if(this.mode=="none"){return;}if(dojo.isArray(_3f5)){dojo.forEach(_3f5,this.addToSelection,this);return;}_3f5=Number(_3f5);if(this.selected[_3f5]){this.selectedIndex=_3f5;}else{if(this.onCanSelect(_3f5)!==false){this.selectedIndex=_3f5;var _3f6=this.grid.getRowNode(_3f5);if(_3f6){dojo.attr(_3f6,"aria-selected","true");}this._beginUpdate();this.selected[_3f5]=true;this.onSelected(_3f5);this._endUpdate();}}},deselect:function(_3f7){if(this.mode=="none"){return;}if(dojo.isArray(_3f7)){dojo.forEach(_3f7,this.deselect,this);return;}_3f7=Number(_3f7);if(this.selectedIndex==_3f7){this.selectedIndex=-1;}if(this.selected[_3f7]){if(this.onCanDeselect(_3f7)===false){return;}var _3f8=this.grid.getRowNode(_3f7);if(_3f8){dojo.attr(_3f8,"aria-selected","false");}this._beginUpdate();delete this.selected[_3f7];this.onDeselected(_3f7);this._endUpdate();}},setSelected:function(_3f9,_3fa){this[(_3fa?"addToSelection":"deselect")](_3f9);},toggleSelect:function(_3fb){if(dojo.isArray(_3fb)){dojo.forEach(_3fb,this.toggleSelect,this);return;}this.setSelected(_3fb,!this.selected[_3fb]);},_range:function(_3fc,inTo,func){var s=(_3fc>=0?_3fc:inTo),e=inTo;if(s>e){e=s;s=inTo;}for(var i=s;i<=e;i++){func(i);}},selectRange:function(_3fd,inTo){this._range(_3fd,inTo,dojo.hitch(this,"addToSelection"));},deselectRange:function(_3fe,inTo){this._range(_3fe,inTo,dojo.hitch(this,"deselect"));},insert:function(_3ff){this.selected.splice(_3ff,0,false);if(this.selectedIndex>=_3ff){this.selectedIndex++;}},remove:function(_400){this.selected.splice(_400,1);if(this.selectedIndex>=_400){this.selectedIndex--;}},deselectAll:function(_401){for(var i in this.selected){if((i!=_401)&&(this.selected[i]===true)){this.deselect(i);}}},clickSelect:function(_402,_403,_404){if(this.mode=="none"){return;}this._beginUpdate();if(this.mode!="extended"){this.select(_402);}else{var _405=this.selectedIndex;if(!_403){this.deselectAll(_402);}if(_404){this.selectRange(_405,_402);}else{if(_403){this.toggleSelect(_402);}else{this.addToSelection(_402);}}}this._endUpdate();},clickSelectEvent:function(e){this.clickSelect(e.rowIndex,dojo.isCopyKey(e),e.shiftKey);},clear:function(){this._beginUpdate();this.deselectAll();this._endUpdate();}});}if(!dojo._hasResource["dojox.grid._Events"]){dojo._hasResource["dojox.grid._Events"]=true;dojo.provide("dojox.grid._Events");dojo.declare("dojox.grid._Events",null,{cellOverClass:"dojoxGridCellOver",onKeyEvent:function(e){this.dispatchKeyEvent(e);},onContentEvent:function(e){this.dispatchContentEvent(e);},onHeaderEvent:function(e){this.dispatchHeaderEvent(e);},onStyleRow:function(_406){var i=_406;i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over?" dojoxGridRowOver":"");this.focus.styleRow(_406);this.edit.styleRow(_406);},onKeyDown:function(e){if(e.altKey||e.metaKey){return;}var dk=dojo.keys;var _407;switch(e.keyCode){case dk.ESCAPE:this.edit.cancel();break;case dk.ENTER:if(!this.edit.isEditing()){_407=this.focus.getHeaderIndex();if(_407>=0){this.setSortIndex(_407);break;}else{this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);}dojo.stopEvent(e);}if(!e.shiftKey){var _408=this.edit.isEditing();this.edit.apply();if(!_408){this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);}}if(!this.edit.isEditing()){var _409=this.focus.focusView||this.views.views[0];_409.content.decorateEvent(e);this.onRowClick(e);}break;case dk.SPACE:if(!this.edit.isEditing()){_407=this.focus.getHeaderIndex();if(_407>=0){this.setSortIndex(_407);break;}else{this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);}dojo.stopEvent(e);}break;case dk.TAB:this.focus[e.shiftKey?"previousKey":"nextKey"](e);break;case dk.LEFT_ARROW:case dk.RIGHT_ARROW:if(!this.edit.isEditing()){var _40a=e.keyCode;dojo.stopEvent(e);_407=this.focus.getHeaderIndex();if(_407>=0&&(e.shiftKey&&e.ctrlKey)){this.focus.colSizeAdjust(e,_407,(_40a==dk.LEFT_ARROW?-1:1)*5);}else{var _40b=(_40a==dk.LEFT_ARROW)?1:-1;if(dojo._isBodyLtr()){_40b*=-1;}this.focus.move(0,_40b);}}break;case dk.UP_ARROW:if(!this.edit.isEditing()&&this.focus.rowIndex!==0){dojo.stopEvent(e);this.focus.move(-1,0);}break;case dk.DOWN_ARROW:if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){dojo.stopEvent(e);this.focus.move(1,0);}break;case dk.PAGE_UP:if(!this.edit.isEditing()&&this.focus.rowIndex!==0){dojo.stopEvent(e);if(this.focus.rowIndex!=this.scroller.firstVisibleRow+1){this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex,0);}else{this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1,0);}}break;case dk.PAGE_DOWN:if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){dojo.stopEvent(e);if(this.focus.rowIndex!=this.scroller.lastVisibleRow-1){this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1,0);}else{this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1,0);}}break;default:break;}},onMouseOver:function(e){e.rowIndex==-1?this.onHeaderCellMouseOver(e):this.onCellMouseOver(e);},onMouseOut:function(e){e.rowIndex==-1?this.onHeaderCellMouseOut(e):this.onCellMouseOut(e);},onMouseDown:function(e){e.rowIndex==-1?this.onHeaderCellMouseDown(e):this.onCellMouseDown(e);},onMouseOverRow:function(e){if(!this.rows.isOver(e.rowIndex)){this.rows.setOverRow(e.rowIndex);e.rowIndex==-1?this.onHeaderMouseOver(e):this.onRowMouseOver(e);}},onMouseOutRow:function(e){if(this.rows.isOver(-1)){this.onHeaderMouseOut(e);}else{if(!this.rows.isOver(-2)){this.rows.setOverRow(-2);this.onRowMouseOut(e);}}},onMouseDownRow:function(e){if(e.rowIndex!=-1){this.onRowMouseDown(e);}},onCellMouseOver:function(e){if(e.cellNode){dojo.addClass(e.cellNode,this.cellOverClass);}},onCellMouseOut:function(e){if(e.cellNode){dojo.removeClass(e.cellNode,this.cellOverClass);}},onCellMouseDown:function(e){},onCellClick:function(e){this._click[0]=this._click[1];this._click[1]=e;if(!this.edit.isEditCell(e.rowIndex,e.cellIndex)){this.focus.setFocusCell(e.cell,e.rowIndex);}this.onRowClick(e);},onCellDblClick:function(e){if(this._click.length>1&&dojo.isIE){this.edit.setEditCell(this._click[1].cell,this._click[1].rowIndex);}else{if(this._click.length>1&&this._click[0].rowIndex!=this._click[1].rowIndex){this.edit.setEditCell(this._click[0].cell,this._click[0].rowIndex);}else{this.edit.setEditCell(e.cell,e.rowIndex);}}this.onRowDblClick(e);},onCellContextMenu:function(e){this.onRowContextMenu(e);},onCellFocus:function(_40c,_40d){this.edit.cellFocus(_40c,_40d);},onRowClick:function(e){this.edit.rowClick(e);this.selection.clickSelectEvent(e);},onRowDblClick:function(e){},onRowMouseOver:function(e){},onRowMouseOut:function(e){},onRowMouseDown:function(e){},onRowContextMenu:function(e){dojo.stopEvent(e);},onHeaderMouseOver:function(e){},onHeaderMouseOut:function(e){},onHeaderCellMouseOver:function(e){if(e.cellNode){dojo.addClass(e.cellNode,this.cellOverClass);}},onHeaderCellMouseOut:function(e){if(e.cellNode){dojo.removeClass(e.cellNode,this.cellOverClass);}},onHeaderCellMouseDown:function(e){},onHeaderClick:function(e){},onHeaderCellClick:function(e){this.setSortIndex(e.cell.index);this.onHeaderClick(e);},onHeaderDblClick:function(e){},onHeaderCellDblClick:function(e){this.onHeaderDblClick(e);},onHeaderCellContextMenu:function(e){this.onHeaderContextMenu(e);},onHeaderContextMenu:function(e){if(!this.headerMenu){dojo.stopEvent(e);}},onStartEdit:function(_40e,_40f){},onApplyCellEdit:function(_410,_411,_412){},onCancelEdit:function(_413){},onApplyEdit:function(_414){},onCanSelect:function(_415){return true;},onCanDeselect:function(_416){return true;},onSelected:function(_417){this.updateRowStyles(_417);},onDeselected:function(_418){this.updateRowStyles(_418);},onSelectionChanged:function(){}});}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_419,_41a,_41b){_41b=dojo.i18n.normalizeLocale(_41b);var _41c=_41b.split("-");var _41d=[_419,"nls",_41a].join(".");var _41e=dojo._loadedModules[_41d];if(_41e){var _41f;for(var i=_41c.length;i>0;i--){var loc=_41c.slice(0,i).join("_");if(_41e[loc]){_41f=_41e[loc];break;}}if(!_41f){_41f=_41e.ROOT;}if(_41f){var _420=function(){};_420.prototype=_41f;return new _420();}}throw new Error("Bundle not found: "+_41a+" in "+_419+" , locale="+_41b);};dojo.i18n.normalizeLocale=function(_421){var _422=_421?_421.toLowerCase():dojo.locale;if(_422=="root"){_422="ROOT";}return _422;};dojo.i18n._requireLocalization=function(_423,_424,_425,_426){var _427=dojo.i18n.normalizeLocale(_425);var _428=[_423,"nls",_424].join(".");var _429="";if(_426){var _42a=_426.split(",");for(var i=0;i<_42a.length;i++){if(_427["indexOf"](_42a[i])==0){if(_42a[i].length>_429.length){_429=_42a[i];}}}if(!_429){_429="ROOT";}}var _42b=_426?_429:_427;var _42c=dojo._loadedModules[_428];var _42d=null;if(_42c){if(dojo.config.localizationComplete&&_42c._built){return;}var _42e=_42b.replace(/-/g,"_");var _42f=_428+"."+_42e;_42d=dojo._loadedModules[_42f];}if(!_42d){_42c=dojo["provide"](_428);var syms=dojo._getModuleSymbols(_423);var _430=syms.concat("nls").join("/");var _431;dojo.i18n._searchLocalePath(_42b,_426,function(loc){var _432=loc.replace(/-/g,"_");var _433=_428+"."+_432;var _434=false;if(!dojo._loadedModules[_433]){dojo["provide"](_433);var _435=[_430];if(loc!="ROOT"){_435.push(loc);}_435.push(_424);var _436=_435.join("/")+".js";_434=dojo._loadPath(_436,null,function(hash){var _437=function(){};_437.prototype=_431;_42c[_432]=new _437();for(var j in hash){_42c[_432][j]=hash[j];}});}else{_434=true;}if(_434&&_42c[_432]){_431=_42c[_432];}else{_42c[_432]=_431;}if(_426){return true;}});}if(_426&&_427!=_429){_42c[_427.replace(/-/g,"_")]=_42c[_429.replace(/-/g,"_")];}};(function(){var _438=dojo.config.extraLocale;if(_438){if(!_438 instanceof Array){_438=[_438];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_439,_43a){req(m,b,_439,_43a);if(_439){return;}for(var i=0;i<_438.length;i++){req(m,b,_438[i],_43a);}};}})();dojo.i18n._searchLocalePath=function(_43b,down,_43c){_43b=dojo.i18n.normalizeLocale(_43b);var _43d=_43b.split("-");var _43e=[];for(var i=_43d.length;i>0;i--){_43e.push(_43d.slice(0,i).join("-"));}_43e.push(false);if(down){_43e.reverse();}for(var j=_43e.length-1;j>=0;j--){var loc=_43e[j]||"ROOT";var stop=_43c(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_43f,_440){function _441(_442){_442=dojo.i18n.normalizeLocale(_442);dojo.i18n._searchLocalePath(_442,true,function(loc){for(var i=0;i<_440.length;i++){if(_440[i]==loc){dojo["require"](_43f+"_"+loc);return true;}}return false;});};_441();var _443=dojo.config.extraLocale||[];for(var i=0;i<_443.length;i++){_441(_443[i]);}};}if(!dojo._hasResource["dojox.grid._Grid"]){dojo._hasResource["dojox.grid._Grid"]=true;dojo.provide("dojox.grid._Grid");(function(){if(!dojo.isCopyKey){dojo.isCopyKey=dojo.dnd.getCopyKeyState;}dojo.declare("dojox.grid._Grid",[dijit._Widget,dijit._Templated,dojox.grid._Events],{templateString:"<div class=\"dojoxGrid\" hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",classTag:"dojoxGrid",get:function(_444){},rowCount:5,keepRows:75,rowsPerPage:25,autoWidth:false,initialWidth:"",autoHeight:"",rowHeight:0,autoRender:true,defaultHeight:"15em",height:"",structure:null,elasticView:-1,singleClickEdit:false,selectionMode:"extended",rowSelector:"",columnReordering:false,headerMenu:null,placeholderLabel:"GridColumns",selectable:false,_click:null,loadingMessage:"<span class='dojoxGridLoading'>${loadingState}</span>",errorMessage:"<span class='dojoxGridError'>${errorState}</span>",noDataMessage:"",escapeHTMLInData:true,formatterScope:null,editable:false,sortInfo:0,themeable:true,_placeholders:null,_layoutClass:dojox.grid._Layout,buildRendering:function(){this.inherited(arguments);if(this.get==dojox.grid._Grid.prototype.get){this.get=null;}if(!this.domNode.getAttribute("tabIndex")){this.domNode.tabIndex="0";}this.createScroller();this.createLayout();this.createViews();this.createManagers();this.createSelection();this.connect(this.selection,"onSelected","onSelected");this.connect(this.selection,"onDeselected","onDeselected");this.connect(this.selection,"onChanged","onSelectionChanged");dojox.html.metrics.initOnFontResize();this.connect(dojox.html.metrics,"onFontResize","textSizeChanged");dojox.grid.util.funnelEvents(this.domNode,this,"doKeyEvent",dojox.grid.util.keyEvents);if(this.selectionMode!="none"){dojo.attr(this.domNode,"aria-multiselectable",this.selectionMode=="single"?"false":"true");}},postMixInProperties:function(){this.inherited(arguments);var _445=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_445);this.errorMessage=dojo.string.substitute(this.errorMessage,_445);if(this.srcNodeRef&&this.srcNodeRef.style.height){this.height=this.srcNodeRef.style.height;}this._setAutoHeightAttr(this.autoHeight,true);this.lastScrollTop=this.scrollTop=0;},postCreate:function(){this._placeholders=[];this._setHeaderMenuAttr(this.headerMenu);this._setStructureAttr(this.structure);this._click=[];this.inherited(arguments);if(this.domNode&&this.autoWidth&&this.initialWidth){this.domNode.style.width=this.initialWidth;}if(this.domNode&&!this.editable){dojo.attr(this.domNode,"aria-readonly","true");}},destroy:function(){this.domNode.onReveal=null;this.domNode.onSizeChange=null;delete this._click;this.edit.destroy();delete this.edit;this.views.destroyViews();if(this.scroller){this.scroller.destroy();delete this.scroller;}if(this.focus){this.focus.destroy();delete this.focus;}if(this.headerMenu&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){p.unReplace(true);});this.headerMenu.unBindDomNode(this.viewsHeaderNode);}this.inherited(arguments);},_setAutoHeightAttr:function(ah,_446){if(typeof ah=="string"){if(!ah||ah=="false"){ah=false;}else{if(ah=="true"){ah=true;}else{ah=window.parseInt(ah,10);}}}if(typeof ah=="number"){if(isNaN(ah)){ah=false;}if(ah<0){ah=true;}else{if(ah===0){ah=false;}}}this.autoHeight=ah;if(typeof ah=="boolean"){this._autoHeight=ah;}else{if(typeof ah=="number"){this._autoHeight=(ah>=this.attr("rowCount"));}else{this._autoHeight=false;}}if(this._started&&!_446){this.render();}},_getRowCountAttr:function(){return this.updating&&this.invalidated&&this.invalidated.rowCount!=undefined?this.invalidated.rowCount:this.rowCount;},textSizeChanged:function(){this.render();},sizeChange:function(){this.update();},createManagers:function(){this.rows=new dojox.grid._RowManager(this);this.focus=new dojox.grid._FocusManager(this);this.edit=new dojox.grid._EditManager(this);},createSelection:function(){this.selection=new dojox.grid.Selection(this);},createScroller:function(){this.scroller=new dojox.grid._Scroller();this.scroller.grid=this;this.scroller.renderRow=dojo.hitch(this,"renderRow");this.scroller.removeRow=dojo.hitch(this,"rowRemoved");},createLayout:function(){this.layout=new this._layoutClass(this);this.connect(this.layout,"moveColumn","onMoveColumn");},onMoveColumn:function(){this.render();},onResizeColumn:function(_447){},createViews:function(){this.views=new dojox.grid._ViewManager(this);this.views.createView=dojo.hitch(this,"createView");},createView:function(_448,idx){var c=dojo.getObject(_448);var view=new c({grid:this,index:idx});this.viewsNode.appendChild(view.domNode);this.viewsHeaderNode.appendChild(view.headerNode);this.views.addView(view);return view;},buildViews:function(){for(var i=0,vs;(vs=this.layout.structure[i]);i++){this.createView(vs.type||dojox._scopeName+".grid._View",i).setStructure(vs);}this.scroller.setContentNodes(this.views.getContentNodes());},_setStructureAttr:function(_449){var s=_449;if(s&&dojo.isString(s)){dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')","use dojox.grid._Grid.attr('structure', objVar) instead","2.0");s=dojo.getObject(s);}this.structure=s;if(!s){if(this.layout.structure){s=this.layout.structure;}else{return;}}this.views.destroyViews();if(s!==this.layout.structure){this.layout.setStructure(s);}this._structureChanged();},setStructure:function(_44a){dojo.deprecated("dojox.grid._Grid.setStructure(obj)","use dojox.grid._Grid.attr('structure', obj) instead.","2.0");this._setStructureAttr(_44a);},getColumnTogglingItems:function(){return dojo.map(this.layout.cells,function(cell){if(!cell.menuItems){cell.menuItems=[];}var self=this;var item=new dijit.CheckedMenuItem({label:cell.name,checked:!cell.hidden,_gridCell:cell,onChange:function(_44b){if(self.layout.setColumnVisibility(this._gridCell.index,_44b)){var _44c=this._gridCell.menuItems;if(_44c.length>1){dojo.forEach(_44c,function(item){if(item!==this){item.setAttribute("checked",_44b);}},this);}_44b=dojo.filter(self.layout.cells,function(c){if(c.menuItems.length>1){dojo.forEach(c.menuItems,"item.attr('disabled', false);");}else{c.menuItems[0].attr("disabled",false);}return !c.hidden;});if(_44b.length==1){dojo.forEach(_44b[0].menuItems,"item.attr('disabled', true);");}}},destroy:function(){var _44d=dojo.indexOf(this._gridCell.menuItems,this);this._gridCell.menuItems.splice(_44d,1);delete this._gridCell;dijit.CheckedMenuItem.prototype.destroy.apply(this,arguments);}});cell.menuItems.push(item);return item;},this);},_setHeaderMenuAttr:function(menu){if(this._placeholders&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){p.unReplace(true);});this._placeholders=[];}if(this.headerMenu){this.headerMenu.unBindDomNode(this.viewsHeaderNode);}this.headerMenu=menu;if(!menu){return;}this.headerMenu.bindDomNode(this.viewsHeaderNode);if(this.headerMenu.getPlaceholders){this._placeholders=this.headerMenu.getPlaceholders(this.placeholderLabel);}},setHeaderMenu:function(menu){dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)","use dojox.grid._Grid.attr('headerMenu', obj) instead.","2.0");this._setHeaderMenuAttr(menu);},setupHeaderMenu:function(){if(this._placeholders&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){if(p._replaced){p.unReplace(true);}p.replace(this.getColumnTogglingItems());},this);}},_fetch:function(_44e){this.setScrollTop(0);},getItem:function(_44f){return null;},showMessage:function(_450){if(_450){this.messagesNode.innerHTML=_450;this.messagesNode.style.display="";}else{this.messagesNode.innerHTML="";this.messagesNode.style.display="none";}},_structureChanged:function(){this.buildViews();if(this.autoRender&&this._started){this.render();}},hasLayout:function(){return this.layout.cells.length;},resize:function(_451,_452){this._pendingChangeSize=_451;this._pendingResultSize=_452;this.sizeChange();},_getPadBorder:function(){this._padBorder=this._padBorder||dojo._getPadBorderExtents(this.domNode);return this._padBorder;},_getHeaderHeight:function(){var vns=this.viewsHeaderNode.style,t=vns.display=="none"?0:this.views.measureHeader();vns.height=t+"px";this.views.normalizeHeaderNodeHeight();return t;},_resize:function(_453,_454){_453=_453||this._pendingChangeSize;_454=_454||this._pendingResultSize;delete this._pendingChangeSize;delete this._pendingResultSize;if(!this.domNode){return;}var pn=this.domNode.parentNode;if(!pn||pn.nodeType!=1||!this.hasLayout()||pn.style.visibility=="hidden"||pn.style.display=="none"){return;}var _455=this._getPadBorder();var hh=undefined;var h;if(this._autoHeight){this.domNode.style.height="auto";this.viewsNode.style.height="";}else{if(typeof this.autoHeight=="number"){h=hh=this._getHeaderHeight();h+=(this.scroller.averageRowHeight*this.autoHeight);this.domNode.style.height=h+"px";}else{if(this.domNode.clientHeight<=_455.h){if(pn==document.body){this.domNode.style.height=this.defaultHeight;}else{if(this.height){this.domNode.style.height=this.height;}else{this.fitTo="parent";}}}}}if(_454){_453=_454;}if(_453){dojo.marginBox(this.domNode,_453);this.height=this.domNode.style.height;delete this.fitTo;}else{if(this.fitTo=="parent"){h=this._parentContentBoxHeight=this._parentContentBoxHeight||dojo._getContentBox(pn).h;this.domNode.style.height=Math.max(0,h)+"px";}}var _456=dojo.some(this.views.views,function(v){return v.flexCells;});if(!this._autoHeight&&(h||dojo._getContentBox(this.domNode).h)===0){this.viewsHeaderNode.style.display="none";}else{this.viewsHeaderNode.style.display="block";if(!_456&&hh===undefined){hh=this._getHeaderHeight();}}if(_456){hh=undefined;}this.adaptWidth();this.adaptHeight(hh);this.postresize();},adaptWidth:function(){var _457=(!this.initialWidth&&this.autoWidth);var w=_457?0:this.domNode.clientWidth||(this.domNode.offsetWidth-this._getPadBorder().w),vw=this.views.arrange(1,w);this.views.onEach("adaptWidth");if(_457){this.domNode.style.width=vw+"px";}},adaptHeight:function(_458){var t=_458===undefined?this._getHeaderHeight():_458;var h=(this._autoHeight?-1:Math.max(this.domNode.clientHeight-t,0)||0);this.views.onEach("setSize",[0,h]);this.views.onEach("adaptHeight");if(!this._autoHeight){var _459=0,_45a=0;var _45b=dojo.filter(this.views.views,function(v){var has=v.hasHScrollbar();if(has){_459++;}else{_45a++;}return (!has);});if(_459>0&&_45a>0){dojo.forEach(_45b,function(v){v.adaptHeight(true);});}}if(this.autoHeight===true||h!=-1||(typeof this.autoHeight=="number"&&this.autoHeight>=this.attr("rowCount"))){this.scroller.windowHeight=h;}else{this.scroller.windowHeight=Math.max(this.domNode.clientHeight-t,0);}},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.autoRender){this.render();}},render:function(){if(!this.domNode){return;}if(!this._started){return;}if(!this.hasLayout()){this.scroller.init(0,this.keepRows,this.rowsPerPage);return;}this.update=this.defaultUpdate;this._render();},_render:function(){this.scroller.init(this.attr("rowCount"),this.keepRows,this.rowsPerPage);this.prerender();this.setScrollTop(0);this.postrender();},prerender:function(){this.keepRows=this._autoHeight?0:this.keepRows;this.scroller.setKeepInfo(this.keepRows);this.views.render();this._resize();},postrender:function(){this.postresize();this.focus.initFocusView();dojo.setSelectable(this.domNode,this.selectable);},postresize:function(){if(this._autoHeight){var size=Math.max(this.views.measureContent())+"px";this.viewsNode.style.height=size;}},renderRow:function(_45c,_45d){this.views.renderRow(_45c,_45d,this._skipRowRenormalize);},rowRemoved:function(_45e){this.views.rowRemoved(_45e);},invalidated:null,updating:false,beginUpdate:function(){this.invalidated=[];this.updating=true;},endUpdate:function(){this.updating=false;var i=this.invalidated,r;if(i.all){this.update();}else{if(i.rowCount!=undefined){this.updateRowCount(i.rowCount);}else{for(r in i){this.updateRow(Number(r));}}}this.invalidated=[];},defaultUpdate:function(){if(!this.domNode){return;}if(this.updating){this.invalidated.all=true;return;}this.lastScrollTop=this.scrollTop;this.prerender();this.scroller.invalidateNodes();this.setScrollTop(this.lastScrollTop);this.postrender();},update:function(){this.render();},updateRow:function(_45f){_45f=Number(_45f);if(this.updating){this.invalidated[_45f]=true;}else{this.views.updateRow(_45f);this.scroller.rowHeightChanged(_45f);}},updateRows:function(_460,_461){_460=Number(_460);_461=Number(_461);var i;if(this.updating){for(i=0;i<_461;i++){this.invalidated[i+_460]=true;}}else{for(i=0;i<_461;i++){this.views.updateRow(i+_460,this._skipRowRenormalize);}this.scroller.rowHeightChanged(_460);}},updateRowCount:function(_462){if(this.updating){this.invalidated.rowCount=_462;}else{this.rowCount=_462;this._setAutoHeightAttr(this.autoHeight,true);if(this.layout.cells.length){this.scroller.updateRowCount(_462);}this._resize();if(this.layout.cells.length){this.setScrollTop(this.scrollTop);}}},updateRowStyles:function(_463){this.views.updateRowStyles(_463);},getRowNode:function(_464){if(this.focus.focusView&&!(this.focus.focusView instanceof dojox.grid._RowSelector)){return this.focus.focusView.rowNodes[_464];}else{for(var i=0,_465;(_465=this.views.views[i]);i++){if(!(_465 instanceof dojox.grid._RowSelector)){return _465.rowNodes[_464];}}}return null;},rowHeightChanged:function(_466){this.views.renormalizeRow(_466);this.scroller.rowHeightChanged(_466);},fastScroll:true,delayScroll:false,scrollRedrawThreshold:(dojo.isIE?100:50),scrollTo:function(_467){if(!this.fastScroll){this.setScrollTop(_467);return;}var _468=Math.abs(this.lastScrollTop-_467);this.lastScrollTop=_467;if(_468>this.scrollRedrawThreshold||this.delayScroll){this.delayScroll=true;this.scrollTop=_467;this.views.setScrollTop(_467);if(this._pendingScroll){window.clearTimeout(this._pendingScroll);}var _469=this;this._pendingScroll=window.setTimeout(function(){delete _469._pendingScroll;_469.finishScrollJob();},200);}else{this.setScrollTop(_467);}},finishScrollJob:function(){this.delayScroll=false;this.setScrollTop(this.scrollTop);},setScrollTop:function(_46a){this.scroller.scroll(this.views.setScrollTop(_46a));},scrollToRow:function(_46b){this.setScrollTop(this.scroller.findScrollTop(_46b)+1);},styleRowNode:function(_46c,_46d){if(_46d){this.rows.styleRowNode(_46c,_46d);}},_mouseOut:function(e){this.rows.setOverRow(-2);},getCell:function(_46e){return this.layout.cells[_46e];},setCellWidth:function(_46f,_470){this.getCell(_46f).unitWidth=_470;},getCellName:function(_471){return "Cell "+_471.index;},canSort:function(_472){},sort:function(){},getSortAsc:function(_473){_473=_473==undefined?this.sortInfo:_473;return Boolean(_473>0);},getSortIndex:function(_474){_474=_474==undefined?this.sortInfo:_474;return Math.abs(_474)-1;},setSortIndex:function(_475,_476){var si=_475+1;if(_476!=undefined){si*=(_476?1:-1);}else{if(this.getSortIndex()==_475){si=-this.sortInfo;}}this.setSortInfo(si);},setSortInfo:function(_477){if(this.canSort(_477)){this.sortInfo=_477;this.sort();this.update();}},doKeyEvent:function(e){e.dispatch="do"+e.type;this.onKeyEvent(e);},_dispatch:function(m,e){if(m in this){return this[m](e);}return false;},dispatchKeyEvent:function(e){this._dispatch(e.dispatch,e);},dispatchContentEvent:function(e){this.edit.dispatchEvent(e)||e.sourceView.dispatchContentEvent(e)||this._dispatch(e.dispatch,e);},dispatchHeaderEvent:function(e){e.sourceView.dispatchHeaderEvent(e)||this._dispatch("doheader"+e.type,e);},dokeydown:function(e){this.onKeyDown(e);},doclick:function(e){if(e.cellNode){this.onCellClick(e);}else{this.onRowClick(e);}},dodblclick:function(e){if(e.cellNode){this.onCellDblClick(e);}else{this.onRowDblClick(e);}},docontextmenu:function(e){if(e.cellNode){this.onCellContextMenu(e);}else{this.onRowContextMenu(e);}},doheaderclick:function(e){if(e.cellNode){this.onHeaderCellClick(e);}else{this.onHeaderClick(e);}},doheaderdblclick:function(e){if(e.cellNode){this.onHeaderCellDblClick(e);}else{this.onHeaderDblClick(e);}},doheadercontextmenu:function(e){if(e.cellNode){this.onHeaderCellContextMenu(e);}else{this.onHeaderContextMenu(e);}},doStartEdit:function(_478,_479){this.onStartEdit(_478,_479);},doApplyCellEdit:function(_47a,_47b,_47c){this.onApplyCellEdit(_47a,_47b,_47c);},doCancelEdit:function(_47d){this.onCancelEdit(_47d);},doApplyEdit:function(_47e){this.onApplyEdit(_47e);},addRow:function(){this.updateRowCount(this.attr("rowCount")+1);},removeSelectedRows:function(){if(this.allItemsSelected){this.updateRowCount(0);}else{this.updateRowCount(Math.max(0,this.attr("rowCount")-this.selection.getSelected().length));}this.selection.clear();}});dojox.grid._Grid.markupFactory=function(_47f,node,ctor,_480){var d=dojo;var _481=function(n){var w=d.attr(n,"width")||"auto";if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){w=parseInt(w,10)+"px";}return w;};if(!_47f.structure&&node.nodeName.toLowerCase()=="table"){_47f.structure=d.query("> colgroup",node).map(function(cg){var sv=d.attr(cg,"span");var v={noscroll:(d.attr(cg,"noscroll")=="true")?true:false,__span:(!!sv?parseInt(sv,10):1),cells:[]};if(d.hasAttr(cg,"width")){v.width=_481(cg);}return v;});if(!_47f.structure.length){_47f.structure.push({__span:Infinity,cells:[]});}d.query("thead > tr",node).forEach(function(tr,_482){var _483=0;var _484=0;var _485;var _486=null;d.query("> th",tr).map(function(th){if(!_486){_485=0;_486=_47f.structure[0];}else{if(_483>=(_485+_486.__span)){_484++;_485+=_486.__span;var _487=_486;_486=_47f.structure[_484];}}var cell={name:d.trim(d.attr(th,"name")||th.innerHTML),colSpan:parseInt(d.attr(th,"colspan")||1,10),type:d.trim(d.attr(th,"cellType")||""),id:d.trim(d.attr(th,"id")||"")};_483+=cell.colSpan;var _488=d.attr(th,"rowspan");if(_488){cell.rowSpan=_488;}if(d.hasAttr(th,"width")){cell.width=_481(th);}if(d.hasAttr(th,"relWidth")){cell.relWidth=window.parseInt(dojo.attr(th,"relWidth"),10);}if(d.hasAttr(th,"hidden")){cell.hidden=d.attr(th,"hidden")=="true";}if(_480){_480(th,cell);}cell.type=cell.type?dojo.getObject(cell.type):dojox.grid.cells.Cell;if(cell.type&&cell.type.markupFactory){cell.type.markupFactory(th,cell);}if(!_486.cells[_482]){_486.cells[_482]=[];}_486.cells[_482].push(cell);});});}return new ctor(_47f,node);};})();}if(!dojo._hasResource["dojox.grid.DataSelection"]){dojo._hasResource["dojox.grid.DataSelection"]=true;dojo.provide("dojox.grid.DataSelection");dojo.declare("dojox.grid.DataSelection",dojox.grid.Selection,{getFirstSelected:function(){var idx=dojox.grid.Selection.prototype.getFirstSelected.call(this);if(idx==-1){return null;}return this.grid.getItem(idx);},getNextSelected:function(_489){var _48a=this.grid.getItemIndex(_489);var idx=dojox.grid.Selection.prototype.getNextSelected.call(this,_48a);if(idx==-1){return null;}return this.grid.getItem(idx);},getSelected:function(){var _48b=[];for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){_48b.push(this.grid.getItem(i));}}return _48b;},addToSelection:function(_48c){if(this.mode=="none"){return;}var idx=null;if(typeof _48c=="number"||typeof _48c=="string"){idx=_48c;}else{idx=this.grid.getItemIndex(_48c);}dojox.grid.Selection.prototype.addToSelection.call(this,idx);},deselect:function(_48d){if(this.mode=="none"){return;}var idx=null;if(typeof _48d=="number"||typeof _48d=="string"){idx=_48d;}else{idx=this.grid.getItemIndex(_48d);}dojox.grid.Selection.prototype.deselect.call(this,idx);},deselectAll:function(_48e){var idx=null;if(_48e||typeof _48e=="number"){if(typeof _48e=="number"||typeof _48e=="string"){idx=_48e;}else{idx=this.grid.getItemIndex(_48e);}dojox.grid.Selection.prototype.deselectAll.call(this,idx);}else{this.inherited(arguments);}}});}if(!dojo._hasResource["dojox.grid.DataGrid"]){dojo._hasResource["dojox.grid.DataGrid"]=true;dojo.provide("dojox.grid.DataGrid");dojo.declare("dojox.grid.DataGrid",dojox.grid._Grid,{store:null,query:null,queryOptions:null,fetchText:"...",sortFields:null,updateDelay:1,items:null,_store_connects:null,_by_idty:null,_by_idx:null,_cache:null,_pages:null,_pending_requests:null,_bop:-1,_eop:-1,_requests:0,rowCount:0,_isLoaded:false,_isLoading:false,postCreate:function(){this._pages=[];this._store_connects=[];this._by_idty={};this._by_idx=[];this._cache=[];this._pending_requests={};this._setStore(this.store);this.inherited(arguments);},createSelection:function(){this.selection=new dojox.grid.DataSelection(this);},get:function(_48f,_490){if(_490&&this.field=="_item"&&!this.fields){return _490;}else{if(_490&&this.fields){var ret=[];var s=this.grid.store;dojo.forEach(this.fields,function(f){ret=ret.concat(s.getValues(_490,f));});return ret;}}return (!_490?this.defaultValue:(!this.field?this.value:(this.field=="_item"?_490:this.grid.store.getValue(_490,this.field))));},_checkUpdateStatus:function(){if(this.updateDelay>0){var _491=false;if(this._endUpdateDelay){clearTimeout(this._endUpdateDelay);delete this._endUpdateDelay;_491=true;}if(!this.updating){this.beginUpdate();_491=true;}if(_491){var _492=this;this._endUpdateDelay=setTimeout(function(){delete _492._endUpdateDelay;_492.endUpdate();},this.updateDelay);}}},_onSet:function(item,_493,_494,_495){this._checkUpdateStatus();var idx=this.getItemIndex(item);if(idx>-1){this.updateRow(idx);}},_createItem:function(item,_496){var idty=this._hasIdentity?this.store.getIdentity(item):dojo.toJson(this.query)+":idx:"+_496+":sort:"+dojo.toJson(this.getSortProps());var o=this._by_idty[idty]={idty:idty,item:item};return o;},_addItem:function(item,_497,_498){this._by_idx[_497]=this._createItem(item,_497);if(!_498){this.updateRow(_497);}},_onNew:function(item,_499){this._checkUpdateStatus();var _49a=this.attr("rowCount");this._addingItem=true;this.updateRowCount(_49a+1);this._addingItem=false;this._addItem(item,_49a);this.showMessage();},_onDelete:function(item){this._checkUpdateStatus();var idx=this._getItemIndex(item,true);if(idx>=0){this._pages=[];this._bop=-1;this._eop=-1;var o=this._by_idx[idx];this._by_idx.splice(idx,1);delete this._by_idty[o.idty];this.updateRowCount(this.attr("rowCount")-1);if(this.attr("rowCount")===0){this.showMessage(this.noDataMessage);}}},_onRevert:function(){this._refresh();},setStore:function(_49b,_49c,_49d){this._setQuery(_49c,_49d);this._setStore(_49b);this._refresh(true);},setQuery:function(_49e,_49f){this._setQuery(_49e,_49f);this._refresh(true);},setItems:function(_4a0){this.items=_4a0;this._setStore(this.store);this._refresh(true);},_setQuery:function(_4a1,_4a2){this.query=_4a1;this.queryOptions=_4a2||this.queryOptions;},_setStore:function(_4a3){if(this.store&&this._store_connects){dojo.forEach(this._store_connects,function(arr){dojo.forEach(arr,dojo.disconnect);});}this.store=_4a3;if(this.store){var f=this.store.getFeatures();var h=[];this._canEdit=!!f["dojo.data.api.Write"]&&!!f["dojo.data.api.Identity"];this._hasIdentity=!!f["dojo.data.api.Identity"];if(!!f["dojo.data.api.Notification"]&&!this.items){h.push(this.connect(this.store,"onSet","_onSet"));h.push(this.connect(this.store,"onNew","_onNew"));h.push(this.connect(this.store,"onDelete","_onDelete"));}if(this._canEdit){h.push(this.connect(this.store,"revert","_onRevert"));}this._store_connects=h;}},_onFetchBegin:function(size,req){if(!this.scroller){return;}if(this.rowCount!=size){if(req.isRender){this.scroller.init(size,this.keepRows,this.rowsPerPage);this.rowCount=size;this._setAutoHeightAttr(this.autoHeight,true);this._skipRowRenormalize=true;this.prerender();this._skipRowRenormalize=false;}else{this.updateRowCount(size);}}if(!size){this.views.render();this._resize();this.showMessage(this.noDataMessage);this.focus.initFocusView();}else{this.showMessage();}},_onFetchComplete:function(_4a4,req){if(!this.scroller){return;}if(_4a4&&_4a4.length>0){dojo.forEach(_4a4,function(item,idx){this._addItem(item,req.start+idx,true);},this);if(this._autoHeight){this._skipRowRenormalize=true;}this.updateRows(req.start,_4a4.length);if(this._autoHeight){this._skipRowRenormalize=false;}if(req.isRender){this.setScrollTop(0);this.postrender();}else{if(this._lastScrollTop){this.setScrollTop(this._lastScrollTop);}}}delete this._lastScrollTop;if(!this._isLoaded){this._isLoading=false;this._isLoaded=true;}this._pending_requests[req.start]=false;},_onFetchError:function(err,req){delete this._lastScrollTop;if(!this._isLoaded){this._isLoading=false;this._isLoaded=true;this.showMessage(this.errorMessage);}this._pending_requests[req.start]=false;this.onFetchError(err,req);},onFetchError:function(err,req){},_fetch:function(_4a5,_4a6){_4a5=_4a5||0;if(this.store&&!this._pending_requests[_4a5]){if(!this._isLoaded&&!this._isLoading){this._isLoading=true;this.showMessage(this.loadingMessage);}this._pending_requests[_4a5]=true;try{if(this.items){var _4a7=this.items;var _4a8=this.store;this.rowsPerPage=_4a7.length;var req={start:_4a5,count:this.rowsPerPage,isRender:_4a6};this._onFetchBegin(_4a7.length,req);var _4a9=0;dojo.forEach(_4a7,function(i){if(!_4a8.isItemLoaded(i)){_4a9++;}});if(_4a9===0){this._onFetchComplete(_4a7,req);}else{var _4aa=function(item){_4a9--;if(_4a9===0){this._onFetchComplete(_4a7,req);}};dojo.forEach(_4a7,function(i){if(!_4a8.isItemLoaded(i)){_4a8.loadItem({item:i,onItem:_4aa,scope:this});}},this);}}else{this.store.fetch({start:_4a5,count:this.rowsPerPage,query:this.query,sort:this.getSortProps(),queryOptions:this.queryOptions,isRender:_4a6,onBegin:dojo.hitch(this,"_onFetchBegin"),onComplete:dojo.hitch(this,"_onFetchComplete"),onError:dojo.hitch(this,"_onFetchError")});}}catch(e){this._onFetchError(e,{start:_4a5,count:this.rowsPerPage});}}},_clearData:function(){this.updateRowCount(0);this._by_idty={};this._by_idx=[];this._pages=[];this._bop=this._eop=-1;this._isLoaded=false;this._isLoading=false;},getItem:function(idx){var data=this._by_idx[idx];if(!data||(data&&!data.item)){this._preparePage(idx);return null;}return data.item;},getItemIndex:function(item){return this._getItemIndex(item,false);},_getItemIndex:function(item,_4ab){if(!_4ab&&!this.store.isItem(item)){return -1;}var idty=this._hasIdentity?this.store.getIdentity(item):null;for(var i=0,l=this._by_idx.length;i<l;i++){var d=this._by_idx[i];if(d&&((idty&&d.idty==idty)||(d.item===item))){return i;}}return -1;},filter:function(_4ac,_4ad){this.query=_4ac;if(_4ad){this._clearData();}this._fetch();},_getItemAttr:function(idx,attr){var item=this.getItem(idx);return (!item?this.fetchText:this.store.getValue(item,attr));},_render:function(){if(this.domNode.parentNode){this.scroller.init(this.attr("rowCount"),this.keepRows,this.rowsPerPage);this.prerender();this._fetch(0,true);}},_requestsPending:function(_4ae){return this._pending_requests[_4ae];},_rowToPage:function(_4af){return (this.rowsPerPage?Math.floor(_4af/this.rowsPerPage):_4af);},_pageToRow:function(_4b0){return (this.rowsPerPage?this.rowsPerPage*_4b0:_4b0);},_preparePage:function(_4b1){if((_4b1<this._bop||_4b1>=this._eop)&&!this._addingItem){var _4b2=this._rowToPage(_4b1);this._needPage(_4b2);this._bop=_4b2*this.rowsPerPage;this._eop=this._bop+(this.rowsPerPage||this.attr("rowCount"));}},_needPage:function(_4b3){if(!this._pages[_4b3]){this._pages[_4b3]=true;this._requestPage(_4b3);}},_requestPage:function(_4b4){var row=this._pageToRow(_4b4);var _4b5=Math.min(this.rowsPerPage,this.attr("rowCount")-row);if(_4b5>0){this._requests++;if(!this._requestsPending(row)){setTimeout(dojo.hitch(this,"_fetch",row,false),1);}}},getCellName:function(_4b6){return _4b6.field;},_refresh:function(_4b7){this._clearData();this._fetch(0,_4b7);},sort:function(){this._lastScrollTop=this.scrollTop;this._refresh();},canSort:function(){return (!this._isLoading);},getSortProps:function(){var c=this.getCell(this.getSortIndex());if(!c){if(this.sortFields){return this.sortFields;}return null;}else{var desc=c["sortDesc"];var si=!(this.sortInfo>0);if(typeof desc=="undefined"){desc=si;}else{desc=si?!desc:desc;}return [{attribute:c.field,descending:desc}];}},styleRowState:function(_4b8){if(this.store&&this.store.getState){var _4b9=this.store.getState(_4b8.index),c="";for(var i=0,ss=["inflight","error","inserting"],s;s=ss[i];i++){if(_4b9[s]){c=" dojoxGridRow-"+s;break;}}_4b8.customClasses+=c;}},onStyleRow:function(_4ba){this.styleRowState(_4ba);this.inherited(arguments);},canEdit:function(_4bb,_4bc){return this._canEdit;},_copyAttr:function(idx,attr){var row={};var _4bd={};var src=this.getItem(idx);return this.store.getValue(src,attr);},doStartEdit:function(_4be,_4bf){if(!this._cache[_4bf]){this._cache[_4bf]=this._copyAttr(_4bf,_4be.field);}this.onStartEdit(_4be,_4bf);},doApplyCellEdit:function(_4c0,_4c1,_4c2){this.store.fetchItemByIdentity({identity:this._by_idx[_4c1].idty,onItem:dojo.hitch(this,function(item){var _4c3=this.store.getValue(item,_4c2);if(typeof _4c3=="number"){_4c0=isNaN(_4c0)?_4c0:parseFloat(_4c0);}else{if(typeof _4c3=="boolean"){_4c0=_4c0=="true"?true:_4c0=="false"?false:_4c0;}else{if(_4c3 instanceof Date){var _4c4=new Date(_4c0);_4c0=isNaN(_4c4.getTime())?_4c0:_4c4;}}}this.store.setValue(item,_4c2,_4c0);this.onApplyCellEdit(_4c0,_4c1,_4c2);})});},doCancelEdit:function(_4c5){var _4c6=this._cache[_4c5];if(_4c6){this.updateRow(_4c5);delete this._cache[_4c5];}this.onCancelEdit.apply(this,arguments);},doApplyEdit:function(_4c7,_4c8){var _4c9=this._cache[_4c7];this.onApplyEdit(_4c7);},removeSelectedRows:function(){if(this._canEdit){this.edit.apply();var fx=dojo.hitch(this,function(_4ca){if(_4ca.length){dojo.forEach(_4ca,this.store.deleteItem,this.store);this.selection.clear();}});if(this.allItemsSelected){this.store.fetch({query:this.query,queryOptions:this.queryOptions,onComplete:fx});}else{fx(this.selection.getSelected());}}}});dojox.grid.DataGrid.cell_markupFactory=function(_4cb,node,_4cc){var _4cd=dojo.trim(dojo.attr(node,"field")||"");if(_4cd){_4cc.field=_4cd;}_4cc.field=_4cc.field||_4cc.name;var _4ce=dojo.trim(dojo.attr(node,"fields")||"");if(_4ce){_4cc.fields=_4ce.split(",");}if(_4cb){_4cb(node,_4cc);}};dojox.grid.DataGrid.markupFactory=function(_4cf,node,ctor,_4d0){return dojox.grid._Grid.markupFactory(_4cf,node,ctor,dojo.partial(dojox.grid.DataGrid.cell_markupFactory,_4d0));};}dojo.i18n._preloadLocalizations("dojox.grid.nls.DataGrid",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
diff --git a/js/dojo/dojox/grid/DataGrid.js.uncompressed.js b/js/dojo/dojox/grid/DataGrid.js.uncompressed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/DataGrid.js.uncompressed.js
@@ -0,0 +1,16328 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.manager"] = true;
+dojo.provide("dijit._base.manager");
+
+dojo.declare("dijit.WidgetSet", null, {
+ // summary:
+ // A set of widgets indexed by id. A default instance of this class is
+ // available as `dijit.registry`
+ //
+ // example:
+ // Create a small list of widgets:
+ // | var ws = new dijit.WidgetSet();
+ // | ws.add(dijit.byId("one"));
+ // | ws.add(dijit.byId("two"));
+ // | // destroy both:
+ // | ws.forEach(function(w){ w.destroy(); });
+ //
+ // example:
+ // Using dijit.registry:
+ // | dijit.registry.forEach(function(w){ /* do something */ });
+
+ constructor: function(){
+ this._hash = {};
+ this.length = 0;
+ },
+
+ add: function(/*dijit._Widget*/ widget){
+ // summary:
+ // Add a widget to this list. If a duplicate ID is detected, a error is thrown.
+ //
+ // widget: dijit._Widget
+ // Any dijit._Widget subclass.
+ if(this._hash[widget.id]){
+ throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
+ }
+ this._hash[widget.id] = widget;
+ this.length++;
+ },
+
+ remove: function(/*String*/ id){
+ // summary:
+ // Remove a widget from this WidgetSet. Does not destroy the widget; simply
+ // removes the reference.
+ if(this._hash[id]){
+ delete this._hash[id];
+ this.length--;
+ }
+ },
+
+ forEach: function(/*Function*/ func, /* Object? */thisObj){
+ // summary:
+ // Call specified function for each widget in this set.
+ //
+ // func:
+ // A callback function to run for each item. Is passed the widget, the index
+ // in the iteration, and the full hash, similar to `dojo.forEach`.
+ //
+ // thisObj:
+ // An optional scope parameter
+ //
+ // example:
+ // Using the default `dijit.registry` instance:
+ // | dijit.registry.forEach(function(widget){
+ // | console.log(widget.declaredClass);
+ // | });
+ //
+ // returns:
+ // Returns self, in order to allow for further chaining.
+
+ thisObj = thisObj || dojo.global;
+ var i = 0, id;
+ for(id in this._hash){
+ func.call(thisObj, this._hash[id], i++, this._hash);
+ }
+ return this; // dijit.WidgetSet
+ },
+
+ filter: function(/*Function*/ filter, /* Object? */thisObj){
+ // summary:
+ // Filter down this WidgetSet to a smaller new WidgetSet
+ // Works the same as `dojo.filter` and `dojo.NodeList.filter`
+ //
+ // filter:
+ // Callback function to test truthiness. Is passed the widget
+ // reference and the pseudo-index in the object.
+ //
+ // thisObj: Object?
+ // Option scope to use for the filter function.
+ //
+ // example:
+ // Arbitrary: select the odd widgets in this list
+ // | dijit.registry.filter(function(w, i){
+ // | return i % 2 == 0;
+ // | }).forEach(function(w){ /* odd ones */ });
+
+ thisObj = thisObj || dojo.global;
+ var res = new dijit.WidgetSet(), i = 0, id;
+ for(id in this._hash){
+ var w = this._hash[id];
+ if(filter.call(thisObj, w, i++, this._hash)){
+ res.add(w);
+ }
+ }
+ return res; // dijit.WidgetSet
+ },
+
+ byId: function(/*String*/ id){
+ // summary:
+ // Find a widget in this list by it's id.
+ // example:
+ // Test if an id is in a particular WidgetSet
+ // | var ws = new dijit.WidgetSet();
+ // | ws.add(dijit.byId("bar"));
+ // | var t = ws.byId("bar") // returns a widget
+ // | var x = ws.byId("foo"); // returns undefined
+
+ return this._hash[id]; // dijit._Widget
+ },
+
+ byClass: function(/*String*/ cls){
+ // summary:
+ // Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
+ //
+ // cls: String
+ // The Class to scan for. Full dot-notated string.
+ //
+ // example:
+ // Find all `dijit.TitlePane`s in a page:
+ // | dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
+
+ var res = new dijit.WidgetSet(), id, widget;
+ for(id in this._hash){
+ widget = this._hash[id];
+ if(widget.declaredClass == cls){
+ res.add(widget);
+ }
+ }
+ return res; // dijit.WidgetSet
+},
+
+ toArray: function(){
+ // summary:
+ // Convert this WidgetSet into a true Array
+ //
+ // example:
+ // Work with the widget .domNodes in a real Array
+ // | dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
+
+ var ar = [];
+ for(var id in this._hash){
+ ar.push(this._hash[id]);
+ }
+ return ar; // dijit._Widget[]
+},
+
+ map: function(/* Function */func, /* Object? */thisObj){
+ // summary:
+ // Create a new Array from this WidgetSet, following the same rules as `dojo.map`
+ // example:
+ // | var nodes = dijit.registry.map(function(w){ return w.domNode; });
+ //
+ // returns:
+ // A new array of the returned values.
+ return dojo.map(this.toArray(), func, thisObj); // Array
+ },
+
+ every: function(func, thisObj){
+ // summary:
+ // A synthetic clone of `dojo.every` acting explictly on this WidgetSet
+ //
+ // func: Function
+ // A callback function run for every widget in this list. Exits loop
+ // when the first false return is encountered.
+ //
+ // thisObj: Object?
+ // Optional scope parameter to use for the callback
+
+ thisObj = thisObj || dojo.global;
+ var x = 0, i;
+ for(i in this._hash){
+ if(!func.call(thisObj, this._hash[i], x++, this._hash)){
+ return false; // Boolean
+ }
+ }
+ return true; // Boolean
+ },
+
+ some: function(func, thisObj){
+ // summary:
+ // A synthetic clone of `dojo.some` acting explictly on this WidgetSet
+ //
+ // func: Function
+ // A callback function run for every widget in this list. Exits loop
+ // when the first true return is encountered.
+ //
+ // thisObj: Object?
+ // Optional scope parameter to use for the callback
+
+ thisObj = thisObj || dojo.global;
+ var x = 0, i;
+ for(i in this._hash){
+ if(func.call(thisObj, this._hash[i], x++, this._hash)){
+ return true; // Boolean
+ }
+ }
+ return false; // Boolean
+ }
+
+});
+
+/*=====
+dijit.registry = {
+ // summary:
+ // A list of widgets on a page.
+ // description:
+ // Is an instance of `dijit.WidgetSet`
+};
+=====*/
+dijit.registry= new dijit.WidgetSet();
+
+dijit._widgetTypeCtr = {};
+
+dijit.getUniqueId = function(/*String*/widgetType){
+ // summary:
+ // Generates a unique id for a given widgetType
+
+ var id;
+ do{
+ id = widgetType + "_" +
+ (widgetType in dijit._widgetTypeCtr ?
+ ++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
+ }while(dijit.byId(id));
+ return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
+};
+
+dijit.findWidgets = function(/*DomNode*/ root){
+ // summary:
+ // Search subtree under root returning widgets found.
+ // Doesn't search for nested widgets (ie, widgets inside other widgets).
+
+ var outAry = [];
+
+ function getChildrenHelper(root){
+ for(var node = root.firstChild; node; node = node.nextSibling){
+ if(node.nodeType == 1){
+ var widgetId = node.getAttribute("widgetId");
+ if(widgetId){
+ var widget = dijit.byId(widgetId);
+ outAry.push(widget);
+ }else{
+ getChildrenHelper(node);
+ }
+ }
+ }
+ }
+
+ getChildrenHelper(root);
+ return outAry;
+};
+
+dijit._destroyAll = function(){
+ // summary:
+ // Code to destroy all widgets and do other cleanup on page unload
+
+ // Clean up focus manager lingering references to widgets and nodes
+ dijit._curFocus = null;
+ dijit._prevFocus = null;
+ dijit._activeStack = [];
+
+ // Destroy all the widgets, top down
+ dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
+ // Avoid double destroy of widgets like Menu that are attached to <body>
+ // even though they are logically children of other widgets.
+ if(!widget._destroyed){
+ if(widget.destroyRecursive){
+ widget.destroyRecursive();
+ }else if(widget.destroy){
+ widget.destroy();
+ }
+ }
+ });
+};
+
+if(dojo.isIE){
+ // Only run _destroyAll() for IE because we think it's only necessary in that case,
+ // and because it causes problems on FF. See bug #3531 for details.
+ dojo.addOnWindowUnload(function(){
+ dijit._destroyAll();
+ });
+}
+
+dijit.byId = function(/*String|Widget*/id){
+ // summary:
+ // Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+ return typeof id == "string" ? dijit.registry._hash[id] : id; // dijit._Widget
+};
+
+dijit.byNode = function(/* DOMNode */ node){
+ // summary:
+ // Returns the widget corresponding to the given DOMNode
+ return dijit.registry.byId(node.getAttribute("widgetId")); // dijit._Widget
+};
+
+dijit.getEnclosingWidget = function(/* DOMNode */ node){
+ // summary:
+ // Returns the widget whose DOM tree contains the specified DOMNode, or null if
+ // the node is not contained within the DOM tree of any widget
+ while(node){
+ var id = node.getAttribute && node.getAttribute("widgetId");
+ if(id){
+ return dijit.byId(id);
+ }
+ node = node.parentNode;
+ }
+ return null;
+};
+
+dijit._isElementShown = function(/*Element*/elem){
+ var style = dojo.style(elem);
+ return (style.visibility != "hidden")
+ && (style.visibility != "collapsed")
+ && (style.display != "none")
+ && (dojo.attr(elem, "type") != "hidden");
+}
+
+dijit.isTabNavigable = function(/*Element*/elem){
+ // summary:
+ // Tests if an element is tab-navigable
+
+ // TODO: convert (and rename method) to return effectivite tabIndex; will save time in _getTabNavigable()
+ if(dojo.attr(elem, "disabled")){
+ return false;
+ }else if(dojo.hasAttr(elem, "tabIndex")){
+ // Explicit tab index setting
+ return dojo.attr(elem, "tabIndex") >= 0; // boolean
+ }else{
+ // No explicit tabIndex setting, need to investigate node type
+ switch(elem.nodeName.toLowerCase()){
+ case "a":
+ // An <a> w/out a tabindex is only navigable if it has an href
+ return dojo.hasAttr(elem, "href");
+ case "area":
+ case "button":
+ case "input":
+ case "object":
+ case "select":
+ case "textarea":
+ // These are navigable by default
+ return true;
+ case "iframe":
+ // If it's an editor <iframe> then it's tab navigable.
+ if(dojo.isMoz){
+ return elem.contentDocument.designMode == "on";
+ }else if(dojo.isWebKit){
+ var doc = elem.contentDocument,
+ body = doc && doc.body;
+ return body && body.contentEditable == 'true';
+ }else{
+ // contentWindow.document isn't accessible within IE7/8
+ // if the iframe.src points to a foreign url and this
+ // page contains an element, that could get focus
+ try{
+ doc = elem.contentWindow.document;
+ body = doc && doc.body;
+ return body && body.firstChild && body.firstChild.contentEditable == 'true';
+ }catch(e){
+ return false;
+ }
+ }
+ default:
+ return elem.contentEditable == 'true';
+ }
+ }
+};
+
+dijit._getTabNavigable = function(/*DOMNode*/root){
+ // summary:
+ // Finds descendants of the specified root node.
+ //
+ // description:
+ // Finds the following descendants of the specified root node:
+ // * the first tab-navigable element in document order
+ // without a tabIndex or with tabIndex="0"
+ // * the last tab-navigable element in document order
+ // without a tabIndex or with tabIndex="0"
+ // * the first element in document order with the lowest
+ // positive tabIndex value
+ // * the last element in document order with the highest
+ // positive tabIndex value
+ var first, last, lowest, lowestTabindex, highest, highestTabindex;
+ var walkTree = function(/*DOMNode*/parent){
+ dojo.query("> *", parent).forEach(function(child){
+ var isShown = dijit._isElementShown(child);
+ if(isShown && dijit.isTabNavigable(child)){
+ var tabindex = dojo.attr(child, "tabIndex");
+ if(!dojo.hasAttr(child, "tabIndex") || tabindex == 0){
+ if(!first){ first = child; }
+ last = child;
+ }else if(tabindex > 0){
+ if(!lowest || tabindex < lowestTabindex){
+ lowestTabindex = tabindex;
+ lowest = child;
+ }
+ if(!highest || tabindex >= highestTabindex){
+ highestTabindex = tabindex;
+ highest = child;
+ }
+ }
+ }
+ if(isShown && child.nodeName.toUpperCase() != 'SELECT'){ walkTree(child) }
+ });
+ };
+ if(dijit._isElementShown(root)){ walkTree(root) }
+ return { first: first, last: last, lowest: lowest, highest: highest };
+}
+dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/root){
+ // summary:
+ // Finds the descendant of the specified root node
+ // that is first in the tabbing order
+ var elems = dijit._getTabNavigable(dojo.byId(root));
+ return elems.lowest ? elems.lowest : elems.first; // DomNode
+};
+
+dijit.getLastInTabbingOrder = function(/*String|DOMNode*/root){
+ // summary:
+ // Finds the descendant of the specified root node
+ // that is last in the tabbing order
+ var elems = dijit._getTabNavigable(dojo.byId(root));
+ return elems.last ? elems.last : elems.highest; // DomNode
+};
+
+/*=====
+dojo.mixin(dijit, {
+ // defaultDuration: Integer
+ // The default animation speed (in ms) to use for all Dijit
+ // transitional animations, unless otherwise specified
+ // on a per-instance basis. Defaults to 200, overrided by
+ // `djConfig.defaultDuration`
+ defaultDuration: 300
+});
+=====*/
+
+dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
+}
+
+if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.focus"] = true;
+dojo.provide("dijit._base.focus");
+
+ // for dijit.isTabNavigable()
+
+// summary:
+// These functions are used to query or set the focus and selection.
+//
+// Also, they trace when widgets become activated/deactivated,
+// so that the widget can fire _onFocus/_onBlur events.
+// "Active" here means something similar to "focused", but
+// "focus" isn't quite the right word because we keep track of
+// a whole stack of "active" widgets. Example: ComboButton --> Menu -->
+// MenuItem. The onBlur event for ComboButton doesn't fire due to focusing
+// on the Menu or a MenuItem, since they are considered part of the
+// ComboButton widget. It only happens when focus is shifted
+// somewhere completely different.
+
+dojo.mixin(dijit, {
+ // _curFocus: DomNode
+ // Currently focused item on screen
+ _curFocus: null,
+
+ // _prevFocus: DomNode
+ // Previously focused item on screen
+ _prevFocus: null,
+
+ isCollapsed: function(){
+ // summary:
+ // Returns true if there is no text selected
+ return dijit.getBookmark().isCollapsed;
+ },
+
+ getBookmark: function(){
+ // summary:
+ // Retrieves a bookmark that can be used with moveToBookmark to return to the same range
+ var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
+
+ if(dojo.global.getSelection){
+ //W3C Range API for selections.
+ sel = dojo.global.getSelection();
+ if(sel){
+ if(sel.isCollapsed){
+ tg = cf? cf.tagName : "";
+ if(tg){
+ //Create a fake rangelike item to restore selections.
+ tg = tg.toLowerCase();
+ if(tg == "textarea" ||
+ (tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
+ sel = {
+ start: cf.selectionStart,
+ end: cf.selectionEnd,
+ node: cf,
+ pRange: true
+ };
+ return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
+ }
+ }
+ bm = {isCollapsed:true};
+ }else{
+ rg = sel.getRangeAt(0);
+ bm = {isCollapsed: false, mark: rg.cloneRange()};
+ }
+ }
+ }else if(sel){
+ // If the current focus was a input of some sort and no selection, don't bother saving
+ // a native bookmark. This is because it causes issues with dialog/page selection restore.
+ // So, we need to create psuedo bookmarks to work with.
+ tg = cf ? cf.tagName : "";
+ tg = tg.toLowerCase();
+ if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
+ if(sel.type && sel.type.toLowerCase() == "none"){
+ return {
+ isCollapsed: true,
+ mark: null
+ }
+ }else{
+ rg = sel.createRange();
+ return {
+ isCollapsed: rg.text && rg.text.length?false:true,
+ mark: {
+ range: rg,
+ pRange: true
+ }
+ };
+ }
+ }
+ bm = {};
+
+ //'IE' way for selections.
+ try{
+ // createRange() throws exception when dojo in iframe
+ //and nothing selected, see #9632
+ rg = sel.createRange();
+ bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
+ }catch(e){
+ bm.isCollapsed = true;
+ return bm;
+ }
+ if(sel.type.toUpperCase() == 'CONTROL'){
+ if(rg.length){
+ bm.mark=[];
+ var i=0,len=rg.length;
+ while(i<len){
+ bm.mark.push(rg.item(i++));
+ }
+ }else{
+ bm.isCollapsed = true;
+ bm.mark = null;
+ }
+ }else{
+ bm.mark = rg.getBookmark();
+ }
+ }else{
+ console.warn("No idea how to store the current selection for this browser!");
+ }
+ return bm; // Object
+ },
+
+ moveToBookmark: function(/*Object*/bookmark){
+ // summary:
+ // Moves current selection to a bookmark
+ // bookmark:
+ // This should be a returned object from dijit.getBookmark()
+
+ var _doc = dojo.doc,
+ mark = bookmark.mark;
+ if(mark){
+ if(dojo.global.getSelection){
+ //W3C Rangi API (FF, WebKit, Opera, etc)
+ var sel = dojo.global.getSelection();
+ if(sel && sel.removeAllRanges){
+ if(mark.pRange){
+ var r = mark;
+ var n = r.node;
+ n.selectionStart = r.start;
+ n.selectionEnd = r.end;
+ }else{
+ sel.removeAllRanges();
+ sel.addRange(mark);
+ }
+ }else{
+ console.warn("No idea how to restore selection for this browser!");
+ }
+ }else if(_doc.selection && mark){
+ //'IE' way.
+ var rg;
+ if(mark.pRange){
+ rg = mark.range;
+ }else if(dojo.isArray(mark)){
+ rg = _doc.body.createControlRange();
+ //rg.addElement does not have call/apply method, so can not call it directly
+ //rg is not available in "range.addElement(item)", so can't use that either
+ dojo.forEach(mark, function(n){
+ rg.addElement(n);
+ });
+ }else{
+ rg = _doc.body.createTextRange();
+ rg.moveToBookmark(mark);
+ }
+ rg.select();
+ }
+ }
+ },
+
+ getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
+ // summary:
+ // Called as getFocus(), this returns an Object showing the current focus
+ // and selected text.
+ //
+ // Called as getFocus(widget), where widget is a (widget representing) a button
+ // that was just pressed, it returns where focus was before that button
+ // was pressed. (Pressing the button may have either shifted focus to the button,
+ // or removed focus altogether.) In this case the selected text is not returned,
+ // since it can't be accurately determined.
+ //
+ // menu: dijit._Widget or {domNode: DomNode} structure
+ // The button that was just pressed. If focus has disappeared or moved
+ // to this button, returns the previous focus. In this case the bookmark
+ // information is already lost, and null is returned.
+ //
+ // openedForWindow:
+ // iframe in which menu was opened
+ //
+ // returns:
+ // A handle to restore focus/selection, to be passed to `dijit.focus`
+ var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
+ return {
+ node: node,
+ bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
+ openedForWindow: openedForWindow
+ }; // Object
+ },
+
+ focus: function(/*Object || DomNode */ handle){
+ // summary:
+ // Sets the focused node and the selection according to argument.
+ // To set focus to an iframe's content, pass in the iframe itself.
+ // handle:
+ // object returned by get(), or a DomNode
+
+ if(!handle){ return; }
+
+ var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object
+ bookmark = handle.bookmark,
+ openedForWindow = handle.openedForWindow,
+ collapsed = bookmark ? bookmark.isCollapsed : false;
+
+ // Set the focus
+ // Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
+ // but we need to set focus to iframe.contentWindow
+ if(node){
+ var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
+ if(focusNode && focusNode.focus){
+ try{
+ // Gecko throws sometimes if setting focus is impossible,
+ // node not displayed or something like that
+ focusNode.focus();
+ }catch(e){/*quiet*/}
+ }
+ dijit._onFocusNode(node);
+ }
+
+ // set the selection
+ // do not need to restore if current selection is not empty
+ // (use keyboard to select a menu item) or if previous selection was collapsed
+ // as it may cause focus shift (Esp in IE).
+ if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
+ if(openedForWindow){
+ openedForWindow.focus();
+ }
+ try{
+ dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
+ }catch(e2){
+ /*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
+ }
+ }
+ },
+
+ // _activeStack: dijit._Widget[]
+ // List of currently active widgets (focused widget and it's ancestors)
+ _activeStack: [],
+
+ registerIframe: function(/*DomNode*/ iframe){
+ // summary:
+ // Registers listeners on the specified iframe so that any click
+ // or focus event on that iframe (or anything in it) is reported
+ // as a focus/click event on the <iframe> itself.
+ // description:
+ // Currently only used by editor.
+ // returns:
+ // Handle to pass to unregisterIframe()
+ return dijit.registerWin(iframe.contentWindow, iframe);
+ },
+
+ unregisterIframe: function(/*Object*/ handle){
+ // summary:
+ // Unregisters listeners on the specified iframe created by registerIframe.
+ // After calling be sure to delete or null out the handle itself.
+ // handle:
+ // Handle returned by registerIframe()
+
+ dijit.unregisterWin(handle);
+ },
+
+ registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
+ // summary:
+ // Registers listeners on the specified window (either the main
+ // window or an iframe's window) to detect when the user has clicked somewhere
+ // or focused somewhere.
+ // description:
+ // Users should call registerIframe() instead of this method.
+ // targetWindow:
+ // If specified this is the window associated with the iframe,
+ // i.e. iframe.contentWindow.
+ // effectiveNode:
+ // If specified, report any focus events inside targetWindow as
+ // an event on effectiveNode, rather than on evt.target.
+ // returns:
+ // Handle to pass to unregisterWin()
+
+ // TODO: make this function private in 2.0; Editor/users should call registerIframe(),
+
+ var mousedownListener = function(evt){
+ dijit._justMouseDowned = true;
+ setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
+ dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
+ };
+ //dojo.connect(targetWindow, "onscroll", ???);
+
+ // Listen for blur and focus events on targetWindow's document.
+ // IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
+ // through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
+ // fire.
+ // Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
+ // (at least for FF) the focus event doesn't fire on <html> or <body>.
+ var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
+ if(doc){
+ if(dojo.isIE){
+ doc.attachEvent('onmousedown', mousedownListener);
+ var activateListener = function(evt){
+ // IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
+ // Should consider those more like a mouse-click than a focus....
+ if(evt.srcElement.tagName.toLowerCase() != "#document" &&
+ dijit.isTabNavigable(evt.srcElement)){
+ dijit._onFocusNode(effectiveNode || evt.srcElement);
+ }else{
+ dijit._onTouchNode(effectiveNode || evt.srcElement);
+ }
+ };
+ doc.attachEvent('onactivate', activateListener);
+ var deactivateListener = function(evt){
+ dijit._onBlurNode(effectiveNode || evt.srcElement);
+ };
+ doc.attachEvent('ondeactivate', deactivateListener);
+
+ return function(){
+ doc.detachEvent('onmousedown', mousedownListener);
+ doc.detachEvent('onactivate', activateListener);
+ doc.detachEvent('ondeactivate', deactivateListener);
+ doc = null; // prevent memory leak (apparent circular reference via closure)
+ };
+ }else{
+ doc.addEventListener('mousedown', mousedownListener, true);
+ var focusListener = function(evt){
+ dijit._onFocusNode(effectiveNode || evt.target);
+ };
+ doc.addEventListener('focus', focusListener, true);
+ var blurListener = function(evt){
+ dijit._onBlurNode(effectiveNode || evt.target);
+ };
+ doc.addEventListener('blur', blurListener, true);
+
+ return function(){
+ doc.removeEventListener('mousedown', mousedownListener, true);
+ doc.removeEventListener('focus', focusListener, true);
+ doc.removeEventListener('blur', blurListener, true);
+ doc = null; // prevent memory leak (apparent circular reference via closure)
+ };
+ }
+ }
+ },
+
+ unregisterWin: function(/*Handle*/ handle){
+ // summary:
+ // Unregisters listeners on the specified window (either the main
+ // window or an iframe's window) according to handle returned from registerWin().
+ // After calling be sure to delete or null out the handle itself.
+
+ // Currently our handle is actually a function
+ handle && handle();
+ },
+
+ _onBlurNode: function(/*DomNode*/ node){
+ // summary:
+ // Called when focus leaves a node.
+ // Usually ignored, _unless_ it *isn't* follwed by touching another node,
+ // which indicates that we tabbed off the last field on the page,
+ // in which case every widget is marked inactive
+ dijit._prevFocus = dijit._curFocus;
+ dijit._curFocus = null;
+
+ if(dijit._justMouseDowned){
+ // the mouse down caused a new widget to be marked as active; this blur event
+ // is coming late, so ignore it.
+ return;
+ }
+
+ // if the blur event isn't followed by a focus event then mark all widgets as inactive.
+ if(dijit._clearActiveWidgetsTimer){
+ clearTimeout(dijit._clearActiveWidgetsTimer);
+ }
+ dijit._clearActiveWidgetsTimer = setTimeout(function(){
+ delete dijit._clearActiveWidgetsTimer;
+ dijit._setStack([]);
+ dijit._prevFocus = null;
+ }, 100);
+ },
+
+ _onTouchNode: function(/*DomNode*/ node, /*String*/ by){
+ // summary:
+ // Callback when node is focused or mouse-downed
+ // node:
+ // The node that was touched.
+ // by:
+ // "mouse" if the focus/touch was caused by a mouse down event
+
+ // ignore the recent blurNode event
+ if(dijit._clearActiveWidgetsTimer){
+ clearTimeout(dijit._clearActiveWidgetsTimer);
+ delete dijit._clearActiveWidgetsTimer;
+ }
+
+ // compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
+ var newStack=[];
+ try{
+ while(node){
+ var popupParent = dojo.attr(node, "dijitPopupParent");
+ if(popupParent){
+ node=dijit.byId(popupParent).domNode;
+ }else if(node.tagName && node.tagName.toLowerCase() == "body"){
+ // is this the root of the document or just the root of an iframe?
+ if(node === dojo.body()){
+ // node is the root of the main document
+ break;
+ }
+ // otherwise, find the iframe this node refers to (can't access it via parentNode,
+ // need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
+ node=dijit.getDocumentWindow(node.ownerDocument).frameElement;
+ }else{
+ var id = node.getAttribute && node.getAttribute("widgetId");
+ if(id){
+ newStack.unshift(id);
+ }
+ node=node.parentNode;
+ }
+ }
+ }catch(e){ /* squelch */ }
+
+ dijit._setStack(newStack, by);
+ },
+
+ _onFocusNode: function(/*DomNode*/ node){
+ // summary:
+ // Callback when node is focused
+
+ if(!node){
+ return;
+ }
+
+ if(node.nodeType == 9){
+ // Ignore focus events on the document itself. This is here so that
+ // (for example) clicking the up/down arrows of a spinner
+ // (which don't get focus) won't cause that widget to blur. (FF issue)
+ return;
+ }
+
+ dijit._onTouchNode(node);
+
+ if(node == dijit._curFocus){ return; }
+ if(dijit._curFocus){
+ dijit._prevFocus = dijit._curFocus;
+ }
+ dijit._curFocus = node;
+ dojo.publish("focusNode", [node]);
+ },
+
+ _setStack: function(/*String[]*/ newStack, /*String*/ by){
+ // summary:
+ // The stack of active widgets has changed. Send out appropriate events and records new stack.
+ // newStack:
+ // array of widget id's, starting from the top (outermost) widget
+ // by:
+ // "mouse" if the focus/touch was caused by a mouse down event
+
+ var oldStack = dijit._activeStack;
+ dijit._activeStack = newStack;
+
+ // compare old stack to new stack to see how many elements they have in common
+ for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
+ if(oldStack[nCommon] != newStack[nCommon]){
+ break;
+ }
+ }
+
+ var widget;
+ // for all elements that have gone out of focus, send blur event
+ for(var i=oldStack.length-1; i>=nCommon; i--){
+ widget = dijit.byId(oldStack[i]);
+ if(widget){
+ widget._focused = false;
+ widget._hasBeenBlurred = true;
+ if(widget._onBlur){
+ widget._onBlur(by);
+ }
+ if(widget._setStateClass){
+ widget._setStateClass();
+ }
+ dojo.publish("widgetBlur", [widget, by]);
+ }
+ }
+
+ // for all element that have come into focus, send focus event
+ for(i=nCommon; i<newStack.length; i++){
+ widget = dijit.byId(newStack[i]);
+ if(widget){
+ widget._focused = true;
+ if(widget._onFocus){
+ widget._onFocus(by);
+ }
+ if(widget._setStateClass){
+ widget._setStateClass();
+ }
+ dojo.publish("widgetFocus", [widget, by]);
+ }
+ }
+ }
+});
+
+// register top window and all the iframes it contains
+dojo.addOnLoad(function(){
+ var handle = dijit.registerWin(window);
+ if(dojo.isIE){
+ dojo.addOnWindowUnload(function(){
+ dijit.unregisterWin(handle);
+ handle = null;
+ })
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.AdapterRegistry"] = true;
+dojo.provide("dojo.AdapterRegistry");
+
+dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
+ // summary:
+ // A registry to make contextual calling/searching easier.
+ // description:
+ // Objects of this class keep list of arrays in the form [name, check,
+ // wrap, directReturn] that are used to determine what the contextual
+ // result of a set of checked arguments is. All check/wrap functions
+ // in this registry should be of the same arity.
+ // example:
+ // | // create a new registry
+ // | var reg = new dojo.AdapterRegistry();
+ // | reg.register("handleString",
+ // | dojo.isString,
+ // | function(str){
+ // | // do something with the string here
+ // | }
+ // | );
+ // | reg.register("handleArr",
+ // | dojo.isArray,
+ // | function(arr){
+ // | // do something with the array here
+ // | }
+ // | );
+ // |
+ // | // now we can pass reg.match() *either* an array or a string and
+ // | // the value we pass will get handled by the right function
+ // | reg.match("someValue"); // will call the first function
+ // | reg.match(["someValue"]); // will call the second
+
+ this.pairs = [];
+ this.returnWrappers = returnWrappers || false; // Boolean
+}
+
+dojo.extend(dojo.AdapterRegistry, {
+ register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
+ // summary:
+ // register a check function to determine if the wrap function or
+ // object gets selected
+ // name:
+ // a way to identify this matcher.
+ // check:
+ // a function that arguments are passed to from the adapter's
+ // match() function. The check function should return true if the
+ // given arguments are appropriate for the wrap function.
+ // directReturn:
+ // If directReturn is true, the value passed in for wrap will be
+ // returned instead of being called. Alternately, the
+ // AdapterRegistry can be set globally to "return not call" using
+ // the returnWrappers property. Either way, this behavior allows
+ // the registry to act as a "search" function instead of a
+ // function interception library.
+ // override:
+ // If override is given and true, the check function will be given
+ // highest priority. Otherwise, it will be the lowest priority
+ // adapter.
+ this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
+ },
+
+ match: function(/* ... */){
+ // summary:
+ // Find an adapter for the given arguments. If no suitable adapter
+ // is found, throws an exception. match() accepts any number of
+ // arguments, all of which are passed to all matching functions
+ // from the registered pairs.
+ for(var i = 0; i < this.pairs.length; i++){
+ var pair = this.pairs[i];
+ if(pair[1].apply(this, arguments)){
+ if((pair[3])||(this.returnWrappers)){
+ return pair[2];
+ }else{
+ return pair[2].apply(this, arguments);
+ }
+ }
+ }
+ throw new Error("No match found");
+ },
+
+ unregister: function(name){
+ // summary: Remove a named adapter from the registry
+
+ // FIXME: this is kind of a dumb way to handle this. On a large
+ // registry this will be slow-ish and we can use the name as a lookup
+ // should we choose to trade memory for speed.
+ for(var i = 0; i < this.pairs.length; i++){
+ var pair = this.pairs[i];
+ if(pair[0] == name){
+ this.pairs.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.place"] = true;
+dojo.provide("dijit._base.place");
+
+
+
+// ported from dojo.html.util
+
+dijit.getViewport = function(){
+ // summary:
+ // Returns the dimensions and scroll position of the viewable area of a browser window
+
+ var scrollRoot = (dojo.doc.compatMode == 'BackCompat')? dojo.body() : dojo.doc.documentElement;
+
+ // get scroll position
+ var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
+ return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
+};
+
+/*=====
+dijit.__Position = function(){
+ // x: Integer
+ // horizontal coordinate in pixels, relative to document body
+ // y: Integer
+ // vertical coordinate in pixels, relative to document body
+
+ thix.x = x;
+ this.y = y;
+}
+=====*/
+
+
+dijit.placeOnScreen = function(
+ /* DomNode */ node,
+ /* dijit.__Position */ pos,
+ /* String[] */ corners,
+ /* dijit.__Position? */ padding){
+ // summary:
+ // Positions one of the node's corners at specified position
+ // such that node is fully visible in viewport.
+ // description:
+ // NOTE: node is assumed to be absolutely or relatively positioned.
+ // pos:
+ // Object like {x: 10, y: 20}
+ // corners:
+ // Array of Strings representing order to try corners in, like ["TR", "BL"].
+ // Possible values are:
+ // * "BL" - bottom left
+ // * "BR" - bottom right
+ // * "TL" - top left
+ // * "TR" - top right
+ // padding:
+ // set padding to put some buffer around the element you want to position.
+ // example:
+ // Try to place node's top right corner at (10,20).
+ // If that makes node go (partially) off screen, then try placing
+ // bottom left corner at (10,20).
+ // | placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
+
+ var choices = dojo.map(corners, function(corner){
+ var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
+ if(padding){
+ c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
+ c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
+ }
+ return c;
+ });
+
+ return dijit._place(node, choices);
+}
+
+dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+ // summary:
+ // Given a list of spots to put node, put it at the first spot where it fits,
+ // of if it doesn't fit anywhere then the place with the least overflow
+ // choices: Array
+ // Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
+ // Above example says to put the top-left corner of the node at (10,20)
+ // layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+ // for things like tooltip, they are displayed differently (and have different dimensions)
+ // based on their orientation relative to the parent. This adjusts the popup based on orientation.
+
+ // get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+ // viewport over document
+ var view = dijit.getViewport();
+
+ // This won't work if the node is inside a <div style="position: relative">,
+ // so reattach it to dojo.doc.body. (Otherwise, the positioning will be wrong
+ // and also it might get cutoff)
+ if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
+ dojo.body().appendChild(node);
+ }
+
+ var best = null;
+ dojo.some(choices, function(choice){
+ var corner = choice.corner;
+ var pos = choice.pos;
+
+ // configure node to be displayed in given position relative to button
+ // (need to do this in order to get an accurate size for the node, because
+ // a tooltips size changes based on position, due to triangle)
+ if(layoutNode){
+ layoutNode(node, choice.aroundCorner, corner);
+ }
+
+ // get node's size
+ var style = node.style;
+ var oldDisplay = style.display;
+ var oldVis = style.visibility;
+ style.visibility = "hidden";
+ style.display = "";
+ var mb = dojo.marginBox(node);
+ style.display = oldDisplay;
+ style.visibility = oldVis;
+
+ // coordinates and size of node with specified corner placed at pos,
+ // and clipped by viewport
+ var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
+ startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
+ endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
+ endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
+ width = endX - startX,
+ height = endY - startY,
+ overflow = (mb.w - width) + (mb.h - height);
+
+ if(best == null || overflow < best.overflow){
+ best = {
+ corner: corner,
+ aroundCorner: choice.aroundCorner,
+ x: startX,
+ y: startY,
+ w: width,
+ h: height,
+ overflow: overflow
+ };
+ }
+ return !overflow;
+ });
+
+ node.style.left = best.x + "px";
+ node.style.top = best.y + "px";
+ if(best.overflow && layoutNode){
+ layoutNode(node, best.aroundCorner, best.corner);
+ }
+ return best;
+}
+
+dijit.placeOnScreenAroundNode = function(
+ /* DomNode */ node,
+ /* DomNode */ aroundNode,
+ /* Object */ aroundCorners,
+ /* Function? */ layoutNode){
+
+ // summary:
+ // Position node adjacent or kitty-corner to aroundNode
+ // such that it's fully visible in viewport.
+ //
+ // description:
+ // Place node such that corner of node touches a corner of
+ // aroundNode, and that node is fully visible.
+ //
+ // aroundCorners:
+ // Ordered list of pairs of corners to try matching up.
+ // Each pair of corners is represented as a key/value in the hash,
+ // where the key corresponds to the aroundNode's corner, and
+ // the value corresponds to the node's corner:
+ //
+ // | { aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
+ //
+ // The following strings are used to represent the four corners:
+ // * "BL" - bottom left
+ // * "BR" - bottom right
+ // * "TL" - top left
+ // * "TR" - top right
+ //
+ // layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+ // For things like tooltip, they are displayed differently (and have different dimensions)
+ // based on their orientation relative to the parent. This adjusts the popup based on orientation.
+ //
+ // example:
+ // | dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
+ // This will try to position node such that node's top-left corner is at the same position
+ // as the bottom left corner of the aroundNode (ie, put node below
+ // aroundNode, with left edges aligned). If that fails it will try to put
+ // the bottom-right corner of node where the top right corner of aroundNode is
+ // (ie, put node above aroundNode, with right edges aligned)
+ //
+
+ // get coordinates of aroundNode
+ aroundNode = dojo.byId(aroundNode);
+ var oldDisplay = aroundNode.style.display;
+ aroundNode.style.display="";
+ // #3172: use the slightly tighter border box instead of marginBox
+ var aroundNodePos = dojo.position(aroundNode, true);
+ aroundNode.style.display=oldDisplay;
+
+ // place the node around the calculated rectangle
+ return dijit._placeOnScreenAroundRect(node,
+ aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h, // rectangle
+ aroundCorners, layoutNode);
+};
+
+/*=====
+dijit.__Rectangle = function(){
+ // x: Integer
+ // horizontal offset in pixels, relative to document body
+ // y: Integer
+ // vertical offset in pixels, relative to document body
+ // width: Integer
+ // width in pixels
+ // height: Integer
+ // height in pixels
+
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+}
+=====*/
+
+
+dijit.placeOnScreenAroundRectangle = function(
+ /* DomNode */ node,
+ /* dijit.__Rectangle */ aroundRect,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except that the "around"
+ // parameter is an arbitrary rectangle on the screen (x, y, width, height)
+ // instead of a dom node.
+
+ return dijit._placeOnScreenAroundRect(node,
+ aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height, // rectangle
+ aroundCorners, layoutNode);
+};
+
+dijit._placeOnScreenAroundRect = function(
+ /* DomNode */ node,
+ /* Number */ x,
+ /* Number */ y,
+ /* Number */ width,
+ /* Number */ height,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
+ // of a rectangle to place node adjacent to.
+
+ // TODO: combine with placeOnScreenAroundRectangle()
+
+ // Generate list of possible positions for node
+ var choices = [];
+ for(var nodeCorner in aroundCorners){
+ choices.push( {
+ aroundCorner: nodeCorner,
+ corner: aroundCorners[nodeCorner],
+ pos: {
+ x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+ y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
+ }
+ });
+ }
+
+ return dijit._place(node, choices, layoutNode);
+};
+
+dijit.placementRegistry= new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",
+ function(n, x){
+ return typeof x == "object" &&
+ typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
+ },
+ dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",
+ function(n, x){
+ return typeof x == "object" &&
+ "x" in x && "y" in x && "width" in x && "height" in x;
+ },
+ dijit.placeOnScreenAroundRectangle);
+
+dijit.placeOnScreenAroundElement = function(
+ /* DomNode */ node,
+ /* Object */ aroundElement,
+ /* Object */ aroundCorners,
+ /* Function */ layoutNode){
+
+ // summary:
+ // Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
+ // for the "around" argument and finds a proper processor to place a node.
+
+ return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
+};
+
+dijit.getPopupAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+ // summary:
+ // Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+ //
+ // position: String[]
+ // This variable controls the position of the drop down.
+ // It's an array of strings with the following values:
+ //
+ // * before: places drop down to the left of the target node/widget, or to the right in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * after: places drop down to the right of the target node/widget, or to the left in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * above: drop down goes above target node
+ // * below: drop down goes below target node
+ //
+ // The list is positions is tried, in order, until a position is found where the drop down fits
+ // within the viewport.
+ //
+ // leftToRight: Boolean
+ // Whether the popup will be displaying in leftToRight mode.
+ //
+ var align = {};
+ dojo.forEach(position, function(pos){
+ switch(pos){
+ case "after":
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+ break;
+ case "before":
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+ break;
+ case "below":
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+ break;
+ case "above":
+ default:
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+ align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+ break;
+ }
+ });
+ return align;
+};
+dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+ // summary:
+ // Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+ //
+ // position: String[]
+ // This variable controls the position of the drop down.
+ // It's an array of strings with the following values:
+ //
+ // * before: places drop down to the left of the target node/widget, or to the right in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * after: places drop down to the right of the target node/widget, or to the left in
+ // the case of RTL scripts like Hebrew and Arabic
+ // * above: drop down goes above target node
+ // * below: drop down goes below target node
+ //
+ // The list is positions is tried, in order, until a position is found where the drop down fits
+ // within the viewport.
+ //
+ // leftToRight: Boolean
+ // Whether the popup will be displaying in leftToRight mode.
+ //
+ var align = {};
+ dojo.forEach(position, function(pos){
+ switch(pos){
+ case "after":
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+ break;
+ case "before":
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+ break;
+ case "below":
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+ align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+ break;
+ case "above":
+ default:
+ // first try to align left borders, next try to align right borders (or reverse for RTL mode)
+ align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+ align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+ break;
+ }
+ });
+ return align;
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.window"] = true;
+dojo.provide("dijit._base.window");
+
+// TODO: remove this in 2.0, it's not used anymore, or at least not internally
+
+dijit.getDocumentWindow = function(doc){
+ // summary:
+ // Get window object associated with document doc
+
+ // In some IE versions (at least 6.0), document.parentWindow does not return a
+ // reference to the real window object (maybe a copy), so we must fix it as well
+ // We use IE specific execScript to attach the real window reference to
+ // document._parentWindow for later use
+ if(dojo.isIE && window !== document.parentWindow && !doc._parentWindow){
+ /*
+ In IE 6, only the variable "window" can be used to connect events (others
+ may be only copies).
+ */
+ doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
+ //to prevent memory leak, unset it after use
+ //another possibility is to add an onUnload handler which seems overkill to me (liucougar)
+ var win = doc._parentWindow;
+ doc._parentWindow = null;
+ return win; // Window
+ }
+
+ return doc._parentWindow || doc.parentWindow || doc.defaultView; // Window
+}
+
+}
+
+if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.popup"] = true;
+dojo.provide("dijit._base.popup");
+
+
+
+
+
+dijit.popup = new function(){
+ // summary:
+ // This class is used to show/hide widgets as popups.
+
+ var stack = [],
+ beginZIndex=1000,
+ idGen = 1;
+
+ this.moveOffScreen = function(/*DomNode*/ node){
+ // summary:
+ // Moves node offscreen without hiding it (so that all layout widgets included
+ // in this node can still layout properly)
+ //
+ // description:
+ // Attaches node to dojo.doc.body, and
+ // positions it off screen, but not display:none, so that
+ // the widget doesn't appear in the page flow and/or cause a blank
+ // area at the bottom of the viewport (making scrollbar longer), but
+ // initialization of contained widgets works correctly
+
+ var s = node.style;
+ s.visibility = "hidden"; // so TAB key doesn't navigate to hidden popup
+ s.position = "absolute";
+ s.top = "-9999px";
+ if(s.display == "none"){
+ s.display="";
+ }
+ dojo.body().appendChild(node);
+ };
+
+/*=====
+dijit.popup.__OpenArgs = function(){
+ // popup: Widget
+ // widget to display
+ // parent: Widget
+ // the button etc. that is displaying this popup
+ // around: DomNode
+ // DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.)
+ // x: Integer
+ // Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.)
+ // y: Integer
+ // Absolute vertical position (in pixels) to place node at. (Specity this *or* "around" parameter.)
+ // orient: Object || String
+ // When the around parameter is specified, orient should be an
+ // ordered list of tuples of the form (around-node-corner, popup-node-corner).
+ // dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
+ // until the popup appears fully within the viewport.
+ //
+ // The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
+ // 1. (BL, TL)
+ // 2. (TL, BL)
+ // where BL means "bottom left" and "TL" means "top left".
+ // So by default, it first tries putting the popup below the around node, left-aligning them,
+ // and then tries to put it above the around node, still left-aligning them. Note that the
+ // default is horizontally reversed when in RTL mode.
+ //
+ // When an (x,y) position is specified rather than an around node, orient is either
+ // "R" or "L". R (for right) means that it tries to put the popup to the right of the mouse,
+ // specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
+ // fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
+ // and the top-right corner.
+ // onCancel: Function
+ // callback when user has canceled the popup by
+ // 1. hitting ESC or
+ // 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
+ // i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
+ // onClose: Function
+ // callback whenever this popup is closed
+ // onExecute: Function
+ // callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
+ // padding: dijit.__Position
+ // adding a buffer around the opening position. This is only useful when around is not set.
+ this.popup = popup;
+ this.parent = parent;
+ this.around = around;
+ this.x = x;
+ this.y = y;
+ this.orient = orient;
+ this.onCancel = onCancel;
+ this.onClose = onClose;
+ this.onExecute = onExecute;
+ this.padding = padding;
+}
+=====*/
+
+ // Compute the closest ancestor popup that's *not* a child of another popup.
+ // Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
+ var getTopPopup = function(){
+ for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
+ /* do nothing, just trying to get right value for pi */
+ }
+ return stack[pi];
+ };
+
+ var wrappers=[];
+ this.open = function(/*dijit.popup.__OpenArgs*/ args){
+ // summary:
+ // Popup the widget at the specified position
+ //
+ // example:
+ // opening at the mouse position
+ // | dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
+ //
+ // example:
+ // opening the widget as a dropdown
+ // | dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
+ //
+ // Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
+ // (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
+
+ var widget = args.popup,
+ orient = args.orient || (
+ dojo._isBodyLtr() ?
+ {'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
+ {'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
+ ),
+ around = args.around,
+ id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++);
+
+ // make wrapper div to hold widget and possibly hold iframe behind it.
+ // we can't attach the iframe as a child of the widget.domNode because
+ // widget.domNode might be a <table>, <ul>, etc.
+
+ var wrapperobj = wrappers.pop(), wrapper, iframe;
+ if(!wrapperobj){
+ wrapper = dojo.create("div",{
+ "class":"dijitPopup"
+ }, dojo.body());
+ dijit.setWaiRole(wrapper, "presentation");
+ }else{
+ // recycled a old wrapper, so that we don't need to reattach the iframe
+ // which is slow even if the iframe is empty, see #10167
+ wrapper = wrapperobj[0];
+ iframe = wrapperobj[1];
+ }
+
+ dojo.attr(wrapper,{
+ id: id,
+ style:{
+ zIndex: beginZIndex + stack.length,
+ visibility:"hidden",
+ // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+ top: "-9999px"
+ },
+ dijitPopupParent: args.parent ? args.parent.id : ""
+ });
+
+ var s = widget.domNode.style;
+ s.display = "";
+ s.visibility = "";
+ s.position = "";
+ s.top = "0px";
+ wrapper.appendChild(widget.domNode);
+
+ if(!iframe){
+ iframe = new dijit.BackgroundIframe(wrapper);
+ }else{
+ iframe.resize(wrapper)
+ }
+
+ // position the wrapper node
+ var best = around ?
+ dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
+ dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
+
+ wrapper.style.visibility = "visible";
+ // TODO: use effects to fade in wrapper
+
+ var handlers = [];
+
+ // provide default escape and tab key handling
+ // (this will work for any widget, not just menu)
+ handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
+ if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
+ dojo.stopEvent(evt);
+ args.onCancel();
+ }else if(evt.charOrCode === dojo.keys.TAB){
+ dojo.stopEvent(evt);
+ var topPopup = getTopPopup();
+ if(topPopup && topPopup.onCancel){
+ topPopup.onCancel();
+ }
+ }
+ }));
+
+ // watch for cancel/execute events on the popup and notify the caller
+ // (for a menu, "execute" means clicking an item)
+ if(widget.onCancel){
+ handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
+ }
+
+ handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", function(){
+ var topPopup = getTopPopup();
+ if(topPopup && topPopup.onExecute){
+ topPopup.onExecute();
+ }
+ }));
+
+ stack.push({
+ wrapper: wrapper,
+ iframe: iframe,
+ widget: widget,
+ parent: args.parent,
+ onExecute: args.onExecute,
+ onCancel: args.onCancel,
+ onClose: args.onClose,
+ handlers: handlers
+ });
+
+ if(widget.onOpen){
+ // TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
+ widget.onOpen(best);
+ }
+
+ return best;
+ };
+
+ this.close = function(/*dijit._Widget*/ popup){
+ // summary:
+ // Close specified popup and any popups that it parented
+
+ // Basically work backwards from the top of the stack closing popups
+ // until we hit the specified popup, but IIRC there was some issue where closing
+ // a popup would cause others to close too. Thus if we are trying to close B in [A,B,C]
+ // closing C might close B indirectly and then the while() condition will run where stack==[A]...
+ // so the while condition is constructed defensively.
+ while(dojo.some(stack, function(elem){return elem.widget == popup;})){
+ var top = stack.pop(),
+ wrapper = top.wrapper,
+ iframe = top.iframe,
+ widget = top.widget,
+ onClose = top.onClose;
+
+ if(widget.onClose){
+ // TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
+ widget.onClose();
+ }
+ dojo.forEach(top.handlers, dojo.disconnect);
+
+ // Move the widget offscreen, unless it has already been destroyed in above onClose() etc.
+ if(widget && widget.domNode){
+ this.moveOffScreen(widget.domNode);
+ }
+
+ // recycle the wrapper plus iframe, so we prevent reattaching iframe everytime an popup opens
+ // don't use moveOffScreen which would also reattach the wrapper to body, which causes reloading of iframe
+ wrapper.style.top = "-9999px";
+ wrapper.style.visibility = "hidden";
+ wrappers.push([wrapper,iframe]);
+
+ if(onClose){
+ onClose();
+ }
+ }
+ };
+}();
+
+dijit._frames = new function(){
+ // summary:
+ // cache of iframes
+ var queue = [];
+
+ this.pop = function(){
+ var iframe;
+ if(queue.length){
+ iframe = queue.pop();
+ iframe.style.display="";
+ }else{
+ if(dojo.isIE){
+ var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
+ var html="<iframe src='" + burl + "'"
+ + " style='position: absolute; left: 0px; top: 0px;"
+ + "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+ iframe = dojo.doc.createElement(html);
+ }else{
+ iframe = dojo.create("iframe");
+ iframe.src = 'javascript:""';
+ iframe.className = "dijitBackgroundIframe";
+ dojo.style(iframe, "opacity", 0.1);
+ }
+ iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
+ }
+ return iframe;
+ };
+
+ this.push = function(iframe){
+ iframe.style.display="none";
+ queue.push(iframe);
+ }
+}();
+
+
+dijit.BackgroundIframe = function(/* DomNode */node){
+ // summary:
+ // For IE/FF z-index schenanigans. id attribute is required.
+ //
+ // description:
+ // new dijit.BackgroundIframe(node)
+ // Makes a background iframe as a child of node, that fills
+ // area (and position) of node
+
+ if(!node.id){ throw new Error("no id"); }
+ if(dojo.isIE || dojo.isMoz){
+ var iframe = dijit._frames.pop();
+ node.appendChild(iframe);
+ if(dojo.isIE<7){
+ this.resize(node);
+ this._conn = dojo.connect(node, 'onresize', this, function(){
+ this.resize(node);
+ });
+ }else{
+ dojo.style(iframe, {
+ width: '100%',
+ height: '100%'
+ });
+ }
+ this.iframe = iframe;
+ }
+};
+
+dojo.extend(dijit.BackgroundIframe, {
+ resize: function(node){
+ // summary:
+ // resize the iframe so its the same size as node
+ // description:
+ // this function is a no-op in all browsers except
+ // IE6, which does not support 100% width/height
+ // of absolute positioned iframes
+ if(this.iframe && dojo.isIE<7){
+ dojo.style(this.iframe, {
+ width: node.offsetWidth + 'px',
+ height: node.offsetHeight + 'px'
+ });
+ }
+ },
+ destroy: function(){
+ // summary:
+ // destroy the iframe
+ if(this._conn){
+ dojo.disconnect(this._conn);
+ this._conn = null;
+ }
+ if(this.iframe){
+ dijit._frames.push(this.iframe);
+ delete this.iframe;
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.scroll"] = true;
+dojo.provide("dijit._base.scroll");
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+ // summary:
+ // Scroll the passed node into view, if it is not already.
+
+ // don't rely on that node.scrollIntoView works just because the function is there
+
+ try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
+ node = dojo.byId(node);
+ var doc = node.ownerDocument || dojo.doc,
+ body = doc.body || dojo.body(),
+ html = doc.documentElement || body.parentNode,
+ isIE = dojo.isIE, isWK = dojo.isWebKit;
+ // if an untested browser, then use the native method
+ if((!(dojo.isMoz || isIE || isWK) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
+ node.scrollIntoView(false); // short-circuit to native if possible
+ return;
+ }
+ var backCompat = doc.compatMode == 'BackCompat',
+ clientAreaRoot = backCompat? body : html,
+ scrollRoot = isWK ? body : clientAreaRoot,
+ rootWidth = clientAreaRoot.clientWidth,
+ rootHeight = clientAreaRoot.clientHeight,
+ rtl = !dojo._isBodyLtr(),
+ nodePos = pos || dojo.position(node),
+ el = node.parentNode,
+ isFixed = function(el){
+ return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
+ };
+ if(isFixed(node)){ return; } // nothing to do
+ while(el){
+ if(el == body){ el = scrollRoot; }
+ var elPos = dojo.position(el),
+ fixedPos = isFixed(el);
+ with(elPos){
+ if(el == scrollRoot){
+ w = rootWidth, h = rootHeight;
+ if(scrollRoot == html && isIE && rtl){ x += scrollRoot.offsetWidth-w; } // IE workaround where scrollbar causes negative x
+ if(x < 0 || !isIE){ x = 0; } // IE can have values > 0
+ if(y < 0 || !isIE){ y = 0; }
+ }else{
+ var pb = dojo._getPadBorderExtents(el);
+ w -= pb.w; h -= pb.h; x += pb.l; y += pb.t;
+ }
+ with(el){
+ if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
+ var clientSize = clientWidth,
+ scrollBarSize = w - clientSize;
+ if(clientSize > 0 && scrollBarSize > 0){
+ w = clientSize;
+ if(isIE && rtl){ x += scrollBarSize; }
+ }
+ clientSize = clientHeight;
+ scrollBarSize = h - clientSize;
+ if(clientSize > 0 && scrollBarSize > 0){
+ h = clientSize;
+ }
+ }
+ if(fixedPos){ // bounded by viewport, not parents
+ if(y < 0){
+ h += y, y = 0;
+ }
+ if(x < 0){
+ w += x, x = 0;
+ }
+ if(y + h > rootHeight){
+ h = rootHeight - y;
+ }
+ if(x + w > rootWidth){
+ w = rootWidth - x;
+ }
+ }
+ // calculate overflow in all 4 directions
+ var l = nodePos.x - x, // beyond left: < 0
+ t = nodePos.y - Math.max(y, 0), // beyond top: < 0
+ r = l + nodePos.w - w, // beyond right: > 0
+ bot = t + nodePos.h - h; // beyond bottom: > 0
+ if(r * l > 0){
+ var s = Math[l < 0? "max" : "min"](l, r);
+ nodePos.x += scrollLeft;
+ scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+ nodePos.x -= scrollLeft;
+ }
+ if(bot * t > 0){
+ nodePos.y += scrollTop;
+ scrollTop += Math[t < 0? "max" : "min"](t, bot);
+ nodePos.y -= scrollTop;
+ }
+ }
+ }
+ el = (el != scrollRoot) && !fixedPos && el.parentNode;
+ }
+ }catch(error){
+ console.error('scrollIntoView: ' + error);
+ node.scrollIntoView(false);
+ }
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.sniff"] = true;
+// summary:
+// Applies pre-set CSS classes to the top-level HTML node, based on:
+// - browser (ex: dj_ie)
+// - browser version (ex: dj_ie6)
+// - box model (ex: dj_contentBox)
+// - text direction (ex: dijitRtl)
+//
+// In addition, browser, browser version, and box model are
+// combined with an RTL flag when browser text is RTL. ex: dj_ie-rtl.
+//
+// Simply doing a require on this module will
+// establish this CSS. Modified version of Morris' CSS hack.
+
+dojo.provide("dijit._base.sniff");
+
+(function(){
+
+ var d = dojo,
+ html = d.doc.documentElement,
+ ie = d.isIE,
+ opera = d.isOpera,
+ maj = Math.floor,
+ ff = d.isFF,
+ boxModel = d.boxModel.replace(/-/,''),
+
+ classes = {
+ dj_ie: ie,
+ dj_ie6: maj(ie) == 6,
+ dj_ie7: maj(ie) == 7,
+ dj_ie8: maj(ie) == 8,
+ dj_iequirks: ie && d.isQuirks,
+
+ // NOTE: Opera not supported by dijit
+ dj_opera: opera,
+
+ dj_khtml: d.isKhtml,
+
+ dj_webkit: d.isWebKit,
+ dj_safari: d.isSafari,
+ dj_chrome: d.isChrome,
+
+ dj_gecko: d.isMozilla,
+ dj_ff3: maj(ff) == 3
+ }; // no dojo unsupported browsers
+
+ classes["dj_" + boxModel] = true;
+
+ // apply browser, browser version, and box model class names
+ for(var p in classes){
+ if(classes[p]){
+ if(html.className){
+ html.className += " " + p;
+ }else{
+ html.className = p;
+ }
+ }
+ }
+
+ // If RTL mode then add dijitRtl flag plus repeat existing classes
+ // with -rtl extension
+ // (unshift is to make this code run after <body> node is loaded but before parser runs)
+ dojo._loaders.unshift(function(){
+ if(!dojo._isBodyLtr()){
+ html.className += " dijitRtl";
+ for(var p in classes){
+ if(classes[p]){
+ html.className += " " + p + "-rtl";
+ }
+ }
+ }
+ });
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.typematic"] = true;
+dojo.provide("dijit._base.typematic");
+
+dijit.typematic = {
+ // summary:
+ // These functions are used to repetitively call a user specified callback
+ // method when a specific key or mouse click over a specific DOM node is
+ // held down for a specific amount of time.
+ // Only 1 such event is allowed to occur on the browser page at 1 time.
+
+ _fireEventAndReload: function(){
+ this._timer = null;
+ this._callback(++this._count, this._node, this._evt);
+
+ // Schedule next event, reducing the timer a little bit each iteration, bottoming-out at 10 to avoid
+ // browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
+ this._currentTimeout = Math.max(
+ this._currentTimeout < 0 ? this._initialDelay :
+ (this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
+ 10);
+ this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
+ },
+
+ trigger: function(/*Event*/ evt, /* Object */ _this, /*DOMNode*/ node, /* Function */ callback, /* Object */ obj, /* Number */ subsequentDelay, /* Number */ initialDelay){
+ // summary:
+ // Start a timed, repeating callback sequence.
+ // If already started, the function call is ignored.
+ // This method is not normally called by the user but can be
+ // when the normal listener code is insufficient.
+ // evt:
+ // key or mouse event object to pass to the user callback
+ // _this:
+ // pointer to the user's widget space.
+ // node:
+ // the DOM node object to pass the the callback function
+ // callback:
+ // function to call until the sequence is stopped called with 3 parameters:
+ // count:
+ // integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
+ // node:
+ // the DOM node object passed in
+ // evt:
+ // key or mouse event object
+ // obj:
+ // user space object used to uniquely identify each typematic sequence
+ // subsequentDelay:
+ // if > 1, the number of milliseconds until the 3->n events occur
+ // or else the fractional time multiplier for the next event's delay, default=0.9
+ // initialDelay:
+ // the number of milliseconds until the 2nd event occurs, default=500ms
+ if(obj != this._obj){
+ this.stop();
+ this._initialDelay = initialDelay || 500;
+ this._subsequentDelay = subsequentDelay || 0.90;
+ this._obj = obj;
+ this._evt = evt;
+ this._node = node;
+ this._currentTimeout = -1;
+ this._count = -1;
+ this._callback = dojo.hitch(_this, callback);
+ this._fireEventAndReload();
+ }
+ },
+
+ stop: function(){
+ // summary:
+ // Stop an ongoing timed, repeating callback sequence.
+ if(this._timer){
+ clearTimeout(this._timer);
+ this._timer = null;
+ }
+ if(this._obj){
+ this._callback(-1, this._node, this._evt);
+ this._obj = null;
+ }
+ },
+
+ addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a specific typematic key.
+ // See also the trigger method for other parameters.
+ // keyObject:
+ // an object defining the key to listen for.
+ // charOrCode:
+ // the printable character (string) or keyCode (number) to listen for.
+ // keyCode:
+ // (deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
+ // charCode:
+ // (deprecated - use charOrCode) the charCode (number) to listen for.
+ // ctrlKey:
+ // desired ctrl key state to initiate the calback sequence:
+ // - pressed (true)
+ // - released (false)
+ // - either (unspecified)
+ // altKey:
+ // same as ctrlKey but for the alt key
+ // shiftKey:
+ // same as ctrlKey but for the shift key
+ // returns:
+ // an array of dojo.connect handles
+ if(keyObject.keyCode){
+ keyObject.charOrCode = keyObject.keyCode;
+ dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+ }else if(keyObject.charCode){
+ keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
+ dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+ }
+ return [
+ dojo.connect(node, "onkeypress", this, function(evt){
+ if(evt.charOrCode == keyObject.charOrCode &&
+ (keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
+ (keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
+ (keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
+ (keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
+ dojo.stopEvent(evt);
+ dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
+ }else if(dijit.typematic._obj == keyObject){
+ dijit.typematic.stop();
+ }
+ }),
+ dojo.connect(node, "onkeyup", this, function(evt){
+ if(dijit.typematic._obj == keyObject){
+ dijit.typematic.stop();
+ }
+ })
+ ];
+ },
+
+ addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a typematic mouse click.
+ // See the trigger method for other parameters.
+ // returns:
+ // an array of dojo.connect handles
+ var dc = dojo.connect;
+ return [
+ dc(node, "mousedown", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
+ }),
+ dc(node, "mouseup", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.stop();
+ }),
+ dc(node, "mouseout", this, function(evt){
+ dojo.stopEvent(evt);
+ dijit.typematic.stop();
+ }),
+ dc(node, "mousemove", this, function(evt){
+ dojo.stopEvent(evt);
+ }),
+ dc(node, "dblclick", this, function(evt){
+ dojo.stopEvent(evt);
+ if(dojo.isIE){
+ dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
+ setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+ }
+ })
+ ];
+ },
+
+ addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
+ // summary:
+ // Start listening for a specific typematic key and mouseclick.
+ // This is a thin wrapper to addKeyListener and addMouseListener.
+ // See the addMouseListener and addKeyListener methods for other parameters.
+ // mouseNode:
+ // the DOM node object to listen on for mouse events.
+ // keyNode:
+ // the DOM node object to listen on for key events.
+ // returns:
+ // an array of dojo.connect handles
+ return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(
+ this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
+ }
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+ onload: function(){
+ // summary:
+ // Detects if we are in high-contrast mode or not
+
+ // This must be a named function and not an anonymous
+ // function, so that the widget parsing code can make sure it
+ // registers its onload function after this function.
+ // DO NOT USE "this" within this function.
+
+ // create div for testing if high contrast mode is on or images are turned off
+ var div = dojo.create("div",{
+ id: "a11yTestNode",
+ style:{
+ cssText:'border: 1px solid;'
+ + 'border-color:red green;'
+ + 'position: absolute;'
+ + 'height: 5px;'
+ + 'top: -999px;'
+ + 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
+ }
+ }, dojo.body());
+
+ // test it
+ var cs = dojo.getComputedStyle(div);
+ if(cs){
+ var bkImg = cs.backgroundImage;
+ var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+ dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+ if(dojo.isIE){
+ div.outerHTML = ""; // prevent mixed-content warning, see http://support.microsoft.com/kb/925014
+ }else{
+ dojo.body().removeChild(div);
+ }
+ }
+ }
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){ // NOTE: checking in Safari messes things up
+ dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit, {
+ _XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
+
+ hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Determines if an element has a particular non-XHTML role.
+ // returns:
+ // True if elem has the specific non-XHTML role attribute and false if not.
+ // For backwards compatibility if role parameter not provided,
+ // returns true if has non XHTML role
+ var waiRole = this.getWaiRole(elem);
+ return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+ },
+
+ getWaiRole: function(/*Element*/ elem){
+ // summary:
+ // Gets the non-XHTML role for an element (which should be a wai role).
+ // returns:
+ // The non-XHTML role of elem or an empty string if elem
+ // does not have a role.
+ return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
+ },
+
+ setWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Sets the role on an element.
+ // description:
+ // Replace existing role attribute with new role.
+ // If elem already has an XHTML role, append this role to XHTML role
+ // and remove other ARIA roles.
+
+ var curRole = dojo.attr(elem, "role") || "";
+ if(!this._XhtmlRoles.test(curRole)){
+ dojo.attr(elem, "role", role);
+ }else{
+ if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
+ var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
+ var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
+ dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
+ }
+ }
+ },
+
+ removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+ // summary:
+ // Removes the specified non-XHTML role from an element.
+ // Removes role attribute if no specific role provided (for backwards compat.)
+
+ var roleValue = dojo.attr(elem, "role");
+ if(!roleValue){ return; }
+ if(role){
+ var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
+ dojo.attr(elem, "role", t);
+ }else{
+ elem.removeAttribute("role");
+ }
+ },
+
+ hasWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Determines if an element has a given state.
+ // description:
+ // Checks for an attribute called "aria-"+state.
+ // returns:
+ // true if elem has a value for the given state and
+ // false if it does not.
+
+ return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+ },
+
+ getWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Gets the value of a state on an element.
+ // description:
+ // Checks for an attribute called "aria-"+state.
+ // returns:
+ // The value of the requested state on elem
+ // or an empty string if elem has no value for state.
+
+ return elem.getAttribute("aria-"+state) || "";
+ },
+
+ setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+ // summary:
+ // Sets a state on an element.
+ // description:
+ // Sets an attribute called "aria-"+state.
+
+ elem.setAttribute("aria-"+state, value);
+ },
+
+ removeWaiState: function(/*Element*/ elem, /*String*/ state){
+ // summary:
+ // Removes a state from an element.
+ // description:
+ // Sets an attribute called "aria-"+state.
+
+ elem.removeAttribute("aria-"+state);
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base"] = true;
+dojo.provide("dijit._base");
+
+
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.stamp"] = true;
+dojo.provide("dojo.date.stamp");
+
+// Methods to convert dates to or from a wire (string) format using well-known conventions
+
+dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+ // summary:
+ // Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
+ //
+ // description:
+ // Accepts a string formatted according to a profile of ISO8601 as defined by
+ // [RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
+ // Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime)
+ // The following combinations are valid:
+ //
+ // * dates only
+ // | * yyyy
+ // | * yyyy-MM
+ // | * yyyy-MM-dd
+ // * times only, with an optional time zone appended
+ // | * THH:mm
+ // | * THH:mm:ss
+ // | * THH:mm:ss.SSS
+ // * and "datetimes" which could be any combination of the above
+ //
+ // timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
+ // Assumes the local time zone if not specified. Does not validate. Improperly formatted
+ // input may return null. Arguments which are out of bounds will be handled
+ // by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
+ // Only years between 100 and 9999 are supported.
+ //
+ // formattedString:
+ // A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
+ //
+ // defaultTime:
+ // Used for defaults for fields omitted in the formattedString.
+ // Uses 1970-01-01T00:00:00.0Z by default.
+
+ if(!dojo.date.stamp._isoRegExp){
+ dojo.date.stamp._isoRegExp =
+//TODO: could be more restrictive and check for 00-59, etc.
+ /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+ }
+
+ var match = dojo.date.stamp._isoRegExp.exec(formattedString),
+ result = null;
+
+ if(match){
+ match.shift();
+ if(match[1]){match[1]--;} // Javascript Date months are 0-based
+ if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds
+
+ if(defaultTime){
+ // mix in defaultTime. Relatively expensive, so use || operators for the fast path of defaultTime === 0
+ defaultTime = new Date(defaultTime);
+ dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
+ return defaultTime["get" + prop]();
+ }).forEach(function(value, index){
+ if(match[index] === undefined){
+ match[index] = value;
+ }
+ });
+ }
+ result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults
+ if(match[0] < 100){
+ result.setFullYear(match[0] || 1970);
+ }
+
+ var offset = 0,
+ zoneSign = match[7] && match[7].charAt(0);
+ if(zoneSign != 'Z'){
+ offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
+ if(zoneSign != '-'){ offset *= -1; }
+ }
+ if(zoneSign){
+ offset -= result.getTimezoneOffset();
+ }
+ if(offset){
+ result.setTime(result.getTime() + offset * 60000);
+ }
+ }
+
+ return result; // Date or null
+}
+
+/*=====
+ dojo.date.stamp.__Options = function(){
+ // selector: String
+ // "date" or "time" for partial formatting of the Date object.
+ // Both date and time will be formatted by default.
+ // zulu: Boolean
+ // if true, UTC/GMT is used for a timezone
+ // milliseconds: Boolean
+ // if true, output milliseconds
+ this.selector = selector;
+ this.zulu = zulu;
+ this.milliseconds = milliseconds;
+ }
+=====*/
+
+dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+ // summary:
+ // Format a Date object as a string according a subset of the ISO-8601 standard
+ //
+ // description:
+ // When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt)
+ // The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
+ // Does not check bounds. Only years between 100 and 9999 are supported.
+ //
+ // dateObject:
+ // A Date object
+
+ var _ = function(n){ return (n < 10) ? "0" + n : n; };
+ options = options || {};
+ var formattedDate = [],
+ getter = options.zulu ? "getUTC" : "get",
+ date = "";
+ if(options.selector != "time"){
+ var year = dateObject[getter+"FullYear"]();
+ date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
+ }
+ formattedDate.push(date);
+ if(options.selector != "date"){
+ var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
+ var millis = dateObject[getter+"Milliseconds"]();
+ if(options.milliseconds){
+ time += "."+ (millis < 100 ? "0" : "") + _(millis);
+ }
+ if(options.zulu){
+ time += "Z";
+ }else if(options.selector != "time"){
+ var timezoneOffset = dateObject.getTimezoneOffset();
+ var absOffset = Math.abs(timezoneOffset);
+ time += (timezoneOffset > 0 ? "-" : "+") +
+ _(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
+ }
+ formattedDate.push(time);
+ }
+ return formattedDate.join('T'); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.parser"] = true;
+dojo.provide("dojo.parser");
+
+
+dojo.parser = new function(){
+ // summary: The Dom/Widget parsing package
+
+ var d = dojo;
+ this._attrName = d._scopeName + "Type";
+ this._query = "[" + this._attrName + "]";
+
+ function val2type(/*Object*/ value){
+ // summary:
+ // Returns name of type of given value.
+
+ if(d.isString(value)){ return "string"; }
+ if(typeof value == "number"){ return "number"; }
+ if(typeof value == "boolean"){ return "boolean"; }
+ if(d.isFunction(value)){ return "function"; }
+ if(d.isArray(value)){ return "array"; } // typeof [] == "object"
+ if(value instanceof Date) { return "date"; } // assume timestamp
+ if(value instanceof d._Url){ return "url"; }
+ return "object";
+ }
+
+ function str2obj(/*String*/ value, /*String*/ type){
+ // summary:
+ // Convert given string value to given type
+ switch(type){
+ case "string":
+ return value;
+ case "number":
+ return value.length ? Number(value) : NaN;
+ case "boolean":
+ // for checked/disabled value might be "" or "checked". interpret as true.
+ return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
+ case "function":
+ if(d.isFunction(value)){
+ // IE gives us a function, even when we say something like onClick="foo"
+ // (in which case it gives us an invalid function "function(){ foo }").
+ // Therefore, convert to string
+ value=value.toString();
+ value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
+ }
+ try{
+ if(value.search(/[^\w\.]+/i) != -1){
+ // The user has specified some text for a function like "return x+5"
+ return new Function(value);
+ }else{
+ // The user has specified the name of a function like "myOnClick"
+ return d.getObject(value, false);
+ }
+ }catch(e){ return new Function(); }
+ case "array":
+ return value ? value.split(/\s*,\s*/) : [];
+ case "date":
+ switch(value){
+ case "": return new Date(""); // the NaN of dates
+ case "now": return new Date(); // current date
+ default: return d.date.stamp.fromISOString(value);
+ }
+ case "url":
+ return d.baseUrl + value;
+ default:
+ return d.fromJson(value);
+ }
+ }
+
+ var instanceClasses = {
+ // map from fully qualified name (like "dijit.Button") to structure like
+ // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
+ };
+
+ // Widgets like BorderContainer add properties to _Widget via dojo.extend().
+ // If BorderContainer is loaded after _Widget's parameter list has been cached,
+ // we need to refresh that parameter list (for _Widget and all widgets that extend _Widget).
+ dojo.connect(dojo, "extend", function(){
+ instanceClasses = {};
+ });
+
+ function getClassInfo(/*String*/ className){
+ // className:
+ // fully qualified name (like "dijit.form.Button")
+ // returns:
+ // structure like
+ // {
+ // cls: dijit.Button,
+ // params: { label: "string", disabled: "boolean"}
+ // }
+
+ if(!instanceClasses[className]){
+ // get pointer to widget class
+ var cls = d.getObject(className);
+ if(!d.isFunction(cls)){
+ throw new Error("Could not load class '" + className +
+ "'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");
+ }
+ var proto = cls.prototype;
+
+ // get table of parameter names & types
+ var params = {}, dummyClass = {};
+ for(var name in proto){
+ if(name.charAt(0)=="_"){ continue; } // skip internal properties
+ if(name in dummyClass){ continue; } // skip "constructor" and "toString"
+ var defVal = proto[name];
+ params[name]=val2type(defVal);
+ }
+
+ instanceClasses[className] = { cls: cls, params: params };
+ }
+ return instanceClasses[className];
+ }
+
+ this._functionFromScript = function(script){
+ var preamble = "";
+ var suffix = "";
+ var argsStr = script.getAttribute("args");
+ if(argsStr){
+ d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
+ preamble += "var "+part+" = arguments["+idx+"]; ";
+ });
+ }
+ var withStr = script.getAttribute("with");
+ if(withStr && withStr.length){
+ d.forEach(withStr.split(/\s*,\s*/), function(part){
+ preamble += "with("+part+"){";
+ suffix += "}";
+ });
+ }
+ return new Function(preamble+script.innerHTML+suffix);
+ }
+
+ this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
+ // summary:
+ // Takes array of nodes, and turns them into class instances and
+ // potentially calls a layout method to allow them to connect with
+ // any children
+ // mixin: Object?
+ // An object that will be mixed in with each node in the array.
+ // Values in the mixin will override values in the node, if they
+ // exist.
+ // args: Object?
+ // An object used to hold kwArgs for instantiation.
+ // Only supports 'noStart' currently.
+ var thelist = [], dp = dojo.parser;
+ mixin = mixin||{};
+ args = args||{};
+
+ d.forEach(nodes, function(node){
+ if(!node){ return; }
+ var type = dp._attrName in mixin?mixin[dp._attrName]:node.getAttribute(dp._attrName);
+ if(!type || !type.length){ return; }
+ var clsInfo = getClassInfo(type),
+ clazz = clsInfo.cls,
+ ps = clazz._noScript || clazz.prototype._noScript;
+
+ // read parameters (ie, attributes).
+ // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+ var params = {},
+ attributes = node.attributes;
+ for(var name in clsInfo.params){
+ var item = name in mixin?{value:mixin[name],specified:true}:attributes.getNamedItem(name);
+ if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
+ var value = item.value;
+ // Deal with IE quirks for 'class' and 'style'
+ switch(name){
+ case "class":
+ value = "className" in mixin?mixin.className:node.className;
+ break;
+ case "style":
+ value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera?
+ }
+ var _type = clsInfo.params[name];
+ if(typeof value == "string"){
+ params[name] = str2obj(value, _type);
+ }else{
+ params[name] = value;
+ }
+ }
+
+ // Process <script type="dojo/*"> script tags
+ // <script type="dojo/method" event="foo"> tags are added to params, and passed to
+ // the widget on instantiation.
+ // <script type="dojo/method"> tags (with no event) are executed after instantiation
+ // <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
+ // note: dojo/* script tags cannot exist in self closing widgets, like <input />
+ if(!ps){
+ var connects = [], // functions to connect after instantiation
+ calls = []; // functions to call after instantiation
+
+ d.query("> script[type^='dojo/']", node).orphan().forEach(function(script){
+ var event = script.getAttribute("event"),
+ type = script.getAttribute("type"),
+ nf = d.parser._functionFromScript(script);
+ if(event){
+ if(type == "dojo/connect"){
+ connects.push({event: event, func: nf});
+ }else{
+ params[event] = nf;
+ }
+ }else{
+ calls.push(nf);
+ }
+ });
+ }
+
+ var markupFactory = clazz.markupFactory || clazz.prototype && clazz.prototype.markupFactory;
+ // create the instance
+ var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
+ thelist.push(instance);
+
+ // map it to the JS namespace if that makes sense
+ var jsname = node.getAttribute("jsId");
+ if(jsname){
+ d.setObject(jsname, instance);
+ }
+
+ // process connections and startup functions
+ if(!ps){
+ d.forEach(connects, function(connect){
+ d.connect(instance, connect.event, null, connect.func);
+ });
+ d.forEach(calls, function(func){
+ func.call(instance);
+ });
+ }
+ });
+
+ // Call startup on each top level instance if it makes sense (as for
+ // widgets). Parent widgets will recursively call startup on their
+ // (non-top level) children
+ if(!mixin._started){
+ d.forEach(thelist, function(instance){
+ if( !args.noStart && instance &&
+ instance.startup &&
+ !instance._started &&
+ (!instance.getParent || !instance.getParent())
+ ){
+ instance.startup();
+ }
+ });
+ }
+ return thelist;
+ };
+
+ this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+ // summary:
+ // Scan the DOM for class instances, and instantiate them.
+ //
+ // description:
+ // Search specified node (or root node) recursively for class instances,
+ // and instantiate them Searches for
+ // dojoType="qualified.class.name"
+ //
+ // rootNode: DomNode?
+ // A default starting root node from which to start the parsing. Can be
+ // omitted, defaulting to the entire document. If omitted, the `args`
+ // object can be passed in this place. If the `args` object has a
+ // `rootNode` member, that is used.
+ //
+ // args:
+ // a kwArgs object passed along to instantiate()
+ //
+ // * noStart: Boolean?
+ // when set will prevent the parser from calling .startup()
+ // when locating the nodes.
+ // * rootNode: DomNode?
+ // identical to the function's `rootNode` argument, though
+ // allowed to be passed in via this `args object.
+ //
+ // example:
+ // Parse all widgets on a page:
+ // | dojo.parser.parse();
+ //
+ // example:
+ // Parse all classes within the node with id="foo"
+ // | dojo.parser.parse(dojo.byId(foo));
+ //
+ // example:
+ // Parse all classes in a page, but do not call .startup() on any
+ // child
+ // | dojo.parser.parse({ noStart: true })
+ //
+ // example:
+ // Parse all classes in a node, but do not call .startup()
+ // | dojo.parser.parse(someNode, { noStart:true });
+ // | // or
+ // | dojo.parser.parse({ noStart:true, rootNode: someNode });
+
+ // determine the root node based on the passed arguments.
+ var root;
+ if(!args && rootNode && rootNode.rootNode){
+ args = rootNode;
+ root = args.rootNode;
+ }else{
+ root = rootNode;
+ }
+
+ var list = d.query(this._query, root);
+ // go build the object instances
+ return this.instantiate(list, null, args); // Array
+
+ };
+}();
+
+//Register the parser callback. It should be the first callback
+//after the a11y test.
+
+(function(){
+ var parseRunner = function(){
+ if(dojo.config.parseOnLoad){
+ dojo.parser.parse();
+ }
+ };
+
+ // FIXME: need to clobber cross-dependency!!
+ if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+ dojo._loaders.splice(1, 0, parseRunner);
+ }else{
+ dojo._loaders.unshift(parseRunner);
+ }
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Widget"] = true;
+dojo.provide("dijit._Widget");
+
+dojo.require( "dijit._base" );
+
+
+// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
+// DOM nodes) until someone actually needs to monitor that event.
+dojo.connect(dojo, "_connect",
+ function(/*dijit._Widget*/ widget, /*String*/ event){
+ if(widget && dojo.isFunction(widget._onConnect)){
+ widget._onConnect(event);
+ }
+ });
+
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
+
+// Keep track of where the last keydown event was, to help avoid generating
+// spurious ondijitclick events when:
+// 1. focus is on a <button> or <a>
+// 2. user presses then releases the ENTER key
+// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
+// 4. onkeyup event fires, causing the ondijitclick handler to fire
+dijit._lastKeyDownNode = null;
+if(dojo.isIE){
+ (function(){
+ var keydownCallback = function(evt){
+ dijit._lastKeyDownNode = evt.srcElement;
+ };
+ dojo.doc.attachEvent('onkeydown', keydownCallback);
+ dojo.addOnWindowUnload(function(){
+ dojo.doc.detachEvent('onkeydown', keydownCallback);
+ });
+ })();
+}else{
+ dojo.doc.addEventListener('keydown', function(evt){
+ dijit._lastKeyDownNode = evt.target;
+ }, true);
+}
+
+(function(){
+
+var _attrReg = {}, // cached results from getSetterAttributes
+ getSetterAttributes = function(widget){
+ // summary:
+ // Returns list of attributes with custom setters for specified widget
+ var dc = widget.declaredClass;
+ if(!_attrReg[dc]){
+ var r = [],
+ attrs,
+ proto = widget.constructor.prototype;
+ for(var fxName in proto){
+ if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
+ r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
+ }
+ }
+ _attrReg[dc] = r;
+ }
+ return _attrReg[dc] || []; // String[]
+ };
+
+dojo.declare("dijit._Widget", null, {
+ // summary:
+ // Base class for all Dijit widgets.
+
+ // id: [const] String
+ // A unique, opaque ID string that can be assigned by users or by the
+ // system. If the developer passes an ID which is known not to be
+ // unique, the specified ID is ignored and the system-generated ID is
+ // used instead.
+ id: "",
+
+ // lang: [const] String
+ // Rarely used. Overrides the default Dojo locale used to render this widget,
+ // as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
+ // Value must be among the list of locales specified during by the Dojo bootstrap,
+ // formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
+ lang: "",
+
+ // dir: [const] String
+ // Unsupported by Dijit, but here for completeness. Dijit only supports setting text direction on the
+ // entire document.
+ // Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
+ // attribute. Either left-to-right "ltr" or right-to-left "rtl".
+ dir: "",
+
+ // class: String
+ // HTML class attribute
+ "class": "",
+
+ // style: String||Object
+ // HTML style attributes as cssText string or name/value hash
+ style: "",
+
+ // title: String
+ // HTML title attribute.
+ //
+ // For form widgets this specifies a tooltip to display when hovering over
+ // the widget (just like the native HTML title attribute).
+ //
+ // For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
+ // etc., it's used to specify the tab label, accordion pane title, etc.
+ title: "",
+
+ // tooltip: String
+ // When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
+ // this specifies the tooltip to appear when the mouse is hovered over that text.
+ tooltip: "",
+
+ // srcNodeRef: [readonly] DomNode
+ // pointer to original DOM node
+ srcNodeRef: null,
+
+ // domNode: [readonly] DomNode
+ // This is our visible representation of the widget! Other DOM
+ // Nodes may by assigned to other properties, usually through the
+ // template system's dojoAttachPoint syntax, but the domNode
+ // property is the canonical "top level" node in widget UI.
+ domNode: null,
+
+ // containerNode: [readonly] DomNode
+ // Designates where children of the source DOM node will be placed.
+ // "Children" in this case refers to both DOM nodes and widgets.
+ // For example, for myWidget:
+ //
+ // | <div dojoType=myWidget>
+ // | <b> here's a plain DOM node
+ // | <span dojoType=subWidget>and a widget</span>
+ // | <i> and another plain DOM node </i>
+ // | </div>
+ //
+ // containerNode would point to:
+ //
+ // | <b> here's a plain DOM node
+ // | <span dojoType=subWidget>and a widget</span>
+ // | <i> and another plain DOM node </i>
+ //
+ // In templated widgets, "containerNode" is set via a
+ // dojoAttachPoint assignment.
+ //
+ // containerNode must be defined for any widget that accepts innerHTML
+ // (like ContentPane or BorderContainer or even Button), and conversely
+ // is null for widgets that don't, like TextBox.
+ containerNode: null,
+
+/*=====
+ // _started: Boolean
+ // startup() has completed.
+ _started: false,
+=====*/
+
+ // attributeMap: [protected] Object
+ // attributeMap sets up a "binding" between attributes (aka properties)
+ // of the widget and the widget's DOM.
+ // Changes to widget attributes listed in attributeMap will be
+ // reflected into the DOM.
+ //
+ // For example, calling attr('title', 'hello')
+ // on a TitlePane will automatically cause the TitlePane's DOM to update
+ // with the new title.
+ //
+ // attributeMap is a hash where the key is an attribute of the widget,
+ // and the value reflects a binding to a:
+ //
+ // - DOM node attribute
+ // | focus: {node: "focusNode", type: "attribute"}
+ // Maps this.focus to this.focusNode.focus
+ //
+ // - DOM node innerHTML
+ // | title: { node: "titleNode", type: "innerHTML" }
+ // Maps this.title to this.titleNode.innerHTML
+ //
+ // - DOM node innerText
+ // | title: { node: "titleNode", type: "innerText" }
+ // Maps this.title to this.titleNode.innerText
+ //
+ // - DOM node CSS class
+ // | myClass: { node: "domNode", type: "class" }
+ // Maps this.myClass to this.domNode.className
+ //
+ // If the value is an array, then each element in the array matches one of the
+ // formats of the above list.
+ //
+ // There are also some shorthands for backwards compatibility:
+ // - string --> { node: string, type: "attribute" }, for example:
+ // | "focusNode" ---> { node: "focusNode", type: "attribute" }
+ // - "" --> { node: "domNode", type: "attribute" }
+ attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
+
+ // _deferredConnects: [protected] Object
+ // attributeMap addendum for event handlers that should be connected only on first use
+ _deferredConnects: {
+ onClick: "",
+ onDblClick: "",
+ onKeyDown: "",
+ onKeyPress: "",
+ onKeyUp: "",
+ onMouseMove: "",
+ onMouseDown: "",
+ onMouseOut: "",
+ onMouseOver: "",
+ onMouseLeave: "",
+ onMouseEnter: "",
+ onMouseUp: ""
+ },
+
+ onClick: dijit._connectOnUseEventHandler,
+ /*=====
+ onClick: function(event){
+ // summary:
+ // Connect to this function to receive notifications of mouse click events.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onDblClick: dijit._connectOnUseEventHandler,
+ /*=====
+ onDblClick: function(event){
+ // summary:
+ // Connect to this function to receive notifications of mouse double click events.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyDown: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyDown: function(event){
+ // summary:
+ // Connect to this function to receive notifications of keys being pressed down.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyPress: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyPress: function(event){
+ // summary:
+ // Connect to this function to receive notifications of printable keys being typed.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onKeyUp: dijit._connectOnUseEventHandler,
+ /*=====
+ onKeyUp: function(event){
+ // summary:
+ // Connect to this function to receive notifications of keys being released.
+ // event:
+ // key Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseDown: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseDown: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse button is pressed down.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseMove: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseMove: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseOut: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseOut: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseOver: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseOver: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseLeave: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseLeave: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves off of this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseEnter: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseEnter: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse moves onto this widget.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+ onMouseUp: dijit._connectOnUseEventHandler,
+ /*=====
+ onMouseUp: function(event){
+ // summary:
+ // Connect to this function to receive notifications of when the mouse button is released.
+ // event:
+ // mouse Event
+ // tags:
+ // callback
+ },
+ =====*/
+
+ // Constants used in templates
+
+ // _blankGif: [protected] String
+ // Path to a blank 1x1 image.
+ // Used by <img> nodes in templates that really get their image via CSS background-image.
+ _blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
+
+ //////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+ postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
+ // summary:
+ // Kicks off widget instantiation. See create() for details.
+ // tags:
+ // private
+ this.create(params, srcNodeRef);
+ },
+
+ create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+ // summary:
+ // Kick off the life-cycle of a widget
+ // params:
+ // Hash of initialization parameters for widget, including
+ // scalar values (like title, duration etc.) and functions,
+ // typically callbacks like onClick.
+ // srcNodeRef:
+ // If a srcNodeRef (DOM node) is specified:
+ // - use srcNodeRef.innerHTML as my contents
+ // - if this is a behavioral widget then apply behavior
+ // to that srcNodeRef
+ // - otherwise, replace srcNodeRef with my generated DOM
+ // tree
+ // description:
+ // Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
+ // etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
+ // for a discussion of the widget creation lifecycle.
+ //
+ // Of course, adventurous developers could override create entirely, but this should
+ // only be done as a last resort.
+ // tags:
+ // private
+
+ // store pointer to original DOM tree
+ this.srcNodeRef = dojo.byId(srcNodeRef);
+
+ // For garbage collection. An array of handles returned by Widget.connect()
+ // Each handle returned from Widget.connect() is an array of handles from dojo.connect()
+ this._connects = [];
+
+ // For garbage collection. An array of handles returned by Widget.subscribe()
+ // The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
+ this._subscribes = [];
+
+ // To avoid double-connects, remove entries from _deferredConnects
+ // that have been setup manually by a subclass (ex, by dojoAttachEvent).
+ // If a subclass has redefined a callback (ex: onClick) then assume it's being
+ // connected to manually.
+ this._deferredConnects = dojo.clone(this._deferredConnects);
+ for(var attr in this.attributeMap){
+ delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
+ }
+ for(attr in this._deferredConnects){
+ if(this[attr] !== dijit._connectOnUseEventHandler){
+ delete this._deferredConnects[attr]; // redefined, probably dojoAttachEvent exists
+ }
+ }
+
+ //mixin our passed parameters
+ if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
+ if(params){
+ this.params = params;
+ dojo.mixin(this,params);
+ }
+ this.postMixInProperties();
+
+ // generate an id for the widget if one wasn't specified
+ // (be sure to do this before buildRendering() because that function might
+ // expect the id to be there.)
+ if(!this.id){
+ this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+ }
+ dijit.registry.add(this);
+
+ this.buildRendering();
+
+ if(this.domNode){
+ // Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+ this._applyAttributes();
+
+ var source = this.srcNodeRef;
+ if(source && source.parentNode){
+ source.parentNode.replaceChild(this.domNode, source);
+ }
+
+ // If the developer has specified a handler as a widget parameter
+ // (ex: new Button({onClick: ...})
+ // then naturally need to connect from DOM node to that handler immediately,
+ for(attr in this.params){
+ this._onConnect(attr);
+ }
+ }
+
+ if(this.domNode){
+ this.domNode.setAttribute("widgetId", this.id);
+ }
+ this.postCreate();
+
+ // If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
+ if(this.srcNodeRef && !this.srcNodeRef.parentNode){
+ delete this.srcNodeRef;
+ }
+
+ this._created = true;
+ },
+
+ _applyAttributes: function(){
+ // summary:
+ // Step during widget creation to copy all widget attributes to the
+ // DOM as per attributeMap and _setXXXAttr functions.
+ // description:
+ // Skips over blank/false attribute values, unless they were explicitly specified
+ // as parameters to the widget, since those are the default anyway,
+ // and setting tabIndex="" is different than not setting tabIndex at all.
+ //
+ // It processes the attributes in the attribute map first, and then
+ // it goes through and processes the attributes for the _setXXXAttr
+ // functions that have been specified
+ // tags:
+ // private
+ var condAttrApply = function(attr, scope){
+ if((scope.params && attr in scope.params) || scope[attr]){
+ scope.attr(attr, scope[attr]);
+ }
+ };
+
+ // Do the attributes in attributeMap
+ for(var attr in this.attributeMap){
+ condAttrApply(attr, this);
+ }
+
+ // And also any attributes with custom setters
+ dojo.forEach(getSetterAttributes(this), function(a){
+ if(!(a in this.attributeMap)){
+ condAttrApply(a, this);
+ }
+ }, this);
+ },
+
+ postMixInProperties: function(){
+ // summary:
+ // Called after the parameters to the widget have been read-in,
+ // but before the widget template is instantiated. Especially
+ // useful to set properties that are referenced in the widget
+ // template.
+ // tags:
+ // protected
+ },
+
+ buildRendering: function(){
+ // summary:
+ // Construct the UI for this widget, setting this.domNode
+ // description:
+ // Most widgets will mixin `dijit._Templated`, which implements this
+ // method.
+ // tags:
+ // protected
+ this.domNode = this.srcNodeRef || dojo.create('div');
+ },
+
+ postCreate: function(){
+ // summary:
+ // Processing after the DOM fragment is created
+ // description:
+ // Called after the DOM fragment has been created, but not necessarily
+ // added to the document. Do not include any operations which rely on
+ // node dimensions or placement.
+ // tags:
+ // protected
+ },
+
+ startup: function(){
+ // summary:
+ // Processing after the DOM fragment is added to the document
+ // description:
+ // Called after a widget and its children have been created and added to the page,
+ // and all related widgets have finished their create() cycle, up through postCreate().
+ // This is useful for composite widgets that need to control or layout sub-widgets.
+ // Many layout widgets can use this as a wiring phase.
+ this._started = true;
+ },
+
+ //////////// DESTROY FUNCTIONS ////////////////////////////////
+
+ destroyRecursive: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Destroy this widget and its descendants
+ // description:
+ // This is the generic "destructor" function that all widget users
+ // should call to cleanly discard with a widget. Once a widget is
+ // destroyed, it is removed from the manager object.
+ // preserveDom:
+ // If true, this method will leave the original DOM structure
+ // alone of descendant Widgets. Note: This will NOT work with
+ // dijit._Templated widgets.
+
+ this._beingDestroyed = true;
+ this.destroyDescendants(preserveDom);
+ this.destroy(preserveDom);
+ },
+
+ destroy: function(/*Boolean*/ preserveDom){
+ // summary:
+ // Destroy this widget, but not its descendants.
+ // This method will, however, destroy internal widgets such as those used within a template.
+ // preserveDom: Boolean
+ // If true, this method will leave the original DOM structure alone.
+ // Note: This will not yet work with _Templated widgets
+
+ this._beingDestroyed = true;
+ this.uninitialize();
+ var d = dojo,
+ dfe = d.forEach,
+ dun = d.unsubscribe;
+ dfe(this._connects, function(array){
+ dfe(array, d.disconnect);
+ });
+ dfe(this._subscribes, function(handle){
+ dun(handle);
+ });
+
+ // destroy widgets created as part of template, etc.
+ dfe(this._supportingWidgets || [], function(w){
+ if(w.destroyRecursive){
+ w.destroyRecursive();
+ }else if(w.destroy){
+ w.destroy();
+ }
+ });
+
+ this.destroyRendering(preserveDom);
+ dijit.registry.remove(this.id);
+ this._destroyed = true;
+ },
+
+ destroyRendering: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Destroys the DOM nodes associated with this widget
+ // preserveDom:
+ // If true, this method will leave the original DOM structure alone
+ // during tear-down. Note: this will not work with _Templated
+ // widgets yet.
+ // tags:
+ // protected
+
+ if(this.bgIframe){
+ this.bgIframe.destroy(preserveDom);
+ delete this.bgIframe;
+ }
+
+ if(this.domNode){
+ if(preserveDom){
+ dojo.removeAttr(this.domNode, "widgetId");
+ }else{
+ dojo.destroy(this.domNode);
+ }
+ delete this.domNode;
+ }
+
+ if(this.srcNodeRef){
+ if(!preserveDom){
+ dojo.destroy(this.srcNodeRef);
+ }
+ delete this.srcNodeRef;
+ }
+ },
+
+ destroyDescendants: function(/*Boolean?*/ preserveDom){
+ // summary:
+ // Recursively destroy the children of this widget and their
+ // descendants.
+ // preserveDom:
+ // If true, the preserveDom attribute is passed to all descendant
+ // widget's .destroy() method. Not for use with _Templated
+ // widgets.
+
+ // get all direct descendants and destroy them recursively
+ dojo.forEach(this.getChildren(), function(widget){
+ if(widget.destroyRecursive){
+ widget.destroyRecursive(preserveDom);
+ }
+ });
+ },
+
+
+ uninitialize: function(){
+ // summary:
+ // Stub function. Override to implement custom widget tear-down
+ // behavior.
+ // tags:
+ // protected
+ return false;
+ },
+
+ ////////////////// MISCELLANEOUS METHODS ///////////////////
+
+ onFocus: function(){
+ // summary:
+ // Called when the widget becomes "active" because
+ // it or a widget inside of it either has focus, or has recently
+ // been clicked.
+ // tags:
+ // callback
+ },
+
+ onBlur: function(){
+ // summary:
+ // Called when the widget stops being "active" because
+ // focus moved to something outside of it, or the user
+ // clicked somewhere outside of it, or the widget was
+ // hidden.
+ // tags:
+ // callback
+ },
+
+ _onFocus: function(e){
+ // summary:
+ // This is where widgets do processing for when they are active,
+ // such as changing CSS classes. See onFocus() for more details.
+ // tags:
+ // protected
+ this.onFocus();
+ },
+
+ _onBlur: function(){
+ // summary:
+ // This is where widgets do processing for when they stop being active,
+ // such as changing CSS classes. See onBlur() for more details.
+ // tags:
+ // protected
+ this.onBlur();
+ },
+
+ _onConnect: function(/*String*/ event){
+ // summary:
+ // Called when someone connects to one of my handlers.
+ // "Turn on" that handler if it isn't active yet.
+ //
+ // This is also called for every single initialization parameter
+ // so need to do nothing for parameters like "id".
+ // tags:
+ // private
+ if(event in this._deferredConnects){
+ var mapNode = this[this._deferredConnects[event] || 'domNode'];
+ this.connect(mapNode, event.toLowerCase(), event);
+ delete this._deferredConnects[event];
+ }
+ },
+
+ _setClassAttr: function(/*String*/ value){
+ // summary:
+ // Custom setter for the CSS "class" attribute
+ // tags:
+ // protected
+ var mapNode = this[this.attributeMap["class"] || 'domNode'];
+ dojo.removeClass(mapNode, this["class"])
+ this["class"] = value;
+ dojo.addClass(mapNode, value);
+ },
+
+ _setStyleAttr: function(/*String||Object*/ value){
+ // summary:
+ // Sets the style attribut of the widget according to value,
+ // which is either a hash like {height: "5px", width: "3px"}
+ // or a plain string
+ // description:
+ // Determines which node to set the style on based on style setting
+ // in attributeMap.
+ // tags:
+ // protected
+
+ var mapNode = this[this.attributeMap.style || 'domNode'];
+
+ // Note: technically we should revert any style setting made in a previous call
+ // to his method, but that's difficult to keep track of.
+
+ if(dojo.isObject(value)){
+ dojo.style(mapNode, value);
+ }else{
+ if(mapNode.style.cssText){
+ mapNode.style.cssText += "; " + value;
+ }else{
+ mapNode.style.cssText = value;
+ }
+ }
+
+ this.style = value;
+ },
+
+ setAttribute: function(/*String*/ attr, /*anything*/ value){
+ // summary:
+ // Deprecated. Use attr() instead.
+ // tags:
+ // deprecated
+ dojo.deprecated(this.declaredClass+"::setAttribute() is deprecated. Use attr() instead.", "", "2.0");
+ this.attr(attr, value);
+ },
+
+ _attrToDom: function(/*String*/ attr, /*String*/ value){
+ // summary:
+ // Reflect a widget attribute (title, tabIndex, duration etc.) to
+ // the widget DOM, as specified in attributeMap.
+ //
+ // description:
+ // Also sets this["attr"] to the new value.
+ // Note some attributes like "type"
+ // cannot be processed this way as they are not mutable.
+ //
+ // tags:
+ // private
+
+ var commands = this.attributeMap[attr];
+ dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
+
+ // Get target node and what we are doing to that node
+ var mapNode = this[command.node || command || "domNode"]; // DOM node
+ var type = command.type || "attribute"; // class, innerHTML, innerText, or attribute
+
+ switch(type){
+ case "attribute":
+ if(dojo.isFunction(value)){ // functions execute in the context of the widget
+ value = dojo.hitch(this, value);
+ }
+
+ // Get the name of the DOM node attribute; usually it's the same
+ // as the name of the attribute in the widget (attr), but can be overridden.
+ // Also maps handler names to lowercase, like onSubmit --> onsubmit
+ var attrName = command.attribute ? command.attribute :
+ (/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
+
+ dojo.attr(mapNode, attrName, value);
+ break;
+ case "innerText":
+ mapNode.innerHTML = "";
+ mapNode.appendChild(dojo.doc.createTextNode(value));
+ break;
+ case "innerHTML":
+ mapNode.innerHTML = value;
+ break;
+ case "class":
+ dojo.removeClass(mapNode, this[attr]);
+ dojo.addClass(mapNode, value);
+ break;
+ }
+ }, this);
+ this[attr] = value;
+ },
+
+ attr: function(/*String|Object*/name, /*Object?*/value){
+ // summary:
+ // Set or get properties on a widget instance.
+ // name:
+ // The property to get or set. If an object is passed here and not
+ // a string, its keys are used as names of attributes to be set
+ // and the value of the object as values to set in the widget.
+ // value:
+ // Optional. If provided, attr() operates as a setter. If omitted,
+ // the current value of the named property is returned.
+ // description:
+ // Get or set named properties on a widget. If no value is
+ // provided, the current value of the attribute is returned,
+ // potentially via a getter method. If a value is provided, then
+ // the method acts as a setter, assigning the value to the name,
+ // potentially calling any explicitly provided setters to handle
+ // the operation. For instance, if the widget has properties "foo"
+ // and "bar" and a method named "_setFooAttr", calling:
+ // | myWidget.attr("foo", "Howdy!");
+ // would be equivalent to calling:
+ // | widget._setFooAttr("Howdy!");
+ // while calling:
+ // | myWidget.attr("bar", "Howdy!");
+ // would be the same as writing:
+ // | widget.bar = "Howdy!";
+ // It also tries to copy the changes to the widget's DOM according
+ // to settings in attributeMap (see description of `dijit._Widget.attributeMap`
+ // for details)
+ // For example, calling:
+ // | myTitlePane.attr("title", "Howdy!");
+ // will do
+ // | myTitlePane.title = "Howdy!";
+ // | myTitlePane.title.innerHTML = "Howdy!";
+ // It works for DOM node attributes too. Calling
+ // | widget.attr("disabled", true)
+ // will set the disabled attribute on the widget's focusNode,
+ // among other housekeeping for a change in disabled state.
+
+ // open questions:
+ // - how to handle build shortcut for attributes which want to map
+ // into DOM attributes?
+ // - what relationship should setAttribute()/attr() have to
+ // layout() calls?
+ var args = arguments.length;
+ if(args == 1 && !dojo.isString(name)){
+ for(var x in name){ this.attr(x, name[x]); }
+ return this;
+ }
+ var names = this._getAttrNames(name);
+ if(args >= 2){ // setter
+ if(this[names.s]){
+ // use the explicit setter
+ args = dojo._toArray(arguments, 1);
+ return this[names.s].apply(this, args) || this;
+ }else{
+ // if param is specified as DOM node attribute, copy it
+ if(name in this.attributeMap){
+ this._attrToDom(name, value);
+ }
+
+ // FIXME: what about function assignments? Any way to connect() here?
+ this[name] = value;
+ }
+ return this;
+ }else{ // getter
+ return this[names.g] ? this[names.g]() : this[name];
+ }
+ },
+
+ _attrPairNames: {}, // shared between all widgets
+ _getAttrNames: function(name){
+ // summary:
+ // Helper function for Widget.attr().
+ // Caches attribute name values so we don't do the string ops every time.
+ // tags:
+ // private
+
+ var apn = this._attrPairNames;
+ if(apn[name]){ return apn[name]; }
+ var uc = name.charAt(0).toUpperCase() + name.substr(1);
+ return (apn[name] = {
+ n: name+"Node",
+ s: "_set"+uc+"Attr",
+ g: "_get"+uc+"Attr"
+ });
+ },
+
+ toString: function(){
+ // summary:
+ // Returns a string that represents the widget
+ // description:
+ // When a widget is cast to a string, this method will be used to generate the
+ // output. Currently, it does not implement any sort of reversible
+ // serialization.
+ return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
+ },
+
+ getDescendants: function(){
+ // summary:
+ // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+ // This method should generally be avoided as it returns widgets declared in templates, which are
+ // supposed to be internal/hidden, but it's left here for back-compat reasons.
+
+ return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
+ },
+
+ getChildren: function(){
+ // summary:
+ // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+ // Does not return nested widgets, nor widgets that are part of this widget's template.
+ return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
+ },
+
+ // nodesWithKeyClick: [private] String[]
+ // List of nodes that correctly handle click events via native browser support,
+ // and don't need dijit's help
+ nodesWithKeyClick: ["input", "button"],
+
+ connect: function(
+ /*Object|null*/ obj,
+ /*String|Function*/ event,
+ /*String|Function*/ method){
+ // summary:
+ // Connects specified obj/event to specified method of this object
+ // and registers for disconnect() on widget destroy.
+ // description:
+ // Provide widget-specific analog to dojo.connect, except with the
+ // implicit use of this widget as the target object.
+ // This version of connect also provides a special "ondijitclick"
+ // event which triggers on a click or space or enter keyup
+ // returns:
+ // A handle that can be passed to `disconnect` in order to disconnect before
+ // the widget is destroyed.
+ // example:
+ // | var btn = new dijit.form.Button();
+ // | // when foo.bar() is called, call the listener we're going to
+ // | // provide in the scope of btn
+ // | btn.connect(foo, "bar", function(){
+ // | console.debug(this.toString());
+ // | });
+ // tags:
+ // protected
+
+ var d = dojo,
+ dc = d._connect,
+ handles = [];
+ if(event == "ondijitclick"){
+ // add key based click activation for unsupported nodes.
+ // do all processing onkey up to prevent spurious clicks
+ // for details see comments at top of this file where _lastKeyDownNode is defined
+ if(!this.nodesWithKeyClick[obj.tagName.toLowerCase()]){
+ var m = d.hitch(this, method);
+ handles.push(
+ dc(obj, "onkeydown", this, function(e){
+ //console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+ if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+ !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+ // needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
+ dijit._lastKeyDownNode = e.target;
+ d.stopEvent(e); // stop event to prevent scrolling on space key in IE
+ }
+ }),
+ dc(obj, "onkeyup", this, function(e){
+ //console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+ if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+ e.target === dijit._lastKeyDownNode &&
+ !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+ //need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
+ dijit._lastKeyDownNode = null;
+ return m(e);
+ }
+ })
+ );
+ }
+ event = "onclick";
+ }
+ handles.push(dc(obj, event, this, method));
+
+ this._connects.push(handles);
+ return handles; // _Widget.Handle
+ },
+
+ disconnect: function(/* _Widget.Handle */ handles){
+ // summary:
+ // Disconnects handle created by `connect`.
+ // Also removes handle from this widget's list of connects.
+ // tags:
+ // protected
+ for(var i=0; i<this._connects.length; i++){
+ if(this._connects[i] == handles){
+ dojo.forEach(handles, dojo.disconnect);
+ this._connects.splice(i, 1);
+ return;
+ }
+ }
+ },
+
+ subscribe: function(
+ /*String*/ topic,
+ /*String|Function*/ method){
+ // summary:
+ // Subscribes to the specified topic and calls the specified method
+ // of this object and registers for unsubscribe() on widget destroy.
+ // description:
+ // Provide widget-specific analog to dojo.subscribe, except with the
+ // implicit use of this widget as the target object.
+ // example:
+ // | var btn = new dijit.form.Button();
+ // | // when /my/topic is published, this button changes its label to
+ // | // be the parameter of the topic.
+ // | btn.subscribe("/my/topic", function(v){
+ // | this.attr("label", v);
+ // | });
+ var d = dojo,
+ handle = d.subscribe(topic, this, method);
+
+ // return handles for Any widget that may need them
+ this._subscribes.push(handle);
+ return handle;
+ },
+
+ unsubscribe: function(/*Object*/ handle){
+ // summary:
+ // Unsubscribes handle created by this.subscribe.
+ // Also removes handle from this widget's list of subscriptions
+ for(var i=0; i<this._subscribes.length; i++){
+ if(this._subscribes[i] == handle){
+ dojo.unsubscribe(handle);
+ this._subscribes.splice(i, 1);
+ return;
+ }
+ }
+ },
+
+ isLeftToRight: function(){
+ // summary:
+ // Checks the page for text direction
+ // tags:
+ // protected
+ return dojo._isBodyLtr(); //Boolean
+ },
+
+ isFocusable: function(){
+ // summary:
+ // Return true if this widget can currently be focused
+ // and false if not
+ return this.focus && (dojo.style(this.domNode, "display") != "none");
+ },
+
+ placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
+ // summary:
+ // Place this widget's domNode reference somewhere in the DOM based
+ // on standard dojo.place conventions, or passing a Widget reference that
+ // contains and addChild member.
+ //
+ // description:
+ // A convenience function provided in all _Widgets, providing a simple
+ // shorthand mechanism to put an existing (or newly created) Widget
+ // somewhere in the dom, and allow chaining.
+ //
+ // reference:
+ // The String id of a domNode, a domNode reference, or a reference to a Widget posessing
+ // an addChild method.
+ //
+ // position:
+ // If passed a string or domNode reference, the position argument
+ // accepts a string just as dojo.place does, one of: "first", "last",
+ // "before", or "after".
+ //
+ // If passed a _Widget reference, and that widget reference has an ".addChild" method,
+ // it will be called passing this widget instance into that method, supplying the optional
+ // position index passed.
+ //
+ // returns:
+ // dijit._Widget
+ // Provides a useful return of the newly created dijit._Widget instance so you
+ // can "chain" this function by instantiating, placing, then saving the return value
+ // to a variable.
+ //
+ // example:
+ // | // create a Button with no srcNodeRef, and place it in the body:
+ // | var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
+ // | // now, 'button' is still the widget reference to the newly created button
+ // | dojo.connect(button, "onClick", function(e){ console.log('click'); });
+ //
+ // example:
+ // | // create a button out of a node with id="src" and append it to id="wrapper":
+ // | var button = new dijit.form.Button({},"src").placeAt("wrapper");
+ //
+ // example:
+ // | // place a new button as the first element of some div
+ // | var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
+ //
+ // example:
+ // | // create a contentpane and add it to a TabContainer
+ // | var tc = dijit.byId("myTabs");
+ // | new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
+
+ if(reference.declaredClass && reference.addChild){
+ reference.addChild(this, position);
+ }else{
+ dojo.place(this.domNode, reference, position);
+ }
+ return this;
+ },
+
+ _onShow: function(){
+ // summary:
+ // Internal method called when this widget is made visible.
+ // See `onShow` for details.
+ this.onShow();
+ },
+
+ onShow: function(){
+ // summary:
+ // Called when this widget becomes the selected pane in a
+ // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+ // `dijit.layout.AccordionContainer`, etc.
+ //
+ // Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+ // tags:
+ // callback
+ },
+
+ onHide: function(){
+ // summary:
+ // Called when another widget becomes the selected pane in a
+ // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+ // `dijit.layout.AccordionContainer`, etc.
+ //
+ // Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+ // tags:
+ // callback
+ }
+});
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.string"] = true;
+dojo.provide("dojo.string");
+
+/*=====
+dojo.string = {
+ // summary: String utilities for Dojo
+};
+=====*/
+
+dojo.string.rep = function(/*String*/str, /*Integer*/num){
+ // summary:
+ // Efficiently replicate a string `n` times.
+ // str:
+ // the string to replicate
+ // num:
+ // number of times to replicate the string
+
+ if(num <= 0 || !str){ return ""; }
+
+ var buf = [];
+ for(;;){
+ if(num & 1){
+ buf.push(str);
+ }
+ if(!(num >>= 1)){ break; }
+ str += str;
+ }
+ return buf.join(""); // String
+};
+
+dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){
+ // summary:
+ // Pad a string to guarantee that it is at least `size` length by
+ // filling with the character `ch` at either the start or end of the
+ // string. Pads at the start, by default.
+ // text:
+ // the string to pad
+ // size:
+ // length to provide padding
+ // ch:
+ // character to pad, defaults to '0'
+ // end:
+ // adds padding at the end if true, otherwise pads at start
+ // example:
+ // | // Fill the string to length 10 with "+" characters on the right. Yields "Dojo++++++".
+ // | dojo.string.pad("Dojo", 10, "+", true);
+
+ if(!ch){
+ ch = '0';
+ }
+ var out = String(text),
+ pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length));
+ return end ? out + pad : pad + out; // String
+};
+
+dojo.string.substitute = function( /*String*/ template,
+ /*Object|Array*/map,
+ /*Function?*/ transform,
+ /*Object?*/ thisObject){
+ // summary:
+ // Performs parameterized substitutions on a string. Throws an
+ // exception if any parameter is unmatched.
+ // template:
+ // a string with expressions in the form `${key}` to be replaced or
+ // `${key:format}` which specifies a format function. keys are case-sensitive.
+ // map:
+ // hash to search for substitutions
+ // transform:
+ // a function to process all parameters before substitution takes
+ // place, e.g. mylib.encodeXML
+ // thisObject:
+ // where to look for optional format function; default to the global
+ // namespace
+ // example:
+ // Substitutes two expressions in a string from an Array or Object
+ // | // returns "File 'foo.html' is not found in directory '/temp'."
+ // | // by providing substitution data in an Array
+ // | dojo.string.substitute(
+ // | "File '${0}' is not found in directory '${1}'.",
+ // | ["foo.html","/temp"]
+ // | );
+ // |
+ // | // also returns "File 'foo.html' is not found in directory '/temp'."
+ // | // but provides substitution data in an Object structure. Dotted
+ // | // notation may be used to traverse the structure.
+ // | dojo.string.substitute(
+ // | "File '${name}' is not found in directory '${info.dir}'.",
+ // | { name: "foo.html", info: { dir: "/temp" } }
+ // | );
+ // example:
+ // Use a transform function to modify the values:
+ // | // returns "file 'foo.html' is not found in directory '/temp'."
+ // | dojo.string.substitute(
+ // | "${0} is not found in ${1}.",
+ // | ["foo.html","/temp"],
+ // | function(str){
+ // | // try to figure out the type
+ // | var prefix = (str.charAt(0) == "/") ? "directory": "file";
+ // | return prefix + " '" + str + "'";
+ // | }
+ // | );
+ // example:
+ // Use a formatter
+ // | // returns "thinger -- howdy"
+ // | dojo.string.substitute(
+ // | "${0:postfix}", ["thinger"], null, {
+ // | postfix: function(value, key){
+ // | return value + " -- howdy";
+ // | }
+ // | }
+ // | );
+
+ thisObject = thisObject || dojo.global;
+ transform = transform ?
+ dojo.hitch(thisObject, transform) : function(v){ return v; };
+
+ return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
+ function(match, key, format){
+ var value = dojo.getObject(key, false, map);
+ if(format){
+ value = dojo.getObject(format, false, thisObject).call(thisObject, value, key);
+ }
+ return transform(value, key).toString();
+ }); // String
+};
+
+/*=====
+dojo.string.trim = function(str){
+ // summary:
+ // Trims whitespace from both sides of the string
+ // str: String
+ // String to be trimmed
+ // returns: String
+ // Returns the trimmed string
+ // description:
+ // This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+ // The short yet performant version of this function is dojo.trim(),
+ // which is part of Dojo base. Uses String.prototype.trim instead, if available.
+ return ""; // String
+}
+=====*/
+
+dojo.string.trim = String.prototype.trim ?
+ dojo.trim : // aliasing to the native function
+ function(str){
+ str = str.replace(/^\s+/, '');
+ for(var i = str.length - 1; i >= 0; i--){
+ if(/\S/.test(str.charAt(i))){
+ str = str.substring(0, i + 1);
+ break;
+ }
+ }
+ return str;
+ };
+
+}
+
+if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cache"] = true;
+dojo.provide("dojo.cache");
+
+/*=====
+dojo.cache = {
+ // summary:
+ // A way to cache string content that is fetchable via `dojo.moduleUrl`.
+};
+=====*/
+
+(function(){
+ var cache = {};
+ dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
+ // summary:
+ // A getter and setter for storing the string content associated with the
+ // module and url arguments.
+ // description:
+ // module and url are used to call `dojo.moduleUrl()` to generate a module URL.
+ // If value is specified, the cache value for the moduleUrl will be set to
+ // that value. Otherwise, dojo.cache will fetch the moduleUrl and store it
+ // in its internal cache and return that cached value for the URL. To clear
+ // a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the
+ // the URL contents, only modules on the same domain of the page can use this capability.
+ // The build system can inline the cache values though, to allow for xdomain hosting.
+ // module: String||Object
+ // If a String, the module name to use for the base part of the URL, similar to module argument
+ // to `dojo.moduleUrl`. If an Object, something that has a .toString() method that
+ // generates a valid path for the cache item. For example, a dojo._Url object.
+ // url: String
+ // The rest of the path to append to the path derived from the module argument. If
+ // module is an object, then this second argument should be the "value" argument instead.
+ // value: String||Object?
+ // If a String, the value to use in the cache for the module/url combination.
+ // If an Object, it can have two properties: value and sanitize. The value property
+ // should be the value to use in the cache, and sanitize can be set to true or false,
+ // to indicate if XML declarations should be removed from the value and if the HTML
+ // inside a body tag in the value should be extracted as the real value. The value argument
+ // or the value property on the value argument are usually only used by the build system
+ // as it inlines cache content.
+ // example:
+ // To ask dojo.cache to fetch content and store it in the cache (the dojo["cache"] style
+ // of call is used to avoid an issue with the build system erroneously trying to intern
+ // this example. To get the build system to intern your dojo.cache calls, use the
+ // "dojo.cache" style of call):
+ // | //If template.html contains "<h1>Hello</h1>" that will be
+ // | //the value for the text variable.
+ // | var text = dojo["cache"]("my.module", "template.html");
+ // example:
+ // To ask dojo.cache to fetch content and store it in the cache, and sanitize the input
+ // (the dojo["cache"] style of call is used to avoid an issue with the build system
+ // erroneously trying to intern this example. To get the build system to intern your
+ // dojo.cache calls, use the "dojo.cache" style of call):
+ // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+ // | //text variable will contain just "<h1>Hello</h1>".
+ // | var text = dojo["cache"]("my.module", "template.html", {sanitize: true});
+ // example:
+ // Same example as previous, but demostrates how an object can be passed in as
+ // the first argument, then the value argument can then be the second argument.
+ // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+ // | //text variable will contain just "<h1>Hello</h1>".
+ // | var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true});
+
+ //Module could be a string, or an object that has a toString() method
+ //that will return a useful path. If it is an object, then the "url" argument
+ //will actually be the value argument.
+ if(typeof module == "string"){
+ var pathObj = dojo.moduleUrl(module, url);
+ }else{
+ pathObj = module;
+ value = url;
+ }
+ var key = pathObj.toString();
+
+ var val = value;
+ if(value !== undefined && !dojo.isString(value)){
+ val = ("value" in value ? value.value : undefined);
+ }
+
+ var sanitize = value && value.sanitize ? true : false;
+
+ if(val || val === null){
+ //We have a value, either clear or set the cache value.
+ if(val == null){
+ delete cache[key];
+ }else{
+ val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+ }
+ }else{
+ //Allow cache values to be empty strings. If key property does
+ //not exist, fetch it.
+ if(!(key in cache)){
+ val = dojo._getText(key);
+ cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+ }
+ val = cache[key];
+ }
+ return val; //String
+ };
+
+ dojo.cache._sanitize = function(/*String*/val){
+ // summary:
+ // Strips <?xml ...?> declarations so that external SVG and XML
+ // documents can be added to a document without worry. Also, if the string
+ // is an HTML document, only the part inside the body tag is returned.
+ // description:
+ // Copied from dijit._Templated._sanitizeTemplateString.
+ if(val){
+ val = val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+ var matches = val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+ if(matches){
+ val = matches[1];
+ }
+ }else{
+ val = "";
+ }
+ return val; //String
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Templated"] = true;
+dojo.provide("dijit._Templated");
+
+
+
+
+
+
+dojo.declare("dijit._Templated",
+ null,
+ {
+ // summary:
+ // Mixin for widgets that are instantiated from a template
+
+ // templateString: [protected] String
+ // A string that represents the widget template. Pre-empts the
+ // templatePath. In builds that have their strings "interned", the
+ // templatePath is converted to an inline templateString, thereby
+ // preventing a synchronous network call.
+ //
+ // Use in conjunction with dojo.cache() to load from a file.
+ templateString: null,
+
+ // templatePath: [protected deprecated] String
+ // Path to template (HTML file) for this widget relative to dojo.baseUrl.
+ // Deprecated: use templateString with dojo.cache() instead.
+ templatePath: null,
+
+ // widgetsInTemplate: [protected] Boolean
+ // Should we parse the template to find widgets that might be
+ // declared in markup inside it? False by default.
+ widgetsInTemplate: false,
+
+ // skipNodeCache: [protected] Boolean
+ // If using a cached widget template node poses issues for a
+ // particular widget class, it can set this property to ensure
+ // that its template is always re-built from a string
+ _skipNodeCache: false,
+
+ // _earlyTemplatedStartup: Boolean
+ // A fallback to preserve the 1.0 - 1.3 behavior of children in
+ // templates having their startup called before the parent widget
+ // fires postCreate. Defaults to 'false', causing child widgets to
+ // have their .startup() called immediately before a parent widget
+ // .startup(), but always after the parent .postCreate(). Set to
+ // 'true' to re-enable to previous, arguably broken, behavior.
+ _earlyTemplatedStartup: false,
+
+ // _attachPoints: [private] String[]
+ // List of widget attribute names associated with dojoAttachPoint=... in the
+ // template, ex: ["containerNode", "labelNode"]
+/*=====
+ _attachPoints: [],
+ =====*/
+
+ constructor: function(){
+ this._attachPoints = [];
+ },
+
+ _stringRepl: function(tmpl){
+ // summary:
+ // Does substitution of ${foo} type properties in template string
+ // tags:
+ // private
+ var className = this.declaredClass, _this = this;
+ // Cache contains a string because we need to do property replacement
+ // do the property replacement
+ return dojo.string.substitute(tmpl, this, function(value, key){
+ if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
+ if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
+ if(value == null){ return ""; }
+
+ // Substitution keys beginning with ! will skip the transform step,
+ // in case a user wishes to insert unescaped markup, e.g. ${!foo}
+ return key.charAt(0) == "!" ? value :
+ // Safer substitution, see heading "Attribute values" in
+ // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+ value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
+ }, this);
+ },
+
+ // method over-ride
+ buildRendering: function(){
+ // summary:
+ // Construct the UI for this widget from a template, setting this.domNode.
+ // tags:
+ // protected
+
+ // Lookup cached version of template, and download to cache if it
+ // isn't there already. Returns either a DomNode or a string, depending on
+ // whether or not the template contains ${foo} replacement parameters.
+ var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
+
+ var node;
+ if(dojo.isString(cached)){
+ node = dojo._toDom(this._stringRepl(cached));
+ if(node.nodeType != 1){
+ // Flag common problems such as templates with multiple top level nodes (nodeType == 11)
+ throw new Error("Invalid template: " + cached);
+ }
+ }else{
+ // if it's a node, all we have to do is clone it
+ node = cached.cloneNode(true);
+ }
+
+ this.domNode = node;
+
+ // recurse through the node, looking for, and attaching to, our
+ // attachment points and events, which should be defined on the template node.
+ this._attachTemplateNodes(node);
+
+ if(this.widgetsInTemplate){
+ // Make sure dojoType is used for parsing widgets in template.
+ // The dojo.parser.query could be changed from multiversion support.
+ var parser = dojo.parser, qry, attr;
+ if(parser._query != "[dojoType]"){
+ qry = parser._query;
+ attr = parser._attrName;
+ parser._query = "[dojoType]";
+ parser._attrName = "dojoType";
+ }
+
+ // Store widgets that we need to start at a later point in time
+ var cw = (this._startupWidgets = dojo.parser.parse(node, {
+ noStart: !this._earlyTemplatedStartup
+ }));
+
+ // Restore the query.
+ if(qry){
+ parser._query = qry;
+ parser._attrName = attr;
+ }
+
+ this._supportingWidgets = dijit.findWidgets(node);
+
+ this._attachTemplateNodes(cw, function(n,p){
+ return n[p];
+ });
+ }
+
+ this._fillContent(this.srcNodeRef);
+ },
+
+ _fillContent: function(/*DomNode*/ source){
+ // summary:
+ // Relocate source contents to templated container node.
+ // this.containerNode must be able to receive children, or exceptions will be thrown.
+ // tags:
+ // protected
+ var dest = this.containerNode;
+ if(source && dest){
+ while(source.hasChildNodes()){
+ dest.appendChild(source.firstChild);
+ }
+ }
+ },
+
+ _attachTemplateNodes: function(rootNode, getAttrFunc){
+ // summary:
+ // Iterate through the template and attach functions and nodes accordingly.
+ // description:
+ // Map widget properties and functions to the handlers specified in
+ // the dom node and it's descendants. This function iterates over all
+ // nodes and looks for these properties:
+ // * dojoAttachPoint
+ // * dojoAttachEvent
+ // * waiRole
+ // * waiState
+ // rootNode: DomNode|Array[Widgets]
+ // the node to search for properties. All children will be searched.
+ // getAttrFunc: Function?
+ // a function which will be used to obtain property for a given
+ // DomNode/Widget
+ // tags:
+ // private
+
+ getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
+
+ var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
+ var x = dojo.isArray(rootNode) ? 0 : -1;
+ for(; x<nodes.length; x++){
+ var baseNode = (x == -1) ? rootNode : nodes[x];
+ if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
+ continue;
+ }
+ // Process dojoAttachPoint
+ var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+ if(attachPoint){
+ var point, points = attachPoint.split(/\s*,\s*/);
+ while((point = points.shift())){
+ if(dojo.isArray(this[point])){
+ this[point].push(baseNode);
+ }else{
+ this[point]=baseNode;
+ }
+ this._attachPoints.push(point);
+ }
+ }
+
+ // Process dojoAttachEvent
+ var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+ if(attachEvent){
+ // NOTE: we want to support attributes that have the form
+ // "domEvent: nativeEvent; ..."
+ var event, events = attachEvent.split(/\s*,\s*/);
+ var trim = dojo.trim;
+ while((event = events.shift())){
+ if(event){
+ var thisFunc = null;
+ if(event.indexOf(":") != -1){
+ // oh, if only JS had tuple assignment
+ var funcNameArr = event.split(":");
+ event = trim(funcNameArr[0]);
+ thisFunc = trim(funcNameArr[1]);
+ }else{
+ event = trim(event);
+ }
+ if(!thisFunc){
+ thisFunc = event;
+ }
+ this.connect(baseNode, event, thisFunc);
+ }
+ }
+ }
+
+ // waiRole, waiState
+ var role = getAttrFunc(baseNode, "waiRole");
+ if(role){
+ dijit.setWaiRole(baseNode, role);
+ }
+ var values = getAttrFunc(baseNode, "waiState");
+ if(values){
+ dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
+ if(stateValue.indexOf('-') != -1){
+ var pair = stateValue.split('-');
+ dijit.setWaiState(baseNode, pair[0], pair[1]);
+ }
+ });
+ }
+ }
+ },
+
+ startup: function(){
+ dojo.forEach(this._startupWidgets, function(w){
+ if(w && !w._started && w.startup){
+ w.startup();
+ }
+ });
+ this.inherited(arguments);
+ },
+
+ destroyRendering: function(){
+ // Delete all attach points to prevent IE6 memory leaks.
+ dojo.forEach(this._attachPoints, function(point){
+ delete this[point];
+ }, this);
+ this._attachPoints = [];
+
+ this.inherited(arguments);
+ }
+ }
+);
+
+// key is either templatePath or templateString; object is either string or DOM tree
+dijit._Templated._templateCache = {};
+
+dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
+ // summary:
+ // Static method to get a template based on the templatePath or
+ // templateString key
+ // templatePath: String||dojo.uri.Uri
+ // The URL to get the template from.
+ // templateString: String?
+ // a string to use in lieu of fetching the template from a URL. Takes precedence
+ // over templatePath
+ // returns: Mixed
+ // Either string (if there are ${} variables that need to be replaced) or just
+ // a DOM tree (if the node can be cloned directly)
+
+ // is it already cached?
+ var tmplts = dijit._Templated._templateCache;
+ var key = templateString || templatePath;
+ var cached = tmplts[key];
+ if(cached){
+ try{
+ // if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
+ if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
+ // string or node of the same document
+ return cached;
+ }
+ }catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
+ dojo.destroy(cached);
+ }
+
+ // If necessary, load template string from template path
+ if(!templateString){
+ templateString = dojo.cache(templatePath, {sanitize: true});
+ }
+ templateString = dojo.string.trim(templateString);
+
+ if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
+ // there are variables in the template so all we can do is cache the string
+ return (tmplts[key] = templateString); //String
+ }else{
+ // there are no variables in the template so we can cache the DOM tree
+ var node = dojo._toDom(templateString);
+ if(node.nodeType != 1){
+ throw new Error("Invalid template: " + templateString);
+ }
+ return (tmplts[key] = node); //Node
+ }
+};
+
+if(dojo.isIE){
+ dojo.addOnWindowUnload(function(){
+ var cache = dijit._Templated._templateCache;
+ for(var key in cache){
+ var value = cache[key];
+ if(typeof value == "object"){ // value is either a string or a DOM node template
+ dojo.destroy(value);
+ }
+ delete cache[key];
+ }
+ });
+}
+
+// These arguments can be specified for widgets which are used in templates.
+// Since any widget can be specified as sub widgets in template, mix it
+// into the base widget class. (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget,{
+ dojoAttachEvent: "",
+ dojoAttachPoint: "",
+ waiRole: "",
+ waiState:""
+});
+
+}
+
+if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Container"] = true;
+dojo.provide("dijit._Container");
+
+dojo.declare("dijit._Container",
+ null,
+ {
+ // summary:
+ // Mixin for widgets that contain a set of widget children.
+ // description:
+ // Use this mixin for widgets that needs to know about and
+ // keep track of their widget children. Suitable for widgets like BorderContainer
+ // and TabContainer which contain (only) a set of child widgets.
+ //
+ // It's not suitable for widgets like ContentPane
+ // which contains mixed HTML (plain DOM nodes in addition to widgets),
+ // and where contained widgets are not necessarily directly below
+ // this.containerNode. In that case calls like addChild(node, position)
+ // wouldn't make sense.
+
+ // isContainer: [protected] Boolean
+ // Indicates that this widget acts as a "parent" to the descendant widgets.
+ // When the parent is started it will call startup() on the child widgets.
+ // See also `isLayoutContainer`.
+ isContainer: true,
+
+ buildRendering: function(){
+ this.inherited(arguments);
+ if(!this.containerNode){
+ // all widgets with descendants must set containerNode
+ this.containerNode = this.domNode;
+ }
+ },
+
+ addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+ // summary:
+ // Makes the given widget a child of this widget.
+ // description:
+ // Inserts specified child widget's dom node as a child of this widget's
+ // container node, and possibly does other processing (such as layout).
+
+ var refNode = this.containerNode;
+ if(insertIndex && typeof insertIndex == "number"){
+ var children = this.getChildren();
+ if(children && children.length >= insertIndex){
+ refNode = children[insertIndex-1].domNode;
+ insertIndex = "after";
+ }
+ }
+ dojo.place(widget.domNode, refNode, insertIndex);
+
+ // If I've been started but the child widget hasn't been started,
+ // start it now. Make sure to do this after widget has been
+ // inserted into the DOM tree, so it can see that it's being controlled by me,
+ // so it doesn't try to size itself.
+ if(this._started && !widget._started){
+ widget.startup();
+ }
+ },
+
+ removeChild: function(/*Widget or int*/ widget){
+ // summary:
+ // Removes the passed widget instance from this widget but does
+ // not destroy it. You can also pass in an integer indicating
+ // the index within the container to remove
+
+ if(typeof widget == "number" && widget > 0){
+ widget = this.getChildren()[widget];
+ }
+
+ if(widget && widget.domNode){
+ var node = widget.domNode;
+ node.parentNode.removeChild(node); // detach but don't destroy
+ }
+ },
+
+ getChildren: function(){
+ // summary:
+ // Returns array of children widgets.
+ // description:
+ // Returns the widgets that are directly under this.containerNode.
+ return dojo.query("> [widgetId]", this.containerNode).map(dijit.byNode); // Widget[]
+ },
+
+ hasChildren: function(){
+ // summary:
+ // Returns true if widget has children, i.e. if this.containerNode contains something.
+ return dojo.query("> [widgetId]", this.containerNode).length > 0; // Boolean
+ },
+
+ destroyDescendants: function(/*Boolean*/ preserveDom){
+ // summary:
+ // Destroys all the widgets inside this.containerNode,
+ // but not this widget itself
+ dojo.forEach(this.getChildren(), function(child){ child.destroyRecursive(preserveDom); });
+ },
+
+ _getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){
+ // summary:
+ // Get the next or previous widget sibling of child
+ // dir:
+ // if 1, get the next sibling
+ // if -1, get the previous sibling
+ // tags:
+ // private
+ var node = child.domNode,
+ which = (dir>0 ? "nextSibling" : "previousSibling");
+ do{
+ node = node[which];
+ }while(node && (node.nodeType != 1 || !dijit.byNode(node)));
+ return node && dijit.byNode(node); // dijit._Widget
+ },
+
+ getIndexOfChild: function(/*dijit._Widget*/ child){
+ // summary:
+ // Gets the index of the child in this container or -1 if not found
+ return dojo.indexOf(this.getChildren(), child); // int
+ },
+
+ startup: function(){
+ // summary:
+ // Called after all the widgets have been instantiated and their
+ // dom nodes have been inserted somewhere under dojo.doc.body.
+ //
+ // Widgets should override this method to do any initialization
+ // dependent on other widgets existing, and then call
+ // this superclass method to finish things off.
+ //
+ // startup() in subclasses shouldn't do anything
+ // size related because the size of the widget hasn't been set yet.
+
+ if(this._started){ return; }
+
+ // Startup all children of this widget
+ dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+
+ this.inherited(arguments);
+ }
+ }
+);
+
+}
+
+if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Contained"] = true;
+dojo.provide("dijit._Contained");
+
+dojo.declare("dijit._Contained",
+ null,
+ {
+ // summary:
+ // Mixin for widgets that are children of a container widget
+ //
+ // example:
+ // | // make a basic custom widget that knows about it's parents
+ // | dojo.declare("my.customClass",[dijit._Widget,dijit._Contained],{});
+
+ getParent: function(){
+ // summary:
+ // Returns the parent widget of this widget, assuming the parent
+ // specifies isContainer
+ var parent = dijit.getEnclosingWidget(this.domNode.parentNode);
+ return parent && parent.isContainer ? parent : null;
+ },
+
+ _getSibling: function(/*String*/ which){
+ // summary:
+ // Returns next or previous sibling
+ // which:
+ // Either "next" or "previous"
+ // tags:
+ // private
+ var node = this.domNode;
+ do{
+ node = node[which+"Sibling"];
+ }while(node && node.nodeType != 1);
+ return node && dijit.byNode(node); // dijit._Widget
+ },
+
+ getPreviousSibling: function(){
+ // summary:
+ // Returns null if this is the first child of the parent,
+ // otherwise returns the next element sibling to the "left".
+
+ return this._getSibling("previous"); // dijit._Widget
+ },
+
+ getNextSibling: function(){
+ // summary:
+ // Returns null if this is the last child of the parent,
+ // otherwise returns the next element sibling to the "right".
+
+ return this._getSibling("next"); // dijit._Widget
+ },
+
+ getIndexInParent: function(){
+ // summary:
+ // Returns the index of this widget within its container parent.
+ // It returns -1 if the parent does not exist, or if the parent
+ // is not a dijit._Container
+
+ var p = this.getParent();
+ if(!p || !p.getIndexOfChild){
+ return -1; // int
+ }
+ return p.getIndexOfChild(this); // int
+ }
+ }
+ );
+
+
+}
+
+if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._LayoutWidget"] = true;
+dojo.provide("dijit.layout._LayoutWidget");
+
+
+
+
+
+dojo.declare("dijit.layout._LayoutWidget",
+ [dijit._Widget, dijit._Container, dijit._Contained],
+ {
+ // summary:
+ // Base class for a _Container widget which is responsible for laying out its children.
+ // Widgets which mixin this code must define layout() to manage placement and sizing of the children.
+
+ // baseClass: [protected extension] String
+ // This class name is applied to the widget's domNode
+ // and also may be used to generate names for sub nodes,
+ // for example dijitTabContainer-content.
+ baseClass: "dijitLayoutContainer",
+
+ // isLayoutContainer: [protected] Boolean
+ // Indicates that this widget is going to call resize() on its
+ // children widgets, setting their size, when they become visible.
+ isLayoutContainer: true,
+
+ postCreate: function(){
+ dojo.addClass(this.domNode, "dijitContainer");
+ dojo.addClass(this.domNode, this.baseClass);
+
+ this.inherited(arguments);
+ },
+
+ startup: function(){
+ // summary:
+ // Called after all the widgets have been instantiated and their
+ // dom nodes have been inserted somewhere under dojo.doc.body.
+ //
+ // Widgets should override this method to do any initialization
+ // dependent on other widgets existing, and then call
+ // this superclass method to finish things off.
+ //
+ // startup() in subclasses shouldn't do anything
+ // size related because the size of the widget hasn't been set yet.
+
+ if(this._started){ return; }
+
+ // Need to call inherited first - so that child widgets get started
+ // up correctly
+ this.inherited(arguments);
+
+ // If I am a not being controlled by a parent layout widget...
+ var parent = this.getParent && this.getParent()
+ if(!(parent && parent.isLayoutContainer)){
+ // Do recursive sizing and layout of all my descendants
+ // (passing in no argument to resize means that it has to glean the size itself)
+ this.resize();
+
+ // Since my parent isn't a layout container, and my style *may be* width=height=100%
+ // or something similar (either set directly or via a CSS class),
+ // monitor when my size changes so that I can re-layout.
+ // For browsers where I can't directly monitor when my size changes,
+ // monitor when the viewport changes size, which *may* indicate a size change for me.
+ this.connect(dojo.isIE ? this.domNode : dojo.global, 'onresize', function(){
+ // Using function(){} closure to ensure no arguments to resize.
+ this.resize();
+ });
+ }
+ },
+
+ resize: function(changeSize, resultSize){
+ // summary:
+ // Call this to resize a widget, or after its size has changed.
+ // description:
+ // Change size mode:
+ // When changeSize is specified, changes the marginBox of this widget
+ // and forces it to relayout its contents accordingly.
+ // changeSize may specify height, width, or both.
+ //
+ // If resultSize is specified it indicates the size the widget will
+ // become after changeSize has been applied.
+ //
+ // Notification mode:
+ // When changeSize is null, indicates that the caller has already changed
+ // the size of the widget, or perhaps it changed because the browser
+ // window was resized. Tells widget to relayout its contents accordingly.
+ //
+ // If resultSize is also specified it indicates the size the widget has
+ // become.
+ //
+ // In either mode, this method also:
+ // 1. Sets this._borderBox and this._contentBox to the new size of
+ // the widget. Queries the current domNode size if necessary.
+ // 2. Calls layout() to resize contents (and maybe adjust child widgets).
+ //
+ // changeSize: Object?
+ // Sets the widget to this margin-box size and position.
+ // May include any/all of the following properties:
+ // | {w: int, h: int, l: int, t: int}
+ //
+ // resultSize: Object?
+ // The margin-box size of this widget after applying changeSize (if
+ // changeSize is specified). If caller knows this size and
+ // passes it in, we don't need to query the browser to get the size.
+ // | {w: int, h: int}
+
+ var node = this.domNode;
+
+ // set margin box size, unless it wasn't specified, in which case use current size
+ if(changeSize){
+ dojo.marginBox(node, changeSize);
+
+ // set offset of the node
+ if(changeSize.t){ node.style.top = changeSize.t + "px"; }
+ if(changeSize.l){ node.style.left = changeSize.l + "px"; }
+ }
+
+ // If either height or width wasn't specified by the user, then query node for it.
+ // But note that setting the margin box and then immediately querying dimensions may return
+ // inaccurate results, so try not to depend on it.
+ var mb = resultSize || {};
+ dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
+ if( !("h" in mb) || !("w" in mb) ){
+ mb = dojo.mixin(dojo.marginBox(node), mb); // just use dojo.marginBox() to fill in missing values
+ }
+
+ // Compute and save the size of my border box and content box
+ // (w/out calling dojo.contentBox() since that may fail if size was recently set)
+ var cs = dojo.getComputedStyle(node);
+ var me = dojo._getMarginExtents(node, cs);
+ var be = dojo._getBorderExtents(node, cs);
+ var bb = (this._borderBox = {
+ w: mb.w - (me.w + be.w),
+ h: mb.h - (me.h + be.h)
+ });
+ var pe = dojo._getPadExtents(node, cs);
+ this._contentBox = {
+ l: dojo._toPixelValue(node, cs.paddingLeft),
+ t: dojo._toPixelValue(node, cs.paddingTop),
+ w: bb.w - pe.w,
+ h: bb.h - pe.h
+ };
+
+ // Callback for widget to adjust size of its children
+ this.layout();
+ },
+
+ layout: function(){
+ // summary:
+ // Widgets override this method to size and position their contents/children.
+ // When this is called this._contentBox is guaranteed to be set (see resize()).
+ //
+ // This is called after startup(), and also when the widget's size has been
+ // changed.
+ // tags:
+ // protected extension
+ },
+
+ _setupChild: function(/*dijit._Widget*/child){
+ // summary:
+ // Common setup for initial children and children which are added after startup
+ // tags:
+ // protected extension
+
+ dojo.addClass(child.domNode, this.baseClass+"-child");
+ if(child.baseClass){
+ dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass);
+ }
+ },
+
+ addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+ // Overrides _Container.addChild() to call _setupChild()
+ this.inherited(arguments);
+ if(this._started){
+ this._setupChild(child);
+ }
+ },
+
+ removeChild: function(/*dijit._Widget*/ child){
+ // Overrides _Container.removeChild() to remove class added by _setupChild()
+ dojo.removeClass(child.domNode, this.baseClass+"-child");
+ if(child.baseClass){
+ dojo.removeClass(child.domNode, this.baseClass+"-"+child.baseClass);
+ }
+ this.inherited(arguments);
+ }
+ }
+);
+
+dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
+ // summary:
+ // Given the margin-box size of a node, return its content box size.
+ // Functions like dojo.contentBox() but is more reliable since it doesn't have
+ // to wait for the browser to compute sizes.
+ var cs = dojo.getComputedStyle(node);
+ var me = dojo._getMarginExtents(node, cs);
+ var pb = dojo._getPadBorderExtents(node, cs);
+ return {
+ l: dojo._toPixelValue(node, cs.paddingLeft),
+ t: dojo._toPixelValue(node, cs.paddingTop),
+ w: mb.w - (me.w + pb.w),
+ h: mb.h - (me.h + pb.h)
+ };
+};
+
+(function(){
+ var capitalize = function(word){
+ return word.substring(0,1).toUpperCase() + word.substring(1);
+ };
+
+ var size = function(widget, dim){
+ // size the child
+ widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
+
+ // record child's size, but favor our own numbers when we have them.
+ // the browser lies sometimes
+ dojo.mixin(widget, dojo.marginBox(widget.domNode));
+ dojo.mixin(widget, dim);
+ };
+
+ dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
+ // summary
+ // Layout a bunch of child dom nodes within a parent dom node
+ // container:
+ // parent node
+ // dim:
+ // {l, t, w, h} object specifying dimensions of container into which to place children
+ // children:
+ // an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
+
+ // copy dim because we are going to modify it
+ dim = dojo.mixin({}, dim);
+
+ dojo.addClass(container, "dijitLayoutContainer");
+
+ // Move "client" elements to the end of the array for layout. a11y dictates that the author
+ // needs to be able to put them in the document in tab-order, but this algorithm requires that
+ // client be last.
+ children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
+ .concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
+
+ // set positions/sizes
+ dojo.forEach(children, function(child){
+ var elm = child.domNode,
+ pos = child.layoutAlign;
+
+ // set elem to upper left corner of unused space; may move it later
+ var elmStyle = elm.style;
+ elmStyle.left = dim.l+"px";
+ elmStyle.top = dim.t+"px";
+ elmStyle.bottom = elmStyle.right = "auto";
+
+ dojo.addClass(elm, "dijitAlign" + capitalize(pos));
+
+ // set size && adjust record of remaining space.
+ // note that setting the width of a <div> may affect its height.
+ if(pos == "top" || pos == "bottom"){
+ size(child, { w: dim.w });
+ dim.h -= child.h;
+ if(pos == "top"){
+ dim.t += child.h;
+ }else{
+ elmStyle.top = dim.t + dim.h + "px";
+ }
+ }else if(pos == "left" || pos == "right"){
+ size(child, { h: dim.h });
+ dim.w -= child.w;
+ if(pos == "left"){
+ dim.l += child.w;
+ }else{
+ elmStyle.left = dim.l + dim.w + "px";
+ }
+ }else if(pos == "client"){
+ size(child, dim);
+ }
+ });
+ };
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormWidget"] = true;
+dojo.provide("dijit.form._FormWidget");
+
+
+
+
+dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated],
+ {
+ // summary:
+ // Base class for widgets corresponding to native HTML elements such as <checkbox> or <button>,
+ // which can be children of a <form> node or a `dijit.form.Form` widget.
+ //
+ // description:
+ // Represents a single HTML element.
+ // All these widgets should have these attributes just like native HTML input elements.
+ // You can set them during widget construction or afterwards, via `dijit._Widget.attr`.
+ //
+ // They also share some common methods.
+
+ // baseClass: [protected] String
+ // Root CSS class of the widget (ex: dijitTextBox), used to add CSS classes of widget
+ // (ex: "dijitTextBox dijitTextBoxInvalid dijitTextBoxFocused dijitTextBoxInvalidFocused")
+ // See _setStateClass().
+ baseClass: "",
+
+ // name: String
+ // Name used when submitting form; same as "name" attribute or plain HTML elements
+ name: "",
+
+ // alt: String
+ // Corresponds to the native HTML <input> element's attribute.
+ alt: "",
+
+ // value: String
+ // Corresponds to the native HTML <input> element's attribute.
+ value: "",
+
+ // type: String
+ // Corresponds to the native HTML <input> element's attribute.
+ type: "text",
+
+ // tabIndex: Integer
+ // Order fields are traversed when user hits the tab key
+ tabIndex: "0",
+
+ // disabled: Boolean
+ // Should this widget respond to user input?
+ // In markup, this is specified as "disabled='disabled'", or just "disabled".
+ disabled: false,
+
+ // intermediateChanges: Boolean
+ // Fires onChange for each value change or only on demand
+ intermediateChanges: false,
+
+ // scrollOnFocus: Boolean
+ // On focus, should this widget scroll into view?
+ scrollOnFocus: true,
+
+ // These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
+ attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+ value: "focusNode",
+ id: "focusNode",
+ tabIndex: "focusNode",
+ alt: "focusNode",
+ title: "focusNode"
+ }),
+
+ postMixInProperties: function(){
+ // Setup name=foo string to be referenced from the template (but only if a name has been specified)
+ // Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
+ this.nameAttrSetting = this.name ? ("name='" + this.name + "'") : "";
+ this.inherited(arguments);
+ },
+
+ _setDisabledAttr: function(/*Boolean*/ value){
+ this.disabled = value;
+ dojo.attr(this.focusNode, 'disabled', value);
+ if(this.valueNode){
+ dojo.attr(this.valueNode, 'disabled', value);
+ }
+ dijit.setWaiState(this.focusNode, "disabled", value);
+
+ if(value){
+ // reset those, because after the domNode is disabled, we can no longer receive
+ // mouse related events, see #4200
+ this._hovering = false;
+ this._active = false;
+ // remove the tabIndex, especially for FF
+ this.focusNode.setAttribute('tabIndex', "-1");
+ }else{
+ this.focusNode.setAttribute('tabIndex', this.tabIndex);
+ }
+ this._setStateClass();
+ },
+
+ setDisabled: function(/*Boolean*/ disabled){
+ // summary:
+ // Deprecated. Use attr('disabled', ...) instead.
+ dojo.deprecated("setDisabled("+disabled+") is deprecated. Use attr('disabled',"+disabled+") instead.", "", "2.0");
+ this.attr('disabled', disabled);
+ },
+
+ _onFocus: function(e){
+ if(this.scrollOnFocus){
+ dijit.scrollIntoView(this.domNode);
+ }
+ this.inherited(arguments);
+ },
+
+ _onMouse : function(/*Event*/ event){
+ // summary:
+ // Sets _hovering, _active, and stateModifier properties depending on mouse state,
+ // then calls setStateClass() to set appropriate CSS classes for this.domNode.
+ //
+ // To get a different CSS class for hover, send onmouseover and onmouseout events to this method.
+ // To get a different CSS class while mouse button is depressed, send onmousedown to this method.
+
+ var mouseNode = event.currentTarget;
+ if(mouseNode && mouseNode.getAttribute){
+ this.stateModifier = mouseNode.getAttribute("stateModifier") || "";
+ }
+
+ if(!this.disabled){
+ switch(event.type){
+ case "mouseenter":
+ case "mouseover":
+ this._hovering = true;
+ this._active = this._mouseDown;
+ break;
+
+ case "mouseout":
+ case "mouseleave":
+ this._hovering = false;
+ this._active = false;
+ break;
+
+ case "mousedown" :
+ this._active = true;
+ this._mouseDown = true;
+ // set a global event to handle mouseup, so it fires properly
+ // even if the cursor leaves the button
+ var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+ // if user clicks on the button, even if the mouse is released outside of it,
+ // this button should get focus (which mimics native browser buttons)
+ if(this._mouseDown && this.isFocusable()){
+ this.focus();
+ }
+ this._active = false;
+ this._mouseDown = false;
+ this._setStateClass();
+ this.disconnect(mouseUpConnector);
+ });
+ break;
+ }
+ this._setStateClass();
+ }
+ },
+
+ isFocusable: function(){
+ // summary:
+ // Tells if this widget is focusable or not. Used internally by dijit.
+ // tags:
+ // protected
+ return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none");
+ },
+
+ focus: function(){
+ // summary:
+ // Put focus on this widget
+ dijit.focus(this.focusNode);
+ },
+
+ _setStateClass: function(){
+ // summary:
+ // Update the visual state of the widget by setting the css classes on this.domNode
+ // (or this.stateNode if defined) by combining this.baseClass with
+ // various suffixes that represent the current widget state(s).
+ //
+ // description:
+ // In the case where a widget has multiple
+ // states, it sets the class based on all possible
+ // combinations. For example, an invalid form widget that is being hovered
+ // will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
+ //
+ // For complex widgets with multiple regions, there can be various hover/active states,
+ // such as "Hover" or "CloseButtonHover" (for tab buttons).
+ // This is controlled by a stateModifier="CloseButton" attribute on the close button node.
+ //
+ // The widget may have one or more of the following states, determined
+ // by this.state, this.checked, this.valid, and this.selected:
+ // - Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
+ // - Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
+ // - Selected - ex: currently selected tab will have this.selected==true
+ //
+ // In addition, it may have one or more of the following states,
+ // based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
+ // - Disabled - if the widget is disabled
+ // - Active - if the mouse (or space/enter key?) is being pressed down
+ // - Focused - if the widget has focus
+ // - Hover - if the mouse is over the widget
+
+ // Compute new set of classes
+ var newStateClasses = this.baseClass.split(" ");
+
+ function multiply(modifier){
+ newStateClasses = newStateClasses.concat(dojo.map(newStateClasses, function(c){ return c+modifier; }), "dijit"+modifier);
+ }
+
+ if(this.checked){
+ multiply("Checked");
+ }
+ if(this.state){
+ multiply(this.state);
+ }
+ if(this.selected){
+ multiply("Selected");
+ }
+
+ if(this.disabled){
+ multiply("Disabled");
+ }else if(this.readOnly){
+ multiply("ReadOnly");
+ }else if(this._active){
+ multiply(this.stateModifier+"Active");
+ }else{
+ if(this._focused){
+ multiply("Focused");
+ }
+ if(this._hovering){
+ multiply(this.stateModifier+"Hover");
+ }
+ }
+
+ // Remove old state classes and add new ones.
+ // For performance concerns we only write into domNode.className once.
+ var tn = this.stateNode || this.domNode,
+ classHash = {}; // set of all classes (state and otherwise) for node
+
+ dojo.forEach(tn.className.split(" "), function(c){ classHash[c] = true; });
+
+ if("_stateClasses" in this){
+ dojo.forEach(this._stateClasses, function(c){ delete classHash[c]; });
+ }
+
+ dojo.forEach(newStateClasses, function(c){ classHash[c] = true; });
+
+ var newClasses = [];
+ for(var c in classHash){
+ newClasses.push(c);
+ }
+ tn.className = newClasses.join(" ");
+
+ this._stateClasses = newStateClasses;
+ },
+
+ compare: function(/*anything*/val1, /*anything*/val2){
+ // summary:
+ // Compare 2 values (as returned by attr('value') for this widget).
+ // tags:
+ // protected
+ if(typeof val1 == "number" && typeof val2 == "number"){
+ return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2;
+ }else if(val1 > val2){
+ return 1;
+ }else if(val1 < val2){
+ return -1;
+ }else{
+ return 0;
+ }
+ },
+
+ onChange: function(newValue){
+ // summary:
+ // Callback when this widget's value is changed.
+ // tags:
+ // callback
+ },
+
+ // _onChangeActive: [private] Boolean
+ // Indicates that changes to the value should call onChange() callback.
+ // This is false during widget initialization, to avoid calling onChange()
+ // when the initial value is set.
+ _onChangeActive: false,
+
+ _handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){
+ // summary:
+ // Called when the value of the widget is set. Calls onChange() if appropriate
+ // newValue:
+ // the new value
+ // priorityChange:
+ // For a slider, for example, dragging the slider is priorityChange==false,
+ // but on mouse up, it's priorityChange==true. If intermediateChanges==true,
+ // onChange is only called form priorityChange=true events.
+ // tags:
+ // private
+ this._lastValue = newValue;
+ if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)){
+ // this block executes not for a change, but during initialization,
+ // and is used to store away the original value (or for ToggleButton, the original checked state)
+ this._resetValue = this._lastValueReported = newValue;
+ }
+ if((this.intermediateChanges || priorityChange || priorityChange === undefined) &&
+ ((typeof newValue != typeof this._lastValueReported) ||
+ this.compare(newValue, this._lastValueReported) != 0)){
+ this._lastValueReported = newValue;
+ if(this._onChangeActive){
+ if(this._onChangeHandle){
+ clearTimeout(this._onChangeHandle);
+ }
+ // setTimout allows hidden value processing to run and
+ // also the onChange handler can safely adjust focus, etc
+ this._onChangeHandle = setTimeout(dojo.hitch(this,
+ function(){
+ this._onChangeHandle = null;
+ this.onChange(newValue);
+ }), 0); // try to collapse multiple onChange's fired faster than can be processed
+ }
+ }
+ },
+
+ create: function(){
+ // Overrides _Widget.create()
+ this.inherited(arguments);
+ this._onChangeActive = true;
+ this._setStateClass();
+ },
+
+ destroy: function(){
+ if(this._onChangeHandle){ // destroy called before last onChange has fired
+ clearTimeout(this._onChangeHandle);
+ this.onChange(this._lastValueReported);
+ }
+ this.inherited(arguments);
+ },
+
+ setValue: function(/*String*/ value){
+ // summary:
+ // Deprecated. Use attr('value', ...) instead.
+ dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated. Use attr('value',"+value+") instead.", "", "2.0");
+ this.attr('value', value);
+ },
+
+ getValue: function(){
+ // summary:
+ // Deprecated. Use attr('value') instead.
+ dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use attr('value') instead.", "", "2.0");
+ return this.attr('value');
+ }
+});
+
+dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
+{
+ // summary:
+ // Base class for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values.
+ // description:
+ // Each _FormValueWidget represents a single input value, and has a (possibly hidden) <input> element,
+ // to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
+ // works as expected.
+
+ // Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
+ // directly in the template as read by the parser in order to function. IE is known to specifically
+ // require the 'name' attribute at element creation time. See #8484, #8660.
+ // TODO: unclear what that {value: ""} is for; FormWidget.attributeMap copies value to focusNode,
+ // so maybe {value: ""} is so the value *doesn't* get copied to focusNode?
+ // Seems like we really want value removed from attributeMap altogether
+ // (although there's no easy way to do that now)
+
+ // readOnly: Boolean
+ // Should this widget respond to user input?
+ // In markup, this is specified as "readOnly".
+ // Similar to disabled except readOnly form values are submitted.
+ readOnly: false,
+
+ attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+ value: "",
+ readOnly: "focusNode"
+ }),
+
+ _setReadOnlyAttr: function(/*Boolean*/ value){
+ this.readOnly = value;
+ dojo.attr(this.focusNode, 'readOnly', value);
+ dijit.setWaiState(this.focusNode, "readonly", value);
+ this._setStateClass();
+ },
+
+ postCreate: function(){
+ if(dojo.isIE){ // IE won't stop the event with keypress
+ this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown);
+ }
+ // Update our reset value if it hasn't yet been set (because this.attr
+ // is only called when there *is* a value
+ if(this._resetValue === undefined){
+ this._resetValue = this.value;
+ }
+ },
+
+ _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+ // summary:
+ // Hook so attr('value', value) works.
+ // description:
+ // Sets the value of the widget.
+ // If the value has changed, then fire onChange event, unless priorityChange
+ // is specified as null (or false?)
+ this.value = newValue;
+ this._handleOnChange(newValue, priorityChange);
+ },
+
+ _getValueAttr: function(){
+ // summary:
+ // Hook so attr('value') works.
+ return this._lastValue;
+ },
+
+ undo: function(){
+ // summary:
+ // Restore the value to the last value passed to onChange
+ this._setValueAttr(this._lastValueReported, false);
+ },
+
+ reset: function(){
+ // summary:
+ // Reset the widget's value to what it was at initialization time
+ this._hasBeenBlurred = false;
+ this._setValueAttr(this._resetValue, true);
+ },
+
+ _onKeyDown: function(e){
+ if(e.keyCode == dojo.keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){
+ var te;
+ if(dojo.isIE){
+ e.preventDefault(); // default behavior needs to be stopped here since keypress is too late
+ te = document.createEventObject();
+ te.keyCode = dojo.keys.ESCAPE;
+ te.shiftKey = e.shiftKey;
+ e.srcElement.fireEvent('onkeypress', te);
+ }
+ }
+ },
+
+ _layoutHackIE7: function(){
+ // summary:
+ // Work around table sizing bugs on IE7 by forcing redraw
+
+ if(dojo.isIE == 7){ // fix IE7 layout bug when the widget is scrolled out of sight
+ var domNode = this.domNode;
+ var parent = domNode.parentNode;
+ var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter
+ var origFilter = pingNode.style.filter; // save custom filter, most likely nothing
+ while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
+ parent._disconnectHandle = this.connect(parent, "onscroll", dojo.hitch(this, function(e){
+ this.disconnect(parent._disconnectHandle); // only call once
+ parent.removeAttribute("_disconnectHandle"); // clean up DOM node
+ pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique
+ setTimeout(function(){ pingNode.style.filter = origFilter }, 0); // restore custom filter, if any
+ }));
+ parent = parent.parentNode;
+ }
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.dijit"] = true;
+dojo.provide("dijit.dijit");
+
+/*=====
+dijit.dijit = {
+ // summary:
+ // A roll-up for common dijit methods
+ // description:
+ // A rollup file for the build system including the core and common
+ // dijit files.
+ //
+ // example:
+ // | <script type="text/javascript" src="js/dojo/dijit/dijit.js"></script>
+ //
+};
+=====*/
+
+// All the stuff in _base (these are the function that are guaranteed available without an explicit dojo.require)
+
+
+// And some other stuff that we tend to pull in all the time anyway
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dijit._KeyNavContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._KeyNavContainer"] = true;
+dojo.provide("dijit._KeyNavContainer");
+
+
+dojo.declare("dijit._KeyNavContainer",
+ dijit._Container,
+ {
+
+ // summary:
+ // A _Container with keyboard navigation of its children.
+ // description:
+ // To use this mixin, call connectKeyNavHandlers() in
+ // postCreate() and call startupKeyNavChildren() in startup().
+ // It provides normalized keyboard and focusing code for Container
+ // widgets.
+/*=====
+ // focusedChild: [protected] Widget
+ // The currently focused child widget, or null if there isn't one
+ focusedChild: null,
+=====*/
+
+ // tabIndex: Integer
+ // Tab index of the container; same as HTML tabIndex attribute.
+ // Note then when user tabs into the container, focus is immediately
+ // moved to the first item in the container.
+ tabIndex: "0",
+
+ _keyNavCodes: {},
+
+ connectKeyNavHandlers: function(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){
+ // summary:
+ // Call in postCreate() to attach the keyboard handlers
+ // to the container.
+ // preKeyCodes: dojo.keys[]
+ // Key codes for navigating to the previous child.
+ // nextKeyCodes: dojo.keys[]
+ // Key codes for navigating to the next child.
+ // tags:
+ // protected
+
+ var keyCodes = (this._keyNavCodes = {});
+ var prev = dojo.hitch(this, this.focusPrev);
+ var next = dojo.hitch(this, this.focusNext);
+ dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
+ dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
+ this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
+ this.connect(this.domNode, "onfocus", "_onContainerFocus");
+ },
+
+ startupKeyNavChildren: function(){
+ // summary:
+ // Call in startup() to set child tabindexes to -1
+ // tags:
+ // protected
+ dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
+ },
+
+ addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+ // summary:
+ // Add a child to our _Container
+ dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
+ this._startupChild(widget);
+ },
+
+ focus: function(){
+ // summary:
+ // Default focus() implementation: focus the first child.
+ this.focusFirstChild();
+ },
+
+ focusFirstChild: function(){
+ // summary:
+ // Focus the first focusable child in the container.
+ // tags:
+ // protected
+ var child = this._getFirstFocusableChild();
+ if(child){ // edge case: Menu could be empty or hidden
+ this.focusChild(child);
+ }
+ },
+
+ focusNext: function(){
+ // summary:
+ // Focus the next widget
+ // tags:
+ // protected
+ var child = this._getNextFocusableChild(this.focusedChild, 1);
+ this.focusChild(child);
+ },
+
+ focusPrev: function(){
+ // summary:
+ // Focus the last focusable node in the previous widget
+ // (ex: go to the ComboButton icon section rather than button section)
+ // tags:
+ // protected
+ var child = this._getNextFocusableChild(this.focusedChild, -1);
+ this.focusChild(child, true);
+ },
+
+ focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){
+ // summary:
+ // Focus widget.
+ // widget:
+ // Reference to container's child widget
+ // last:
+ // If true and if widget has multiple focusable nodes, focus the
+ // last one instead of the first one
+ // tags:
+ // protected
+
+ if(this.focusedChild && widget !== this.focusedChild){
+ this._onChildBlur(this.focusedChild);
+ }
+ widget.focus(last ? "end" : "start");
+ this.focusedChild = widget;
+ },
+
+ _startupChild: function(/*dijit._Widget*/ widget){
+ // summary:
+ // Setup for each child widget
+ // description:
+ // Sets tabIndex=-1 on each child, so that the tab key will
+ // leave the container rather than visiting each child.
+ // tags:
+ // private
+
+ widget.attr("tabIndex", "-1");
+
+ this.connect(widget, "_onFocus", function(){
+ // Set valid tabIndex so tabbing away from widget goes to right place, see #10272
+ widget.attr("tabIndex", this.tabIndex);
+ });
+ this.connect(widget, "_onBlur", function(){
+ widget.attr("tabIndex", "-1");
+ });
+ },
+
+ _onContainerFocus: function(evt){
+ // summary:
+ // Handler for when the container gets focus
+ // description:
+ // Initially the container itself has a tabIndex, but when it gets
+ // focus, switch focus to first child...
+ // tags:
+ // private
+
+ // Note that we can't use _onFocus() because switching focus from the
+ // _onFocus() handler confuses the focus.js code
+ // (because it causes _onFocusNode() to be called recursively)
+
+ // focus bubbles on Firefox,
+ // so just make sure that focus has really gone to the container
+ if(evt.target !== this.domNode){ return; }
+
+ this.focusFirstChild();
+
+ // and then set the container's tabIndex to -1,
+ // (don't remove as that breaks Safari 4)
+ // so that tab or shift-tab will go to the fields after/before
+ // the container, rather than the container itself
+ dojo.attr(this.domNode, "tabIndex", "-1");
+ },
+
+ _onBlur: function(evt){
+ // When focus is moved away the container, and it's descendant (popup) widgets,
+ // then restore the container's tabIndex so that user can tab to it again.
+ // Note that using _onBlur() so that this doesn't happen when focus is shifted
+ // to one of my child widgets (typically a popup)
+ if(this.tabIndex){
+ dojo.attr(this.domNode, "tabIndex", this.tabIndex);
+ }
+ this.inherited(arguments);
+ },
+
+ _onContainerKeypress: function(evt){
+ // summary:
+ // When a key is pressed, if it's an arrow key etc. then
+ // it's handled here.
+ // tags:
+ // private
+ if(evt.ctrlKey || evt.altKey){ return; }
+ var func = this._keyNavCodes[evt.charOrCode];
+ if(func){
+ func();
+ dojo.stopEvent(evt);
+ }
+ },
+
+ _onChildBlur: function(/*dijit._Widget*/ widget){
+ // summary:
+ // Called when focus leaves a child widget to go
+ // to a sibling widget.
+ // tags:
+ // protected
+ },
+
+ _getFirstFocusableChild: function(){
+ // summary:
+ // Returns first child that can be focused
+ return this._getNextFocusableChild(null, 1); // dijit._Widget
+ },
+
+ _getNextFocusableChild: function(child, dir){
+ // summary:
+ // Returns the next or previous focusable child, compared
+ // to "child"
+ // child: Widget
+ // The current widget
+ // dir: Integer
+ // * 1 = after
+ // * -1 = before
+ if(child){
+ child = this._getSiblingOfChild(child, dir);
+ }
+ var children = this.getChildren();
+ for(var i=0; i < children.length; i++){
+ if(!child){
+ child = children[(dir>0) ? 0 : (children.length-1)];
+ }
+ if(child.isFocusable()){
+ return child; // dijit._Widget
+ }
+ child = this._getSiblingOfChild(child, dir);
+ }
+ // no focusable child found
+ return null; // dijit._Widget
+ }
+ }
+);
+
+}
+
+if(!dojo._hasResource["dijit.MenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuItem"] = true;
+dojo.provide("dijit.MenuItem");
+
+
+
+
+
+dojo.declare("dijit.MenuItem",
+ [dijit._Widget, dijit._Templated, dijit._Contained],
+ {
+ // summary:
+ // A line item in a Menu Widget
+
+ // Make 3 columns
+ // icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
+ templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\">\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),
+
+ attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+ label: { node: "containerNode", type: "innerHTML" },
+ iconClass: { node: "iconNode", type: "class" }
+ }),
+
+ // label: String
+ // Menu text
+ label: '',
+
+ // iconClass: String
+ // Class to apply to DOMNode to make it display an icon.
+ iconClass: "",
+
+ // accelKey: String
+ // Text for the accelerator (shortcut) key combination.
+ // Note that although Menu can display accelerator keys there
+ // is no infrastructure to actually catch and execute these
+ // accelerators.
+ accelKey: "",
+
+ // disabled: Boolean
+ // If true, the menu item is disabled.
+ // If false, the menu item is enabled.
+ disabled: false,
+
+ _fillContent: function(/*DomNode*/ source){
+ // If button label is specified as srcNodeRef.innerHTML rather than
+ // this.params.label, handle it here.
+ if(source && !("label" in this.params)){
+ this.attr('label', source.innerHTML);
+ }
+ },
+
+ postCreate: function(){
+ dojo.setSelectable(this.domNode, false);
+ var label = this.id+"_text";
+ dojo.attr(this.containerNode, "id", label);
+ if(this.accelKeyNode){
+ dojo.attr(this.accelKeyNode, "id", this.id + "_accel");
+ label += " " + this.id + "_accel";
+ }
+ dijit.setWaiState(this.domNode, "labelledby", label);
+ },
+
+ _onHover: function(){
+ // summary:
+ // Handler when mouse is moved onto menu item
+ // tags:
+ // protected
+ dojo.addClass(this.domNode, 'dijitMenuItemHover');
+ this.getParent().onItemHover(this);
+ },
+
+ _onUnhover: function(){
+ // summary:
+ // Handler when mouse is moved off of menu item,
+ // possibly to a child menu, or maybe to a sibling
+ // menuitem or somewhere else entirely.
+ // tags:
+ // protected
+
+ // if we are unhovering the currently selected item
+ // then unselect it
+ dojo.removeClass(this.domNode, 'dijitMenuItemHover');
+ this.getParent().onItemUnhover(this);
+ },
+
+ _onClick: function(evt){
+ // summary:
+ // Internal handler for click events on MenuItem.
+ // tags:
+ // private
+ this.getParent().onItemClick(this, evt);
+ dojo.stopEvent(evt);
+ },
+
+ onClick: function(/*Event*/ evt){
+ // summary:
+ // User defined function to handle clicks
+ // tags:
+ // callback
+ },
+
+ focus: function(){
+ // summary:
+ // Focus on this MenuItem
+ try{
+ if(dojo.isIE == 8){
+ // needed for IE8 which won't scroll TR tags into view on focus yet calling scrollIntoView creates flicker (#10275)
+ this.containerNode.focus();
+ }
+ dijit.focus(this.focusNode);
+ }catch(e){
+ // this throws on IE (at least) in some scenarios
+ }
+ },
+
+ _onFocus: function(){
+ // summary:
+ // This is called by the focus manager when focus
+ // goes to this MenuItem or a child menu.
+ // tags:
+ // protected
+ this._setSelected(true);
+ this.getParent()._onItemFocus(this);
+
+ this.inherited(arguments);
+ },
+
+ _setSelected: function(selected){
+ // summary:
+ // Indicate that this node is the currently selected one
+ // tags:
+ // private
+
+ /***
+ * TODO: remove this method and calls to it, when _onBlur() is working for MenuItem.
+ * Currently _onBlur() gets called when focus is moved from the MenuItem to a child menu.
+ * That's not supposed to happen, but the problem is:
+ * In order to allow dijit.popup's getTopPopup() to work,a sub menu's popupParent
+ * points to the parent Menu, bypassing the parent MenuItem... thus the
+ * MenuItem is not in the chain of active widgets and gets a premature call to
+ * _onBlur()
+ */
+
+ dojo.toggleClass(this.domNode, "dijitMenuItemSelected", selected);
+ },
+
+ setLabel: function(/*String*/ content){
+ // summary:
+ // Deprecated. Use attr('label', ...) instead.
+ // tags:
+ // deprecated
+ dojo.deprecated("dijit.MenuItem.setLabel() is deprecated. Use attr('label', ...) instead.", "", "2.0");
+ this.attr("label", content);
+ },
+
+ setDisabled: function(/*Boolean*/ disabled){
+ // summary:
+ // Deprecated. Use attr('disabled', bool) instead.
+ // tags:
+ // deprecated
+ dojo.deprecated("dijit.Menu.setDisabled() is deprecated. Use attr('disabled', bool) instead.", "", "2.0");
+ this.attr('disabled', disabled);
+ },
+ _setDisabledAttr: function(/*Boolean*/ value){
+ // summary:
+ // Hook for attr('disabled', ...) to work.
+ // Enable or disable this menu item.
+ this.disabled = value;
+ dojo[value ? "addClass" : "removeClass"](this.domNode, 'dijitMenuItemDisabled');
+ dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
+ },
+ _setAccelKeyAttr: function(/*String*/ value){
+ // summary:
+ // Hook for attr('accelKey', ...) to work.
+ // Set accelKey on this menu item.
+ this.accelKey=value;
+
+ this.accelKeyNode.style.display=value?"":"none";
+ this.accelKeyNode.innerHTML=value;
+ //have to use colSpan to make it work in IE
+ dojo.attr(this.containerNode,'colSpan',value?"1":"2");
+ }
+ });
+
+}
+
+if(!dojo._hasResource["dijit.PopupMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.PopupMenuItem"] = true;
+dojo.provide("dijit.PopupMenuItem");
+
+
+
+dojo.declare("dijit.PopupMenuItem",
+ dijit.MenuItem,
+ {
+ _fillContent: function(){
+ // summary:
+ // When Menu is declared in markup, this code gets the menu label and
+ // the popup widget from the srcNodeRef.
+ // description:
+ // srcNodeRefinnerHTML contains both the menu item text and a popup widget
+ // The first part holds the menu item text and the second part is the popup
+ // example:
+ // | <div dojoType="dijit.PopupMenuItem">
+ // | <span>pick me</span>
+ // | <popup> ... </popup>
+ // | </div>
+ // tags:
+ // protected
+
+ if(this.srcNodeRef){
+ var nodes = dojo.query("*", this.srcNodeRef);
+ dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
+
+ // save pointer to srcNode so we can grab the drop down widget after it's instantiated
+ this.dropDownContainer = this.srcNodeRef;
+ }
+ },
+
+ startup: function(){
+ if(this._started){ return; }
+ this.inherited(arguments);
+
+ // we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
+ // land now. move it to dojo.doc.body.
+ if(!this.popup){
+ var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
+ this.popup = dijit.byNode(node);
+ }
+ dojo.body().appendChild(this.popup.domNode);
+
+ this.popup.domNode.style.display="none";
+ if(this.arrowWrapper){
+ dojo.style(this.arrowWrapper, "visibility", "");
+ }
+ dijit.setWaiState(this.focusNode, "haspopup", "true");
+ },
+
+ destroyDescendants: function(){
+ if(this.popup){
+ // Destroy the popup, unless it's already been destroyed. This can happen because
+ // the popup is a direct child of <body> even though it's logically my child.
+ if(!this.popup._destroyed){
+ this.popup.destroyRecursive();
+ }
+ delete this.popup;
+ }
+ this.inherited(arguments);
+ }
+ });
+
+
+}
+
+if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.CheckedMenuItem"] = true;
+dojo.provide("dijit.CheckedMenuItem");
+
+
+
+dojo.declare("dijit.CheckedMenuItem",
+ dijit.MenuItem,
+ {
+ // summary:
+ // A checkbox-like menu item for toggling on and off
+
+ templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\">\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t</td>\n</tr>\n"),
+
+ // checked: Boolean
+ // Our checked state
+ checked: false,
+ _setCheckedAttr: function(/*Boolean*/ checked){
+ // summary:
+ // Hook so attr('checked', bool) works.
+ // Sets the class and state for the check box.
+ dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked);
+ dijit.setWaiState(this.domNode, "checked", checked);
+ this.checked = checked;
+ },
+
+ onChange: function(/*Boolean*/ checked){
+ // summary:
+ // User defined function to handle check/uncheck events
+ // tags:
+ // callback
+ },
+
+ _onClick: function(/*Event*/ e){
+ // summary:
+ // Clicking this item just toggles its state
+ // tags:
+ // private
+ if(!this.disabled){
+ this.attr("checked", !this.checked);
+ this.onChange(this.checked);
+ }
+ this.inherited(arguments);
+ }
+ });
+
+}
+
+if(!dojo._hasResource["dijit.MenuSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuSeparator"] = true;
+dojo.provide("dijit.MenuSeparator");
+
+
+
+
+
+dojo.declare("dijit.MenuSeparator",
+ [dijit._Widget, dijit._Templated, dijit._Contained],
+ {
+ // summary:
+ // A line between two menu items
+
+ templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td colspan=\"4\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
+
+ postCreate: function(){
+ dojo.setSelectable(this.domNode, false);
+ },
+
+ isFocusable: function(){
+ // summary:
+ // Override to always return false
+ // tags:
+ // protected
+
+ return false; // Boolean
+ }
+ });
+
+
+}
+
+if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Menu"] = true;
+dojo.provide("dijit.Menu");
+
+
+
+
+
+dojo.declare("dijit._MenuBase",
+ [dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+{
+ // summary:
+ // Base class for Menu and MenuBar
+
+ // parentMenu: [readonly] Widget
+ // pointer to menu that displayed me
+ parentMenu: null,
+
+ // popupDelay: Integer
+ // number of milliseconds before hovering (without clicking) causes the popup to automatically open.
+ popupDelay: 500,
+
+ startup: function(){
+ if(this._started){ return; }
+
+ dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+ this.startupKeyNavChildren();
+
+ this.inherited(arguments);
+ },
+
+ onExecute: function(){
+ // summary:
+ // Attach point for notification about when a menu item has been executed.
+ // This is an internal mechanism used for Menus to signal to their parent to
+ // close them, because they are about to execute the onClick handler. In
+ // general developers should not attach to or override this method.
+ // tags:
+ // protected
+ },
+
+ onCancel: function(/*Boolean*/ closeAll){
+ // summary:
+ // Attach point for notification about when the user cancels the current menu
+ // This is an internal mechanism used for Menus to signal to their parent to
+ // close them. In general developers should not attach to or override this method.
+ // tags:
+ // protected
+ },
+
+ _moveToPopup: function(/*Event*/ evt){
+ // summary:
+ // This handles the right arrow key (left arrow key on RTL systems),
+ // which will either open a submenu, or move to the next item in the
+ // ancestor MenuBar
+ // tags:
+ // private
+
+ if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
+ this.focusedChild._onClick(evt);
+ }else{
+ var topMenu = this._getTopMenu();
+ if(topMenu && topMenu._isMenuBar){
+ topMenu.focusNext();
+ }
+ }
+ },
+
+ _onPopupHover: function(/*Event*/ evt){
+ // summary:
+ // This handler is called when the mouse moves over the popup.
+ // tags:
+ // private
+
+ // if the mouse hovers over a menu popup that is in pending-close state,
+ // then stop the close operation.
+ // This can't be done in onItemHover since some popup targets don't have MenuItems (e.g. ColorPicker)
+ if(this.currentPopup && this.currentPopup._pendingClose_timer){
+ var parentMenu = this.currentPopup.parentMenu;
+ // highlight the parent menu item pointing to this popup
+ if(parentMenu.focusedChild){
+ parentMenu.focusedChild._setSelected(false);
+ }
+ parentMenu.focusedChild = this.currentPopup.from_item;
+ parentMenu.focusedChild._setSelected(true);
+ // cancel the pending close
+ this._stopPendingCloseTimer(this.currentPopup);
+ }
+ },
+
+ onItemHover: function(/*MenuItem*/ item){
+ // summary:
+ // Called when cursor is over a MenuItem.
+ // tags:
+ // protected
+
+ // Don't do anything unless user has "activated" the menu by:
+ // 1) clicking it
+ // 2) opening it from a parent menu (which automatically focuses it)
+ if(this.isActive){
+ this.focusChild(item);
+ if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
+ this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
+ }
+ }
+ // if the user is mixing mouse and keyboard navigation,
+ // then the menu may not be active but a menu item has focus,
+ // but it's not the item that the mouse just hovered over.
+ // To avoid both keyboard and mouse selections, use the latest.
+ if(this.focusedChild){
+ this.focusChild(item);
+ }
+ this._hoveredChild = item;
+ },
+
+ _onChildBlur: function(item){
+ // summary:
+ // Called when a child MenuItem becomes inactive because focus
+ // has been removed from the MenuItem *and* it's descendant menus.
+ // tags:
+ // private
+ this._stopPopupTimer();
+ item._setSelected(false);
+ // Close all popups that are open and descendants of this menu
+ var itemPopup = item.popup;
+ if(itemPopup){
+ this._stopPendingCloseTimer(itemPopup);
+ itemPopup._pendingClose_timer = setTimeout(function(){
+ itemPopup._pendingClose_timer = null;
+ if(itemPopup.parentMenu){
+ itemPopup.parentMenu.currentPopup = null;
+ }
+ dijit.popup.close(itemPopup); // this calls onClose
+ }, this.popupDelay);
+ }
+ },
+
+ onItemUnhover: function(/*MenuItem*/ item){
+ // summary:
+ // Callback fires when mouse exits a MenuItem
+ // tags:
+ // protected
+
+ if(this.isActive){
+ this._stopPopupTimer();
+ }
+ if(this._hoveredChild == item){ this._hoveredChild = null; }
+ },
+
+ _stopPopupTimer: function(){
+ // summary:
+ // Cancels the popup timer because the user has stop hovering
+ // on the MenuItem, etc.
+ // tags:
+ // private
+ if(this.hover_timer){
+ clearTimeout(this.hover_timer);
+ this.hover_timer = null;
+ }
+ },
+
+ _stopPendingCloseTimer: function(/*dijit._Widget*/ popup){
+ // summary:
+ // Cancels the pending-close timer because the close has been preempted
+ // tags:
+ // private
+ if(popup._pendingClose_timer){
+ clearTimeout(popup._pendingClose_timer);
+ popup._pendingClose_timer = null;
+ }
+ },
+
+ _stopFocusTimer: function(){
+ // summary:
+ // Cancels the pending-focus timer because the menu was closed before focus occured
+ // tags:
+ // private
+ if(this._focus_timer){
+ clearTimeout(this._focus_timer);
+ this._focus_timer = null;
+ }
+ },
+
+ _getTopMenu: function(){
+ // summary:
+ // Returns the top menu in this chain of Menus
+ // tags:
+ // private
+ for(var top=this; top.parentMenu; top=top.parentMenu);
+ return top;
+ },
+
+ onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
+ // summary:
+ // Handle clicks on an item.
+ // tags:
+ // private
+ if(item.disabled){ return false; }
+
+ // this can't be done in _onFocus since the _onFocus events occurs asynchronously
+ if(typeof this.isShowingNow == 'undefined'){ // non-popup menu
+ this._markActive();
+ }
+
+ this.focusChild(item);
+
+ if(item.popup){
+ this._openPopup();
+ }else{
+ // before calling user defined handler, close hierarchy of menus
+ // and restore focus to place it was when menu was opened
+ this.onExecute();
+
+ // user defined handler for click
+ item.onClick(evt);
+ }
+ },
+
+ _openPopup: function(){
+ // summary:
+ // Open the popup to the side of/underneath the current menu item
+ // tags:
+ // protected
+
+ this._stopPopupTimer();
+ var from_item = this.focusedChild;
+ if(!from_item){ return; } // the focused child lost focus since the timer was started
+ var popup = from_item.popup;
+ if(popup.isShowingNow){ return; }
+ if(this.currentPopup){
+ this._stopPendingCloseTimer(this.currentPopup);
+ dijit.popup.close(this.currentPopup);
+ }
+ popup.parentMenu = this;
+ popup.from_item = from_item; // helps finding the parent item that should be focused for this popup
+ var self = this;
+ dijit.popup.open({
+ parent: this,
+ popup: popup,
+ around: from_item.domNode,
+ orient: this._orient || (this.isLeftToRight() ?
+ {'TR': 'TL', 'TL': 'TR', 'BR': 'BL', 'BL': 'BR'} :
+ {'TL': 'TR', 'TR': 'TL', 'BL': 'BR', 'BR': 'BL'}),
+ onCancel: function(){ // called when the child menu is canceled
+ // set isActive=false (_closeChild vs _cleanUp) so that subsequent hovering will NOT open child menus
+ // which seems aligned with the UX of most applications (e.g. notepad, wordpad, paint shop pro)
+ self.focusChild(from_item); // put focus back on my node
+ self._cleanUp(); // close the submenu (be sure this is done _after_ focus is moved)
+ from_item._setSelected(true); // oops, _cleanUp() deselected the item
+ self.focusedChild = from_item; // and unset focusedChild
+ },
+ onExecute: dojo.hitch(this, "_cleanUp")
+ });
+
+ this.currentPopup = popup;
+ // detect mouseovers to handle lazy mouse movements that temporarily focus other menu items
+ popup.connect(popup.domNode, "onmouseenter", dojo.hitch(self, "_onPopupHover")); // cleaned up when the popped-up widget is destroyed on close
+
+ if(popup.focus){
+ // If user is opening the popup via keyboard (right arrow, or down arrow for MenuBar),
+ // if the cursor happens to collide with the popup, it will generate an onmouseover event
+ // even though the mouse wasn't moved. Use a setTimeout() to call popup.focus so that
+ // our focus() call overrides the onmouseover event, rather than vice-versa. (#8742)
+ popup._focus_timer = setTimeout(dojo.hitch(popup, function(){
+ this._focus_timer = null;
+ this.focus();
+ }), 0);
+ }
+ },
+
+ _markActive: function(){
+ // summary:
+ // Mark this menu's state as active.
+ // Called when this Menu gets focus from:
+ // 1) clicking it (mouse or via space/arrow key)
+ // 2) being opened by a parent menu.
+ // This is not called just from mouse hover.
+ // Focusing a menu via TAB does NOT automatically set isActive
+ // since TAB is a navigation operation and not a selection one.
+ // For Windows apps, pressing the ALT key focuses the menubar
+ // menus (similar to TAB navigation) but the menu is not active
+ // (ie no dropdown) until an item is clicked.
+ this.isActive = true;
+ dojo.addClass(this.domNode, "dijitMenuActive");
+ dojo.removeClass(this.domNode, "dijitMenuPassive");
+ },
+
+ onOpen: function(/*Event*/ e){
+ // summary:
+ // Callback when this menu is opened.
+ // This is called by the popup manager as notification that the menu
+ // was opened.
+ // tags:
+ // private
+
+ this.isShowingNow = true;
+ this._markActive();
+ },
+
+ _markInactive: function(){
+ // summary:
+ // Mark this menu's state as inactive.
+ this.isActive = false; // don't do this in _onBlur since the state is pending-close until we get here
+ dojo.removeClass(this.domNode, "dijitMenuActive");
+ dojo.addClass(this.domNode, "dijitMenuPassive");
+ },
+
+ onClose: function(){
+ // summary:
+ // Callback when this menu is closed.
+ // This is called by the popup manager as notification that the menu
+ // was closed.
+ // tags:
+ // private
+
+ this._stopFocusTimer();
+ this._markInactive();
+ this.isShowingNow = false;
+ this.parentMenu = null;
+ },
+
+ _closeChild: function(){
+ // summary:
+ // Called when submenu is clicked or focus is lost. Close hierarchy of menus.
+ // tags:
+ // private
+ this._stopPopupTimer();
+ if(this.focusedChild){ // unhighlight the focused item
+ this.focusedChild._setSelected(false);
+ this.focusedChild._onUnhover();
+ this.focusedChild = null;
+ }
+ if(this.currentPopup){
+ // Close all popups that are open and descendants of this menu
+ dijit.popup.close(this.currentPopup);
+ this.currentPopup = null;
+ }
+ },
+
+ _onItemFocus: function(/*MenuItem*/ item){
+ // summary:
+ // Called when child of this Menu gets focus from:
+ // 1) clicking it
+ // 2) tabbing into it
+ // 3) being opened by a parent menu.
+ // This is not called just from mouse hover.
+ if(this._hoveredChild && this._hoveredChild != item){
+ this._hoveredChild._onUnhover(); // any previous mouse movement is trumped by focus selection
+ }
+ },
+
+ _onBlur: function(){
+ // summary:
+ // Called when focus is moved away from this Menu and it's submenus.
+ // tags:
+ // protected
+ this._cleanUp();
+ this.inherited(arguments);
+ },
+
+ _cleanUp: function(){
+ // summary:
+ // Called when the user is done with this menu. Closes hierarchy of menus.
+ // tags:
+ // private
+
+ this._closeChild(); // don't call this.onClose since that's incorrect for MenuBar's that never close
+ if(typeof this.isShowingNow == 'undefined'){ // non-popup menu doesn't call onClose
+ this._markInactive();
+ }
+ }
+});
+
+dojo.declare("dijit.Menu",
+ dijit._MenuBase,
+ {
+ // summary
+ // A context menu you can assign to multiple elements
+
+ // TODO: most of the code in here is just for context menu (right-click menu)
+ // support. In retrospect that should have been a separate class (dijit.ContextMenu).
+ // Split them for 2.0
+
+ constructor: function(){
+ this._bindings = [];
+ },
+
+ templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
+
+ // targetNodeIds: [const] String[]
+ // Array of dom node ids of nodes to attach to.
+ // Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
+ targetNodeIds: [],
+
+ // contextMenuForWindow: [const] Boolean
+ // If true, right clicking anywhere on the window will cause this context menu to open.
+ // If false, must specify targetNodeIds.
+ contextMenuForWindow: false,
+
+ // leftClickToOpen: [const] Boolean
+ // If true, menu will open on left click instead of right click, similiar to a file menu.
+ leftClickToOpen: false,
+
+ // refocus: Boolean
+ // When this menu closes, re-focus the element which had focus before it was opened.
+ refocus: true,
+
+ // _contextMenuWithMouse: [private] Boolean
+ // Used to record mouse and keyboard events to determine if a context
+ // menu is being opened with the keyboard or the mouse.
+ _contextMenuWithMouse: false,
+
+ postCreate: function(){
+ if(this.contextMenuForWindow){
+ this.bindDomNode(dojo.body());
+ }else{
+ // TODO: should have _setTargetNodeIds() method to handle initialization and a possible
+ // later attr('targetNodeIds', ...) call. There's also a problem that targetNodeIds[]
+ // gets stale after calls to bindDomNode()/unBindDomNode() as it still is just the original list (see #9610)
+ dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
+ }
+ var k = dojo.keys, l = this.isLeftToRight();
+ this._openSubMenuKey = l ? k.RIGHT_ARROW : k.LEFT_ARROW;
+ this._closeSubMenuKey = l ? k.LEFT_ARROW : k.RIGHT_ARROW;
+ this.connectKeyNavHandlers([k.UP_ARROW], [k.DOWN_ARROW]);
+ },
+
+ _onKeyPress: function(/*Event*/ evt){
+ // summary:
+ // Handle keyboard based menu navigation.
+ // tags:
+ // protected
+
+ if(evt.ctrlKey || evt.altKey){ return; }
+
+ switch(evt.charOrCode){
+ case this._openSubMenuKey:
+ this._moveToPopup(evt);
+ dojo.stopEvent(evt);
+ break;
+ case this._closeSubMenuKey:
+ if(this.parentMenu){
+ if(this.parentMenu._isMenuBar){
+ this.parentMenu.focusPrev();
+ }else{
+ this.onCancel(false);
+ }
+ }else{
+ dojo.stopEvent(evt);
+ }
+ break;
+ }
+ },
+
+ // thanks burstlib!
+ _iframeContentWindow: function(/* HTMLIFrameElement */iframe_el){
+ // summary:
+ // Returns the window reference of the passed iframe
+ // tags:
+ // private
+ var win = dijit.getDocumentWindow(this._iframeContentDocument(iframe_el)) ||
+ // Moz. TODO: is this available when defaultView isn't?
+ this._iframeContentDocument(iframe_el)['__parent__'] ||
+ (iframe_el.name && dojo.doc.frames[iframe_el.name]) || null;
+ return win; // Window
+ },
+
+ _iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
+ // summary:
+ // Returns a reference to the document object inside iframe_el
+ // tags:
+ // protected
+ var doc = iframe_el.contentDocument // W3
+ || (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
+ || (iframe_el.name && dojo.doc.frames[iframe_el.name] && dojo.doc.frames[iframe_el.name].document)
+ || null;
+ return doc; // HTMLDocument
+ },
+
+ bindDomNode: function(/*String|DomNode*/ node){
+ // summary:
+ // Attach menu to given node
+ node = dojo.byId(node);
+
+ var cn; // Connect node
+
+ // Support context menus on iframes. Rather than binding to the iframe itself we need
+ // to bind to the <body> node inside the iframe.
+ if(node.tagName.toLowerCase() == "iframe"){
+ var iframe = node,
+ win = this._iframeContentWindow(iframe);
+ cn = dojo.withGlobal(win, dojo.body);
+ }else{
+
+ // To capture these events at the top level, attach to <html>, not <body>.
+ // Otherwise right-click context menu just doesn't work.
+ cn = (node == dojo.body() ? dojo.doc.documentElement : node);
+ }
+
+
+ // "binding" is the object to track our connection to the node (ie, the parameter to bindDomNode())
+ var binding = {
+ node: node,
+ iframe: iframe
+ };
+
+ // Save info about binding in _bindings[], and make node itself record index(+1) into
+ // _bindings[] array. Prefix w/_dijitMenu to avoid setting an attribute that may
+ // start with a number, which fails on FF/safari.
+ dojo.attr(node, "_dijitMenu" + this.id, this._bindings.push(binding));
+
+ // Setup the connections to monitor click etc., unless we are connecting to an iframe which hasn't finished
+ // loading yet, in which case we need to wait for the onload event first, and then connect
+ var doConnects = dojo.hitch(this, function(cn){
+ return [
+ dojo.connect(cn, (this.leftClickToOpen)?"onclick":"oncontextmenu", this, function(evt){
+ this._openMyself(evt, cn, iframe);
+ }),
+ dojo.connect(cn, "onkeydown", this, "_contextKey"),
+ dojo.connect(cn, "onmousedown", this, "_contextMouse")
+ ];
+ });
+ binding.connects = cn ? doConnects(cn) : [];
+
+ if(iframe){
+ // Setup handler to [re]bind to the iframe when the contents are initially loaded,
+ // and every time the contents change.
+ // Need to do this b/c we are actually binding to the iframe's <body> node.
+ // Note: can't use dojo.connect(), see #9609.
+
+ binding.onloadHandler = dojo.hitch(this, function(){
+ // want to remove old connections, but IE throws exceptions when trying to
+ // access the <body> node because it's already gone, or at least in a state of limbo
+
+ var win = this._iframeContentWindow(iframe);
+ cn = dojo.withGlobal(win, dojo.body);
+ binding.connects = doConnects(cn);
+ });
+ if(iframe.addEventListener){
+ iframe.addEventListener("load", binding.onloadHandler, false);
+ }else{
+ iframe.attachEvent("onload", binding.onloadHandler);
+ }
+ }
+ },
+
+ unBindDomNode: function(/*String|DomNode*/ nodeName){
+ // summary:
+ // Detach menu from given node
+
+ var node;
+ try{
+ node = dojo.byId(nodeName);
+ }catch(e){
+ // On IE the dojo.byId() call will get an exception if the attach point was
+ // the <body> node of an <iframe> that has since been reloaded (and thus the
+ // <body> node is in a limbo state of destruction.
+ return;
+ }
+
+ // node["_dijitMenu" + this.id] contains index(+1) into my _bindings[] array
+ var attrName = "_dijitMenu" + this.id;
+ if(node && dojo.hasAttr(node, attrName)){
+ var bid = dojo.attr(node, attrName)-1, b = this._bindings[bid];
+ dojo.forEach(b.connects, dojo.disconnect);
+
+ // Remove listener for iframe onload events
+ var iframe = b.iframe;
+ if(iframe){
+ if(iframe.removeEventListener){
+ iframe.removeEventListener("load", b.onloadHandler, false);
+ }else{
+ iframe.detachEvent("onload", b.onloadHandler);
+ }
+ }
+
+ dojo.removeAttr(node, attrName);
+ delete this._bindings[bid];
+ }
+ },
+
+ _contextKey: function(e){
+ // summary:
+ // Code to handle popping up editor using F10 key rather than mouse
+ // tags:
+ // private
+ this._contextMenuWithMouse = false;
+ if(e.keyCode == dojo.keys.F10){
+ dojo.stopEvent(e);
+ if(e.shiftKey && e.type == "keydown"){
+ // FF: copying the wrong property from e will cause the system
+ // context menu to appear in spite of stopEvent. Don't know
+ // exactly which properties cause this effect.
+ var _e = { target: e.target, pageX: e.pageX, pageY: e.pageY };
+ _e.preventDefault = _e.stopPropagation = function(){};
+ // IE: without the delay, focus work in "open" causes the system
+ // context menu to appear in spite of stopEvent.
+ window.setTimeout(dojo.hitch(this, function(){ this._openMyself(_e); }), 1);
+ }
+ }
+ },
+
+ _contextMouse: function(e){
+ // summary:
+ // Helper to remember when we opened the context menu with the mouse instead
+ // of with the keyboard
+ // tags:
+ // private
+ this._contextMenuWithMouse = true;
+ },
+
+ _openMyself: function(/*Event*/ e, /*DomNode?*/ node, /*DomNode?*/ iframe){
+ // summary:
+ // Internal function for opening myself when the user
+ // does a right-click or something similar.
+ // node:
+ // The node that is being clicked
+ // iframe:
+ // If an <iframe> is being clicked, iframe points to that iframe and node
+ // points to the iframe's body.
+ // tags:
+ // private
+
+ if(this.leftClickToOpen && e.button>0){
+ return;
+ }
+ dojo.stopEvent(e);
+
+ // Get coordinates.
+ // If we are opening the menu with the mouse or on safari open
+ // the menu at the mouse cursor
+ // (Safari does not have a keyboard command to open the context menu
+ // and we don't currently have a reliable way to determine
+ // _contextMenuWithMouse on Safari)
+ var x,y;
+ if(dojo.isSafari || this._contextMenuWithMouse){
+ x=e.pageX;
+ y=e.pageY;
+
+ if(iframe){
+ // Event is on <body> node of an <iframe>, convert coordinates to match main document
+ var od = e.target.ownerDocument,
+ ifc = dojo.position(iframe, true),
+ win = this._iframeContentWindow(iframe),
+ scroll = dojo.withGlobal(win, "_docScroll", dojo);
+
+ var cs = dojo.getComputedStyle(iframe),
+ tp = dojo._toPixelValue,
+ left = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingLeft)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderLeftWidth) : 0),
+ top = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingTop)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderTopWidth) : 0);
+
+ x += ifc.x + left - scroll.x;
+ y += ifc.y + top - scroll.y;
+ }
+ }else{
+ // otherwise open near e.target
+ var coords = dojo.position(e.target, true);
+ x = coords.x + 10;
+ y = coords.y + 10;
+ }
+
+ var self=this;
+ var savedFocus = dijit.getFocus(this);
+ function closeAndRestoreFocus(){
+ // user has clicked on a menu or popup
+ if(self.refocus){
+ dijit.focus(savedFocus);
+ }
+ dijit.popup.close(self);
+ }
+ dijit.popup.open({
+ popup: this,
+ x: x,
+ y: y,
+ onExecute: closeAndRestoreFocus,
+ onCancel: closeAndRestoreFocus,
+ orient: this.isLeftToRight() ? 'L' : 'R'
+ });
+ this.focus();
+
+ this._onBlur = function(){
+ this.inherited('_onBlur', arguments);
+ // Usually the parent closes the child widget but if this is a context
+ // menu then there is no parent
+ dijit.popup.close(this);
+ // don't try to restore focus; user has clicked another part of the screen
+ // and set focus there
+ };
+ },
+
+ uninitialize: function(){
+ dojo.forEach(this._bindings, function(b){ if(b){ this.unBindDomNode(b.node); } }, this);
+ this.inherited(arguments);
+ }
+}
+);
+
+// Back-compat (TODO: remove in 2.0)
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojox.html.metrics"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.html.metrics"] = true;
+dojo.provide("dojox.html.metrics");
+
+(function(){
+ var dhm = dojox.html.metrics;
+
+ // derived from Morris John's emResized measurer
+ dhm.getFontMeasurements = function(){
+ // summary
+ // Returns an object that has pixel equivilents of standard font size values.
+ var heights = {
+ '1em':0, '1ex':0, '100%':0, '12pt':0, '16px':0, 'xx-small':0, 'x-small':0,
+ 'small':0, 'medium':0, 'large':0, 'x-large':0, 'xx-large':0
+ };
+
+ if(dojo.isIE){
+ // we do a font-size fix if and only if one isn't applied already.
+ // NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+ dojo.doc.documentElement.style.fontSize="100%";
+ }
+
+ // set up the measuring node.
+ var div=dojo.doc.createElement("div");
+ var ds = div.style;
+ ds.position="absolute";
+ ds.left="-100px";
+ ds.top="0";
+ ds.width="30px";
+ ds.height="1000em";
+ ds.border="0";
+ ds.margin="0";
+ ds.padding="0";
+ ds.outline="0";
+ ds.lineHeight="1";
+ ds.overflow="hidden";
+ dojo.body().appendChild(div);
+
+ // do the measurements.
+ for(var p in heights){
+ ds.fontSize = p;
+ heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+ }
+
+ dojo.body().removeChild(div);
+ div = null;
+ return heights; // object
+ };
+
+ var fontMeasurements = null;
+
+ dhm.getCachedFontMeasurements = function(recalculate){
+ if(recalculate || !fontMeasurements){
+ fontMeasurements = dhm.getFontMeasurements();
+ }
+ return fontMeasurements;
+ };
+
+ var measuringNode = null, empty = {};
+ dhm.getTextBox = function(/* String */ text, /* Object */ style, /* String? */ className){
+ var m;
+ if(!measuringNode){
+ m = measuringNode = dojo.doc.createElement("div");
+ m.style.position = "absolute";
+ m.style.left = "0px";
+ m.style.top = "-10000px";
+ dojo.body().appendChild(m);
+ }else{
+ m = measuringNode;
+ }
+ // reset styles
+ m.className = "";
+ m.style.border = "0";
+ m.style.margin = "0";
+ m.style.padding = "0";
+ m.style.outline = "0";
+ // set new style
+ if(arguments.length > 1 && style){
+ for(var i in style){
+ if(i in empty){ continue; }
+ m.style[i] = style[i];
+ }
+ }
+ // set classes
+ if(arguments.length > 2 && className){
+ m.className = className;
+ }
+ // take a measure
+ m.innerHTML = text;
+ return dojo.marginBox(m);
+ };
+
+ // determine the scrollbar sizes on load.
+ var scroll={ w:16, h:16 };
+ dhm.getScrollbar=function(){ return { w:scroll.w, h:scroll.h }; };
+
+ dhm._fontResizeNode = null;
+
+ dhm.initOnFontResize = function(interval){
+ var f = dhm._fontResizeNode = dojo.doc.createElement("iframe");
+ var fs = f.style;
+ fs.position = "absolute";
+ fs.width = "5em";
+ fs.height = "10em";
+ fs.top = "-10000px";
+ if(dojo.isIE){
+ f.onreadystatechange = function(){
+ if(f.contentWindow.document.readyState == "complete"){
+ f.onresize = f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+ }
+ };
+ }else{
+ f.onload = function(){
+ f.contentWindow.onresize = f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+ };
+ }
+ //The script tag is to work around a known firebug race condition. See comments in bug #9046
+ f.setAttribute("src", "javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");
+ dojo.body().appendChild(f);
+ dhm.initOnFontResize = function(){};
+ };
+
+ dhm.onFontResize = function(){};
+ dhm._fontresize = function(){
+ dhm.onFontResize();
+ }
+
+ dojo.addOnUnload(function(){
+ // destroy our font resize iframe if we have one
+ var f = dhm._fontResizeNode;
+ if(f){
+ if(dojo.isIE && f.onresize){
+ f.onresize = null;
+ }else if(f.contentWindow && f.contentWindow.onresize){
+ f.contentWindow.onresize = null;
+ }
+ dhm._fontResizeNode = null;
+ }
+ });
+
+ dojo.addOnLoad(function(){
+ // getScrollbar metrics node
+ try{
+ var n=dojo.doc.createElement("div");
+ n.style.cssText = "top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
+ dojo.body().appendChild(n);
+ scroll.w = n.offsetWidth - n.clientWidth;
+ scroll.h = n.offsetHeight - n.clientHeight;
+ dojo.body().removeChild(n);
+ //console.log("Scroll bar dimensions: ", scroll);
+ delete n;
+ }catch(e){}
+
+ // text size poll setup
+ if("fontSizeWatch" in dojo.config && !!dojo.config.fontSizeWatch){
+ dhm.initOnFontResize();
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.util"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.util"] = true;
+dojo.provide("dojox.grid.util");
+
+// summary: grid utility library
+(function(){
+ var dgu = dojox.grid.util;
+
+ dgu.na = '...';
+ dgu.rowIndexTag = "gridRowIndex";
+ dgu.gridViewTag = "gridView";
+
+
+ dgu.fire = function(ob, ev, args){
+ var fn = ob && ev && ob[ev];
+ return fn && (args ? fn.apply(ob, args) : ob[ev]());
+ };
+
+ dgu.setStyleHeightPx = function(inElement, inHeight){
+ if(inHeight >= 0){
+ var s = inElement.style;
+ var v = inHeight + 'px';
+ if(inElement && s['height'] != v){
+ s['height'] = v;
+ }
+ }
+ };
+
+ dgu.mouseEvents = [ 'mouseover', 'mouseout', /*'mousemove',*/ 'mousedown', 'mouseup', 'click', 'dblclick', 'contextmenu' ];
+
+ dgu.keyEvents = [ 'keyup', 'keydown', 'keypress' ];
+
+ dgu.funnelEvents = function(inNode, inObject, inMethod, inEvents){
+ var evts = (inEvents ? inEvents : dgu.mouseEvents.concat(dgu.keyEvents));
+ for (var i=0, l=evts.length; i<l; i++){
+ inObject.connect(inNode, 'on' + evts[i], inMethod);
+ }
+ };
+
+ dgu.removeNode = function(inNode){
+ inNode = dojo.byId(inNode);
+ inNode && inNode.parentNode && inNode.parentNode.removeChild(inNode);
+ return inNode;
+ };
+
+ dgu.arrayCompare = function(inA, inB){
+ for(var i=0,l=inA.length; i<l; i++){
+ if(inA[i] != inB[i]){return false;}
+ }
+ return (inA.length == inB.length);
+ };
+
+ dgu.arrayInsert = function(inArray, inIndex, inValue){
+ if(inArray.length <= inIndex){
+ inArray[inIndex] = inValue;
+ }else{
+ inArray.splice(inIndex, 0, inValue);
+ }
+ };
+
+ dgu.arrayRemove = function(inArray, inIndex){
+ inArray.splice(inIndex, 1);
+ };
+
+ dgu.arraySwap = function(inArray, inI, inJ){
+ var cache = inArray[inI];
+ inArray[inI] = inArray[inJ];
+ inArray[inJ] = cache;
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._Scroller"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Scroller"] = true;
+dojo.provide("dojox.grid._Scroller");
+
+(function(){
+ var indexInParent = function(inNode){
+ var i=0, n, p=inNode.parentNode;
+ while((n = p.childNodes[i++])){
+ if(n == inNode){
+ return i - 1;
+ }
+ }
+ return -1;
+ };
+
+ var cleanNode = function(inNode){
+ if(!inNode){
+ return;
+ }
+ var filter = function(inW){
+ return inW.domNode && dojo.isDescendant(inW.domNode, inNode, true);
+ };
+ var ws = dijit.registry.filter(filter);
+ for(var i=0, w; (w=ws[i]); i++){
+ w.destroy();
+ }
+ delete ws;
+ };
+
+ var getTagName = function(inNodeOrId){
+ var node = dojo.byId(inNodeOrId);
+ return (node && node.tagName ? node.tagName.toLowerCase() : '');
+ };
+
+ var nodeKids = function(inNode, inTag){
+ var result = [];
+ var i=0, n;
+ while((n = inNode.childNodes[i])){
+ i++;
+ if(getTagName(n) == inTag){
+ result.push(n);
+ }
+ }
+ return result;
+ };
+
+ var divkids = function(inNode){
+ return nodeKids(inNode, 'div');
+ };
+
+ dojo.declare("dojox.grid._Scroller", null, {
+ constructor: function(inContentNodes){
+ this.setContentNodes(inContentNodes);
+ this.pageHeights = [];
+ this.pageNodes = [];
+ this.stack = [];
+ },
+ // specified
+ rowCount: 0, // total number of rows to manage
+ defaultRowHeight: 32, // default height of a row
+ keepRows: 100, // maximum number of rows that should exist at one time
+ contentNode: null, // node to contain pages
+ scrollboxNode: null, // node that controls scrolling
+ // calculated
+ defaultPageHeight: 0, // default height of a page
+ keepPages: 10, // maximum number of pages that should exists at one time
+ pageCount: 0,
+ windowHeight: 0,
+ firstVisibleRow: 0,
+ lastVisibleRow: 0,
+ averageRowHeight: 0, // the average height of a row
+ // private
+ page: 0,
+ pageTop: 0,
+ // init
+ init: function(inRowCount, inKeepRows, inRowsPerPage){
+ switch(arguments.length){
+ case 3: this.rowsPerPage = inRowsPerPage;
+ case 2: this.keepRows = inKeepRows;
+ case 1: this.rowCount = inRowCount;
+ default: break;
+ }
+ this.defaultPageHeight = this.defaultRowHeight * this.rowsPerPage;
+ this.pageCount = this._getPageCount(this.rowCount, this.rowsPerPage);
+ this.setKeepInfo(this.keepRows);
+ this.invalidate();
+ if(this.scrollboxNode){
+ this.scrollboxNode.scrollTop = 0;
+ this.scroll(0);
+ this.scrollboxNode.onscroll = dojo.hitch(this, 'onscroll');
+ }
+ },
+ _getPageCount: function(rowCount, rowsPerPage){
+ return rowCount ? (Math.ceil(rowCount / rowsPerPage) || 1) : 0;
+ },
+ destroy: function(){
+ this.invalidateNodes();
+ delete this.contentNodes;
+ delete this.contentNode;
+ delete this.scrollboxNode;
+ },
+ setKeepInfo: function(inKeepRows){
+ this.keepRows = inKeepRows;
+ this.keepPages = !this.keepRows ? this.keepPages : Math.max(Math.ceil(this.keepRows / this.rowsPerPage), 2);
+ },
+ // nodes
+ setContentNodes: function(inNodes){
+ this.contentNodes = inNodes;
+ this.colCount = (this.contentNodes ? this.contentNodes.length : 0);
+ this.pageNodes = [];
+ for(var i=0; i<this.colCount; i++){
+ this.pageNodes[i] = [];
+ }
+ },
+ getDefaultNodes: function(){
+ return this.pageNodes[0] || [];
+ },
+ // updating
+ invalidate: function(){
+ this._invalidating = true;
+ this.invalidateNodes();
+ this.pageHeights = [];
+ this.height = (this.pageCount ? (this.pageCount - 1)* this.defaultPageHeight + this.calcLastPageHeight() : 0);
+ this.resize();
+ this._invalidating = false;
+ },
+ updateRowCount: function(inRowCount){
+ this.invalidateNodes();
+ this.rowCount = inRowCount;
+ // update page count, adjust document height
+ var oldPageCount = this.pageCount;
+ if(oldPageCount === 0){
+ //We want to have at least 1px in height to keep scroller. Otherwise with an
+ //empty grid you can't scroll to see the header.
+ this.height = 1;
+ }
+ this.pageCount = this._getPageCount(this.rowCount, this.rowsPerPage);
+ if(this.pageCount < oldPageCount){
+ for(var i=oldPageCount-1; i>=this.pageCount; i--){
+ this.height -= this.getPageHeight(i);
+ delete this.pageHeights[i];
+ }
+ }else if(this.pageCount > oldPageCount){
+ this.height += this.defaultPageHeight * (this.pageCount - oldPageCount - 1) + this.calcLastPageHeight();
+ }
+ this.resize();
+ },
+ // implementation for page manager
+ pageExists: function(inPageIndex){
+ return Boolean(this.getDefaultPageNode(inPageIndex));
+ },
+ measurePage: function(inPageIndex){
+ if(this.grid.rowHeight){
+ var height = this.grid.rowHeight + 1;
+ return ((inPageIndex + 1) * this.rowsPerPage > this.rowCount ?
+ this.rowCount - inPageIndex * this.rowsPerPage :
+ this.rowsPerPage) * height;
+
+ }
+ var n = this.getDefaultPageNode(inPageIndex);
+ return (n && n.innerHTML) ? n.offsetHeight : undefined;
+ },
+ positionPage: function(inPageIndex, inPos){
+ for(var i=0; i<this.colCount; i++){
+ this.pageNodes[i][inPageIndex].style.top = inPos + 'px';
+ }
+ },
+ repositionPages: function(inPageIndex){
+ var nodes = this.getDefaultNodes();
+ var last = 0;
+
+ for(var i=0; i<this.stack.length; i++){
+ last = Math.max(this.stack[i], last);
+ }
+ //
+ var n = nodes[inPageIndex];
+ var y = (n ? this.getPageNodePosition(n) + this.getPageHeight(inPageIndex) : 0);
+ for(var p=inPageIndex+1; p<=last; p++){
+ n = nodes[p];
+ if(n){
+ if(this.getPageNodePosition(n) == y){
+ return;
+ }
+ this.positionPage(p, y);
+ }
+ y += this.getPageHeight(p);
+ }
+ },
+ installPage: function(inPageIndex){
+ for(var i=0; i<this.colCount; i++){
+ this.contentNodes[i].appendChild(this.pageNodes[i][inPageIndex]);
+ }
+ },
+ preparePage: function(inPageIndex, inReuseNode){
+ var p = (inReuseNode ? this.popPage() : null);
+ for(var i=0; i<this.colCount; i++){
+ var nodes = this.pageNodes[i];
+ var new_p = (p === null ? this.createPageNode() : this.invalidatePageNode(p, nodes));
+ new_p.pageIndex = inPageIndex;
+ nodes[inPageIndex] = new_p;
+ }
+ },
+ // rendering implementation
+ renderPage: function(inPageIndex){
+ var nodes = [];
+ var i, j;
+ for(i=0; i<this.colCount; i++){
+ nodes[i] = this.pageNodes[i][inPageIndex];
+ }
+ for(i=0, j=inPageIndex*this.rowsPerPage; (i<this.rowsPerPage)&&(j<this.rowCount); i++, j++){
+ this.renderRow(j, nodes);
+ }
+ },
+ removePage: function(inPageIndex){
+ for(var i=0, j=inPageIndex*this.rowsPerPage; i<this.rowsPerPage; i++, j++){
+ this.removeRow(j);
+ }
+ },
+ destroyPage: function(inPageIndex){
+ for(var i=0; i<this.colCount; i++){
+ var n = this.invalidatePageNode(inPageIndex, this.pageNodes[i]);
+ if(n){
+ dojo.destroy(n);
+ }
+ }
+ },
+ pacify: function(inShouldPacify){
+ },
+ // pacification
+ pacifying: false,
+ pacifyTicks: 200,
+ setPacifying: function(inPacifying){
+ if(this.pacifying != inPacifying){
+ this.pacifying = inPacifying;
+ this.pacify(this.pacifying);
+ }
+ },
+ startPacify: function(){
+ this.startPacifyTicks = new Date().getTime();
+ },
+ doPacify: function(){
+ var result = (new Date().getTime() - this.startPacifyTicks) > this.pacifyTicks;
+ this.setPacifying(true);
+ this.startPacify();
+ return result;
+ },
+ endPacify: function(){
+ this.setPacifying(false);
+ },
+ // default sizing implementation
+ resize: function(){
+ if(this.scrollboxNode){
+ this.windowHeight = this.scrollboxNode.clientHeight;
+ }
+ for(var i=0; i<this.colCount; i++){
+ //We want to have 1px in height min to keep scroller. Otherwise can't scroll
+ //and see header in empty grid.
+ dojox.grid.util.setStyleHeightPx(this.contentNodes[i], Math.max(1,this.height));
+ }
+
+ // Calculate the average row height and update the defaults (row and page).
+ var needPage = (!this._invalidating);
+ if(!needPage){
+ var ah = this.grid.attr("autoHeight");
+ if(typeof ah == "number" && ah <= Math.min(this.rowsPerPage, this.rowCount)){
+ needPage = true;
+ }
+ }
+ if(needPage){
+ this.needPage(this.page, this.pageTop);
+ }
+ var rowsOnPage = (this.page < this.pageCount - 1) ? this.rowsPerPage : ((this.rowCount % this.rowsPerPage) || this.rowsPerPage);
+ var pageHeight = this.getPageHeight(this.page);
+ this.averageRowHeight = (pageHeight > 0 && rowsOnPage > 0) ? (pageHeight / rowsOnPage) : 0;
+ },
+ calcLastPageHeight: function(){
+ if(!this.pageCount){
+ return 0;
+ }
+ var lastPage = this.pageCount - 1;
+ var lastPageHeight = ((this.rowCount % this.rowsPerPage)||(this.rowsPerPage)) * this.defaultRowHeight;
+ this.pageHeights[lastPage] = lastPageHeight;
+ return lastPageHeight;
+ },
+ updateContentHeight: function(inDh){
+ this.height += inDh;
+ this.resize();
+ },
+ updatePageHeight: function(inPageIndex, fromBuild){
+ if(this.pageExists(inPageIndex)){
+ var oh = this.getPageHeight(inPageIndex);
+ var h = (this.measurePage(inPageIndex));
+ if(h === undefined){
+ h = oh;
+ }
+ this.pageHeights[inPageIndex] = h;
+ if(oh != h){
+ this.updateContentHeight(h - oh);
+ var ah = this.grid.attr("autoHeight");
+ if((typeof ah == "number" && ah > this.rowCount)||(ah === true && !fromBuild)){
+ this.grid.sizeChange();
+ }else{
+ this.repositionPages(inPageIndex);
+ }
+ }
+ return h;
+ }
+ return 0;
+ },
+ rowHeightChanged: function(inRowIndex){
+ this.updatePageHeight(Math.floor(inRowIndex / this.rowsPerPage), false);
+ },
+ // scroller core
+ invalidateNodes: function(){
+ while(this.stack.length){
+ this.destroyPage(this.popPage());
+ }
+ },
+ createPageNode: function(){
+ var p = document.createElement('div');
+ dojo.attr(p,"role","presentation");
+ p.style.position = 'absolute';
+ //p.style.width = '100%';
+ p.style[dojo._isBodyLtr() ? "left" : "right"] = '0';
+ return p;
+ },
+ getPageHeight: function(inPageIndex){
+ var ph = this.pageHeights[inPageIndex];
+ return (ph !== undefined ? ph : this.defaultPageHeight);
+ },
+ // FIXME: this is not a stack, it's a FIFO list
+ pushPage: function(inPageIndex){
+ return this.stack.push(inPageIndex);
+ },
+ popPage: function(){
+ return this.stack.shift();
+ },
+ findPage: function(inTop){
+ var i = 0, h = 0;
+ for(var ph = 0; i<this.pageCount; i++, h += ph){
+ ph = this.getPageHeight(i);
+ if(h + ph >= inTop){
+ break;
+ }
+ }
+ this.page = i;
+ this.pageTop = h;
+ },
+ buildPage: function(inPageIndex, inReuseNode, inPos){
+ this.preparePage(inPageIndex, inReuseNode);
+ this.positionPage(inPageIndex, inPos);
+ // order of operations is key below
+ this.installPage(inPageIndex);
+ this.renderPage(inPageIndex);
+ // order of operations is key above
+ this.pushPage(inPageIndex);
+ },
+ needPage: function(inPageIndex, inPos){
+ var h = this.getPageHeight(inPageIndex), oh = h;
+ if(!this.pageExists(inPageIndex)){
+ this.buildPage(inPageIndex, this.keepPages&&(this.stack.length >= this.keepPages), inPos);
+ h = this.updatePageHeight(inPageIndex, true);
+ }else{
+ this.positionPage(inPageIndex, inPos);
+ }
+ return h;
+ },
+ onscroll: function(){
+ this.scroll(this.scrollboxNode.scrollTop);
+ },
+ scroll: function(inTop){
+ this.grid.scrollTop = inTop;
+ if(this.colCount){
+ this.startPacify();
+ this.findPage(inTop);
+ var h = this.height;
+ var b = this.getScrollBottom(inTop);
+ for(var p=this.page, y=this.pageTop; (p<this.pageCount)&&((b<0)||(y<b)); p++){
+ y += this.needPage(p, y);
+ }
+ this.firstVisibleRow = this.getFirstVisibleRow(this.page, this.pageTop, inTop);
+ this.lastVisibleRow = this.getLastVisibleRow(p - 1, y, b);
+ // indicates some page size has been updated
+ if(h != this.height){
+ this.repositionPages(p-1);
+ }
+ this.endPacify();
+ }
+ },
+ getScrollBottom: function(inTop){
+ return (this.windowHeight >= 0 ? inTop + this.windowHeight : -1);
+ },
+ // events
+ processNodeEvent: function(e, inNode){
+ var t = e.target;
+ while(t && (t != inNode) && t.parentNode && (t.parentNode.parentNode != inNode)){
+ t = t.parentNode;
+ }
+ if(!t || !t.parentNode || (t.parentNode.parentNode != inNode)){
+ return false;
+ }
+ var page = t.parentNode;
+ e.topRowIndex = page.pageIndex * this.rowsPerPage;
+ e.rowIndex = e.topRowIndex + indexInParent(t);
+ e.rowTarget = t;
+ return true;
+ },
+ processEvent: function(e){
+ return this.processNodeEvent(e, this.contentNode);
+ },
+ // virtual rendering interface
+ renderRow: function(inRowIndex, inPageNode){
+ },
+ removeRow: function(inRowIndex){
+ },
+ // page node operations
+ getDefaultPageNode: function(inPageIndex){
+ return this.getDefaultNodes()[inPageIndex];
+ },
+ positionPageNode: function(inNode, inPos){
+ },
+ getPageNodePosition: function(inNode){
+ return inNode.offsetTop;
+ },
+ invalidatePageNode: function(inPageIndex, inNodes){
+ var p = inNodes[inPageIndex];
+ if(p){
+ delete inNodes[inPageIndex];
+ this.removePage(inPageIndex, p);
+ cleanNode(p);
+ p.innerHTML = '';
+ }
+ return p;
+ },
+ // scroll control
+ getPageRow: function(inPage){
+ return inPage * this.rowsPerPage;
+ },
+ getLastPageRow: function(inPage){
+ return Math.min(this.rowCount, this.getPageRow(inPage + 1)) - 1;
+ },
+ getFirstVisibleRow: function(inPage, inPageTop, inScrollTop){
+ if(!this.pageExists(inPage)){
+ return 0;
+ }
+ var row = this.getPageRow(inPage);
+ var nodes = this.getDefaultNodes();
+ var rows = divkids(nodes[inPage]);
+ for(var i=0,l=rows.length; i<l && inPageTop<inScrollTop; i++, row++){
+ inPageTop += rows[i].offsetHeight;
+ }
+ return (row ? row - 1 : row);
+ },
+ getLastVisibleRow: function(inPage, inBottom, inScrollBottom){
+ if(!this.pageExists(inPage)){
+ return 0;
+ }
+ var nodes = this.getDefaultNodes();
+ var row = this.getLastPageRow(inPage);
+ var rows = divkids(nodes[inPage]);
+ for(var i=rows.length-1; i>=0 && inBottom>inScrollBottom; i--, row--){
+ inBottom -= rows[i].offsetHeight;
+ }
+ return row + 1;
+ },
+ findTopRow: function(inScrollTop){
+ var nodes = this.getDefaultNodes();
+ var rows = divkids(nodes[this.page]);
+ for(var i=0,l=rows.length,t=this.pageTop,h; i<l; i++){
+ h = rows[i].offsetHeight;
+ t += h;
+ if(t >= inScrollTop){
+ this.offset = h - (t - inScrollTop);
+ return i + this.page * this.rowsPerPage;
+ }
+ }
+ return -1;
+ },
+ findScrollTop: function(inRow){
+ var rowPage = Math.floor(inRow / this.rowsPerPage);
+ var t = 0;
+ var i, l;
+ for(i=0; i<rowPage; i++){
+ t += this.getPageHeight(i);
+ }
+ this.pageTop = t;
+ this.needPage(rowPage, this.pageTop);
+
+ var nodes = this.getDefaultNodes();
+ var rows = divkids(nodes[rowPage]);
+ var r = inRow - this.rowsPerPage * rowPage;
+ for(i=0,l=rows.length; i<l && i<r; i++){
+ t += rows[i].offsetHeight;
+ }
+ return t;
+ },
+ dummy: 0
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.cells._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.cells._base"] = true;
+dojo.provide("dojox.grid.cells._base");
+
+
+
+
+dojo.declare("dojox.grid._DeferredTextWidget", dijit._Widget, {
+ deferred: null,
+ _destroyOnRemove: true,
+ postCreate: function(){
+ if(this.deferred){
+ this.deferred.addBoth(dojo.hitch(this, function(text){
+ if(this.domNode){
+ this.domNode.innerHTML = text;
+ }
+ }));
+ }
+ }
+});
+
+(function(){
+ var focusSelectNode = function(inNode){
+ try{
+ dojox.grid.util.fire(inNode, "focus");
+ dojox.grid.util.fire(inNode, "select");
+ }catch(e){// IE sux bad
+ }
+ };
+
+ var whenIdle = function(/*inContext, inMethod, args ...*/){
+ setTimeout(dojo.hitch.apply(dojo, arguments), 0);
+ };
+
+ var dgc = dojox.grid.cells;
+
+ dojo.declare("dojox.grid.cells._Base", null, {
+ // summary:
+ // Respresents a grid cell and contains information about column options and methods
+ // for retrieving cell related information.
+ // Each column in a grid layout has a cell object and most events and many methods
+ // provide access to these objects.
+ styles: '',
+ classes: '',
+ editable: false,
+ alwaysEditing: false,
+ formatter: null,
+ defaultValue: '...',
+ value: null,
+ hidden: false,
+ noresize: false,
+ draggable: true,
+ //private
+ _valueProp: "value",
+ _formatPending: false,
+
+ constructor: function(inProps){
+ this._props = inProps || {};
+ dojo.mixin(this, inProps);
+ if(this.draggable === undefined){
+ this.draggable = true;
+ }
+ },
+
+ _defaultFormat: function(inValue, callArgs){
+ var s = this.grid.formatterScope || this;
+ var f = this.formatter;
+ if(f && s && typeof f == "string"){
+ f = this.formatter = s[f];
+ }
+ var v = (inValue != this.defaultValue && f) ? f.apply(s, callArgs) : inValue;
+ if(typeof v == "undefined"){
+ return this.defaultValue;
+ }
+ if(v && v.addBoth){
+ // Check if it's a deferred
+ v = new dojox.grid._DeferredTextWidget({deferred: v},
+ dojo.create("span", {innerHTML: this.defaultValue}));
+ }
+ if(v && v.declaredClass && v.startup){
+ return "<div class='dojoxGridStubNode' linkWidget='" +
+ v.id +
+ "' cellIdx='" +
+ this.index +
+ "'>" +
+ this.defaultValue +
+ "</div>";
+ }
+ return v;
+ },
+
+ // data source
+ format: function(inRowIndex, inItem){
+ // summary:
+ // provides the html for a given grid cell.
+ // inRowIndex: int
+ // grid row index
+ // returns: html for a given grid cell
+ var f, i=this.grid.edit.info, d=this.get ? this.get(inRowIndex, inItem) : (this.value || this.defaultValue);
+ d = (d && d.replace && this.grid.escapeHTMLInData) ? d.replace(/&/g, '&amp;').replace(/</g, '&lt;') : d;
+ if(this.editable && (this.alwaysEditing || (i.rowIndex==inRowIndex && i.cell==this))){
+ return this.formatEditing(d, inRowIndex);
+ }else{
+ return this._defaultFormat(d, [d, inRowIndex, this]);
+ }
+ },
+ formatEditing: function(inDatum, inRowIndex){
+ // summary:
+ // formats the cell for editing
+ // inDatum: anything
+ // cell data to edit
+ // inRowIndex: int
+ // grid row index
+ // returns: string of html to place in grid cell
+ },
+ // utility
+ getNode: function(inRowIndex){
+ // summary:
+ // gets the dom node for a given grid cell.
+ // inRowIndex: int
+ // grid row index
+ // returns: dom node for a given grid cell
+ return this.view.getCellNode(inRowIndex, this.index);
+ },
+ getHeaderNode: function(){
+ return this.view.getHeaderCellNode(this.index);
+ },
+ getEditNode: function(inRowIndex){
+ return (this.getNode(inRowIndex) || 0).firstChild || 0;
+ },
+ canResize: function(){
+ var uw = this.unitWidth;
+ return uw && (uw!=='auto');
+ },
+ isFlex: function(){
+ var uw = this.unitWidth;
+ return uw && dojo.isString(uw) && (uw=='auto' || uw.slice(-1)=='%');
+ },
+ // edit support
+ applyEdit: function(inValue, inRowIndex){
+ this.grid.edit.applyCellEdit(inValue, this, inRowIndex);
+ },
+ cancelEdit: function(inRowIndex){
+ this.grid.doCancelEdit(inRowIndex);
+ },
+ _onEditBlur: function(inRowIndex){
+ if(this.grid.edit.isEditCell(inRowIndex, this.index)){
+ //console.log('editor onblur', e);
+ this.grid.edit.apply();
+ }
+ },
+ registerOnBlur: function(inNode, inRowIndex){
+ if(this.commitOnBlur){
+ dojo.connect(inNode, "onblur", function(e){
+ // hack: if editor still thinks this editor is current some ms after it blurs, assume we've focused away from grid
+ setTimeout(dojo.hitch(this, "_onEditBlur", inRowIndex), 250);
+ });
+ }
+ },
+ //protected
+ needFormatNode: function(inDatum, inRowIndex){
+ this._formatPending = true;
+ whenIdle(this, "_formatNode", inDatum, inRowIndex);
+ },
+ cancelFormatNode: function(){
+ this._formatPending = false;
+ },
+ //private
+ _formatNode: function(inDatum, inRowIndex){
+ if(this._formatPending){
+ this._formatPending = false;
+ // make cell selectable
+ dojo.setSelectable(this.grid.domNode, true);
+ this.formatNode(this.getEditNode(inRowIndex), inDatum, inRowIndex);
+ }
+ },
+ //protected
+ formatNode: function(inNode, inDatum, inRowIndex){
+ // summary:
+ // format the editing dom node. Use when editor is a widget.
+ // inNode: dom node
+ // dom node for the editor
+ // inDatum: anything
+ // cell data to edit
+ // inRowIndex: int
+ // grid row index
+ if(dojo.isIE){
+ // IE sux bad
+ whenIdle(this, "focus", inRowIndex, inNode);
+ }else{
+ this.focus(inRowIndex, inNode);
+ }
+ },
+ dispatchEvent: function(m, e){
+ if(m in this){
+ return this[m](e);
+ }
+ },
+ //public
+ getValue: function(inRowIndex){
+ // summary:
+ // returns value entered into editor
+ // inRowIndex: int
+ // grid row index
+ // returns:
+ // value of editor
+ return this.getEditNode(inRowIndex)[this._valueProp];
+ },
+ setValue: function(inRowIndex, inValue){
+ // summary:
+ // set the value of the grid editor
+ // inRowIndex: int
+ // grid row index
+ // inValue: anything
+ // value of editor
+ var n = this.getEditNode(inRowIndex);
+ if(n){
+ n[this._valueProp] = inValue;
+ }
+ },
+ focus: function(inRowIndex, inNode){
+ // summary:
+ // focus the grid editor
+ // inRowIndex: int
+ // grid row index
+ // inNode: dom node
+ // editor node
+ focusSelectNode(inNode || this.getEditNode(inRowIndex));
+ },
+ save: function(inRowIndex){
+ // summary:
+ // save editor state
+ // inRowIndex: int
+ // grid row index
+ this.value = this.value || this.getValue(inRowIndex);
+ //console.log("save", this.value, inCell.index, inRowIndex);
+ },
+ restore: function(inRowIndex){
+ // summary:
+ // restore editor state
+ // inRowIndex: int
+ // grid row index
+ this.setValue(inRowIndex, this.value);
+ //console.log("restore", this.value, inCell.index, inRowIndex);
+ },
+ //protected
+ _finish: function(inRowIndex){
+ // summary:
+ // called when editing is completed to clean up editor
+ // inRowIndex: int
+ // grid row index
+ dojo.setSelectable(this.grid.domNode, false);
+ this.cancelFormatNode();
+ },
+ //public
+ apply: function(inRowIndex){
+ // summary:
+ // apply edit from cell editor
+ // inRowIndex: int
+ // grid row index
+ this.applyEdit(this.getValue(inRowIndex), inRowIndex);
+ this._finish(inRowIndex);
+ },
+ cancel: function(inRowIndex){
+ // summary:
+ // cancel cell edit
+ // inRowIndex: int
+ // grid row index
+ this.cancelEdit(inRowIndex);
+ this._finish(inRowIndex);
+ }
+ });
+ dgc._Base.markupFactory = function(node, cellDef){
+ var d = dojo;
+ var formatter = d.trim(d.attr(node, "formatter")||"");
+ if(formatter){
+ cellDef.formatter = dojo.getObject(formatter)||formatter;
+ }
+ var get = d.trim(d.attr(node, "get")||"");
+ if(get){
+ cellDef.get = dojo.getObject(get);
+ }
+ var getBoolAttr = function(attr, cell, cellAttr){
+ var value = d.trim(d.attr(node, attr)||"");
+ if(value){ cell[cellAttr||attr] = !(value.toLowerCase()=="false"); }
+ };
+ getBoolAttr("sortDesc", cellDef);
+ getBoolAttr("editable", cellDef);
+ getBoolAttr("alwaysEditing", cellDef);
+ getBoolAttr("noresize", cellDef);
+ getBoolAttr("draggable", cellDef);
+
+ var value = d.trim(d.attr(node, "loadingText")||d.attr(node, "defaultValue")||"");
+ if(value){
+ cellDef.defaultValue = value;
+ }
+
+ var getStrAttr = function(attr, cell, cellAttr){
+ var value = d.trim(d.attr(node, attr)||"")||undefined;
+ if(value){ cell[cellAttr||attr] = value; }
+ };
+ getStrAttr("styles", cellDef);
+ getStrAttr("headerStyles", cellDef);
+ getStrAttr("cellStyles", cellDef);
+ getStrAttr("classes", cellDef);
+ getStrAttr("headerClasses", cellDef);
+ getStrAttr("cellClasses", cellDef);
+ };
+
+ dojo.declare("dojox.grid.cells.Cell", dgc._Base, {
+ // summary
+ // grid cell that provides a standard text input box upon editing
+ constructor: function(){
+ this.keyFilter = this.keyFilter;
+ },
+ // keyFilter: RegExp
+ // optional regex for disallowing keypresses
+ keyFilter: null,
+ formatEditing: function(inDatum, inRowIndex){
+ this.needFormatNode(inDatum, inRowIndex);
+ return '<input class="dojoxGridInput" type="text" value="' + inDatum + '">';
+ },
+ formatNode: function(inNode, inDatum, inRowIndex){
+ this.inherited(arguments);
+ // FIXME: feels too specific for this interface
+ this.registerOnBlur(inNode, inRowIndex);
+ },
+ doKey: function(e){
+ if(this.keyFilter){
+ var key = String.fromCharCode(e.charCode);
+ if(key.search(this.keyFilter) == -1){
+ dojo.stopEvent(e);
+ }
+ }
+ },
+ _finish: function(inRowIndex){
+ this.inherited(arguments);
+ var n = this.getEditNode(inRowIndex);
+ try{
+ dojox.grid.util.fire(n, "blur");
+ }catch(e){}
+ }
+ });
+ dgc.Cell.markupFactory = function(node, cellDef){
+ dgc._Base.markupFactory(node, cellDef);
+ var d = dojo;
+ var keyFilter = d.trim(d.attr(node, "keyFilter")||"");
+ if(keyFilter){
+ cellDef.keyFilter = new RegExp(keyFilter);
+ }
+ };
+
+ dojo.declare("dojox.grid.cells.RowIndex", dgc.Cell, {
+ name: 'Row',
+
+ postscript: function(){
+ this.editable = false;
+ },
+ get: function(inRowIndex){
+ return inRowIndex + 1;
+ }
+ });
+ dgc.RowIndex.markupFactory = function(node, cellDef){
+ dgc.Cell.markupFactory(node, cellDef);
+ };
+
+ dojo.declare("dojox.grid.cells.Select", dgc.Cell, {
+ // summary:
+ // grid cell that provides a standard select for editing
+
+ // options: Array
+ // text of each item
+ options: null,
+
+ // values: Array
+ // value for each item
+ values: null,
+
+ // returnIndex: Integer
+ // editor returns only the index of the selected option and not the value
+ returnIndex: -1,
+
+ constructor: function(inCell){
+ this.values = this.values || this.options;
+ },
+ formatEditing: function(inDatum, inRowIndex){
+ this.needFormatNode(inDatum, inRowIndex);
+ var h = [ '<select class="dojoxGridSelect">' ];
+ for (var i=0, o, v; ((o=this.options[i]) !== undefined)&&((v=this.values[i]) !== undefined); i++){
+ h.push("<option", (inDatum==v ? ' selected' : ''), ' value="' + v + '"', ">", o, "</option>");
+ }
+ h.push('</select>');
+ return h.join('');
+ },
+ getValue: function(inRowIndex){
+ var n = this.getEditNode(inRowIndex);
+ if(n){
+ var i = n.selectedIndex, o = n.options[i];
+ return this.returnIndex > -1 ? i : o.value || o.innerHTML;
+ }
+ }
+ });
+ dgc.Select.markupFactory = function(node, cell){
+ dgc.Cell.markupFactory(node, cell);
+ var d=dojo;
+ var options = d.trim(d.attr(node, "options")||"");
+ if(options){
+ var o = options.split(',');
+ if(o[0] != options){
+ cell.options = o;
+ }
+ }
+ var values = d.trim(d.attr(node, "values")||"");
+ if(values){
+ var v = values.split(',');
+ if(v[0] != values){
+ cell.values = v;
+ }
+ }
+ };
+
+ dojo.declare("dojox.grid.cells.AlwaysEdit", dgc.Cell, {
+ // summary:
+ // grid cell that is always in an editable state, regardless of grid editing state
+ alwaysEditing: true,
+ _formatNode: function(inDatum, inRowIndex){
+ this.formatNode(this.getEditNode(inRowIndex), inDatum, inRowIndex);
+ },
+ applyStaticValue: function(inRowIndex){
+ var e = this.grid.edit;
+ e.applyCellEdit(this.getValue(inRowIndex), this, inRowIndex);
+ e.start(this, inRowIndex, true);
+ }
+ });
+ dgc.AlwaysEdit.markupFactory = function(node, cell){
+ dgc.Cell.markupFactory(node, cell);
+ };
+
+ dojo.declare("dojox.grid.cells.Bool", dgc.AlwaysEdit, {
+ // summary:
+ // grid cell that provides a standard checkbox that is always on for editing
+ _valueProp: "checked",
+ formatEditing: function(inDatum, inRowIndex){
+ return '<input class="dojoxGridInput" type="checkbox"' + (inDatum ? ' checked="checked"' : '') + ' style="width: auto" />';
+ },
+ doclick: function(e){
+ if(e.target.tagName == 'INPUT'){
+ this.applyStaticValue(e.rowIndex);
+ }
+ }
+ });
+ dgc.Bool.markupFactory = function(node, cell){
+ dgc.AlwaysEdit.markupFactory(node, cell);
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.cells"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.cells"] = true;
+dojo.provide("dojox.grid.cells");
+
+
+}
+
+if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.common"] = true;
+dojo.provide("dojo.dnd.common");
+
+dojo.dnd.getCopyKeyState = dojo.isCopyKeyPressed;
+
+dojo.dnd._uniqueId = 0;
+dojo.dnd.getUniqueId = function(){
+ // summary:
+ // returns a unique string for use with any DOM element
+ var id;
+ do{
+ id = dojo._scopeName + "Unique" + (++dojo.dnd._uniqueId);
+ }while(dojo.byId(id));
+ return id;
+};
+
+dojo.dnd._empty = {};
+
+dojo.dnd.isFormElement = function(/*Event*/ e){
+ // summary:
+ // returns true if user clicked on a form element
+ var t = e.target;
+ if(t.nodeType == 3 /*TEXT_NODE*/){
+ t = t.parentNode;
+ }
+ return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0; // Boolean
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.autoscroll"] = true;
+dojo.provide("dojo.dnd.autoscroll");
+
+dojo.dnd.getViewport = function(){
+ // summary:
+ // Returns a viewport size (visible part of the window)
+
+ // TODO: remove this when getViewport() moved to dojo core, see #7028
+
+ // FIXME: need more docs!!
+ var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
+ if(dojo.isMozilla){
+ return {w: dd.clientWidth, h: w.innerHeight}; // Object
+ }else if(!dojo.isOpera && w.innerWidth){
+ return {w: w.innerWidth, h: w.innerHeight}; // Object
+ }else if (!dojo.isOpera && dd && dd.clientWidth){
+ return {w: dd.clientWidth, h: dd.clientHeight}; // Object
+ }else if (b.clientWidth){
+ return {w: b.clientWidth, h: b.clientHeight}; // Object
+ }
+ return null; // Object
+};
+
+dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
+dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
+
+dojo.dnd.V_AUTOSCROLL_VALUE = 16;
+dojo.dnd.H_AUTOSCROLL_VALUE = 16;
+
+dojo.dnd.autoScroll = function(e){
+ // summary:
+ // a handler for onmousemove event, which scrolls the window, if
+ // necesary
+ // e: Event
+ // onmousemove event
+
+ // FIXME: needs more docs!
+ var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
+ if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){
+ dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
+ }else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){
+ dx = dojo.dnd.H_AUTOSCROLL_VALUE;
+ }
+ if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){
+ dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
+ }else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){
+ dy = dojo.dnd.V_AUTOSCROLL_VALUE;
+ }
+ window.scrollBy(dx, dy);
+};
+
+dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1};
+dojo.dnd._validOverflow = {"auto": 1, "scroll": 1};
+
+dojo.dnd.autoScrollNodes = function(e){
+ // summary:
+ // a handler for onmousemove event, which scrolls the first avaialble
+ // Dom element, it falls back to dojo.dnd.autoScroll()
+ // e: Event
+ // onmousemove event
+
+ // FIXME: needs more docs!
+ for(var n = e.target; n;){
+ if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){
+ var s = dojo.getComputedStyle(n);
+ if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
+ var b = dojo._getContentBox(n, s), t = dojo.position(n, true);
+ //console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
+ var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2),
+ h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2),
+ rx = e.pageX - t.x, ry = e.pageY - t.y, dx = 0, dy = 0;
+ if(dojo.isWebKit || dojo.isOpera){
+ // FIXME: this code should not be here, it should be taken into account
+ // either by the event fixing code, or the dojo.position()
+ // FIXME: this code doesn't work on Opera 9.5 Beta
+ rx += dojo.body().scrollLeft, ry += dojo.body().scrollTop;
+ }
+ if(rx > 0 && rx < b.w){
+ if(rx < w){
+ dx = -w;
+ }else if(rx > b.w - w){
+ dx = w;
+ }
+ }
+ //console.log("ry =", ry, "b.h =", b.h, "h =", h);
+ if(ry > 0 && ry < b.h){
+ if(ry < h){
+ dy = -h;
+ }else if(ry > b.h - h){
+ dy = h;
+ }
+ }
+ var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
+ n.scrollLeft = n.scrollLeft + dx;
+ n.scrollTop = n.scrollTop + dy;
+ if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; }
+ }
+ }
+ try{
+ n = n.parentNode;
+ }catch(x){
+ n = null;
+ }
+ }
+ dojo.dnd.autoScroll(e);
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Mover"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Mover"] = true;
+dojo.provide("dojo.dnd.Mover");
+
+
+
+
+dojo.declare("dojo.dnd.Mover", null, {
+ constructor: function(node, e, host){
+ // summary:
+ // an object, which makes a node follow the mouse.
+ // Used as a default mover, and as a base class for custom movers.
+ // node: Node
+ // a node (or node's id) to be moved
+ // e: Event
+ // a mouse event, which started the move;
+ // only pageX and pageY properties are used
+ // host: Object?
+ // object which implements the functionality of the move,
+ // and defines proper events (onMoveStart and onMoveStop)
+ this.node = dojo.byId(node);
+ this.marginBox = {l: e.pageX, t: e.pageY};
+ this.mouseButton = e.button;
+ var h = this.host = host, d = node.ownerDocument,
+ firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
+ this.events = [
+ dojo.connect(d, "onmousemove", this, "onMouseMove"),
+ dojo.connect(d, "onmouseup", this, "onMouseUp"),
+ // cancel text selection and text dragging
+ dojo.connect(d, "ondragstart", dojo.stopEvent),
+ dojo.connect(d.body, "onselectstart", dojo.stopEvent),
+ firstEvent
+ ];
+ // notify that the move has started
+ if(h && h.onMoveStart){
+ h.onMoveStart(this);
+ }
+ },
+ // mouse event processors
+ onMouseMove: function(e){
+ // summary:
+ // event processor for onmousemove
+ // e: Event
+ // mouse event
+ dojo.dnd.autoScroll(e);
+ var m = this.marginBox;
+ this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY});
+ dojo.stopEvent(e);
+ },
+ onMouseUp: function(e){
+ if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ?
+ e.button == 0 : this.mouseButton == e.button){
+ this.destroy();
+ }
+ dojo.stopEvent(e);
+ },
+ // utilities
+ onFirstMove: function(){
+ // summary:
+ // makes the node absolute; it is meant to be called only once.
+ // relative and absolutely positioned nodes are assumed to use pixel units
+ var s = this.node.style, l, t, h = this.host;
+ switch(s.position){
+ case "relative":
+ case "absolute":
+ // assume that left and top values are in pixels already
+ l = Math.round(parseFloat(s.left));
+ t = Math.round(parseFloat(s.top));
+ break;
+ default:
+ s.position = "absolute"; // enforcing the absolute mode
+ var m = dojo.marginBox(this.node);
+ // event.pageX/pageY (which we used to generate the initial
+ // margin box) includes padding and margin set on the body.
+ // However, setting the node's position to absolute and then
+ // doing dojo.marginBox on it *doesn't* take that additional
+ // space into account - so we need to subtract the combined
+ // padding and margin. We use getComputedStyle and
+ // _getMarginBox/_getContentBox to avoid the extra lookup of
+ // the computed style.
+ var b = dojo.doc.body;
+ var bs = dojo.getComputedStyle(b);
+ var bm = dojo._getMarginBox(b, bs);
+ var bc = dojo._getContentBox(b, bs);
+ l = m.l - (bc.l - bm.l);
+ t = m.t - (bc.t - bm.t);
+ break;
+ }
+ this.marginBox.l = l - this.marginBox.l;
+ this.marginBox.t = t - this.marginBox.t;
+ if(h && h.onFirstMove){
+ h.onFirstMove(this);
+ }
+ dojo.disconnect(this.events.pop());
+ },
+ destroy: function(){
+ // summary:
+ // stops the move, deletes all references, so the object can be garbage-collected
+ dojo.forEach(this.events, dojo.disconnect);
+ // undo global settings
+ var h = this.host;
+ if(h && h.onMoveStop){
+ h.onMoveStop(this);
+ }
+ // destroy objects
+ this.events = this.node = this.host = null;
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Moveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Moveable"] = true;
+dojo.provide("dojo.dnd.Moveable");
+
+
+
+/*=====
+dojo.declare("dojo.dnd.__MoveableArgs", [], {
+ // handle: Node||String
+ // A node (or node's id), which is used as a mouse handle.
+ // If omitted, the node itself is used as a handle.
+ handle: null,
+
+ // delay: Number
+ // delay move by this number of pixels
+ delay: 0,
+
+ // skip: Boolean
+ // skip move of form elements
+ skip: false,
+
+ // mover: Object
+ // a constructor of custom Mover
+ mover: dojo.dnd.Mover
+});
+=====*/
+
+dojo.declare("dojo.dnd.Moveable", null, {
+ // object attributes (for markup)
+ handle: "",
+ delay: 0,
+ skip: false,
+
+ constructor: function(node, params){
+ // summary:
+ // an object, which makes a node moveable
+ // node: Node
+ // a node (or node's id) to be moved
+ // params: dojo.dnd.__MoveableArgs?
+ // optional parameters
+ this.node = dojo.byId(node);
+ if(!params){ params = {}; }
+ this.handle = params.handle ? dojo.byId(params.handle) : null;
+ if(!this.handle){ this.handle = this.node; }
+ this.delay = params.delay > 0 ? params.delay : 0;
+ this.skip = params.skip;
+ this.mover = params.mover ? params.mover : dojo.dnd.Mover;
+ this.events = [
+ dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
+ // cancel text selection and text dragging
+ dojo.connect(this.handle, "ondragstart", this, "onSelectStart"),
+ dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
+ ];
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ return new dojo.dnd.Moveable(node, params);
+ },
+
+ // methods
+ destroy: function(){
+ // summary:
+ // stops watching for possible move, deletes all references, so the object can be garbage-collected
+ dojo.forEach(this.events, dojo.disconnect);
+ this.events = this.node = this.handle = null;
+ },
+
+ // mouse event processors
+ onMouseDown: function(e){
+ // summary:
+ // event processor for onmousedown, creates a Mover for the node
+ // e: Event
+ // mouse event
+ if(this.skip && dojo.dnd.isFormElement(e)){ return; }
+ if(this.delay){
+ this.events.push(
+ dojo.connect(this.handle, "onmousemove", this, "onMouseMove"),
+ dojo.connect(this.handle, "onmouseup", this, "onMouseUp")
+ );
+ this._lastX = e.pageX;
+ this._lastY = e.pageY;
+ }else{
+ this.onDragDetected(e);
+ }
+ dojo.stopEvent(e);
+ },
+ onMouseMove: function(e){
+ // summary:
+ // event processor for onmousemove, used only for delayed drags
+ // e: Event
+ // mouse event
+ if(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){
+ this.onMouseUp(e);
+ this.onDragDetected(e);
+ }
+ dojo.stopEvent(e);
+ },
+ onMouseUp: function(e){
+ // summary:
+ // event processor for onmouseup, used only for delayed drags
+ // e: Event
+ // mouse event
+ for(var i = 0; i < 2; ++i){
+ dojo.disconnect(this.events.pop());
+ }
+ dojo.stopEvent(e);
+ },
+ onSelectStart: function(e){
+ // summary:
+ // event processor for onselectevent and ondragevent
+ // e: Event
+ // mouse event
+ if(!this.skip || !dojo.dnd.isFormElement(e)){
+ dojo.stopEvent(e);
+ }
+ },
+
+ // local events
+ onDragDetected: function(/* Event */ e){
+ // summary:
+ // called when the drag is detected;
+ // responsible for creation of the mover
+ new this.mover(this.node, e, this);
+ },
+ onMoveStart: function(/* dojo.dnd.Mover */ mover){
+ // summary:
+ // called before every move operation
+ dojo.publish("/dnd/move/start", [mover]);
+ dojo.addClass(dojo.body(), "dojoMove");
+ dojo.addClass(this.node, "dojoMoveItem");
+ },
+ onMoveStop: function(/* dojo.dnd.Mover */ mover){
+ // summary:
+ // called after every move operation
+ dojo.publish("/dnd/move/stop", [mover]);
+ dojo.removeClass(dojo.body(), "dojoMove");
+ dojo.removeClass(this.node, "dojoMoveItem");
+ },
+ onFirstMove: function(/* dojo.dnd.Mover */ mover){
+ // summary:
+ // called during the very first move notification;
+ // can be used to initialize coordinates, can be overwritten.
+
+ // default implementation does nothing
+ },
+ onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+ // summary:
+ // called during every move notification;
+ // should actually move the node; can be overwritten.
+ this.onMoving(mover, leftTop);
+ var s = mover.node.style;
+ s.left = leftTop.l + "px";
+ s.top = leftTop.t + "px";
+ this.onMoved(mover, leftTop);
+ },
+ onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+ // summary:
+ // called before every incremental move; can be overwritten.
+
+ // default implementation does nothing
+ },
+ onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+ // summary:
+ // called after every incremental move; can be overwritten.
+
+ // default implementation does nothing
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Builder"] = true;
+dojo.provide("dojox.grid._Builder");
+
+
+
+
+(function(){
+ var dg = dojox.grid;
+
+ var getTdIndex = function(td){
+ return td.cellIndex >=0 ? td.cellIndex : dojo.indexOf(td.parentNode.cells, td);
+ };
+
+ var getTrIndex = function(tr){
+ return tr.rowIndex >=0 ? tr.rowIndex : dojo.indexOf(tr.parentNode.childNodes, tr);
+ };
+
+ var getTr = function(rowOwner, index){
+ return rowOwner && ((rowOwner.rows||0)[index] || rowOwner.childNodes[index]);
+ };
+
+ var findTable = function(node){
+ for(var n=node; n && n.tagName!='TABLE'; n=n.parentNode){}
+ return n;
+ };
+
+ var ascendDom = function(inNode, inWhile){
+ for(var n=inNode; n && inWhile(n); n=n.parentNode){}
+ return n;
+ };
+
+ var makeNotTagName = function(inTagName){
+ var name = inTagName.toUpperCase();
+ return function(node){ return node.tagName != name; };
+ };
+
+ var rowIndexTag = dojox.grid.util.rowIndexTag;
+ var gridViewTag = dojox.grid.util.gridViewTag;
+
+ // base class for generating markup for the views
+ dg._Builder = dojo.extend(function(view){
+ if(view){
+ this.view = view;
+ this.grid = view.grid;
+ }
+ },{
+ view: null,
+ // boilerplate HTML
+ _table: '<table class="dojoxGridRowTable" border="0" cellspacing="0" cellpadding="0" role="presentation"',
+
+ // Returns the table variable as an array - and with the view width, if specified
+ getTableArray: function(){
+ var html = [this._table];
+ if(this.view.viewWidth){
+ html.push([' style="width:', this.view.viewWidth, ';"'].join(''));
+ }
+ html.push('>');
+ return html;
+ },
+
+ // generate starting tags for a cell
+ generateCellMarkup: function(inCell, inMoreStyles, inMoreClasses, isHeader){
+ var result = [], html;
+ if(isHeader){
+ var sortInfo = inCell.index != inCell.grid.getSortIndex() ? "" : inCell.grid.sortInfo > 0 ? 'aria-sort="ascending"' : 'aria-sort="descending"';
+ if (!inCell.id){
+ inCell.id = this.grid.id + "Hdr" + inCell.index;
+ }
+ // column headers are not editable, mark as aria-readonly=true
+ html = ['<th tabIndex="-1" aria-readonly="true" role="columnheader"', sortInfo, 'id="', inCell.id, '"'];
+ }else{
+ // cells inherit grid aria-readonly property; default value for aria-readonly is false(grid is editable)
+ // if grid is editable (had any editable cells), mark non editable cells as aria-readonly=true
+ // if no editable cells, grid's aria-readonly value will have been set to true and cells will inherit
+ var editInfo = this.grid.editable && !inCell.editable ? 'aria-readonly="true"' : "";
+ html = ['<td tabIndex="-1" role="gridcell"', editInfo];
+ }
+ if(inCell.colSpan){
+ html.push(' colspan="', inCell.colSpan, '"');
+ }
+ if(inCell.rowSpan){
+ html.push(' rowspan="', inCell.rowSpan, '"');
+ }
+ html.push(' class="dojoxGridCell ');
+ if(inCell.classes){
+ html.push(inCell.classes, ' ');
+ }
+ if(inMoreClasses){
+ html.push(inMoreClasses, ' ');
+ }
+ // result[0] => td opener, style
+ result.push(html.join(''));
+ // SLOT: result[1] => td classes
+ result.push('');
+ html = ['" idx="', inCell.index, '" style="'];
+ if(inMoreStyles && inMoreStyles[inMoreStyles.length-1] != ';'){
+ inMoreStyles += ';';
+ }
+ html.push(inCell.styles, inMoreStyles||'', inCell.hidden?'display:none;':'');
+ if(inCell.unitWidth){
+ html.push('width:', inCell.unitWidth, ';');
+ }
+ // result[2] => markup
+ result.push(html.join(''));
+ // SLOT: result[3] => td style
+ result.push('');
+ html = [ '"' ];
+ if(inCell.attrs){
+ html.push(" ", inCell.attrs);
+ }
+ html.push('>');
+ // result[4] => td postfix
+ result.push(html.join(''));
+ // SLOT: result[5] => content
+ result.push('');
+ // result[6] => td closes
+ result.push(isHeader?'</th>':'</td>');
+ return result; // Array
+ },
+
+ // cell finding
+ isCellNode: function(inNode){
+ return Boolean(inNode && inNode!=dojo.doc && dojo.attr(inNode, "idx"));
+ },
+
+ getCellNodeIndex: function(inCellNode){
+ return inCellNode ? Number(dojo.attr(inCellNode, "idx")) : -1;
+ },
+
+ getCellNode: function(inRowNode, inCellIndex){
+ for(var i=0, row; (row=getTr(inRowNode.firstChild, i)); i++){
+ for(var j=0, cell; (cell=row.cells[j]); j++){
+ if(this.getCellNodeIndex(cell) == inCellIndex){
+ return cell;
+ }
+ }
+ }
+ return null;
+ },
+
+ findCellTarget: function(inSourceNode, inTopNode){
+ var n = inSourceNode;
+ while(n && (!this.isCellNode(n) || (n.offsetParent && gridViewTag in n.offsetParent.parentNode && n.offsetParent.parentNode[gridViewTag] != this.view.id)) && (n!=inTopNode)){
+ n = n.parentNode;
+ }
+ return n!=inTopNode ? n : null;
+ },
+
+ // event decoration
+ baseDecorateEvent: function(e){
+ e.dispatch = 'do' + e.type;
+ e.grid = this.grid;
+ e.sourceView = this.view;
+ e.cellNode = this.findCellTarget(e.target, e.rowNode);
+ e.cellIndex = this.getCellNodeIndex(e.cellNode);
+ e.cell = (e.cellIndex >= 0 ? this.grid.getCell(e.cellIndex) : null);
+ },
+
+ // event dispatch
+ findTarget: function(inSource, inTag){
+ var n = inSource;
+ while(n && (n!=this.domNode) && (!(inTag in n) || (gridViewTag in n && n[gridViewTag] != this.view.id))){
+ n = n.parentNode;
+ }
+ return (n != this.domNode) ? n : null;
+ },
+
+ findRowTarget: function(inSource){
+ return this.findTarget(inSource, rowIndexTag);
+ },
+
+ isIntraNodeEvent: function(e){
+ try{
+ return (e.cellNode && e.relatedTarget && dojo.isDescendant(e.relatedTarget, e.cellNode));
+ }catch(x){
+ // e.relatedTarget has permission problem in FF if it's an input: https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+ return false;
+ }
+ },
+
+ isIntraRowEvent: function(e){
+ try{
+ var row = e.relatedTarget && this.findRowTarget(e.relatedTarget);
+ return !row && (e.rowIndex==-1) || row && (e.rowIndex==row.gridRowIndex);
+ }catch(x){
+ // e.relatedTarget on INPUT has permission problem in FF: https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+ return false;
+ }
+ },
+
+ dispatchEvent: function(e){
+ if(e.dispatch in this){
+ return this[e.dispatch](e);
+ }
+ return false;
+ },
+
+ // dispatched event handlers
+ domouseover: function(e){
+ if(e.cellNode && (e.cellNode!=this.lastOverCellNode)){
+ this.lastOverCellNode = e.cellNode;
+ this.grid.onMouseOver(e);
+ }
+ this.grid.onMouseOverRow(e);
+ },
+
+ domouseout: function(e){
+ if(e.cellNode && (e.cellNode==this.lastOverCellNode) && !this.isIntraNodeEvent(e, this.lastOverCellNode)){
+ this.lastOverCellNode = null;
+ this.grid.onMouseOut(e);
+ if(!this.isIntraRowEvent(e)){
+ this.grid.onMouseOutRow(e);
+ }
+ }
+ },
+
+ domousedown: function(e){
+ if (e.cellNode)
+ this.grid.onMouseDown(e);
+ this.grid.onMouseDownRow(e);
+ }
+ });
+
+ // Produces html for grid data content. Owned by grid and used internally
+ // for rendering data. Override to implement custom rendering.
+ dg._ContentBuilder = dojo.extend(function(view){
+ dg._Builder.call(this, view);
+ },dg._Builder.prototype,{
+ update: function(){
+ this.prepareHtml();
+ },
+
+ // cache html for rendering data rows
+ prepareHtml: function(){
+ var defaultGet=this.grid.get, cells=this.view.structure.cells;
+ for(var j=0, row; (row=cells[j]); j++){
+ for(var i=0, cell; (cell=row[i]); i++){
+ cell.get = cell.get || (cell.value == undefined) && defaultGet;
+ cell.markup = this.generateCellMarkup(cell, cell.cellStyles, cell.cellClasses, false);
+ if (!this.grid.editable && cell.editable){
+ this.grid.editable = true;
+ }
+ }
+ }
+ },
+
+ // time critical: generate html using cache and data source
+ generateHtml: function(inDataIndex, inRowIndex){
+ var
+ html = this.getTableArray(),
+ v = this.view,
+ cells = v.structure.cells,
+ item = this.grid.getItem(inRowIndex);
+
+ dojox.grid.util.fire(this.view, "onBeforeRow", [inRowIndex, cells]);
+ for(var j=0, row; (row=cells[j]); j++){
+ if(row.hidden || row.header){
+ continue;
+ }
+ html.push(!row.invisible ? '<tr>' : '<tr class="dojoxGridInvisible">');
+ for(var i=0, cell, m, cc, cs; (cell=row[i]); i++){
+ m = cell.markup; cc = cell.customClasses = []; cs = cell.customStyles = [];
+ // content (format can fill in cc and cs as side-effects)
+ m[5] = cell.format(inRowIndex, item);
+ // classes
+ m[1] = cc.join(' ');
+ // styles
+ m[3] = cs.join(';');
+ // in-place concat
+ html.push.apply(html, m);
+ }
+ html.push('</tr>');
+ }
+ html.push('</table>');
+ return html.join(''); // String
+ },
+
+ decorateEvent: function(e){
+ e.rowNode = this.findRowTarget(e.target);
+ if(!e.rowNode){return false;}
+ e.rowIndex = e.rowNode[rowIndexTag];
+ this.baseDecorateEvent(e);
+ e.cell = this.grid.getCell(e.cellIndex);
+ return true; // Boolean
+ }
+ });
+
+ // Produces html for grid header content. Owned by grid and used internally
+ // for rendering data. Override to implement custom rendering.
+ dg._HeaderBuilder = dojo.extend(function(view){
+ this.moveable = null;
+ dg._Builder.call(this, view);
+ },dg._Builder.prototype,{
+ _skipBogusClicks: false,
+ overResizeWidth: 4,
+ minColWidth: 1,
+
+ update: function(){
+ if(this.tableMap){
+ this.tableMap.mapRows(this.view.structure.cells);
+ }else{
+ this.tableMap = new dg._TableMap(this.view.structure.cells);
+ }
+ },
+
+ generateHtml: function(inGetValue, inValue){
+ var html = this.getTableArray(), cells = this.view.structure.cells;
+
+ dojox.grid.util.fire(this.view, "onBeforeRow", [-1, cells]);
+ for(var j=0, row; (row=cells[j]); j++){
+ if(row.hidden){
+ continue;
+ }
+ html.push(!row.invisible ? '<tr>' : '<tr class="dojoxGridInvisible">');
+ for(var i=0, cell, markup; (cell=row[i]); i++){
+ cell.customClasses = [];
+ cell.customStyles = [];
+ if(this.view.simpleStructure){
+ if(cell.draggable){
+ if(cell.headerClasses){
+ if(cell.headerClasses.indexOf('dojoDndItem') == -1){
+ cell.headerClasses += ' dojoDndItem';
+ }
+ }else{
+ cell.headerClasses = 'dojoDndItem';
+ }
+ }
+ if(cell.attrs){
+ if(cell.attrs.indexOf("dndType='gridColumn_") == -1){
+ cell.attrs += " dndType='gridColumn_" + this.grid.id + "'";
+ }
+ }else{
+ cell.attrs = "dndType='gridColumn_" + this.grid.id + "'";
+ }
+ }
+ markup = this.generateCellMarkup(cell, cell.headerStyles, cell.headerClasses, true);
+ // content
+ markup[5] = (inValue != undefined ? inValue : inGetValue(cell));
+ // styles
+ markup[3] = cell.customStyles.join(';');
+ // classes
+ markup[1] = cell.customClasses.join(' '); //(cell.customClasses ? ' ' + cell.customClasses : '');
+ html.push(markup.join(''));
+ }
+ html.push('</tr>');
+ }
+ html.push('</table>');
+ return html.join('');
+ },
+
+ // event helpers
+ getCellX: function(e){
+ var n, x = e.layerX;
+ if(dojo.isMoz){
+ n = ascendDom(e.target, makeNotTagName("th"));
+ x -= (n && n.offsetLeft) || 0;
+ var t = e.sourceView.getScrollbarWidth();
+ if(!dojo._isBodyLtr() && e.sourceView.headerNode.scrollLeft < t)
+ x -= t;
+ //x -= getProp(ascendDom(e.target, mkNotTagName("td")), "offsetLeft") || 0;
+ }
+ n = ascendDom(e.target, function(){
+ if(!n || n == e.cellNode){
+ return false;
+ }
+ // Mozilla 1.8 (FF 1.5) has a bug that makes offsetLeft = -parent border width
+ // when parent has border, overflow: hidden, and is positioned
+ // handle this problem here ... not a general solution!
+ x += (n.offsetLeft < 0 ? 0 : n.offsetLeft);
+ return true;
+ });
+ return x;
+ },
+
+ // event decoration
+ decorateEvent: function(e){
+ this.baseDecorateEvent(e);
+ e.rowIndex = -1;
+ e.cellX = this.getCellX(e);
+ return true;
+ },
+
+ // event handlers
+ // resizing
+ prepareResize: function(e, mod){
+ do{
+ var i = getTdIndex(e.cellNode);
+ e.cellNode = (i ? e.cellNode.parentNode.cells[i+mod] : null);
+ e.cellIndex = (e.cellNode ? this.getCellNodeIndex(e.cellNode) : -1);
+ }while(e.cellNode && e.cellNode.style.display == "none");
+ return Boolean(e.cellNode);
+ },
+
+ canResize: function(e){
+ if(!e.cellNode || e.cellNode.colSpan > 1){
+ return false;
+ }
+ var cell = this.grid.getCell(e.cellIndex);
+ return !cell.noresize && cell.canResize();
+ },
+
+ overLeftResizeArea: function(e){
+ // We are never over a resize area if we are in the process of moving
+ if(dojo.hasClass(dojo.body(), "dojoDndMove")){
+ return false;
+ }
+ //Bugfix for crazy IE problem (#8807). IE returns position information for the icon and text arrow divs
+ //as if they were still on the left instead of returning the position they were 'float: right' to.
+ //So, the resize check ends up checking the wrong adjacent cell. This checks to see if the hover was over
+ //the image or text nodes, then just ignored them/treat them not in scale range.
+ if(dojo.isIE){
+ var tN = e.target;
+ if(dojo.hasClass(tN, "dojoxGridArrowButtonNode") ||
+ dojo.hasClass(tN, "dojoxGridArrowButtonChar")){
+ return false;
+ }
+ }
+
+ if(dojo._isBodyLtr()){
+ return (e.cellIndex>0) && (e.cellX < this.overResizeWidth) && this.prepareResize(e, -1);
+ }
+ var t = e.cellNode && (e.cellX < this.overResizeWidth);
+ return t;
+ },
+
+ overRightResizeArea: function(e){
+ // We are never over a resize area if we are in the process of moving
+ if(dojo.hasClass(dojo.body(), "dojoDndMove")){
+ return false;
+ }
+ //Bugfix for crazy IE problem (#8807). IE returns position information for the icon and text arrow divs
+ //as if they were still on the left instead of returning the position they were 'float: right' to.
+ //So, the resize check ends up checking the wrong adjacent cell. This checks to see if the hover was over
+ //the image or text nodes, then just ignored them/treat them not in scale range.
+ if(dojo.isIE){
+ var tN = e.target;
+ if(dojo.hasClass(tN, "dojoxGridArrowButtonNode") ||
+ dojo.hasClass(tN, "dojoxGridArrowButtonChar")){
+ return false;
+ }
+ }
+
+ if(dojo._isBodyLtr()){
+ return e.cellNode && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth);
+ }
+ return (e.cellIndex>0) && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth) && this.prepareResize(e, -1);
+ },
+
+ domousemove: function(e){
+ //console.log(e.cellIndex, e.cellX, e.cellNode.offsetWidth);
+ if(!this.moveable){
+ var c = (this.overRightResizeArea(e) ? 'dojoxGridColResize' : (this.overLeftResizeArea(e) ? 'dojoxGridColResize' : ''));
+ if(c && !this.canResize(e)){
+ c = 'dojoxGridColNoResize';
+ }
+ dojo.toggleClass(e.sourceView.headerNode, "dojoxGridColNoResize", (c == "dojoxGridColNoResize"));
+ dojo.toggleClass(e.sourceView.headerNode, "dojoxGridColResize", (c == "dojoxGridColResize"));
+ if(dojo.isIE){
+ var t = e.sourceView.headerNode.scrollLeft;
+ e.sourceView.headerNode.scrollLeft = t;
+ }
+ if(c){
+ dojo.stopEvent(e);
+ }
+ }
+ },
+
+ domousedown: function(e){
+ if(!this.moveable){
+ if((this.overRightResizeArea(e) || this.overLeftResizeArea(e)) && this.canResize(e)){
+ this.beginColumnResize(e);
+ }else{
+ this.grid.onMouseDown(e);
+ this.grid.onMouseOverRow(e);
+ }
+ //else{
+ // this.beginMoveColumn(e);
+ //}
+ }
+ },
+
+ doclick: function(e) {
+ if(this._skipBogusClicks){
+ dojo.stopEvent(e);
+ return true;
+ }
+ return false;
+ },
+
+ // column resizing
+ colResizeSetup: function(/*Event Object*/e, /*boolean*/ isMouse ){
+ //Set up the drag object for column resizing
+ // Called with mouse event in case of drag and drop,
+ // Also called from keyboard shift-arrow event when focus is on a header
+ var headContentBox = dojo.contentBox(e.sourceView.headerNode);
+
+ if(isMouse){ //IE draws line even with no mouse down so separate from keyboard
+ this.lineDiv = document.createElement('div');
+
+ // NOTE: this is for backwards compatibility with Dojo 1.3
+ var vw = (dojo.position||dojo._abs)(e.sourceView.headerNode, true);
+ var bodyContentBox = dojo.contentBox(e.sourceView.domNode);
+ dojo.style(this.lineDiv, {
+ top: vw.y + "px",
+ left: e.clientX + "px",
+ height: (bodyContentBox.h + headContentBox.h) + "px"
+ });
+ dojo.addClass(this.lineDiv, "dojoxGridResizeColLine");
+ this.lineDiv._origLeft = e.clientX;
+ dojo.body().appendChild(this.lineDiv);
+ }
+ var spanners = [], nodes = this.tableMap.findOverlappingNodes(e.cellNode);
+ for(var i=0, cell; (cell=nodes[i]); i++){
+ spanners.push({ node: cell, index: this.getCellNodeIndex(cell), width: cell.offsetWidth });
+ //console.log("spanner: " + this.getCellNodeIndex(cell));
+ }
+
+ var view = e.sourceView;
+ var adj = dojo._isBodyLtr() ? 1 : -1;
+ var views = e.grid.views.views;
+ var followers = [];
+ for(var j=view.idx+adj, cView; (cView=views[j]); j=j+adj){
+ followers.push({ node: cView.headerNode, left: window.parseInt(cView.headerNode.style.left) });
+ }
+ var table = view.headerContentNode.firstChild;
+ var drag = {
+ scrollLeft: e.sourceView.headerNode.scrollLeft,
+ view: view,
+ node: e.cellNode,
+ index: e.cellIndex,
+ w: dojo.contentBox(e.cellNode).w,
+ vw: headContentBox.w,
+ table: table,
+ tw: dojo.contentBox(table).w,
+ spanners: spanners,
+ followers: followers
+ };
+ return drag;
+ },
+ beginColumnResize: function(e){
+ this.moverDiv = document.createElement("div");
+ dojo.style(this.moverDiv,{position: "absolute", left:0}); // to make DnD work with dir=rtl
+ dojo.body().appendChild(this.moverDiv);
+ dojo.addClass(this.grid.domNode, "dojoxGridColumnResizing");
+ var m = (this.moveable = new dojo.dnd.Moveable(this.moverDiv));
+
+ var drag = this.colResizeSetup(e,true);
+
+ m.onMove = dojo.hitch(this, "doResizeColumn", drag);
+
+ dojo.connect(m, "onMoveStop", dojo.hitch(this, function(){
+ this.endResizeColumn(drag);
+ if(drag.node.releaseCapture){
+ drag.node.releaseCapture();
+ }
+ this.moveable.destroy();
+ delete this.moveable;
+ this.moveable = null;
+ dojo.removeClass(this.grid.domNode, "dojoxGridColumnResizing");
+ }));
+
+ if(e.cellNode.setCapture){
+ e.cellNode.setCapture();
+ }
+ m.onMouseDown(e);
+ },
+
+ doResizeColumn: function(inDrag, mover, leftTop){
+ var changeX = leftTop.l;
+ var data = {
+ deltaX: changeX,
+ w: inDrag.w + changeX,
+ vw: inDrag.vw + changeX,
+ tw: inDrag.tw + changeX
+ };
+
+ this.dragRecord = {inDrag: inDrag, mover: mover, leftTop:leftTop};
+
+ if(data.w >= this.minColWidth){
+ if (!mover) { // we are using keyboard do immediate resize
+ this.doResizeNow(inDrag, data);
+ }
+ else{
+ dojo.style(this.lineDiv, "left", (this.lineDiv._origLeft + data.deltaX) + "px");
+ }
+ }
+ },
+
+ endResizeColumn: function(inDrag){
+ if(this.dragRecord){
+ var leftTop = this.dragRecord.leftTop;
+ var changeX = dojo._isBodyLtr() ? leftTop.l : -leftTop.l;
+ // Make sure we are not under our minimum
+ // http://bugs.dojotoolkit.org/ticket/9390
+ changeX += Math.max(inDrag.w + changeX, this.minColWidth) - (inDrag.w + changeX);
+ if(dojo.isWebKit && inDrag.spanners.length){
+ // Webkit needs the pad border extents back in
+ changeX += dojo._getPadBorderExtents(inDrag.spanners[0].node).w;
+ }
+ var data = {
+ deltaX: changeX,
+ w: inDrag.w + changeX,
+ vw: inDrag.vw + changeX,
+ tw: inDrag.tw + changeX
+ };
+ // Only resize the columns when the drag has finished
+ this.doResizeNow(inDrag, data);
+ }
+
+ dojo.destroy(this.lineDiv);
+ dojo.destroy(this.moverDiv);
+ dojo.destroy(this.moverDiv);
+ delete this.moverDiv;
+ this._skipBogusClicks = true;
+ inDrag.view.update();
+ this._skipBogusClicks = false;
+ this.grid.onResizeColumn(inDrag.index);
+ },
+ doResizeNow: function(inDrag, data){
+ inDrag.view.convertColPctToFixed();
+ if(inDrag.view.flexCells && !inDrag.view.testFlexCells()){
+ var t = findTable(inDrag.node);
+ if(t){
+ (t.style.width = '');
+ }
+ }
+ var i, s, sw, f, fl;
+ for(i=0; (s=inDrag.spanners[i]); i++){
+ sw = s.width + data.deltaX;
+ s.node.style.width = sw + 'px';
+ inDrag.view.setColWidth(s.index, sw);
+ }
+ for(i=0; (f=inDrag.followers[i]); i++){
+ fl = f.left + data.deltaX;
+ f.node.style.left = fl + 'px';
+ }
+ inDrag.node.style.width = data.w + 'px';
+ inDrag.view.setColWidth(inDrag.index, data.w);
+ inDrag.view.headerNode.style.width = data.vw + 'px';
+ inDrag.view.setColumnsWidth(data.tw);
+ if(!dojo._isBodyLtr()){
+ inDrag.view.headerNode.scrollLeft = inDrag.scrollLeft + data.deltaX;
+ }
+ }
+ });
+
+ // Maps an html table into a structure parsable for information about cell row and col spanning.
+ // Used by HeaderBuilder.
+ dg._TableMap = dojo.extend(function(rows){
+ this.mapRows(rows);
+ },{
+ map: null,
+
+ mapRows: function(inRows){
+ // summary: Map table topography
+
+ //console.log('mapRows');
+ // # of rows
+ var rowCount = inRows.length;
+ if(!rowCount){
+ return;
+ }
+ // map which columns and rows fill which cells
+ this.map = [];
+ var row;
+ for(var k=0; (row=inRows[k]); k++){
+ this.map[k] = [];
+ }
+ for(var j=0; (row=inRows[j]); j++){
+ for(var i=0, x=0, cell, colSpan, rowSpan; (cell=row[i]); i++){
+ while(this.map[j][x]){x++;}
+ this.map[j][x] = { c: i, r: j };
+ rowSpan = cell.rowSpan || 1;
+ colSpan = cell.colSpan || 1;
+ for(var y=0; y<rowSpan; y++){
+ for(var s=0; s<colSpan; s++){
+ this.map[j+y][x+s] = this.map[j][x];
+ }
+ }
+ x += colSpan;
+ }
+ }
+ //this.dumMap();
+ },
+
+ dumpMap: function(){
+ for(var j=0, row, h=''; (row=this.map[j]); j++,h=''){
+ for(var i=0, cell; (cell=row[i]); i++){
+ h += cell.r + ',' + cell.c + ' ';
+ }
+ }
+ },
+
+ getMapCoords: function(inRow, inCol){
+ // summary: Find node's map coords by it's structure coords
+ for(var j=0, row; (row=this.map[j]); j++){
+ for(var i=0, cell; (cell=row[i]); i++){
+ if(cell.c==inCol && cell.r == inRow){
+ return { j: j, i: i };
+ }
+ //else{console.log(inRow, inCol, ' : ', i, j, " : ", cell.r, cell.c); };
+ }
+ }
+ return { j: -1, i: -1 };
+ },
+
+ getNode: function(inTable, inRow, inCol){
+ // summary: Find a node in inNode's table with the given structure coords
+ var row = inTable && inTable.rows[inRow];
+ return row && row.cells[inCol];
+ },
+
+ _findOverlappingNodes: function(inTable, inRow, inCol){
+ var nodes = [];
+ var m = this.getMapCoords(inRow, inCol);
+ //console.log("node j: %d, i: %d", m.j, m.i);
+ for(var j=0, row; (row=this.map[j]); j++){
+ if(j == m.j){ continue; }
+ var rw = row[m.i];
+ //console.log("overlaps: r: %d, c: %d", rw.r, rw.c);
+ var n = (rw?this.getNode(inTable, rw.r, rw.c):null);
+ if(n){ nodes.push(n); }
+ }
+ //console.log(nodes);
+ return nodes;
+ },
+
+ findOverlappingNodes: function(inNode){
+ return this._findOverlappingNodes(findTable(inNode), getTrIndex(inNode.parentNode), getTdIndex(inNode));
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Container"] = true;
+dojo.provide("dojo.dnd.Container");
+
+
+
+
+/*
+ Container states:
+ "" - normal state
+ "Over" - mouse over a container
+ Container item states:
+ "" - normal state
+ "Over" - mouse over a container item
+*/
+
+/*=====
+dojo.declare("dojo.dnd.__ContainerArgs", [], {
+ creator: function(){
+ // summary:
+ // a creator function, which takes a data item, and returns an object like that:
+ // {node: newNode, data: usedData, type: arrayOfStrings}
+ },
+
+ // skipForm: Boolean
+ // don't start the drag operation, if clicked on form elements
+ skipForm: false,
+
+ // dropParent: Node||String
+ // node or node's id to use as the parent node for dropped items
+ // (must be underneath the 'node' parameter in the DOM)
+ dropParent: null,
+
+ // _skipStartup: Boolean
+ // skip startup(), which collects children, for deferred initialization
+ // (this is used in the markup mode)
+ _skipStartup: false
+});
+
+dojo.dnd.Item = function(){
+ // summary:
+ // Represents (one of) the source node(s) being dragged.
+ // Contains (at least) the "type" and "data" attributes.
+ // type: String[]
+ // Type(s) of this item, by default this is ["text"]
+ // data: Object
+ // Logical representation of the object being dragged.
+ // If the drag object's type is "text" then data is a String,
+ // if it's another type then data could be a different Object,
+ // perhaps a name/value hash.
+
+ this.type = type;
+ this.data = data;
+}
+=====*/
+
+dojo.declare("dojo.dnd.Container", null, {
+ // summary:
+ // a Container object, which knows when mouse hovers over it,
+ // and over which element it hovers
+
+ // object attributes (for markup)
+ skipForm: false,
+
+ /*=====
+ // current: DomNode
+ // The DOM node the mouse is currently hovered over
+ current: null,
+
+ // map: Hash<String, dojo.dnd.Item>
+ // Map from an item's id (which is also the DOMNode's id) to
+ // the dojo.dnd.Item itself.
+ map: {},
+ =====*/
+
+ constructor: function(node, params){
+ // summary:
+ // a constructor of the Container
+ // node: Node
+ // node or node's id to build the container on
+ // params: dojo.dnd.__ContainerArgs
+ // a dictionary of parameters
+ this.node = dojo.byId(node);
+ if(!params){ params = {}; }
+ this.creator = params.creator || null;
+ this.skipForm = params.skipForm;
+ this.parent = params.dropParent && dojo.byId(params.dropParent);
+
+ // class-specific variables
+ this.map = {};
+ this.current = null;
+
+ // states
+ this.containerState = "";
+ dojo.addClass(this.node, "dojoDndContainer");
+
+ // mark up children
+ if(!(params && params._skipStartup)){
+ this.startup();
+ }
+
+ // set up events
+ this.events = [
+ dojo.connect(this.node, "onmouseover", this, "onMouseOver"),
+ dojo.connect(this.node, "onmouseout", this, "onMouseOut"),
+ // cancel text selection and text dragging
+ dojo.connect(this.node, "ondragstart", this, "onSelectStart"),
+ dojo.connect(this.node, "onselectstart", this, "onSelectStart")
+ ];
+ },
+
+ // object attributes (for markup)
+ creator: function(){
+ // summary:
+ // creator function, dummy at the moment
+ },
+
+ // abstract access to the map
+ getItem: function(/*String*/ key){
+ // summary:
+ // returns a data item by its key (id)
+ return this.map[key]; // dojo.dnd.Item
+ },
+ setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){
+ // summary:
+ // associates a data item with its key (id)
+ this.map[key] = data;
+ },
+ delItem: function(/*String*/ key){
+ // summary:
+ // removes a data item from the map by its key (id)
+ delete this.map[key];
+ },
+ forInItems: function(/*Function*/ f, /*Object?*/ o){
+ // summary:
+ // iterates over a data map skipping members that
+ // are present in the empty object (IE and/or 3rd-party libraries).
+ o = o || dojo.global;
+ var m = this.map, e = dojo.dnd._empty;
+ for(var i in m){
+ if(i in e){ continue; }
+ f.call(o, m[i], i, this);
+ }
+ return o; // Object
+ },
+ clearItems: function(){
+ // summary:
+ // removes all data items from the map
+ this.map = {};
+ },
+
+ // methods
+ getAllNodes: function(){
+ // summary:
+ // returns a list (an array) of all valid child nodes
+ return dojo.query("> .dojoDndItem", this.parent); // NodeList
+ },
+ sync: function(){
+ // summary:
+ // sync up the node list with the data map
+ var map = {};
+ this.getAllNodes().forEach(function(node){
+ if(node.id){
+ var item = this.getItem(node.id);
+ if(item){
+ map[node.id] = item;
+ return;
+ }
+ }else{
+ node.id = dojo.dnd.getUniqueId();
+ }
+ var type = node.getAttribute("dndType"),
+ data = node.getAttribute("dndData");
+ map[node.id] = {
+ data: data || node.innerHTML,
+ type: type ? type.split(/\s*,\s*/) : ["text"]
+ };
+ }, this);
+ this.map = map;
+ return this; // self
+ },
+ insertNodes: function(data, before, anchor){
+ // summary:
+ // inserts an array of new nodes before/after an anchor node
+ // data: Array
+ // a list of data items, which should be processed by the creator function
+ // before: Boolean
+ // insert before the anchor, if true, and after the anchor otherwise
+ // anchor: Node
+ // the anchor node to be used as a point of insertion
+ if(!this.parent.firstChild){
+ anchor = null;
+ }else if(before){
+ if(!anchor){
+ anchor = this.parent.firstChild;
+ }
+ }else{
+ if(anchor){
+ anchor = anchor.nextSibling;
+ }
+ }
+ if(anchor){
+ for(var i = 0; i < data.length; ++i){
+ var t = this._normalizedCreator(data[i]);
+ this.setItem(t.node.id, {data: t.data, type: t.type});
+ this.parent.insertBefore(t.node, anchor);
+ }
+ }else{
+ for(var i = 0; i < data.length; ++i){
+ var t = this._normalizedCreator(data[i]);
+ this.setItem(t.node.id, {data: t.data, type: t.type});
+ this.parent.appendChild(t.node);
+ }
+ }
+ return this; // self
+ },
+ destroy: function(){
+ // summary:
+ // prepares this object to be garbage-collected
+ dojo.forEach(this.events, dojo.disconnect);
+ this.clearItems();
+ this.node = this.parent = this.current = null;
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ params._skipStartup = true;
+ return new dojo.dnd.Container(node, params);
+ },
+ startup: function(){
+ // summary:
+ // collects valid child items and populate the map
+
+ // set up the real parent node
+ if(!this.parent){
+ // use the standard algorithm, if not assigned
+ this.parent = this.node;
+ if(this.parent.tagName.toLowerCase() == "table"){
+ var c = this.parent.getElementsByTagName("tbody");
+ if(c && c.length){ this.parent = c[0]; }
+ }
+ }
+ this.defaultCreator = dojo.dnd._defaultCreator(this.parent);
+
+ // process specially marked children
+ this.sync();
+ },
+
+ // mouse events
+ onMouseOver: function(e){
+ // summary:
+ // event processor for onmouseover
+ // e: Event
+ // mouse event
+ var n = e.relatedTarget;
+ while(n){
+ if(n == this.node){ break; }
+ try{
+ n = n.parentNode;
+ }catch(x){
+ n = null;
+ }
+ }
+ if(!n){
+ this._changeState("Container", "Over");
+ this.onOverEvent();
+ }
+ n = this._getChildByEvent(e);
+ if(this.current == n){ return; }
+ if(this.current){ this._removeItemClass(this.current, "Over"); }
+ if(n){ this._addItemClass(n, "Over"); }
+ this.current = n;
+ },
+ onMouseOut: function(e){
+ // summary:
+ // event processor for onmouseout
+ // e: Event
+ // mouse event
+ for(var n = e.relatedTarget; n;){
+ if(n == this.node){ return; }
+ try{
+ n = n.parentNode;
+ }catch(x){
+ n = null;
+ }
+ }
+ if(this.current){
+ this._removeItemClass(this.current, "Over");
+ this.current = null;
+ }
+ this._changeState("Container", "");
+ this.onOutEvent();
+ },
+ onSelectStart: function(e){
+ // summary:
+ // event processor for onselectevent and ondragevent
+ // e: Event
+ // mouse event
+ if(!this.skipForm || !dojo.dnd.isFormElement(e)){
+ dojo.stopEvent(e);
+ }
+ },
+
+ // utilities
+ onOverEvent: function(){
+ // summary:
+ // this function is called once, when mouse is over our container
+ },
+ onOutEvent: function(){
+ // summary:
+ // this function is called once, when mouse is out of our container
+ },
+ _changeState: function(type, newState){
+ // summary:
+ // changes a named state to new state value
+ // type: String
+ // a name of the state to change
+ // newState: String
+ // new state
+ var prefix = "dojoDnd" + type;
+ var state = type.toLowerCase() + "State";
+ //dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
+ dojo.removeClass(this.node, prefix + this[state]);
+ dojo.addClass(this.node, prefix + newState);
+ this[state] = newState;
+ },
+ _addItemClass: function(node, type){
+ // summary:
+ // adds a class with prefix "dojoDndItem"
+ // node: Node
+ // a node
+ // type: String
+ // a variable suffix for a class name
+ dojo.addClass(node, "dojoDndItem" + type);
+ },
+ _removeItemClass: function(node, type){
+ // summary:
+ // removes a class with prefix "dojoDndItem"
+ // node: Node
+ // a node
+ // type: String
+ // a variable suffix for a class name
+ dojo.removeClass(node, "dojoDndItem" + type);
+ },
+ _getChildByEvent: function(e){
+ // summary:
+ // gets a child, which is under the mouse at the moment, or null
+ // e: Event
+ // a mouse event
+ var node = e.target;
+ if(node){
+ for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){
+ if(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; }
+ }
+ }
+ return null;
+ },
+ _normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){
+ // summary:
+ // adds all necessary data to the output of the user-supplied creator function
+ var t = (this.creator || this.defaultCreator).call(this, item, hint);
+ if(!dojo.isArray(t.type)){ t.type = ["text"]; }
+ if(!t.node.id){ t.node.id = dojo.dnd.getUniqueId(); }
+ dojo.addClass(t.node, "dojoDndItem");
+ return t;
+ }
+});
+
+dojo.dnd._createNode = function(tag){
+ // summary:
+ // returns a function, which creates an element of given tag
+ // (SPAN by default) and sets its innerHTML to given text
+ // tag: String
+ // a tag name or empty for SPAN
+ if(!tag){ return dojo.dnd._createSpan; }
+ return function(text){ // Function
+ return dojo.create(tag, {innerHTML: text}); // Node
+ };
+};
+
+dojo.dnd._createTrTd = function(text){
+ // summary:
+ // creates a TR/TD structure with given text as an innerHTML of TD
+ // text: String
+ // a text for TD
+ var tr = dojo.create("tr");
+ dojo.create("td", {innerHTML: text}, tr);
+ return tr; // Node
+};
+
+dojo.dnd._createSpan = function(text){
+ // summary:
+ // creates a SPAN element with given text as its innerHTML
+ // text: String
+ // a text for SPAN
+ return dojo.create("span", {innerHTML: text}); // Node
+};
+
+// dojo.dnd._defaultCreatorNodes: Object
+// a dictionary that maps container tag names to child tag names
+dojo.dnd._defaultCreatorNodes = {ul: "li", ol: "li", div: "div", p: "div"};
+
+dojo.dnd._defaultCreator = function(node){
+ // summary:
+ // takes a parent node, and returns an appropriate creator function
+ // node: Node
+ // a container node
+ var tag = node.tagName.toLowerCase();
+ var c = tag == "tbody" || tag == "thead" ? dojo.dnd._createTrTd :
+ dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);
+ return function(item, hint){ // Function
+ var isObj = item && dojo.isObject(item), data, type, n;
+ if(isObj && item.tagName && item.nodeType && item.getAttribute){
+ // process a DOM node
+ data = item.getAttribute("dndData") || item.innerHTML;
+ type = item.getAttribute("dndType");
+ type = type ? type.split(/\s*,\s*/) : ["text"];
+ n = item; // this node is going to be moved rather than copied
+ }else{
+ // process a DnD item object or a string
+ data = (isObj && item.data) ? item.data : item;
+ type = (isObj && item.type) ? item.type : ["text"];
+ n = (hint == "avatar" ? dojo.dnd._createSpan : c)(String(data));
+ }
+ n.id = dojo.dnd.getUniqueId();
+ return {node: n, data: data, type: type};
+ };
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Selector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Selector"] = true;
+dojo.provide("dojo.dnd.Selector");
+
+
+
+
+/*
+ Container item states:
+ "" - an item is not selected
+ "Selected" - an item is selected
+ "Anchor" - an item is selected, and is an anchor for a "shift" selection
+*/
+
+/*=====
+dojo.declare("dojo.dnd.__SelectorArgs", [dojo.dnd.__ContainerArgs], {
+ // singular: Boolean
+ // allows selection of only one element, if true
+ singular: false,
+
+ // autoSync: Boolean
+ // autosynchronizes the source with its list of DnD nodes,
+ autoSync: false
+});
+=====*/
+
+dojo.declare("dojo.dnd.Selector", dojo.dnd.Container, {
+ // summary:
+ // a Selector object, which knows how to select its children
+
+ /*=====
+ // selection: Set<String>
+ // The set of id's that are currently selected, such that this.selection[id] == 1
+ // if the node w/that id is selected. Can iterate over selected node's id's like:
+ // | for(var id in this.selection)
+ selection: {},
+ =====*/
+
+ constructor: function(node, params){
+ // summary:
+ // constructor of the Selector
+ // node: Node||String
+ // node or node's id to build the selector on
+ // params: dojo.dnd.__SelectorArgs?
+ // a dictionary of parameters
+ if(!params){ params = {}; }
+ this.singular = params.singular;
+ this.autoSync = params.autoSync;
+ // class-specific variables
+ this.selection = {};
+ this.anchor = null;
+ this.simpleSelection = false;
+ // set up events
+ this.events.push(
+ dojo.connect(this.node, "onmousedown", this, "onMouseDown"),
+ dojo.connect(this.node, "onmouseup", this, "onMouseUp"));
+ },
+
+ // object attributes (for markup)
+ singular: false, // is singular property
+
+ // methods
+ getSelectedNodes: function(){
+ // summary:
+ // returns a list (an array) of selected nodes
+ var t = new dojo.NodeList();
+ var e = dojo.dnd._empty;
+ for(var i in this.selection){
+ if(i in e){ continue; }
+ t.push(dojo.byId(i));
+ }
+ return t; // NodeList
+ },
+ selectNone: function(){
+ // summary:
+ // unselects all items
+ return this._removeSelection()._removeAnchor(); // self
+ },
+ selectAll: function(){
+ // summary:
+ // selects all items
+ this.forInItems(function(data, id){
+ this._addItemClass(dojo.byId(id), "Selected");
+ this.selection[id] = 1;
+ }, this);
+ return this._removeAnchor(); // self
+ },
+ deleteSelectedNodes: function(){
+ // summary:
+ // deletes all selected items
+ var e = dojo.dnd._empty;
+ for(var i in this.selection){
+ if(i in e){ continue; }
+ var n = dojo.byId(i);
+ this.delItem(i);
+ dojo.destroy(n);
+ }
+ this.anchor = null;
+ this.selection = {};
+ return this; // self
+ },
+ forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
+ // summary:
+ // iterates over selected items;
+ // see `dojo.dnd.Container.forInItems()` for details
+ o = o || dojo.global;
+ var s = this.selection, e = dojo.dnd._empty;
+ for(var i in s){
+ if(i in e){ continue; }
+ f.call(o, this.getItem(i), i, this);
+ }
+ },
+ sync: function(){
+ // summary:
+ // sync up the node list with the data map
+
+ dojo.dnd.Selector.superclass.sync.call(this);
+
+ // fix the anchor
+ if(this.anchor){
+ if(!this.getItem(this.anchor.id)){
+ this.anchor = null;
+ }
+ }
+
+ // fix the selection
+ var t = [], e = dojo.dnd._empty;
+ for(var i in this.selection){
+ if(i in e){ continue; }
+ if(!this.getItem(i)){
+ t.push(i);
+ }
+ }
+ dojo.forEach(t, function(i){
+ delete this.selection[i];
+ }, this);
+
+ return this; // self
+ },
+ insertNodes: function(addSelected, data, before, anchor){
+ // summary:
+ // inserts new data items (see `dojo.dnd.Container.insertNodes()` method for details)
+ // addSelected: Boolean
+ // all new nodes will be added to selected items, if true, no selection change otherwise
+ // data: Array
+ // a list of data items, which should be processed by the creator function
+ // before: Boolean
+ // insert before the anchor, if true, and after the anchor otherwise
+ // anchor: Node
+ // the anchor node to be used as a point of insertion
+ var oldCreator = this._normalizedCreator;
+ this._normalizedCreator = function(item, hint){
+ var t = oldCreator.call(this, item, hint);
+ if(addSelected){
+ if(!this.anchor){
+ this.anchor = t.node;
+ this._removeItemClass(t.node, "Selected");
+ this._addItemClass(this.anchor, "Anchor");
+ }else if(this.anchor != t.node){
+ this._removeItemClass(t.node, "Anchor");
+ this._addItemClass(t.node, "Selected");
+ }
+ this.selection[t.node.id] = 1;
+ }else{
+ this._removeItemClass(t.node, "Selected");
+ this._removeItemClass(t.node, "Anchor");
+ }
+ return t;
+ };
+ dojo.dnd.Selector.superclass.insertNodes.call(this, data, before, anchor);
+ this._normalizedCreator = oldCreator;
+ return this; // self
+ },
+ destroy: function(){
+ // summary:
+ // prepares the object to be garbage-collected
+ dojo.dnd.Selector.superclass.destroy.call(this);
+ this.selection = this.anchor = null;
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ params._skipStartup = true;
+ return new dojo.dnd.Selector(node, params);
+ },
+
+ // mouse events
+ onMouseDown: function(e){
+ // summary:
+ // event processor for onmousedown
+ // e: Event
+ // mouse event
+ if(this.autoSync){ this.sync(); }
+ if(!this.current){ return; }
+ if(!this.singular && !dojo.isCopyKey(e) && !e.shiftKey && (this.current.id in this.selection)){
+ this.simpleSelection = true;
+ if(e.button === dojo.mouseButtons.LEFT){
+ // accept the left button and stop the event
+ // for IE we don't stop event when multiple buttons are pressed
+ dojo.stopEvent(e);
+ }
+ return;
+ }
+ if(!this.singular && e.shiftKey){
+ if(!dojo.isCopyKey(e)){
+ this._removeSelection();
+ }
+ var c = this.getAllNodes();
+ if(c.length){
+ if(!this.anchor){
+ this.anchor = c[0];
+ this._addItemClass(this.anchor, "Anchor");
+ }
+ this.selection[this.anchor.id] = 1;
+ if(this.anchor != this.current){
+ var i = 0;
+ for(; i < c.length; ++i){
+ var node = c[i];
+ if(node == this.anchor || node == this.current){ break; }
+ }
+ for(++i; i < c.length; ++i){
+ var node = c[i];
+ if(node == this.anchor || node == this.current){ break; }
+ this._addItemClass(node, "Selected");
+ this.selection[node.id] = 1;
+ }
+ this._addItemClass(this.current, "Selected");
+ this.selection[this.current.id] = 1;
+ }
+ }
+ }else{
+ if(this.singular){
+ if(this.anchor == this.current){
+ if(dojo.isCopyKey(e)){
+ this.selectNone();
+ }
+ }else{
+ this.selectNone();
+ this.anchor = this.current;
+ this._addItemClass(this.anchor, "Anchor");
+ this.selection[this.current.id] = 1;
+ }
+ }else{
+ if(dojo.isCopyKey(e)){
+ if(this.anchor == this.current){
+ delete this.selection[this.anchor.id];
+ this._removeAnchor();
+ }else{
+ if(this.current.id in this.selection){
+ this._removeItemClass(this.current, "Selected");
+ delete this.selection[this.current.id];
+ }else{
+ if(this.anchor){
+ this._removeItemClass(this.anchor, "Anchor");
+ this._addItemClass(this.anchor, "Selected");
+ }
+ this.anchor = this.current;
+ this._addItemClass(this.current, "Anchor");
+ this.selection[this.current.id] = 1;
+ }
+ }
+ }else{
+ if(!(this.current.id in this.selection)){
+ this.selectNone();
+ this.anchor = this.current;
+ this._addItemClass(this.current, "Anchor");
+ this.selection[this.current.id] = 1;
+ }
+ }
+ }
+ }
+ dojo.stopEvent(e);
+ },
+ onMouseUp: function(e){
+ // summary:
+ // event processor for onmouseup
+ // e: Event
+ // mouse event
+ if(!this.simpleSelection){ return; }
+ this.simpleSelection = false;
+ this.selectNone();
+ if(this.current){
+ this.anchor = this.current;
+ this._addItemClass(this.anchor, "Anchor");
+ this.selection[this.current.id] = 1;
+ }
+ },
+ onMouseMove: function(e){
+ // summary
+ // event processor for onmousemove
+ // e: Event
+ // mouse event
+ this.simpleSelection = false;
+ },
+
+ // utilities
+ onOverEvent: function(){
+ // summary:
+ // this function is called once, when mouse is over our container
+ this.onmousemoveEvent = dojo.connect(this.node, "onmousemove", this, "onMouseMove");
+ },
+ onOutEvent: function(){
+ // summary:
+ // this function is called once, when mouse is out of our container
+ dojo.disconnect(this.onmousemoveEvent);
+ delete this.onmousemoveEvent;
+ },
+ _removeSelection: function(){
+ // summary:
+ // unselects all items
+ var e = dojo.dnd._empty;
+ for(var i in this.selection){
+ if(i in e){ continue; }
+ var node = dojo.byId(i);
+ if(node){ this._removeItemClass(node, "Selected"); }
+ }
+ this.selection = {};
+ return this; // self
+ },
+ _removeAnchor: function(){
+ if(this.anchor){
+ this._removeItemClass(this.anchor, "Anchor");
+ this.anchor = null;
+ }
+ return this; // self
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Avatar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Avatar"] = true;
+dojo.provide("dojo.dnd.Avatar");
+
+
+
+dojo.declare("dojo.dnd.Avatar", null, {
+ // summary:
+ // Object that represents transferred DnD items visually
+ // manager: Object
+ // a DnD manager object
+
+ constructor: function(manager){
+ this.manager = manager;
+ this.construct();
+ },
+
+ // methods
+ construct: function(){
+ // summary:
+ // constructor function;
+ // it is separate so it can be (dynamically) overwritten in case of need
+ this.isA11y = dojo.hasClass(dojo.body(),"dijit_a11y");
+ var a = dojo.create("table", {
+ "class": "dojoDndAvatar",
+ style: {
+ position: "absolute",
+ zIndex: "1999",
+ margin: "0px"
+ }
+ }),
+ source = this.manager.source, node,
+ b = dojo.create("tbody", null, a),
+ tr = dojo.create("tr", null, b),
+ td = dojo.create("td", null, tr),
+ icon = this.isA11y ? dojo.create("span", {
+ id : "a11yIcon",
+ innerHTML : this.manager.copy ? '+' : "<"
+ }, td) : null,
+ span = dojo.create("span", {
+ innerHTML: source.generateText ? this._generateText() : ""
+ }, td),
+ k = Math.min(5, this.manager.nodes.length), i = 0;
+ // we have to set the opacity on IE only after the node is live
+ dojo.attr(tr, {
+ "class": "dojoDndAvatarHeader",
+ style: {opacity: 0.9}
+ });
+ for(; i < k; ++i){
+ if(source.creator){
+ // create an avatar representation of the node
+ node = source._normalizedCreator(source.getItem(this.manager.nodes[i].id).data, "avatar").node;
+ }else{
+ // or just clone the node and hope it works
+ node = this.manager.nodes[i].cloneNode(true);
+ if(node.tagName.toLowerCase() == "tr"){
+ // insert extra table nodes
+ var table = dojo.create("table"),
+ tbody = dojo.create("tbody", null, table);
+ tbody.appendChild(node);
+ node = table;
+ }
+ }
+ node.id = "";
+ tr = dojo.create("tr", null, b);
+ td = dojo.create("td", null, tr);
+ td.appendChild(node);
+ dojo.attr(tr, {
+ "class": "dojoDndAvatarItem",
+ style: {opacity: (9 - i) / 10}
+ });
+ }
+ this.node = a;
+ },
+ destroy: function(){
+ // summary:
+ // destructor for the avatar; called to remove all references so it can be garbage-collected
+ dojo.destroy(this.node);
+ this.node = false;
+ },
+ update: function(){
+ // summary:
+ // updates the avatar to reflect the current DnD state
+ dojo[(this.manager.canDropFlag ? "add" : "remove") + "Class"](this.node, "dojoDndAvatarCanDrop");
+ if (this.isA11y){
+ var icon = dojo.byId("a11yIcon");
+ var text = '+'; // assume canDrop && copy
+ if (this.manager.canDropFlag && !this.manager.copy) {
+ text = '< '; // canDrop && move
+ }else if (!this.manager.canDropFlag && !this.manager.copy) {
+ text = "o"; //!canDrop && move
+ }else if(!this.manager.canDropFlag){
+ text = 'x'; // !canDrop && copy
+ }
+ icon.innerHTML=text;
+ }
+ // replace text
+ dojo.query(("tr.dojoDndAvatarHeader td span" +(this.isA11y ? " span" : "")), this.node).forEach(
+ function(node){
+ node.innerHTML = this._generateText();
+ }, this);
+ },
+ _generateText: function(){
+ // summary: generates a proper text to reflect copying or moving of items
+ return this.manager.nodes.length.toString();
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Manager"] = true;
+dojo.provide("dojo.dnd.Manager");
+
+
+
+
+
+dojo.declare("dojo.dnd.Manager", null, {
+ // summary:
+ // the manager of DnD operations (usually a singleton)
+ constructor: function(){
+ this.avatar = null;
+ this.source = null;
+ this.nodes = [];
+ this.copy = true;
+ this.target = null;
+ this.canDropFlag = false;
+ this.events = [];
+ },
+
+ // avatar's offset from the mouse
+ OFFSET_X: 16,
+ OFFSET_Y: 16,
+
+ // methods
+ overSource: function(source){
+ // summary:
+ // called when a source detected a mouse-over condition
+ // source: Object
+ // the reporter
+ if(this.avatar){
+ this.target = (source && source.targetState != "Disabled") ? source : null;
+ this.canDropFlag = Boolean(this.target);
+ this.avatar.update();
+ }
+ dojo.publish("/dnd/source/over", [source]);
+ },
+ outSource: function(source){
+ // summary:
+ // called when a source detected a mouse-out condition
+ // source: Object
+ // the reporter
+ if(this.avatar){
+ if(this.target == source){
+ this.target = null;
+ this.canDropFlag = false;
+ this.avatar.update();
+ dojo.publish("/dnd/source/over", [null]);
+ }
+ }else{
+ dojo.publish("/dnd/source/over", [null]);
+ }
+ },
+ startDrag: function(source, nodes, copy){
+ // summary:
+ // called to initiate the DnD operation
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+ this.source = source;
+ this.nodes = nodes;
+ this.copy = Boolean(copy); // normalizing to true boolean
+ this.avatar = this.makeAvatar();
+ dojo.body().appendChild(this.avatar.node);
+ dojo.publish("/dnd/start", [source, nodes, this.copy]);
+ this.events = [
+ dojo.connect(dojo.doc, "onmousemove", this, "onMouseMove"),
+ dojo.connect(dojo.doc, "onmouseup", this, "onMouseUp"),
+ dojo.connect(dojo.doc, "onkeydown", this, "onKeyDown"),
+ dojo.connect(dojo.doc, "onkeyup", this, "onKeyUp"),
+ // cancel text selection and text dragging
+ dojo.connect(dojo.doc, "ondragstart", dojo.stopEvent),
+ dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent)
+ ];
+ var c = "dojoDnd" + (copy ? "Copy" : "Move");
+ dojo.addClass(dojo.body(), c);
+ },
+ canDrop: function(flag){
+ // summary:
+ // called to notify if the current target can accept items
+ var canDropFlag = Boolean(this.target && flag);
+ if(this.canDropFlag != canDropFlag){
+ this.canDropFlag = canDropFlag;
+ this.avatar.update();
+ }
+ },
+ stopDrag: function(){
+ // summary:
+ // stop the DnD in progress
+ dojo.removeClass(dojo.body(), "dojoDndCopy");
+ dojo.removeClass(dojo.body(), "dojoDndMove");
+ dojo.forEach(this.events, dojo.disconnect);
+ this.events = [];
+ this.avatar.destroy();
+ this.avatar = null;
+ this.source = this.target = null;
+ this.nodes = [];
+ },
+ makeAvatar: function(){
+ // summary:
+ // makes the avatar; it is separate to be overwritten dynamically, if needed
+ return new dojo.dnd.Avatar(this);
+ },
+ updateAvatar: function(){
+ // summary:
+ // updates the avatar; it is separate to be overwritten dynamically, if needed
+ this.avatar.update();
+ },
+
+ // mouse event processors
+ onMouseMove: function(e){
+ // summary:
+ // event processor for onmousemove
+ // e: Event
+ // mouse event
+ var a = this.avatar;
+ if(a){
+ dojo.dnd.autoScrollNodes(e);
+ //dojo.dnd.autoScroll(e);
+ var s = a.node.style;
+ s.left = (e.pageX + this.OFFSET_X) + "px";
+ s.top = (e.pageY + this.OFFSET_Y) + "px";
+ var copy = Boolean(this.source.copyState(dojo.isCopyKey(e)));
+ if(this.copy != copy){
+ this._setCopyStatus(copy);
+ }
+ }
+ },
+ onMouseUp: function(e){
+ // summary:
+ // event processor for onmouseup
+ // e: Event
+ // mouse event
+ if(this.avatar){
+ if(this.target && this.canDropFlag){
+ var copy = Boolean(this.source.copyState(dojo.isCopyKey(e))),
+ params = [this.source, this.nodes, copy, this.target];
+ dojo.publish("/dnd/drop/before", params);
+ dojo.publish("/dnd/drop", params);
+ }else{
+ dojo.publish("/dnd/cancel");
+ }
+ this.stopDrag();
+ }
+ },
+
+ // keyboard event processors
+ onKeyDown: function(e){
+ // summary:
+ // event processor for onkeydown:
+ // watching for CTRL for copy/move status, watching for ESCAPE to cancel the drag
+ // e: Event
+ // keyboard event
+ if(this.avatar){
+ switch(e.keyCode){
+ case dojo.keys.CTRL:
+ var copy = Boolean(this.source.copyState(true));
+ if(this.copy != copy){
+ this._setCopyStatus(copy);
+ }
+ break;
+ case dojo.keys.ESCAPE:
+ dojo.publish("/dnd/cancel");
+ this.stopDrag();
+ break;
+ }
+ }
+ },
+ onKeyUp: function(e){
+ // summary:
+ // event processor for onkeyup, watching for CTRL for copy/move status
+ // e: Event
+ // keyboard event
+ if(this.avatar && e.keyCode == dojo.keys.CTRL){
+ var copy = Boolean(this.source.copyState(false));
+ if(this.copy != copy){
+ this._setCopyStatus(copy);
+ }
+ }
+ },
+
+ // utilities
+ _setCopyStatus: function(copy){
+ // summary:
+ // changes the copy status
+ // copy: Boolean
+ // the copy status
+ this.copy = copy;
+ this.source._markDndStatus(this.copy);
+ this.updateAvatar();
+ dojo.removeClass(dojo.body(), "dojoDnd" + (this.copy ? "Move" : "Copy"));
+ dojo.addClass(dojo.body(), "dojoDnd" + (this.copy ? "Copy" : "Move"));
+ }
+});
+
+// dojo.dnd._manager:
+// The manager singleton variable. Can be overwritten if needed.
+dojo.dnd._manager = null;
+
+dojo.dnd.manager = function(){
+ // summary:
+ // Returns the current DnD manager. Creates one if it is not created yet.
+ if(!dojo.dnd._manager){
+ dojo.dnd._manager = new dojo.dnd.Manager();
+ }
+ return dojo.dnd._manager; // Object
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Source"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Source"] = true;
+dojo.provide("dojo.dnd.Source");
+
+
+
+
+/*
+ Container property:
+ "Horizontal"- if this is the horizontal container
+ Source states:
+ "" - normal state
+ "Moved" - this source is being moved
+ "Copied" - this source is being copied
+ Target states:
+ "" - normal state
+ "Disabled" - the target cannot accept an avatar
+ Target anchor state:
+ "" - item is not selected
+ "Before" - insert point is before the anchor
+ "After" - insert point is after the anchor
+*/
+
+/*=====
+dojo.dnd.__SourceArgs = function(){
+ // summary:
+ // a dict of parameters for DnD Source configuration. Note that any
+ // property on Source elements may be configured, but this is the
+ // short-list
+ // isSource: Boolean?
+ // can be used as a DnD source. Defaults to true.
+ // accept: Array?
+ // list of accepted types (text strings) for a target; defaults to
+ // ["text"]
+ // autoSync: Boolean
+ // if true refreshes the node list on every operation; false by default
+ // copyOnly: Boolean?
+ // copy items, if true, use a state of Ctrl key otherwise,
+ // see selfCopy and selfAccept for more details
+ // delay: Number
+ // the move delay in pixels before detecting a drag; 0 by default
+ // horizontal: Boolean?
+ // a horizontal container, if true, vertical otherwise or when omitted
+ // selfCopy: Boolean?
+ // copy items by default when dropping on itself,
+ // false by default, works only if copyOnly is true
+ // selfAccept: Boolean?
+ // accept its own items when copyOnly is true,
+ // true by default, works only if copyOnly is true
+ // withHandles: Boolean?
+ // allows dragging only by handles, false by default
+ // generateText: Boolean?
+ // generate text node for drag and drop, true by default
+ this.isSource = isSource;
+ this.accept = accept;
+ this.autoSync = autoSync;
+ this.copyOnly = copyOnly;
+ this.delay = delay;
+ this.horizontal = horizontal;
+ this.selfCopy = selfCopy;
+ this.selfAccept = selfAccept;
+ this.withHandles = withHandles;
+ this.generateText = true;
+}
+=====*/
+
+dojo.declare("dojo.dnd.Source", dojo.dnd.Selector, {
+ // summary:
+ // a Source object, which can be used as a DnD source, or a DnD target
+
+ // object attributes (for markup)
+ isSource: true,
+ horizontal: false,
+ copyOnly: false,
+ selfCopy: false,
+ selfAccept: true,
+ skipForm: false,
+ withHandles: false,
+ autoSync: false,
+ delay: 0, // pixels
+ accept: ["text"],
+ generateText: true,
+
+ constructor: function(/*DOMNode|String*/node, /*dojo.dnd.__SourceArgs?*/params){
+ // summary:
+ // a constructor of the Source
+ // node:
+ // node or node's id to build the source on
+ // params:
+ // any property of this class may be configured via the params
+ // object which is mixed-in to the `dojo.dnd.Source` instance
+ dojo.mixin(this, dojo.mixin({}, params));
+ var type = this.accept;
+ if(type.length){
+ this.accept = {};
+ for(var i = 0; i < type.length; ++i){
+ this.accept[type[i]] = 1;
+ }
+ }
+ // class-specific variables
+ this.isDragging = false;
+ this.mouseDown = false;
+ this.targetAnchor = null;
+ this.targetBox = null;
+ this.before = true;
+ this._lastX = 0;
+ this._lastY = 0;
+ // states
+ this.sourceState = "";
+ if(this.isSource){
+ dojo.addClass(this.node, "dojoDndSource");
+ }
+ this.targetState = "";
+ if(this.accept){
+ dojo.addClass(this.node, "dojoDndTarget");
+ }
+ if(this.horizontal){
+ dojo.addClass(this.node, "dojoDndHorizontal");
+ }
+ // set up events
+ this.topics = [
+ dojo.subscribe("/dnd/source/over", this, "onDndSourceOver"),
+ dojo.subscribe("/dnd/start", this, "onDndStart"),
+ dojo.subscribe("/dnd/drop", this, "onDndDrop"),
+ dojo.subscribe("/dnd/cancel", this, "onDndCancel")
+ ];
+ },
+
+ // methods
+ checkAcceptance: function(source, nodes){
+ // summary:
+ // checks if the target can accept nodes from this source
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ if(this == source){
+ return !this.copyOnly || this.selfAccept;
+ }
+ for(var i = 0; i < nodes.length; ++i){
+ var type = source.getItem(nodes[i].id).type;
+ // type instanceof Array
+ var flag = false;
+ for(var j = 0; j < type.length; ++j){
+ if(type[j] in this.accept){
+ flag = true;
+ break;
+ }
+ }
+ if(!flag){
+ return false; // Boolean
+ }
+ }
+ return true; // Boolean
+ },
+ copyState: function(keyPressed, self){
+ // summary:
+ // Returns true if we need to copy items, false to move.
+ // It is separated to be overwritten dynamically, if needed.
+ // keyPressed: Boolean
+ // the "copy" key was pressed
+ // self: Boolean?
+ // optional flag that means that we are about to drop on itself
+
+ if(keyPressed){ return true; }
+ if(arguments.length < 2){
+ self = this == dojo.dnd.manager().target;
+ }
+ if(self){
+ if(this.copyOnly){
+ return this.selfCopy;
+ }
+ }else{
+ return this.copyOnly;
+ }
+ return false; // Boolean
+ },
+ destroy: function(){
+ // summary:
+ // prepares the object to be garbage-collected
+ dojo.dnd.Source.superclass.destroy.call(this);
+ dojo.forEach(this.topics, dojo.unsubscribe);
+ this.targetAnchor = null;
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ params._skipStartup = true;
+ return new dojo.dnd.Source(node, params);
+ },
+
+ // mouse event processors
+ onMouseMove: function(e){
+ // summary:
+ // event processor for onmousemove
+ // e: Event
+ // mouse event
+ if(this.isDragging && this.targetState == "Disabled"){ return; }
+ dojo.dnd.Source.superclass.onMouseMove.call(this, e);
+ var m = dojo.dnd.manager();
+ if(this.isDragging){
+ // calculate before/after
+ var before = false;
+ if(this.current){
+ if(!this.targetBox || this.targetAnchor != this.current){
+ this.targetBox = dojo.position(this.current, true);
+ }
+ if(this.horizontal){
+ before = (e.pageX - this.targetBox.x) < (this.targetBox.w / 2);
+ }else{
+ before = (e.pageY - this.targetBox.y) < (this.targetBox.h / 2);
+ }
+ }
+ if(this.current != this.targetAnchor || before != this.before){
+ this._markTargetAnchor(before);
+ m.canDrop(!this.current || m.source != this || !(this.current.id in this.selection));
+ }
+ }else{
+ if(this.mouseDown && this.isSource &&
+ (Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay)){
+ var nodes = this.getSelectedNodes();
+ if(nodes.length){
+ m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e), true));
+ }
+ }
+ }
+ },
+ onMouseDown: function(e){
+ // summary:
+ // event processor for onmousedown
+ // e: Event
+ // mouse event
+ if(!this.mouseDown && this._legalMouseDown(e) && (!this.skipForm || !dojo.dnd.isFormElement(e))){
+ this.mouseDown = true;
+ this._lastX = e.pageX;
+ this._lastY = e.pageY;
+ dojo.dnd.Source.superclass.onMouseDown.call(this, e);
+ }
+ },
+ onMouseUp: function(e){
+ // summary:
+ // event processor for onmouseup
+ // e: Event
+ // mouse event
+ if(this.mouseDown){
+ this.mouseDown = false;
+ dojo.dnd.Source.superclass.onMouseUp.call(this, e);
+ }
+ },
+
+ // topic event processors
+ onDndSourceOver: function(source){
+ // summary:
+ // topic event processor for /dnd/source/over, called when detected a current source
+ // source: Object
+ // the source which has the mouse over it
+ if(this != source){
+ this.mouseDown = false;
+ if(this.targetAnchor){
+ this._unmarkTargetAnchor();
+ }
+ }else if(this.isDragging){
+ var m = dojo.dnd.manager();
+ m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
+ }
+ },
+ onDndStart: function(source, nodes, copy){
+ // summary:
+ // topic event processor for /dnd/start, called to initiate the DnD operation
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+ if(this.autoSync){ this.sync(); }
+ if(this.isSource){
+ this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
+ }
+ var accepted = this.accept && this.checkAcceptance(source, nodes);
+ this._changeState("Target", accepted ? "" : "Disabled");
+ if(this == source){
+ dojo.dnd.manager().overSource(this);
+ }
+ this.isDragging = true;
+ },
+ onDndDrop: function(source, nodes, copy, target){
+ // summary:
+ // topic event processor for /dnd/drop, called to finish the DnD operation
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+ // target: Object
+ // the target which accepts items
+ if(this == target){
+ // this one is for us => move nodes!
+ this.onDrop(source, nodes, copy);
+ }
+ this.onDndCancel();
+ },
+ onDndCancel: function(){
+ // summary:
+ // topic event processor for /dnd/cancel, called to cancel the DnD operation
+ if(this.targetAnchor){
+ this._unmarkTargetAnchor();
+ this.targetAnchor = null;
+ }
+ this.before = true;
+ this.isDragging = false;
+ this.mouseDown = false;
+ this._changeState("Source", "");
+ this._changeState("Target", "");
+ },
+
+ // local events
+ onDrop: function(source, nodes, copy){
+ // summary:
+ // called only on the current target, when drop is performed
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+
+ if(this != source){
+ this.onDropExternal(source, nodes, copy);
+ }else{
+ this.onDropInternal(nodes, copy);
+ }
+ },
+ onDropExternal: function(source, nodes, copy){
+ // summary:
+ // called only on the current target, when drop is performed
+ // from an external source
+ // source: Object
+ // the source which provides items
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+
+ var oldCreator = this._normalizedCreator;
+ // transferring nodes from the source to the target
+ if(this.creator){
+ // use defined creator
+ this._normalizedCreator = function(node, hint){
+ return oldCreator.call(this, source.getItem(node.id).data, hint);
+ };
+ }else{
+ // we have no creator defined => move/clone nodes
+ if(copy){
+ // clone nodes
+ this._normalizedCreator = function(node, hint){
+ var t = source.getItem(node.id);
+ var n = node.cloneNode(true);
+ n.id = dojo.dnd.getUniqueId();
+ return {node: n, data: t.data, type: t.type};
+ };
+ }else{
+ // move nodes
+ this._normalizedCreator = function(node, hint){
+ var t = source.getItem(node.id);
+ source.delItem(node.id);
+ return {node: node, data: t.data, type: t.type};
+ };
+ }
+ }
+ this.selectNone();
+ if(!copy && !this.creator){
+ source.selectNone();
+ }
+ this.insertNodes(true, nodes, this.before, this.current);
+ if(!copy && this.creator){
+ source.deleteSelectedNodes();
+ }
+ this._normalizedCreator = oldCreator;
+ },
+ onDropInternal: function(nodes, copy){
+ // summary:
+ // called only on the current target, when drop is performed
+ // from the same target/source
+ // nodes: Array
+ // the list of transferred items
+ // copy: Boolean
+ // copy items, if true, move items otherwise
+
+ var oldCreator = this._normalizedCreator;
+ // transferring nodes within the single source
+ if(this.current && this.current.id in this.selection){
+ // do nothing
+ return;
+ }
+ if(copy){
+ if(this.creator){
+ // create new copies of data items
+ this._normalizedCreator = function(node, hint){
+ return oldCreator.call(this, this.getItem(node.id).data, hint);
+ };
+ }else{
+ // clone nodes
+ this._normalizedCreator = function(node, hint){
+ var t = this.getItem(node.id);
+ var n = node.cloneNode(true);
+ n.id = dojo.dnd.getUniqueId();
+ return {node: n, data: t.data, type: t.type};
+ };
+ }
+ }else{
+ // move nodes
+ if(!this.current){
+ // do nothing
+ return;
+ }
+ this._normalizedCreator = function(node, hint){
+ var t = this.getItem(node.id);
+ return {node: node, data: t.data, type: t.type};
+ };
+ }
+ this._removeSelection();
+ this.insertNodes(true, nodes, this.before, this.current);
+ this._normalizedCreator = oldCreator;
+ },
+ onDraggingOver: function(){
+ // summary:
+ // called during the active DnD operation, when items
+ // are dragged over this target, and it is not disabled
+ },
+ onDraggingOut: function(){
+ // summary:
+ // called during the active DnD operation, when items
+ // are dragged away from this target, and it is not disabled
+ },
+
+ // utilities
+ onOverEvent: function(){
+ // summary:
+ // this function is called once, when mouse is over our container
+ dojo.dnd.Source.superclass.onOverEvent.call(this);
+ dojo.dnd.manager().overSource(this);
+ if(this.isDragging && this.targetState != "Disabled"){
+ this.onDraggingOver();
+ }
+ },
+ onOutEvent: function(){
+ // summary:
+ // this function is called once, when mouse is out of our container
+ dojo.dnd.Source.superclass.onOutEvent.call(this);
+ dojo.dnd.manager().outSource(this);
+ if(this.isDragging && this.targetState != "Disabled"){
+ this.onDraggingOut();
+ }
+ },
+ _markTargetAnchor: function(before){
+ // summary:
+ // assigns a class to the current target anchor based on "before" status
+ // before: Boolean
+ // insert before, if true, after otherwise
+ if(this.current == this.targetAnchor && this.before == before){ return; }
+ if(this.targetAnchor){
+ this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
+ }
+ this.targetAnchor = this.current;
+ this.targetBox = null;
+ this.before = before;
+ if(this.targetAnchor){
+ this._addItemClass(this.targetAnchor, this.before ? "Before" : "After");
+ }
+ },
+ _unmarkTargetAnchor: function(){
+ // summary:
+ // removes a class of the current target anchor based on "before" status
+ if(!this.targetAnchor){ return; }
+ this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
+ this.targetAnchor = null;
+ this.targetBox = null;
+ this.before = true;
+ },
+ _markDndStatus: function(copy){
+ // summary:
+ // changes source's state based on "copy" status
+ this._changeState("Source", copy ? "Copied" : "Moved");
+ },
+ _legalMouseDown: function(e){
+ // summary:
+ // checks if user clicked on "approved" items
+ // e: Event
+ // mouse event
+
+ // accept only the left mouse button
+ if(!dojo.mouseButtons.isLeft(e)){ return false; }
+
+ if(!this.withHandles){ return true; }
+
+ // check for handles
+ for(var node = e.target; node && node !== this.node; node = node.parentNode){
+ if(dojo.hasClass(node, "dojoDndHandle")){ return true; }
+ if(dojo.hasClass(node, "dojoDndItem") || dojo.hasClass(node, "dojoDndIgnore")){ break; }
+ }
+ return false; // Boolean
+ }
+});
+
+dojo.declare("dojo.dnd.Target", dojo.dnd.Source, {
+ // summary: a Target object, which can be used as a DnD target
+
+ constructor: function(node, params){
+ // summary:
+ // a constructor of the Target --- see the `dojo.dnd.Source.constructor` for details
+ this.isSource = false;
+ dojo.removeClass(this.node, "dojoDndSource");
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ params._skipStartup = true;
+ return new dojo.dnd.Target(node, params);
+ }
+});
+
+dojo.declare("dojo.dnd.AutoSource", dojo.dnd.Source, {
+ // summary:
+ // a source that syncs its DnD nodes by default
+
+ constructor: function(node, params){
+ // summary:
+ // constructor of the AutoSource --- see the Source constructor for details
+ this.autoSync = true;
+ },
+
+ // markup methods
+ markupFactory: function(params, node){
+ params._skipStartup = true;
+ return new dojo.dnd.AutoSource(node, params);
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._View"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._View"] = true;
+dojo.provide("dojox.grid._View");
+
+
+
+
+
+
+
+
+
+
+(function(){
+ // private
+ var getStyleText = function(inNode, inStyleText){
+ return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText;
+ };
+
+ // public
+ dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], {
+ // summary:
+ // A collection of grid columns. A grid is comprised of a set of views that stack horizontally.
+ // Grid creates views automatically based on grid's layout structure.
+ // Users should typically not need to access individual views directly.
+ //
+ // defaultWidth: String
+ // Default width of the view
+ defaultWidth: "18em",
+
+ // viewWidth: String
+ // Width for the view, in valid css unit
+ viewWidth: "",
+
+ templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",
+
+ themeable: false,
+ classTag: 'dojoxGrid',
+ marginBottom: 0,
+ rowPad: 2,
+
+ // _togglingColumn: int
+ // Width of the column being toggled (-1 for none)
+ _togglingColumn: -1,
+
+ // _headerBuilderClass: Object
+ // The class to use for our header builder
+ _headerBuilderClass: dojox.grid._HeaderBuilder,
+
+ // _contentBuilderClass: Object
+ // The class to use for our content builder
+ _contentBuilderClass: dojox.grid._ContentBuilder,
+
+ postMixInProperties: function(){
+ this.rowNodes = {};
+ },
+
+ postCreate: function(){
+ this.connect(this.scrollboxNode,"onscroll","doscroll");
+ dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]);
+ dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]);
+ this.content = new this._contentBuilderClass(this);
+ this.header = new this._headerBuilderClass(this);
+ //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node
+ if(!dojo._isBodyLtr()){
+ this.headerNodeContainer.style.width = "";
+ }
+ },
+
+ destroy: function(){
+ dojo.destroy(this.headerNode);
+ delete this.headerNode;
+ for(var i in this.rowNodes){
+ dojo.destroy(this.rowNodes[i]);
+ }
+ this.rowNodes = {};
+ if(this.source){
+ this.source.destroy();
+ }
+ this.inherited(arguments);
+ },
+
+ // focus
+ focus: function(){
+ if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
+ this.hiddenFocusNode.focus();
+ }else{
+ this.scrollboxNode.focus();
+ }
+ },
+
+ setStructure: function(inStructure){
+ var vs = (this.structure = inStructure);
+ // FIXME: similar logic is duplicated in layout
+ if(vs.width && !isNaN(vs.width)){
+ this.viewWidth = vs.width + 'em';
+ }else{
+ this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth;
+ }
+ this._onBeforeRow = vs.onBeforeRow||function(){};
+ this._onAfterRow = vs.onAfterRow||function(){};
+ this.noscroll = vs.noscroll;
+ if(this.noscroll){
+ this.scrollboxNode.style.overflow = "hidden";
+ }
+ this.simpleStructure = Boolean(vs.cells.length == 1);
+ // bookkeeping
+ this.testFlexCells();
+ // accomodate new structure
+ this.updateStructure();
+ },
+
+ _cleanupRowWidgets: function(inRowNode){
+ // Summary:
+ // Cleans up the widgets for the given row node so that
+ // we can reattach them if needed
+ if(inRowNode){
+ dojo.forEach(dojo.query("[widgetId]", inRowNode).map(dijit.byNode), function(w){
+ if(w._destroyOnRemove){
+ w.destroy();
+ delete w;
+ }else if(w.domNode && w.domNode.parentNode){
+ w.domNode.parentNode.removeChild(w.domNode);
+ }
+ });
+ }
+ },
+
+ onBeforeRow: function(inRowIndex, cells){
+ this._onBeforeRow(inRowIndex, cells);
+ if(inRowIndex >= 0){
+ this._cleanupRowWidgets(this.getRowNode(inRowIndex));
+ }
+ },
+
+ onAfterRow: function(inRowIndex, cells, inRowNode){
+ this._onAfterRow(inRowIndex, cells, inRowNode);
+ var g = this.grid;
+ dojo.forEach(dojo.query(".dojoxGridStubNode", inRowNode), function(n){
+ if(n && n.parentNode){
+ var lw = n.getAttribute("linkWidget");
+ var cellIdx = window.parseInt(dojo.attr(n, "cellIdx"), 10);
+ var cellDef = g.getCell(cellIdx);
+ var w = dijit.byId(lw);
+ if(w){
+ n.parentNode.replaceChild(w.domNode, n);
+ if(!w._started){
+ w.startup();
+ }
+ }else{
+ n.innerHTML = "";
+ }
+ }
+ }, this);
+ },
+
+ testFlexCells: function(){
+ // FIXME: cheater, this function does double duty as initializer and tester
+ this.flexCells = false;
+ for(var j=0, row; (row=this.structure.cells[j]); j++){
+ for(var i=0, cell; (cell=row[i]); i++){
+ cell.view = this;
+ this.flexCells = this.flexCells || cell.isFlex();
+ }
+ }
+ return this.flexCells;
+ },
+
+ updateStructure: function(){
+ // header builder needs to update table map
+ this.header.update();
+ // content builder needs to update markup cache
+ this.content.update();
+ },
+
+ getScrollbarWidth: function(){
+ var hasScrollSpace = this.hasVScrollbar();
+ var overflow = dojo.style(this.scrollboxNode, "overflow");
+ if(this.noscroll || !overflow || overflow == "hidden"){
+ hasScrollSpace = false;
+ }else if(overflow == "scroll"){
+ hasScrollSpace = true;
+ }
+ return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer
+ },
+
+ getColumnsWidth: function(){
+ var h = this.headerContentNode;
+ return h && h.firstChild ? h.firstChild.offsetWidth : 0; // Integer
+ },
+
+ setColumnsWidth: function(width){
+ this.headerContentNode.firstChild.style.width = width + 'px';
+ if(this.viewWidth){
+ this.viewWidth = width + 'px';
+ }
+ },
+
+ getWidth: function(){
+ return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String
+ },
+
+ getContentWidth: function(){
+ return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String
+ },
+
+ render: function(){
+ this.scrollboxNode.style.height = '';
+ this.renderHeader();
+ if(this._togglingColumn >= 0){
+ this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn);
+ this._togglingColumn = -1;
+ }
+ var cells = this.grid.layout.cells;
+ var getSibling = dojo.hitch(this, function(node, before){
+ var inc = before?-1:1;
+ var idx = this.header.getCellNodeIndex(node) + inc;
+ var cell = cells[idx];
+ while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){
+ idx += inc;
+ cell = cells[idx];
+ }
+ if(cell){
+ return cell.getHeaderNode();
+ }
+ return null;
+ });
+ if(this.grid.columnReordering && this.simpleStructure){
+ if(this.source){
+ this.source.destroy();
+ }
+
+ // Create the top and bottom markers
+ var bottomMarkerId = "dojoxGrid_bottomMarker";
+ var topMarkerId = "dojoxGrid_topMarker";
+ if(this.bottomMarker){
+ dojo.destroy(this.bottomMarker);
+ }
+ this.bottomMarker = dojo.byId(bottomMarkerId);
+ if(this.topMarker){
+ dojo.destroy(this.topMarker);
+ }
+ this.topMarker = dojo.byId(topMarkerId);
+ if (!this.bottomMarker) {
+ this.bottomMarker = dojo.create("div", {
+ "id": bottomMarkerId,
+ "class": "dojoxGridColPlaceBottom"
+ }, dojo.body());
+ this._hide(this.bottomMarker);
+
+
+ this.topMarker = dojo.create("div", {
+ "id": topMarkerId,
+ "class": "dojoxGridColPlaceTop"
+ }, dojo.body());
+ this._hide(this.topMarker);
+ }
+ this.arrowDim = dojo.contentBox(this.bottomMarker);
+
+ var headerHeight = dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;
+
+ this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], {
+ horizontal: true,
+ accept: [ "gridColumn_" + this.grid.id ],
+ viewIndex: this.index,
+ generateText: false,
+ onMouseDown: dojo.hitch(this, function(e){
+ this.header.decorateEvent(e);
+ if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) &&
+ this.header.canResize(e) && !this.header.moveable){
+ this.header.beginColumnResize(e);
+ }else{
+ if(this.grid.headerMenu){
+ this.grid.headerMenu.onCancel(true);
+ }
+ // IE reports a left click as 1, where everything else reports 0
+ if(e.button === (dojo.isIE ? 1 : 0)){
+ dojo.dnd.Source.prototype.onMouseDown.call(this.source, e);
+ }
+ }
+ }),
+ onMouseOver: dojo.hitch(this, function(e){
+ var src = this.source;
+ if(src._getChildByEvent(e)){
+ dojo.dnd.Source.prototype.onMouseOver.apply(src, arguments);
+ }
+ }),
+ _markTargetAnchor: dojo.hitch(this, function(before){
+ var src = this.source;
+ if(src.current == src.targetAnchor && src.before == before){ return; }
+ if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+ }
+ dojo.dnd.Source.prototype._markTargetAnchor.call(src, before);
+
+ var target = before ? src.targetAnchor : getSibling(src.targetAnchor, src.before);
+ var endAdd = 0;
+
+ if (!target) {
+ target = src.targetAnchor;
+ endAdd = dojo.contentBox(target).w + this.arrowDim.w/2 + 2;
+ }
+
+ // NOTE: this is for backwards compatibility with Dojo 1.3
+ var pos = (dojo.position||dojo._abs)(target, true);
+ var left = Math.floor(pos.x - this.arrowDim.w/2 + endAdd);
+
+ dojo.style(this.bottomMarker, "visibility", "visible");
+ dojo.style(this.topMarker, "visibility", "visible");
+ dojo.style(this.bottomMarker, {
+ "left": left + "px",
+ "top" : (headerHeight + pos.y) + "px"
+ });
+
+ dojo.style(this.topMarker, {
+ "left": left + "px",
+ "top" : (pos.y - this.arrowDim.h) + "px"
+ });
+
+ if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+ src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+ }
+ }),
+ _unmarkTargetAnchor: dojo.hitch(this, function(){
+ var src = this.source;
+ if(!src.targetAnchor){ return; }
+ if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+ src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+ }
+ this._hide(this.bottomMarker);
+ this._hide(this.topMarker);
+ dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);
+ }),
+ destroy: dojo.hitch(this, function(){
+ dojo.disconnect(this._source_conn);
+ dojo.unsubscribe(this._source_sub);
+ dojo.dnd.Source.prototype.destroy.call(this.source);
+ if(this.bottomMarker){
+ dojo.destroy(this.bottomMarker);
+ delete this.bottomMarker;
+ }
+ if(this.topMarker){
+ dojo.destroy(this.topMarker);
+ delete this.topMarker;
+ }
+ }),
+ onDndCancel: dojo.hitch(this, function(){
+ dojo.dnd.Source.prototype.onDndCancel.call(this.source);
+ this._hide(this.bottomMarker);
+ this._hide(this.topMarker);
+ })
+ });
+
+ this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop");
+ this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore");
+ this.source.startup();
+ }
+ },
+
+ _hide: function(node){
+ dojo.style(node, {
+ left: "-10000px",
+ top: "-10000px",
+ "visibility": "hidden"
+ });
+ },
+
+ _onDndDropBefore: function(source, nodes, copy){
+ if(dojo.dnd.manager().target !== this.source){
+ return;
+ }
+ this.source._targetNode = this.source.targetAnchor;
+ this.source._beforeTarget = this.source.before;
+ var views = this.grid.views.views;
+ var srcView = views[source.viewIndex];
+ var tgtView = views[this.index];
+ if(tgtView != srcView){
+ srcView.convertColPctToFixed();
+ tgtView.convertColPctToFixed();
+ }
+ },
+
+ _onDndDrop: function(source, nodes, copy){
+ if(dojo.dnd.manager().target !== this.source){
+ if(dojo.dnd.manager().source === this.source){
+ this._removingColumn = true;
+ }
+ return;
+ }
+ this._hide(this.bottomMarker);
+ this._hide(this.topMarker);
+
+ var getIdx = function(n){
+ return n ? dojo.attr(n, "idx") : null;
+ };
+ var w = dojo.marginBox(nodes[0]).w;
+ if(source.viewIndex !== this.index){
+ var views = this.grid.views.views;
+ var srcView = views[source.viewIndex];
+ var tgtView = views[this.index];
+ if(srcView.viewWidth && srcView.viewWidth != "auto"){
+ srcView.setColumnsWidth(srcView.getColumnsWidth() - w);
+ }
+ if(tgtView.viewWidth && tgtView.viewWidth != "auto"){
+ tgtView.setColumnsWidth(tgtView.getColumnsWidth());
+ }
+ }
+ var stn = this.source._targetNode;
+ var stb = this.source._beforeTarget;
+ var layout = this.grid.layout;
+ var idx = this.index;
+ delete this.source._targetNode;
+ delete this.source._beforeTarget;
+
+ layout.moveColumn(
+ source.viewIndex,
+ idx,
+ getIdx(nodes[0]),
+ getIdx(stn),
+ stb);
+ },
+
+ renderHeader: function(){
+ this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent);
+ if(this.flexCells){
+ this.contentWidth = this.getContentWidth();
+ this.headerContentNode.firstChild.style.width = this.contentWidth;
+ }
+ dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]);
+ },
+
+ // note: not called in 'view' context
+ _getHeaderContent: function(inCell){
+ var n = inCell.name || inCell.grid.getCellName(inCell);
+ var ret = [ '<div class="dojoxGridSortNode' ];
+
+ if(inCell.index != inCell.grid.getSortIndex()){
+ ret.push('">');
+ }else{
+ ret = ret.concat([ ' ',
+ inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown',
+ '"><div class="dojoxGridArrowButtonChar">',
+ inCell.grid.sortInfo > 0 ? '&#9650;' : '&#9660;',
+ '</div><div class="dojoxGridArrowButtonNode" role="presentation"></div>']);
+ }
+ ret = ret.concat([n, '</div>']);
+ return ret.join('');
+ },
+
+ resize: function(){
+ this.adaptHeight();
+ this.adaptWidth();
+ },
+
+ hasHScrollbar: function(reset){
+ var hadScroll = this._hasHScroll||false;
+ if(this._hasHScroll == undefined || reset){
+ if(this.noscroll){
+ this._hasHScroll = false;
+ }else{
+ var style = dojo.style(this.scrollboxNode, "overflow");
+ if(style == "hidden"){
+ this._hasHScroll = false;
+ }else if(style == "scroll"){
+ this._hasHScroll = true;
+ }else{
+ this._hasHScroll = (this.scrollboxNode.offsetWidth - this.getScrollbarWidth() < this.contentNode.offsetWidth );
+ }
+ }
+ }
+ if(hadScroll !== this._hasHScroll){
+ this.grid.update();
+ }
+ return this._hasHScroll; // Boolean
+ },
+
+ hasVScrollbar: function(reset){
+ var hadScroll = this._hasVScroll||false;
+ if(this._hasVScroll == undefined || reset){
+ if(this.noscroll){
+ this._hasVScroll = false;
+ }else{
+ var style = dojo.style(this.scrollboxNode, "overflow");
+ if(style == "hidden"){
+ this._hasVScroll = false;
+ }else if(style == "scroll"){
+ this._hasVScroll = true;
+ }else{
+ this._hasVScroll = (this.scrollboxNode.scrollHeight > this.scrollboxNode.clientHeight);
+ }
+ }
+ }
+ if(hadScroll !== this._hasVScroll){
+ this.grid.update();
+ }
+ return this._hasVScroll; // Boolean
+ },
+
+ convertColPctToFixed: function(){
+ // Fix any percentage widths to be pixel values
+ var hasPct = false;
+ this.grid.initialWidth = "";
+ var cellNodes = dojo.query("th", this.headerContentNode);
+ var fixedWidths = dojo.map(cellNodes, function(c, vIdx){
+ var w = c.style.width;
+ dojo.attr(c, "vIdx", vIdx);
+ if(w && w.slice(-1) == "%"){
+ hasPct = true;
+ }else if(w && w.slice(-2) == "px"){
+ return window.parseInt(w, 10);
+ }
+ return dojo.contentBox(c).w;
+ });
+ if(hasPct){
+ dojo.forEach(this.grid.layout.cells, function(cell, idx){
+ if(cell.view == this){
+ var cellNode = cell.view.getHeaderCellNode(cell.index);
+ if(cellNode && dojo.hasAttr(cellNode, "vIdx")){
+ var vIdx = window.parseInt(dojo.attr(cellNode, "vIdx"));
+ this.setColWidth(idx, fixedWidths[vIdx]);
+ dojo.removeAttr(cellNode, "vIdx");
+ }
+ }
+ }, this);
+ return true;
+ }
+ return false;
+ },
+
+ adaptHeight: function(minusScroll){
+ if(!this.grid._autoHeight){
+ var h = (this.domNode.style.height && parseInt(this.domNode.style.height.replace(/px/,''), 10)) || this.domNode.clientHeight;
+ var self = this;
+ var checkOtherViewScrollers = function(){
+ var v;
+ for(var i in self.grid.views.views){
+ v = self.grid.views.views[i];
+ if(v !== self && v.hasHScrollbar()){
+ return true;
+ }
+ }
+ return false;
+ };
+ if(minusScroll || (this.noscroll && checkOtherViewScrollers())){
+ h -= dojox.html.metrics.getScrollbar().h;
+ }
+ dojox.grid.util.setStyleHeightPx(this.scrollboxNode, h);
+ }
+ this.hasVScrollbar(true);
+ },
+
+ adaptWidth: function(){
+ if(this.flexCells){
+ // the view content width
+ this.contentWidth = this.getContentWidth();
+ this.headerContentNode.firstChild.style.width = this.contentWidth;
+ }
+ // FIXME: it should be easier to get w from this.scrollboxNode.clientWidth,
+ // but clientWidth seemingly does not include scrollbar width in some cases
+ var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth();
+ if(!this._removingColumn){
+ w = Math.max(w, this.getColumnsWidth()) + 'px';
+ }else{
+ w = Math.min(w, this.getColumnsWidth()) + 'px';
+ this._removingColumn = false;
+ }
+ var cn = this.contentNode;
+ cn.style.width = w;
+ this.hasHScrollbar(true);
+ },
+
+ setSize: function(w, h){
+ var ds = this.domNode.style;
+ var hs = this.headerNode.style;
+
+ if(w){
+ ds.width = w;
+ hs.width = w;
+ }
+ ds.height = (h >= 0 ? h + 'px' : '');
+ },
+
+ renderRow: function(inRowIndex){
+ var rowNode = this.createRowNode(inRowIndex);
+ this.buildRow(inRowIndex, rowNode);
+ this.grid.edit.restore(this, inRowIndex);
+ return rowNode;
+ },
+
+ createRowNode: function(inRowIndex){
+ var node = document.createElement("div");
+ node.className = this.classTag + 'Row';
+ if (this instanceof dojox.grid._RowSelector){
+ dojo.attr(node,"role","presentation");
+ }else{
+ dojo.attr(node,"role","row");
+ if (this.grid.selectionMode != "none") {
+ dojo.attr(node, "aria-selected", "false"); //rows can be selected so add aria-selected prop
+ }
+ }
+ node[dojox.grid.util.gridViewTag] = this.id;
+ node[dojox.grid.util.rowIndexTag] = inRowIndex;
+ this.rowNodes[inRowIndex] = node;
+ return node;
+ },
+
+ buildRow: function(inRowIndex, inRowNode){
+
+ this.buildRowContent(inRowIndex, inRowNode);
+
+ this.styleRow(inRowIndex, inRowNode);
+
+
+ },
+
+ buildRowContent: function(inRowIndex, inRowNode){
+ inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex);
+ if(this.flexCells && this.contentWidth){
+ // FIXME: accessing firstChild here breaks encapsulation
+ inRowNode.firstChild.style.width = this.contentWidth;
+ }
+ dojox.grid.util.fire(this, "onAfterRow", [inRowIndex, this.structure.cells, inRowNode]);
+ },
+
+ rowRemoved:function(inRowIndex){
+ if(inRowIndex >= 0){
+ this._cleanupRowWidgets(this.getRowNode(inRowIndex));
+ }
+ this.grid.edit.save(this, inRowIndex);
+ delete this.rowNodes[inRowIndex];
+ },
+
+ getRowNode: function(inRowIndex){
+ return this.rowNodes[inRowIndex];
+ },
+
+ getCellNode: function(inRowIndex, inCellIndex){
+ var row = this.getRowNode(inRowIndex);
+ if(row){
+ return this.content.getCellNode(row, inCellIndex);
+ }
+ },
+
+ getHeaderCellNode: function(inCellIndex){
+ if(this.headerContentNode){
+ return this.header.getCellNode(this.headerContentNode, inCellIndex);
+ }
+ },
+
+ // styling
+ styleRow: function(inRowIndex, inRowNode){
+ inRowNode._style = getStyleText(inRowNode);
+ this.styleRowNode(inRowIndex, inRowNode);
+ },
+
+ styleRowNode: function(inRowIndex, inRowNode){
+ if(inRowNode){
+ this.doStyleRowNode(inRowIndex, inRowNode);
+ }
+ },
+
+ doStyleRowNode: function(inRowIndex, inRowNode){
+ this.grid.styleRowNode(inRowIndex, inRowNode);
+ },
+
+ // updating
+ updateRow: function(inRowIndex){
+ var rowNode = this.getRowNode(inRowIndex);
+ if(rowNode){
+ rowNode.style.height = '';
+ this.buildRow(inRowIndex, rowNode);
+ }
+ return rowNode;
+ },
+
+ updateRowStyles: function(inRowIndex){
+ this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex));
+ },
+
+ // scrolling
+ lastTop: 0,
+ firstScroll:0,
+
+ doscroll: function(inEvent){
+ //var s = dojo.marginBox(this.headerContentNode.firstChild);
+ var isLtr = dojo._isBodyLtr();
+ if(this.firstScroll < 2){
+ if((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll === 0)){
+ var s = dojo.marginBox(this.headerNodeContainer);
+ if(dojo.isIE){
+ this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + 'px';
+ }else if(dojo.isMoz){
+ //TODO currently only for FF, not sure for safari and opera
+ this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + 'px';
+ //this.headerNodeContainer.style.width = s.w + 'px';
+ //set scroll to right in FF
+ this.scrollboxNode.scrollLeft = isLtr ?
+ this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth :
+ this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth;
+ }
+ }
+ this.firstScroll++;
+ }
+ this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft;
+ // 'lastTop' is a semaphore to prevent feedback-loop with setScrollTop below
+ var top = this.scrollboxNode.scrollTop;
+ if(top !== this.lastTop){
+ this.grid.scrollTo(top);
+ }
+ },
+
+ setScrollTop: function(inTop){
+ // 'lastTop' is a semaphore to prevent feedback-loop with doScroll above
+ this.lastTop = inTop;
+ this.scrollboxNode.scrollTop = inTop;
+ return this.scrollboxNode.scrollTop;
+ },
+
+ // event handlers (direct from DOM)
+ doContentEvent: function(e){
+ if(this.content.decorateEvent(e)){
+ this.grid.onContentEvent(e);
+ }
+ },
+
+ doHeaderEvent: function(e){
+ if(this.header.decorateEvent(e)){
+ this.grid.onHeaderEvent(e);
+ }
+ },
+
+ // event dispatch(from Grid)
+ dispatchContentEvent: function(e){
+ return this.content.dispatchEvent(e);
+ },
+
+ dispatchHeaderEvent: function(e){
+ return this.header.dispatchEvent(e);
+ },
+
+ // column resizing
+ setColWidth: function(inIndex, inWidth){
+ this.grid.setCellWidth(inIndex, inWidth + 'px');
+ },
+
+ update: function(){
+ if(!this.domNode){
+ return;
+ }
+ this.content.update();
+ this.grid.update();
+ //get scroll after update or scroll left setting goes wrong on IE.
+ //See trac: #8040
+ var left = this.scrollboxNode.scrollLeft;
+ this.scrollboxNode.scrollLeft = left;
+ this.headerNode.scrollLeft = left;
+ }
+ });
+
+ dojo.declare("dojox.grid._GridAvatar", dojo.dnd.Avatar, {
+ construct: function(){
+ var dd = dojo.doc;
+
+ var a = dd.createElement("table");
+ a.cellPadding = a.cellSpacing = "0";
+ a.className = "dojoxGridDndAvatar";
+ a.style.position = "absolute";
+ a.style.zIndex = 1999;
+ a.style.margin = "0px"; // to avoid dojo.marginBox() problems with table's margins
+ var b = dd.createElement("tbody");
+ var tr = dd.createElement("tr");
+ var td = dd.createElement("td");
+ var img = dd.createElement("td");
+ tr.className = "dojoxGridDndAvatarItem";
+ img.className = "dojoxGridDndAvatarItemImage";
+ img.style.width = "16px";
+ var source = this.manager.source, node;
+ if(source.creator){
+ // create an avatar representation of the node
+ node = source._normalizedCreator(source.getItem(this.manager.nodes[0].id).data, "avatar").node;
+ }else{
+ // or just clone the node and hope it works
+ node = this.manager.nodes[0].cloneNode(true);
+ var table, tbody;
+ if(node.tagName.toLowerCase() == "tr"){
+ // insert extra table nodes
+ table = dd.createElement("table");
+ tbody = dd.createElement("tbody");
+ tbody.appendChild(node);
+ table.appendChild(tbody);
+ node = table;
+ }else if(node.tagName.toLowerCase() == "th"){
+ // insert extra table nodes
+ table = dd.createElement("table");
+ tbody = dd.createElement("tbody");
+ var r = dd.createElement("tr");
+ table.cellPadding = table.cellSpacing = "0";
+ r.appendChild(node);
+ tbody.appendChild(r);
+ table.appendChild(tbody);
+ node = table;
+ }
+ }
+ node.id = "";
+ td.appendChild(node);
+ tr.appendChild(img);
+ tr.appendChild(td);
+ dojo.style(tr, "opacity", 0.9);
+ b.appendChild(tr);
+
+ a.appendChild(b);
+ this.node = a;
+
+ var m = dojo.dnd.manager();
+ this.oldOffsetY = m.OFFSET_Y;
+ m.OFFSET_Y = 1;
+ },
+ destroy: function(){
+ dojo.dnd.manager().OFFSET_Y = this.oldOffsetY;
+ this.inherited(arguments);
+ }
+ });
+
+ var oldMakeAvatar = dojo.dnd.manager().makeAvatar;
+ dojo.dnd.manager().makeAvatar = function(){
+ var src = this.source;
+ if(src.viewIndex !== undefined && !dojo.hasClass(dojo.body(),"dijit_a11y")){
+ return new dojox.grid._GridAvatar(this);
+ }
+ return oldMakeAvatar.call(dojo.dnd.manager());
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._RowSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._RowSelector"] = true;
+dojo.provide("dojox.grid._RowSelector");
+
+
+dojo.declare('dojox.grid._RowSelector', dojox.grid._View, {
+ // summary:
+ // Custom grid view. If used in a grid structure, provides a small selectable region for grid rows.
+ defaultWidth: "2em",
+ noscroll: true,
+ padBorderWidth: 2,
+ buildRendering: function(){
+ this.inherited('buildRendering', arguments);
+ this.scrollboxNode.style.overflow = "hidden";
+ this.headerNode.style.visibility = "hidden";
+ },
+ getWidth: function(){
+ return this.viewWidth || this.defaultWidth;
+ },
+ buildRowContent: function(inRowIndex, inRowNode){
+ var w = this.contentWidth || 0;
+ inRowNode.innerHTML = '<table class="dojoxGridRowbarTable" style="width:' + w + 'px;height:1px;" border="0" cellspacing="0" cellpadding="0" role="presentation"><tr><td class="dojoxGridRowbarInner">&nbsp;</td></tr></table>';
+ },
+ renderHeader: function(){
+ },
+ updateRow: function(){
+ },
+ resize: function(){
+ this.adaptHeight();
+ },
+ adaptWidth: function(){
+ // Only calculate this here - rather than every call to buildRowContent
+ if(!("contentWidth" in this) && this.contentNode){
+ this.contentWidth = this.contentNode.offsetWidth - this.padBorderWidth;
+ }
+ },
+ // styling
+ doStyleRowNode: function(inRowIndex, inRowNode){
+ var n = [ "dojoxGridRowbar dojoxGridNonNormalizedCell" ];
+ if(this.grid.rows.isOver(inRowIndex)){
+ n.push("dojoxGridRowbarOver");
+ }
+ if(this.grid.selection.isSelected(inRowIndex)){
+ n.push("dojoxGridRowbarSelected");
+ }
+ inRowNode.className = n.join(" ");
+ },
+ // event handlers
+ domouseover: function(e){
+ this.grid.onMouseOverRow(e);
+ },
+ domouseout: function(e){
+ if(!this.isIntraRowEvent(e)){
+ this.grid.onMouseOutRow(e);
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Layout"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Layout"] = true;
+dojo.provide("dojox.grid._Layout");
+
+
+
+dojo.declare("dojox.grid._Layout", null, {
+ // summary:
+ // Controls grid cell layout. Owned by grid and used internally.
+ constructor: function(inGrid){
+ this.grid = inGrid;
+ },
+ // flat array of grid cells
+ cells: [],
+ // structured array of grid cells
+ structure: null,
+ // default cell width
+ defaultWidth: '6em',
+
+ // methods
+ moveColumn: function(sourceViewIndex, destViewIndex, cellIndex, targetIndex, before){
+ var source_cells = this.structure[sourceViewIndex].cells[0];
+ var dest_cells = this.structure[destViewIndex].cells[0];
+
+ var cell = null;
+ var cell_ri = 0;
+ var target_ri = 0;
+
+ for(var i=0, c; c=source_cells[i]; i++){
+ if(c.index == cellIndex){
+ cell_ri = i;
+ break;
+ }
+ }
+ cell = source_cells.splice(cell_ri, 1)[0];
+ cell.view = this.grid.views.views[destViewIndex];
+
+ for(i=0, c=null; c=dest_cells[i]; i++){
+ if(c.index == targetIndex){
+ target_ri = i;
+ break;
+ }
+ }
+ if(!before){
+ target_ri += 1;
+ }
+ dest_cells.splice(target_ri, 0, cell);
+
+ var sortedCell = this.grid.getCell(this.grid.getSortIndex());
+ if(sortedCell){
+ sortedCell._currentlySorted = this.grid.getSortAsc();
+ }
+
+ this.cells = [];
+ cellIndex = 0;
+ var v;
+ for(i=0; v=this.structure[i]; i++){
+ for(var j=0, cs; cs=v.cells[j]; j++){
+ for(var k=0; c=cs[k]; k++){
+ c.index = cellIndex;
+ this.cells.push(c);
+ if("_currentlySorted" in c){
+ var si = cellIndex + 1;
+ si *= c._currentlySorted ? 1 : -1;
+ this.grid.sortInfo = si;
+ delete c._currentlySorted;
+ }
+ cellIndex++;
+ }
+ }
+ }
+ this.grid.setupHeaderMenu();
+ //this.grid.renderOnIdle();
+ },
+
+ setColumnVisibility: function(columnIndex, visible){
+ var cell = this.cells[columnIndex];
+ if(cell.hidden == visible){
+ cell.hidden = !visible;
+ var v = cell.view, w = v.viewWidth;
+ if(w && w != "auto"){
+ v._togglingColumn = dojo.marginBox(cell.getHeaderNode()).w || 0;
+ }
+ v.update();
+ return true;
+ }else{
+ return false;
+ }
+ },
+
+ addCellDef: function(inRowIndex, inCellIndex, inDef){
+ var self = this;
+ var getCellWidth = function(inDef){
+ var w = 0;
+ if(inDef.colSpan > 1){
+ w = 0;
+ }else{
+ w = inDef.width || self._defaultCellProps.width || self.defaultWidth;
+
+ if(!isNaN(w)){
+ w = w + "em";
+ }
+ }
+ return w;
+ };
+
+ var props = {
+ grid: this.grid,
+ subrow: inRowIndex,
+ layoutIndex: inCellIndex,
+ index: this.cells.length
+ };
+
+ if(inDef && inDef instanceof dojox.grid.cells._Base){
+ var new_cell = dojo.clone(inDef);
+ props.unitWidth = getCellWidth(new_cell._props);
+ new_cell = dojo.mixin(new_cell, this._defaultCellProps, inDef._props, props);
+ return new_cell;
+ }
+
+ var cell_type = inDef.type || this._defaultCellProps.type || dojox.grid.cells.Cell;
+
+ props.unitWidth = getCellWidth(inDef);
+ return new cell_type(dojo.mixin({}, this._defaultCellProps, inDef, props));
+ },
+
+ addRowDef: function(inRowIndex, inDef){
+ var result = [];
+ var relSum = 0, pctSum = 0, doRel = true;
+ for(var i=0, def, cell; (def=inDef[i]); i++){
+ cell = this.addCellDef(inRowIndex, i, def);
+ result.push(cell);
+ this.cells.push(cell);
+ // Check and calculate the sum of all relative widths
+ if(doRel && cell.relWidth){
+ relSum += cell.relWidth;
+ }else if(cell.width){
+ var w = cell.width;
+ if(typeof w == "string" && w.slice(-1) == "%"){
+ pctSum += window.parseInt(w, 10);
+ }else if(w == "auto"){
+ // relative widths doesn't play nice with auto - since we
+ // don't have a way of knowing how much space the auto is
+ // supposed to take up.
+ doRel = false;
+ }
+ }
+ }
+ if(relSum && doRel){
+ // We have some kind of relWidths specified - so change them to %
+ dojo.forEach(result, function(cell){
+ if(cell.relWidth){
+ cell.width = cell.unitWidth = ((cell.relWidth / relSum) * (100 - pctSum)) + "%";
+ }
+ });
+ }
+ return result;
+
+ },
+
+ addRowsDef: function(inDef){
+ var result = [];
+ if(dojo.isArray(inDef)){
+ if(dojo.isArray(inDef[0])){
+ for(var i=0, row; inDef && (row=inDef[i]); i++){
+ result.push(this.addRowDef(i, row));
+ }
+ }else{
+ result.push(this.addRowDef(0, inDef));
+ }
+ }
+ return result;
+ },
+
+ addViewDef: function(inDef){
+ this._defaultCellProps = inDef.defaultCell || {};
+ if(inDef.width && inDef.width == "auto"){
+ delete inDef.width;
+ }
+ return dojo.mixin({}, inDef, {cells: this.addRowsDef(inDef.rows || inDef.cells)});
+ },
+
+ setStructure: function(inStructure){
+ this.fieldIndex = 0;
+ this.cells = [];
+ var s = this.structure = [];
+
+ if(this.grid.rowSelector){
+ var sel = { type: dojox._scopeName + ".grid._RowSelector" };
+
+ if(dojo.isString(this.grid.rowSelector)){
+ var width = this.grid.rowSelector;
+
+ if(width == "false"){
+ sel = null;
+ }else if(width != "true"){
+ sel['width'] = width;
+ }
+ }else{
+ if(!this.grid.rowSelector){
+ sel = null;
+ }
+ }
+
+ if(sel){
+ s.push(this.addViewDef(sel));
+ }
+ }
+
+ var isCell = function(def){
+ return ("name" in def || "field" in def || "get" in def);
+ };
+
+ var isRowDef = function(def){
+ if(dojo.isArray(def)){
+ if(dojo.isArray(def[0]) || isCell(def[0])){
+ return true;
+ }
+ }
+ return false;
+ };
+
+ var isView = function(def){
+ return (def !== null && dojo.isObject(def) &&
+ ("cells" in def || "rows" in def || ("type" in def && !isCell(def))));
+ };
+
+ if(dojo.isArray(inStructure)){
+ var hasViews = false;
+ for(var i=0, st; (st=inStructure[i]); i++){
+ if(isView(st)){
+ hasViews = true;
+ break;
+ }
+ }
+ if(!hasViews){
+ s.push(this.addViewDef({ cells: inStructure }));
+ }else{
+ for(i=0; (st=inStructure[i]); i++){
+ if(isRowDef(st)){
+ s.push(this.addViewDef({ cells: st }));
+ }else if(isView(st)){
+ s.push(this.addViewDef(st));
+ }
+ }
+ }
+ }else if(isView(inStructure)){
+ // it's a view object
+ s.push(this.addViewDef(inStructure));
+ }
+
+ this.cellCount = this.cells.length;
+ this.grid.setupHeaderMenu();
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._ViewManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._ViewManager"] = true;
+dojo.provide("dojox.grid._ViewManager");
+
+dojo.declare('dojox.grid._ViewManager', null, {
+ // summary:
+ // A collection of grid views. Owned by grid and used internally for managing grid views.
+ // description:
+ // Grid creates views automatically based on grid's layout structure.
+ // Users should typically not need to access individual views or the views collection directly.
+ constructor: function(inGrid){
+ this.grid = inGrid;
+ },
+
+ defaultWidth: 200,
+
+ views: [],
+
+ // operations
+ resize: function(){
+ this.onEach("resize");
+ },
+
+ render: function(){
+ this.onEach("render");
+ },
+
+ // views
+ addView: function(inView){
+ inView.idx = this.views.length;
+ this.views.push(inView);
+ },
+
+ destroyViews: function(){
+ for(var i=0, v; v=this.views[i]; i++){
+ v.destroy();
+ }
+ this.views = [];
+ },
+
+ getContentNodes: function(){
+ var nodes = [];
+ for(var i=0, v; v=this.views[i]; i++){
+ nodes.push(v.contentNode);
+ }
+ return nodes;
+ },
+
+ forEach: function(inCallback){
+ for(var i=0, v; v=this.views[i]; i++){
+ inCallback(v, i);
+ }
+ },
+
+ onEach: function(inMethod, inArgs){
+ inArgs = inArgs || [];
+ for(var i=0, v; v=this.views[i]; i++){
+ if(inMethod in v){
+ v[inMethod].apply(v, inArgs);
+ }
+ }
+ },
+
+ // layout
+ normalizeHeaderNodeHeight: function(){
+ var rowNodes = [];
+ for(var i=0, v; (v=this.views[i]); i++){
+ if(v.headerContentNode.firstChild){
+ rowNodes.push(v.headerContentNode);
+ }
+ }
+ this.normalizeRowNodeHeights(rowNodes);
+ },
+
+ normalizeRowNodeHeights: function(inRowNodes){
+ var h = 0;
+ var currHeights = [];
+ if(this.grid.rowHeight){
+ h = this.grid.rowHeight;
+ }else{
+ if(inRowNodes.length <= 1){
+ // no need to normalize if we are the only one...
+ return;
+ }
+ for(var i=0, n; (n=inRowNodes[i]); i++){
+ // We only care about the height - so don't use marginBox. This
+ // depends on the container not having any margin (which it shouldn't)
+ // Also - we only look up the height if the cell doesn't have the
+ // dojoxGridNonNormalizedCell class (like for row selectors)
+ if(!dojo.hasClass(n, "dojoxGridNonNormalizedCell")){
+ currHeights[i] = n.firstChild.offsetHeight;
+ h = Math.max(h, currHeights[i]);
+ }
+ }
+ h = (h >= 0 ? h : 0);
+
+ //Work around odd FF3 rendering bug: #8864.
+ //A one px increase fixes FireFox 3's rounding bug for fractional font sizes.
+ if(dojo.isMoz && h){h++;}
+ }
+ for(i=0; (n=inRowNodes[i]); i++){
+ if(currHeights[i] != h){
+ n.firstChild.style.height = h + "px";
+ }
+ }
+ },
+
+ resetHeaderNodeHeight: function(){
+ for(var i=0, v, n; (v=this.views[i]); i++){
+ n = v.headerContentNode.firstChild;
+ if(n){
+ n.style.height = "";
+ }
+ }
+ },
+
+ renormalizeRow: function(inRowIndex){
+ var rowNodes = [];
+ for(var i=0, v, n; (v=this.views[i])&&(n=v.getRowNode(inRowIndex)); i++){
+ n.firstChild.style.height = '';
+ rowNodes.push(n);
+ }
+ this.normalizeRowNodeHeights(rowNodes);
+ },
+
+ getViewWidth: function(inIndex){
+ return this.views[inIndex].getWidth() || this.defaultWidth;
+ },
+
+ // must be called after view widths are properly set or height can be miscalculated
+ // if there are flex columns
+ measureHeader: function(){
+ // need to reset view header heights so they are properly measured.
+ this.resetHeaderNodeHeight();
+ this.forEach(function(inView){
+ inView.headerContentNode.style.height = '';
+ });
+ var h = 0;
+ // calculate maximum view header height
+ this.forEach(function(inView){
+ h = Math.max(inView.headerNode.offsetHeight, h);
+ });
+ return h;
+ },
+
+ measureContent: function(){
+ var h = 0;
+ this.forEach(function(inView){
+ h = Math.max(inView.domNode.offsetHeight, h);
+ });
+ return h;
+ },
+
+ findClient: function(inAutoWidth){
+ // try to use user defined client
+ var c = this.grid.elasticView || -1;
+ // attempt to find implicit client
+ if(c < 0){
+ for(var i=1, v; (v=this.views[i]); i++){
+ if(v.viewWidth){
+ for(i=1; (v=this.views[i]); i++){
+ if(!v.viewWidth){
+ c = i;
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+ // client is in the middle by default
+ if(c < 0){
+ c = Math.floor(this.views.length / 2);
+ }
+ return c;
+ },
+
+ arrange: function(l, w){
+ var i, v, vw, len = this.views.length;
+ // find the client
+ var c = (w <= 0 ? len : this.findClient());
+ // layout views
+ var setPosition = function(v, l){
+ var ds = v.domNode.style;
+ var hs = v.headerNode.style;
+
+ if(!dojo._isBodyLtr()){
+ ds.right = l + 'px';
+ // fixed rtl, the scrollbar is on the right side in FF
+ if (dojo.isMoz) {
+ hs.right = l + v.getScrollbarWidth() + 'px';
+ hs.width = parseInt(hs.width, 10) - v.getScrollbarWidth() + 'px';
+ }else{
+ hs.right = l + 'px';
+ }
+ }else{
+ ds.left = l + 'px';
+ hs.left = l + 'px';
+ }
+ ds.top = 0 + 'px';
+ hs.top = 0;
+ };
+ // for views left of the client
+ //BiDi TODO: The left and right should not appear in BIDI environment. Should be replaced with
+ //leading and tailing concept.
+ for(i=0; (v=this.views[i])&&(i<c); i++){
+ // get width
+ vw = this.getViewWidth(i);
+ // process boxes
+ v.setSize(vw, 0);
+ setPosition(v, l);
+ if(v.headerContentNode && v.headerContentNode.firstChild){
+ vw = v.getColumnsWidth()+v.getScrollbarWidth();
+ }else{
+ vw = v.domNode.offsetWidth;
+ }
+ // update position
+ l += vw;
+ }
+ // next view (is the client, i++ == c)
+ i++;
+ // start from the right edge
+ var r = w;
+ // for views right of the client (iterated from the right)
+ for(var j=len-1; (v=this.views[j])&&(i<=j); j--){
+ // get width
+ vw = this.getViewWidth(j);
+ // set size
+ v.setSize(vw, 0);
+ // measure in pixels
+ vw = v.domNode.offsetWidth;
+ // update position
+ r -= vw;
+ // set position
+ setPosition(v, r);
+ }
+ if(c<len){
+ v = this.views[c];
+ // position the client box between left and right boxes
+ vw = Math.max(1, r-l);
+ // set size
+ v.setSize(vw + 'px', 0);
+ setPosition(v, l);
+ }
+ return l;
+ },
+
+ // rendering
+ renderRow: function(inRowIndex, inNodes, skipRenorm){
+ var rowNodes = [];
+ for(var i=0, v, n, rowNode; (v=this.views[i])&&(n=inNodes[i]); i++){
+ rowNode = v.renderRow(inRowIndex);
+ n.appendChild(rowNode);
+ rowNodes.push(rowNode);
+ }
+ if(!skipRenorm){
+ this.normalizeRowNodeHeights(rowNodes);
+ }
+ },
+
+ rowRemoved: function(inRowIndex){
+ this.onEach("rowRemoved", [ inRowIndex ]);
+ },
+
+ // updating
+ updateRow: function(inRowIndex, skipRenorm){
+ for(var i=0, v; v=this.views[i]; i++){
+ v.updateRow(inRowIndex);
+ }
+ if(!skipRenorm){
+ this.renormalizeRow(inRowIndex);
+ }
+ },
+
+ updateRowStyles: function(inRowIndex){
+ this.onEach("updateRowStyles", [ inRowIndex ]);
+ },
+
+ // scrolling
+ setScrollTop: function(inTop){
+ var top = inTop;
+ for(var i=0, v; v=this.views[i]; i++){
+ top = v.setScrollTop(inTop);
+ // Work around IE not firing scroll events that cause header offset
+ // issues to occur.
+ if(dojo.isIE && v.headerNode && v.scrollboxNode){
+ v.headerNode.scrollLeft = v.scrollboxNode.scrollLeft;
+ }
+ }
+ return top;
+ //this.onEach("setScrollTop", [ inTop ]);
+ },
+
+ getFirstScrollingView: function(){
+ // summary: Returns the first grid view with a scroll bar
+ for(var i=0, v; (v=this.views[i]); i++){
+ if(v.hasHScrollbar() || v.hasVScrollbar()){
+ return v;
+ }
+ }
+ return null;
+ }
+
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._RowManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._RowManager"] = true;
+dojo.provide("dojox.grid._RowManager");
+
+(function(){
+ var setStyleText = function(inNode, inStyleText){
+ if(inNode.style.cssText == undefined){
+ inNode.setAttribute("style", inStyleText);
+ }else{
+ inNode.style.cssText = inStyleText;
+ }
+ };
+
+ dojo.declare("dojox.grid._RowManager", null, {
+ // Stores information about grid rows. Owned by grid and used internally.
+ constructor: function(inGrid){
+ this.grid = inGrid;
+ },
+ linesToEms: 2,
+ overRow: -2,
+ // styles
+ prepareStylingRow: function(inRowIndex, inRowNode){
+ return {
+ index: inRowIndex,
+ node: inRowNode,
+ odd: Boolean(inRowIndex&1),
+ selected: !!this.grid.selection.isSelected(inRowIndex),
+ over: this.isOver(inRowIndex),
+ customStyles: "",
+ customClasses: "dojoxGridRow"
+ };
+ },
+ styleRowNode: function(inRowIndex, inRowNode){
+ var row = this.prepareStylingRow(inRowIndex, inRowNode);
+ this.grid.onStyleRow(row);
+ this.applyStyles(row);
+ },
+ applyStyles: function(inRow){
+ var i = inRow;
+
+ i.node.className = i.customClasses;
+ var h = i.node.style.height;
+ setStyleText(i.node, i.customStyles + ';' + (i.node._style||''));
+ i.node.style.height = h;
+ },
+ updateStyles: function(inRowIndex){
+ this.grid.updateRowStyles(inRowIndex);
+ },
+ // states and events
+ setOverRow: function(inRowIndex){
+ var last = this.overRow;
+ this.overRow = inRowIndex;
+ if((last!=this.overRow)&&(dojo.isString(last) || last >= 0)){
+ this.updateStyles(last);
+ }
+ this.updateStyles(this.overRow);
+ },
+ isOver: function(inRowIndex){
+ return (this.overRow == inRowIndex && !dojo.hasClass(this.grid.domNode, "dojoxGridColumnResizing"));
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._FocusManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._FocusManager"] = true;
+dojo.provide("dojox.grid._FocusManager");
+
+
+
+// focus management
+dojo.declare("dojox.grid._FocusManager", null, {
+ // summary:
+ // Controls grid cell focus. Owned by grid and used internally for focusing.
+ // Note: grid cell actually receives keyboard input only when cell is being edited.
+ constructor: function(inGrid){
+ this.grid = inGrid;
+ this.cell = null;
+ this.rowIndex = -1;
+ this._connects = [];
+ this.headerMenu = this.grid.headerMenu;
+ this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus"));
+ this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur"));
+ this._connects.push(dojo.connect(this.grid.domNode, "oncontextmenu", this, "doContextMenu"));
+ this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus"));
+ this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur"));
+ this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus"));
+ this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus"));
+ },
+ destroy: function(){
+ dojo.forEach(this._connects, dojo.disconnect);
+ delete this.grid;
+ delete this.cell;
+ },
+ _colHeadNode: null,
+ _colHeadFocusIdx: null,
+ _contextMenuBindNode: null,
+ tabbingOut: false,
+ focusClass: "dojoxGridCellFocus",
+ focusView: null,
+ initFocusView: function(){
+ this.focusView = this.grid.views.getFirstScrollingView() || this.focusView;
+ this._initColumnHeaders();
+ },
+ isFocusCell: function(inCell, inRowIndex){
+ // summary:
+ // states if the given cell is focused
+ // inCell: object
+ // grid cell object
+ // inRowIndex: int
+ // grid row index
+ // returns:
+ // true of the given grid cell is focused
+ return (this.cell == inCell) && (this.rowIndex == inRowIndex);
+ },
+ isLastFocusCell: function(){
+ if(this.cell){
+ return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1);
+ }
+ return false;
+ },
+ isFirstFocusCell: function(){
+ if(this.cell){
+ return (this.rowIndex === 0) && (this.cell.index === 0);
+ }
+ return false;
+ },
+ isNoFocusCell: function(){
+ return (this.rowIndex < 0) || !this.cell;
+ },
+ isNavHeader: function(){
+ // summary:
+ // states whether currently navigating among column headers.
+ // returns:
+ // true if focus is on a column header; false otherwise.
+ return (!!this._colHeadNode);
+ },
+ getHeaderIndex: function(){
+ // summary:
+ // if one of the column headers currently has focus, return its index.
+ // returns:
+ // index of the focused column header, or -1 if none have focus.
+ if(this._colHeadNode){
+ return dojo.indexOf(this._findHeaderCells(), this._colHeadNode);
+ }else{
+ return -1;
+ }
+ },
+ _focusifyCellNode: function(inBork){
+ var n = this.cell && this.cell.getNode(this.rowIndex);
+ if(n){
+ dojo.toggleClass(n, this.focusClass, inBork);
+ if(inBork){
+ var sl = this.scrollIntoView();
+ try{
+ if(!this.grid.edit.isEditing()){
+ dojox.grid.util.fire(n, "focus");
+ if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; }
+ }
+ }catch(e){}
+ }
+ }
+ },
+ _delayedCellFocus: function(){
+ if(this.isNavHeader()||!this.grid._focused){
+ return;
+ }
+ var n = this.cell && this.cell.getNode(this.rowIndex);
+ if(n){
+ try{
+ if(!this.grid.edit.isEditing()){
+ dojo.toggleClass(n, this.focusClass, true);
+ this.blurHeader();
+ dojox.grid.util.fire(n, "focus");
+ }
+ }
+ catch(e){}
+ }
+ },
+ _delayedHeaderFocus: function(){
+ if(this.isNavHeader()){
+ this.focusHeader();
+ this.grid.domNode.focus();
+ }
+ },
+ _initColumnHeaders: function(){
+ var headers = this._findHeaderCells();
+ for(var i = 0; i < headers.length; i++){
+ this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus"));
+ this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur"));
+ }
+ },
+ _findHeaderCells: function(){
+ // This should be a one liner:
+ // dojo.query("th[tabindex=-1]", this.grid.viewsHeaderNode);
+ // But there is a bug in dojo.query() for IE -- see trac #7037.
+ var allHeads = dojo.query("th", this.grid.viewsHeaderNode);
+ var headers = [];
+ for (var i = 0; i < allHeads.length; i++){
+ var aHead = allHeads[i];
+ var hasTabIdx = dojo.hasAttr(aHead, "tabIndex");
+ var tabindex = dojo.attr(aHead, "tabIndex");
+ if (hasTabIdx && tabindex < 0) {
+ headers.push(aHead);
+ }
+ }
+ return headers;
+ },
+ _setActiveColHeader: function(/*Node*/colHeaderNode, /*Integer*/colFocusIdx, /*Integer*/ prevColFocusIdx){
+ //console.log("setActiveColHeader() - colHeaderNode:colFocusIdx:prevColFocusIdx = " + colHeaderNode + ":" + colFocusIdx + ":" + prevColFocusIdx);
+ dojo.attr(this.grid.domNode, "aria-activedescendant",colHeaderNode.id);
+ if (prevColFocusIdx != null && prevColFocusIdx >= 0 && prevColFocusIdx != colFocusIdx){
+ dojo.toggleClass(this._findHeaderCells()[prevColFocusIdx],this.focusClass,false);
+ }
+ dojo.toggleClass(colHeaderNode,this.focusClass, true);
+ this._colHeadNode = colHeaderNode;
+ this._colHeadFocusIdx = colFocusIdx;
+ this._scrollHeader(this._colHeadFocusIdx);
+ },
+ scrollIntoView: function(){
+ var info = (this.cell ? this._scrollInfo(this.cell) : null);
+ if(!info || !info.s){
+ return null;
+ }
+ var rt = this.grid.scroller.findScrollTop(this.rowIndex);
+ // place cell within horizontal view
+ if(info.n && info.sr){
+ if(info.n.offsetLeft + info.n.offsetWidth > info.sr.l + info.sr.w){
+ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w;
+ }else if(info.n.offsetLeft < info.sr.l){
+ info.s.scrollLeft = info.n.offsetLeft;
+ }
+ }
+ // place cell within vertical view
+ if(info.r && info.sr){
+ if(rt + info.r.offsetHeight > info.sr.t + info.sr.h){
+ this.grid.setScrollTop(rt + info.r.offsetHeight - info.sr.h);
+ }else if(rt < info.sr.t){
+ this.grid.setScrollTop(rt);
+ }
+ }
+
+ return info.s.scrollLeft;
+ },
+ _scrollInfo: function(cell, domNode){
+ if(cell){
+ var cl = cell,
+ sbn = cl.view.scrollboxNode,
+ sbnr = {
+ w: sbn.clientWidth,
+ l: sbn.scrollLeft,
+ t: sbn.scrollTop,
+ h: sbn.clientHeight
+ },
+ rn = cl.view.getRowNode(this.rowIndex);
+ return {
+ c: cl,
+ s: sbn,
+ sr: sbnr,
+ n: (domNode ? domNode : cell.getNode(this.rowIndex)),
+ r: rn
+ };
+ }
+ return null;
+ },
+ _scrollHeader: function(currentIdx){
+ var info = null;
+ if(this._colHeadNode){
+ var cell = this.grid.getCell(currentIdx);
+ info = this._scrollInfo(cell, cell.getNode(0));
+ }
+ if(info && info.s && info.sr && info.n){
+ // scroll horizontally as needed.
+ var scroll = info.sr.l + info.sr.w;
+ if(info.n.offsetLeft + info.n.offsetWidth > scroll){
+ info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w;
+ }else if(info.n.offsetLeft < info.sr.l){
+ info.s.scrollLeft = info.n.offsetLeft;
+ }else if(dojo.isIE <= 7 && cell && cell.view.headerNode){
+ // Trac 7158: scroll dojoxGridHeader for IE7 and lower
+ cell.view.headerNode.scrollLeft = info.s.scrollLeft;
+ }
+ }
+ },
+ _isHeaderHidden: function(){
+ // summary:
+ // determine if the grid headers are hidden
+ // relies on documented technique of setting .dojoxGridHeader { display:none; }
+ // returns: Boolean
+ // true if headers are hidden
+ // false if headers are not hidden
+
+ var curView = this.focusView;
+ if (!curView){
+ // find one so we can determine if headers are hidden
+ // there is no focusView after adding items to empty grid (test_data_grid_empty.html)
+ for (var i = 0, cView; (cView = this.grid.views.views[i]); i++) {
+ if(cView.headerNode ){
+ curView=cView;
+ break;
+ }
+ }
+ }
+ return (curView && dojo.getComputedStyle(curView.headerNode).display == "none");
+ },
+ colSizeAdjust: function (e, colIdx, delta){ // adjust the column specified by colIdx by the specified delta px
+ var headers = this._findHeaderCells();
+ var view = this.focusView;
+ if (!view) {
+ for (var i = 0, cView; (cView = this.grid.views.views[i]); i++) {
+ // find first view with a tableMap in order to work with empty grid
+ if(cView.header.tableMap.map ){
+ view=cView;
+ break;
+ }
+ }
+ }
+ var curHeader = headers[colIdx];
+ if (!view || (colIdx == headers.length-1 && colIdx === 0)){
+ return; // can't adjust single col. grid
+ }
+ view.content.baseDecorateEvent(e);
+ // need to adjust event with header cell info since focus is no longer on header cell
+ e.cellNode = curHeader; //this.findCellTarget(e.target, e.rowNode);
+ e.cellIndex = view.content.getCellNodeIndex(e.cellNode);
+ e.cell = (e.cellIndex >= 0 ? this.grid.getCell(e.cellIndex) : null);
+ if (view.header.canResize(e)){
+ var deltaObj = {
+ l: delta
+ };
+ var drag = view.header.colResizeSetup(e,false);
+ view.header.doResizeColumn(drag, null, deltaObj);
+ view.update();
+ }
+ },
+ styleRow: function(inRow){
+ return;
+ },
+ setFocusIndex: function(inRowIndex, inCellIndex){
+ // summary:
+ // focuses the given grid cell
+ // inRowIndex: int
+ // grid row index
+ // inCellIndex: int
+ // grid cell index
+ this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex);
+ },
+ setFocusCell: function(inCell, inRowIndex){
+ // summary:
+ // focuses the given grid cell
+ // inCell: object
+ // grid cell object
+ // inRowIndex: int
+ // grid row index
+ if(inCell && !this.isFocusCell(inCell, inRowIndex)){
+ this.tabbingOut = false;
+ if (this._colHeadNode){
+ this.blurHeader();
+ }
+ this._colHeadNode = this._colHeadFocusIdx = null;
+ this.focusGridView();
+ this._focusifyCellNode(false);
+ this.cell = inCell;
+ this.rowIndex = inRowIndex;
+ this._focusifyCellNode(true);
+ }
+ // even if this cell isFocusCell, the document focus may need to be rejiggered
+ // call opera on delay to prevent keypress from altering focus
+ if(dojo.isOpera){
+ setTimeout(dojo.hitch(this.grid, 'onCellFocus', this.cell, this.rowIndex), 1);
+ }else{
+ this.grid.onCellFocus(this.cell, this.rowIndex);
+ }
+ },
+ next: function(){
+ // summary:
+ // focus next grid cell
+ if(this.cell){
+ var row=this.rowIndex, col=this.cell.index+1, cc=this.grid.layout.cellCount-1, rc=this.grid.rowCount-1;
+ if(col > cc){
+ col = 0;
+ row++;
+ }
+ if(row > rc){
+ col = cc;
+ row = rc;
+ }
+ if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells
+ var nextCell = this.grid.getCell(col);
+ if (!this.isLastFocusCell() && !nextCell.editable){
+ this.cell=nextCell;
+ this.rowIndex=row;
+ this.next();
+ return;
+ }
+ }
+ this.setFocusIndex(row, col);
+ }
+ },
+ previous: function(){
+ // summary:
+ // focus previous grid cell
+ if(this.cell){
+ var row=(this.rowIndex || 0), col=(this.cell.index || 0) - 1;
+ if(col < 0){
+ col = this.grid.layout.cellCount-1;
+ row--;
+ }
+ if(row < 0){
+ row = 0;
+ col = 0;
+ }
+ if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells
+ var prevCell = this.grid.getCell(col);
+ if (!this.isFirstFocusCell() && !prevCell.editable){
+ this.cell=prevCell;
+ this.rowIndex=row;
+ this.previous();
+ return;
+ }
+ }
+ this.setFocusIndex(row, col);
+ }
+ },
+ move: function(inRowDelta, inColDelta) {
+ // summary:
+ // focus grid cell or simulate focus to column header based on position relative to current focus
+ // inRowDelta: int
+ // vertical distance from current focus
+ // inColDelta: int
+ // horizontal distance from current focus
+
+ var colDir = inColDelta < 0 ? -1 : 1;
+ // Handle column headers.
+ if(this.isNavHeader()){
+ var headers = this._findHeaderCells();
+ var savedIdx = currentIdx = dojo.indexOf(headers, this._colHeadNode);
+ currentIdx += inColDelta;
+ while(currentIdx >=0 && currentIdx < headers.length && headers[currentIdx].style.display == "none"){
+ // skip over hidden column headers
+ currentIdx += colDir;
+ }
+ if((currentIdx >= 0) && (currentIdx < headers.length)){
+ this._setActiveColHeader(headers[currentIdx],currentIdx, savedIdx);
+ }
+ }else{
+ if(this.cell){
+ // Handle grid proper.
+ var sc = this.grid.scroller,
+ r = this.rowIndex,
+ rc = this.grid.rowCount-1,
+ row = Math.min(rc, Math.max(0, r+inRowDelta));
+ if(inRowDelta){
+ if(inRowDelta>0){
+ if(row > sc.getLastPageRow(sc.page)){
+ //need to load additional data, let scroller do that
+ this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+ }
+ }else if(inRowDelta<0){
+ if(row <= sc.getPageRow(sc.page)){
+ //need to load additional data, let scroller do that
+ this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+ }
+ }
+ }
+ var cc = this.grid.layout.cellCount-1,
+ i = this.cell.index,
+ col = Math.min(cc, Math.max(0, i+inColDelta));
+ var cell = this.grid.getCell(col);
+ while(col>=0 && col < cc && cell && cell.hidden === true){
+ // skip hidden cells
+ col += colDir;
+ cell = this.grid.getCell(col);
+ }
+ if (!cell || cell.hidden === true){
+ // don't change col if would move to hidden
+ col = i;
+ }
+ this.setFocusIndex(row, col);
+ if(inRowDelta){
+ this.grid.updateRow(r);
+ }
+ }
+ }
+ },
+ previousKey: function(e){
+ if(this.grid.edit.isEditing()){
+ dojo.stopEvent(e);
+ this.previous();
+ }else if(!this.isNavHeader() && !this._isHeaderHidden()) {
+ this.grid.domNode.focus(); // will call doFocus and set focus into header.
+ dojo.stopEvent(e);
+ }else{
+ this.tabOut(this.grid.domNode);
+ if (this._colHeadFocusIdx != null) { // clear grid header focus
+ dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx], this.focusClass, false);
+ this._colHeadFocusIdx = null;
+ }
+ this._focusifyCellNode(false);
+ }
+ },
+ nextKey: function(e) {
+ var isEmpty = (this.grid.rowCount === 0);
+ if(e.target === this.grid.domNode && this._colHeadFocusIdx == null){
+ this.focusHeader();
+ dojo.stopEvent(e);
+ }else if(this.isNavHeader()){
+ // if tabbing from col header, then go to grid proper.
+ this.blurHeader();
+ if(!this.findAndFocusGridCell()){
+ this.tabOut(this.grid.lastFocusNode);
+ }
+ this._colHeadNode = this._colHeadFocusIdx= null;
+ }else if(this.grid.edit.isEditing()){
+ dojo.stopEvent(e);
+ this.next();
+ }else{
+ this.tabOut(this.grid.lastFocusNode);
+ }
+ },
+ tabOut: function(inFocusNode){
+ this.tabbingOut = true;
+ inFocusNode.focus();
+ },
+ focusGridView: function(){
+ dojox.grid.util.fire(this.focusView, "focus");
+ },
+ focusGrid: function(inSkipFocusCell){
+ this.focusGridView();
+ this._focusifyCellNode(true);
+ },
+ findAndFocusGridCell: function(){
+ // summary:
+ // find the first focusable grid cell
+ // returns: Boolean
+ // true if focus was set to a cell
+ // false if no cell found to set focus onto
+
+ var didFocus = true;
+ var isEmpty = (this.grid.rowCount === 0); // If grid is empty this.grid.rowCount == 0
+ if (this.isNoFocusCell() && !isEmpty){
+ var cellIdx = 0;
+ var cell = this.grid.getCell(cellIdx);
+ if (cell.hidden) {
+ // if first cell isn't visible, use _colHeadFocusIdx
+ // could also use a while loop to find first visible cell - not sure that is worth it
+ cellIdx = this.isNavHeader() ? this._colHeadFocusIdx : 0;
+ }
+ this.setFocusIndex(0, cellIdx);
+ }
+ else if (this.cell && !isEmpty){
+ if (this.focusView && !this.focusView.rowNodes[this.rowIndex]){
+ // if rowNode for current index is undefined (likely as a result of a sort and because of #7304)
+ // scroll to that row
+ this.grid.scrollToRow(this.rowIndex);
+ }
+ this.focusGrid();
+ }else {
+ didFocus = false;
+ }
+ this._colHeadNode = this._colHeadFocusIdx= null;
+ return didFocus;
+ },
+ focusHeader: function(){
+ var headerNodes = this._findHeaderCells();
+ var saveColHeadFocusIdx = this._colHeadFocusIdx;
+ if (this._isHeaderHidden()){
+ // grid header is hidden, focus a cell
+ this.findAndFocusGridCell();
+ }
+ else if (!this._colHeadFocusIdx) {
+ if (this.isNoFocusCell()) {
+ this._colHeadFocusIdx = 0;
+ }
+ else {
+ this._colHeadFocusIdx = this.cell.index;
+ }
+ }
+ this._colHeadNode = headerNodes[this._colHeadFocusIdx];
+ while(this._colHeadNode && this._colHeadFocusIdx >=0 && this._colHeadFocusIdx < headerNodes.length &&
+ this._colHeadNode.style.display == "none"){
+ // skip over hidden column headers
+ this._colHeadFocusIdx++;
+ this._colHeadNode = headerNodes[this._colHeadFocusIdx];
+ }
+ if(this._colHeadNode && this._colHeadNode.style.display != "none"){
+ // Column header cells know longer receive actual focus. So, for keyboard invocation of
+ // contextMenu to work, the contextMenu must be bound to the grid.domNode rather than the viewsHeaderNode.
+ // unbind the contextmenu from the viewsHeaderNode and to the grid when header cells are active. Reset
+ // the binding back to the viewsHeaderNode when header cells are no longer acive (in blurHeader) #10483
+ if (this.headerMenu && this._contextMenuBindNode != this.grid.domNode){
+ this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);
+ this.headerMenu.bindDomNode(this.grid.domNode);
+ this._contextMenuBindNode = this.grid.domNode;
+ }
+ this._setActiveColHeader(this._colHeadNode, this._colHeadFocusIdx, saveColHeadFocusIdx);
+ this._scrollHeader(this._colHeadFocusIdx);
+ this._focusifyCellNode(false);
+ }else {
+ // all col head nodes are hidden - focus the grid
+ this.findAndFocusGridCell();
+ }
+ },
+ blurHeader: function(){
+ dojo.removeClass(this._colHeadNode, this.focusClass);
+ dojo.removeAttr(this.grid.domNode,"aria-activedescendant");
+ // reset contextMenu onto viewsHeaderNode so right mouse on header will invoke (see focusHeader)
+ if (this.headerMenu && this._contextMenuBindNode == this.grid.domNode) {
+ var viewsHeader = this.grid.viewsHeaderNode;
+ this.headerMenu.unBindDomNode(this.grid.domNode);
+ this.headerMenu.bindDomNode(viewsHeader);
+ this._contextMenuBindNode = viewsHeader;
+ }
+ },
+ doFocus: function(e){
+ // trap focus only for grid dom node
+ if(e && e.target != e.currentTarget){
+ dojo.stopEvent(e);
+ return;
+ }
+ // do not focus for scrolling if grid is about to blur
+ if(!this.tabbingOut){
+ this.focusHeader();
+ }
+ this.tabbingOut = false;
+ dojo.stopEvent(e);
+ },
+ doBlur: function(e){
+ dojo.stopEvent(e); // FF2
+ },
+ doContextMenu: function(e){
+ //stop contextMenu event if no header Menu to prevent default/browser contextMenu
+ if (!this.headerMenu){
+ dojo.stopEvent(e);
+ }
+ },
+ doLastNodeFocus: function(e){
+ if (this.tabbingOut){
+ this._focusifyCellNode(false);
+ }else if(this.grid.rowCount >0){
+ if (this.isNoFocusCell()){
+ this.setFocusIndex(0,0);
+ }
+ this._focusifyCellNode(true);
+ }else {
+ this.focusHeader();
+ }
+ this.tabbingOut = false;
+ dojo.stopEvent(e); // FF2
+ },
+ doLastNodeBlur: function(e){
+ dojo.stopEvent(e); // FF2
+ },
+ doColHeaderFocus: function(e){
+ this._setActiveColHeader(e.target,dojo.attr(e.target, "idx"),this._colHeadFocusIdx);
+ this._scrollHeader(this.getHeaderIndex());
+ dojo.stopEvent(e);
+ },
+ doColHeaderBlur: function(e){
+ dojo.toggleClass(e.target, this.focusClass, false);
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._EditManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._EditManager"] = true;
+dojo.provide("dojox.grid._EditManager");
+
+
+
+dojo.declare("dojox.grid._EditManager", null, {
+ // summary:
+ // Controls grid cell editing process. Owned by grid and used internally for editing.
+ constructor: function(inGrid){
+ // inGrid: dojox.Grid
+ // The dojox.Grid this editor should be attached to
+ this.grid = inGrid;
+ this.connections = [];
+ if(dojo.isIE){
+ this.connections.push(dojo.connect(document.body, "onfocus", dojo.hitch(this, "_boomerangFocus")));
+ }
+ },
+
+ info: {},
+
+ destroy: function(){
+ dojo.forEach(this.connections,dojo.disconnect);
+ },
+
+ cellFocus: function(inCell, inRowIndex){
+ // summary:
+ // Invoke editing when cell is focused
+ // inCell: cell object
+ // Grid cell object
+ // inRowIndex: Integer
+ // Grid row index
+ if(this.grid.singleClickEdit || this.isEditRow(inRowIndex)){
+ // if same row or quick editing, edit
+ this.setEditCell(inCell, inRowIndex);
+ }else{
+ // otherwise, apply any pending row edits
+ this.apply();
+ }
+ // if dynamic or static editing...
+ if(this.isEditing() || (inCell && inCell.editable && inCell.alwaysEditing)){
+ // let the editor focus itself as needed
+ this._focusEditor(inCell, inRowIndex);
+ }
+ },
+
+ rowClick: function(e){
+ if(this.isEditing() && !this.isEditRow(e.rowIndex)){
+ this.apply();
+ }
+ },
+
+ styleRow: function(inRow){
+ if(inRow.index == this.info.rowIndex){
+ inRow.customClasses += ' dojoxGridRowEditing';
+ }
+ },
+
+ dispatchEvent: function(e){
+ var c = e.cell, ed = (c && c["editable"]) ? c : 0;
+ return ed && ed.dispatchEvent(e.dispatch, e);
+ },
+
+ // Editing
+ isEditing: function(){
+ // summary:
+ // Indicates editing state of the grid.
+ // returns: Boolean
+ // True if grid is actively editing
+ return this.info.rowIndex !== undefined;
+ },
+
+ isEditCell: function(inRowIndex, inCellIndex){
+ // summary:
+ // Indicates if the given cell is being edited.
+ // inRowIndex: Integer
+ // Grid row index
+ // inCellIndex: Integer
+ // Grid cell index
+ // returns: Boolean
+ // True if given cell is being edited
+ return (this.info.rowIndex === inRowIndex) && (this.info.cell.index == inCellIndex);
+ },
+
+ isEditRow: function(inRowIndex){
+ // summary:
+ // Indicates if the given row is being edited.
+ // inRowIndex: Integer
+ // Grid row index
+ // returns: Boolean
+ // True if given row is being edited
+ return this.info.rowIndex === inRowIndex;
+ },
+
+ setEditCell: function(inCell, inRowIndex){
+ // summary:
+ // Set the given cell to be edited
+ // inRowIndex: Integer
+ // Grid row index
+ // inCell: Object
+ // Grid cell object
+ if(!this.isEditCell(inRowIndex, inCell.index) && this.grid.canEdit && this.grid.canEdit(inCell, inRowIndex)){
+ this.start(inCell, inRowIndex, this.isEditRow(inRowIndex) || inCell.editable);
+ }
+ },
+
+ _focusEditor: function(inCell, inRowIndex){
+ dojox.grid.util.fire(inCell, "focus", [inRowIndex]);
+ },
+
+ focusEditor: function(){
+ if(this.isEditing()){
+ this._focusEditor(this.info.cell, this.info.rowIndex);
+ }
+ },
+
+ // implement fix for focus boomerang effect on IE
+ _boomerangWindow: 500,
+ _shouldCatchBoomerang: function(){
+ return this._catchBoomerang > new Date().getTime();
+ },
+ _boomerangFocus: function(){
+ //console.log("_boomerangFocus");
+ if(this._shouldCatchBoomerang()){
+ // make sure we don't utterly lose focus
+ this.grid.focus.focusGrid();
+ // let the editor focus itself as needed
+ this.focusEditor();
+ // only catch once
+ this._catchBoomerang = 0;
+ }
+ },
+ _doCatchBoomerang: function(){
+ // give ourselves a few ms to boomerang IE focus effects
+ if(dojo.isIE){this._catchBoomerang = new Date().getTime() + this._boomerangWindow;}
+ },
+ // end boomerang fix API
+
+ start: function(inCell, inRowIndex, inEditing){
+ this.grid.beginUpdate();
+ this.editorApply();
+ if(this.isEditing() && !this.isEditRow(inRowIndex)){
+ this.applyRowEdit();
+ this.grid.updateRow(inRowIndex);
+ }
+ if(inEditing){
+ this.info = { cell: inCell, rowIndex: inRowIndex };
+ this.grid.doStartEdit(inCell, inRowIndex);
+ this.grid.updateRow(inRowIndex);
+ }else{
+ this.info = {};
+ }
+ this.grid.endUpdate();
+ // make sure we don't utterly lose focus
+ this.grid.focus.focusGrid();
+ // let the editor focus itself as needed
+ this._focusEditor(inCell, inRowIndex);
+ // give ourselves a few ms to boomerang IE focus effects
+ this._doCatchBoomerang();
+ },
+
+ _editorDo: function(inMethod){
+ var c = this.info.cell;
+ //c && c.editor && c.editor[inMethod](c, this.info.rowIndex);
+ if(c && c.editable){
+ c[inMethod](this.info.rowIndex);
+ }
+ },
+
+ editorApply: function(){
+ this._editorDo("apply");
+ },
+
+ editorCancel: function(){
+ this._editorDo("cancel");
+ },
+
+ applyCellEdit: function(inValue, inCell, inRowIndex){
+ if(this.grid.canEdit(inCell, inRowIndex)){
+ this.grid.doApplyCellEdit(inValue, inRowIndex, inCell.field);
+ }
+ },
+
+ applyRowEdit: function(){
+ this.grid.doApplyEdit(this.info.rowIndex, this.info.cell.field);
+ },
+
+ apply: function(){
+ // summary:
+ // Apply a grid edit
+ if(this.isEditing()){
+ this.grid.beginUpdate();
+ this.editorApply();
+ this.applyRowEdit();
+ this.info = {};
+ this.grid.endUpdate();
+ this.grid.focus.focusGrid();
+ this._doCatchBoomerang();
+ }
+ },
+
+ cancel: function(){
+ // summary:
+ // Cancel a grid edit
+ if(this.isEditing()){
+ this.grid.beginUpdate();
+ this.editorCancel();
+ this.info = {};
+ this.grid.endUpdate();
+ this.grid.focus.focusGrid();
+ this._doCatchBoomerang();
+ }
+ },
+
+ save: function(inRowIndex, inView){
+ // summary:
+ // Save the grid editing state
+ // inRowIndex: Integer
+ // Grid row index
+ // inView: Object
+ // Grid view
+ var c = this.info.cell;
+ if(this.isEditRow(inRowIndex) && (!inView || c.view==inView) && c.editable){
+ c.save(c, this.info.rowIndex);
+ }
+ },
+
+ restore: function(inView, inRowIndex){
+ // summary:
+ // Restores the grid editing state
+ // inRowIndex: Integer
+ // Grid row index
+ // inView: Object
+ // Grid view
+ var c = this.info.cell;
+ if(this.isEditRow(inRowIndex) && c.view == inView && c.editable){
+ c.restore(c, this.info.rowIndex);
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource['dojox.grid.Selection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource['dojox.grid.Selection'] = true;
+dojo.provide('dojox.grid.Selection');
+
+dojo.declare("dojox.grid.Selection", null, {
+ // summary:
+ // Manages row selection for grid. Owned by grid and used internally
+ // for selection. Override to implement custom selection.
+
+ constructor: function(inGrid){
+ this.grid = inGrid;
+ this.selected = [];
+
+ this.setMode(inGrid.selectionMode);
+ },
+
+ mode: 'extended',
+
+ selected: null,
+ updating: 0,
+ selectedIndex: -1,
+
+ setMode: function(mode){
+ if(this.selected.length){
+ this.deselectAll();
+ }
+ if(mode != 'extended' && mode != 'multiple' && mode != 'single' && mode != 'none'){
+ this.mode = 'extended';
+ }else{
+ this.mode = mode;
+ }
+ },
+
+ onCanSelect: function(inIndex){
+ return this.grid.onCanSelect(inIndex);
+ },
+
+ onCanDeselect: function(inIndex){
+ return this.grid.onCanDeselect(inIndex);
+ },
+
+ onSelected: function(inIndex){
+ },
+
+ onDeselected: function(inIndex){
+ },
+
+ //onSetSelected: function(inIndex, inSelect) { };
+ onChanging: function(){
+ },
+
+ onChanged: function(){
+ },
+
+ isSelected: function(inIndex){
+ if(this.mode == 'none'){
+ return false;
+ }
+ return this.selected[inIndex];
+ },
+
+ getFirstSelected: function(){
+ if(!this.selected.length||this.mode == 'none'){ return -1; }
+ for(var i=0, l=this.selected.length; i<l; i++){
+ if(this.selected[i]){
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ getNextSelected: function(inPrev){
+ if(this.mode == 'none'){ return -1; }
+ for(var i=inPrev+1, l=this.selected.length; i<l; i++){
+ if(this.selected[i]){
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ getSelected: function(){
+ var result = [];
+ for(var i=0, l=this.selected.length; i<l; i++){
+ if(this.selected[i]){
+ result.push(i);
+ }
+ }
+ return result;
+ },
+
+ getSelectedCount: function(){
+ var c = 0;
+ for(var i=0; i<this.selected.length; i++){
+ if(this.selected[i]){
+ c++;
+ }
+ }
+ return c;
+ },
+
+ _beginUpdate: function(){
+ if(this.updating === 0){
+ this.onChanging();
+ }
+ this.updating++;
+ },
+
+ _endUpdate: function(){
+ this.updating--;
+ if(this.updating === 0){
+ this.onChanged();
+ }
+ },
+
+ select: function(inIndex){
+ if(this.mode == 'none'){ return; }
+ if(this.mode != 'multiple'){
+ this.deselectAll(inIndex);
+ this.addToSelection(inIndex);
+ }else{
+ this.toggleSelect(inIndex);
+ }
+ },
+
+ addToSelection: function(inIndex){
+ if(this.mode == 'none'){ return; }
+ if(dojo.isArray(inIndex)){
+ dojo.forEach(inIndex, this.addToSelection, this);
+ return;
+ }
+ inIndex = Number(inIndex);
+ if(this.selected[inIndex]){
+ this.selectedIndex = inIndex;
+ }else{
+ if(this.onCanSelect(inIndex) !== false){
+ this.selectedIndex = inIndex;
+ var rowNode = this.grid.getRowNode(inIndex);
+ if(rowNode){
+ dojo.attr(rowNode,"aria-selected","true");
+ }
+ this._beginUpdate();
+ this.selected[inIndex] = true;
+ //this.grid.onSelected(inIndex);
+ this.onSelected(inIndex);
+ //this.onSetSelected(inIndex, true);
+ this._endUpdate();
+ }
+ }
+ },
+
+ deselect: function(inIndex){
+ if(this.mode == 'none'){ return; }
+ if(dojo.isArray(inIndex)){
+ dojo.forEach(inIndex, this.deselect, this);
+ return;
+ }
+ inIndex = Number(inIndex);
+ if(this.selectedIndex == inIndex){
+ this.selectedIndex = -1;
+ }
+ if(this.selected[inIndex]){
+ if(this.onCanDeselect(inIndex) === false){
+ return;
+ }
+ var rowNode = this.grid.getRowNode(inIndex);
+ if(rowNode){
+ dojo.attr(rowNode,"aria-selected","false");
+ }
+ this._beginUpdate();
+ delete this.selected[inIndex];
+ //this.grid.onDeselected(inIndex);
+ this.onDeselected(inIndex);
+ //this.onSetSelected(inIndex, false);
+ this._endUpdate();
+ }
+ },
+
+ setSelected: function(inIndex, inSelect){
+ this[(inSelect ? 'addToSelection' : 'deselect')](inIndex);
+ },
+
+ toggleSelect: function(inIndex){
+ if(dojo.isArray(inIndex)){
+ dojo.forEach(inIndex, this.toggleSelect, this);
+ return;
+ }
+ this.setSelected(inIndex, !this.selected[inIndex]);
+ },
+
+ _range: function(inFrom, inTo, func){
+ var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
+ if(s > e){
+ e = s;
+ s = inTo;
+ }
+ for(var i=s; i<=e; i++){
+ func(i);
+ }
+ },
+
+ selectRange: function(inFrom, inTo){
+ this._range(inFrom, inTo, dojo.hitch(this, "addToSelection"));
+ },
+
+ deselectRange: function(inFrom, inTo){
+ this._range(inFrom, inTo, dojo.hitch(this, "deselect"));
+ },
+
+ insert: function(inIndex){
+ this.selected.splice(inIndex, 0, false);
+ if(this.selectedIndex >= inIndex){
+ this.selectedIndex++;
+ }
+ },
+
+ remove: function(inIndex){
+ this.selected.splice(inIndex, 1);
+ if(this.selectedIndex >= inIndex){
+ this.selectedIndex--;
+ }
+ },
+
+ deselectAll: function(inExcept){
+ for(var i in this.selected){
+ if((i!=inExcept)&&(this.selected[i]===true)){
+ this.deselect(i);
+ }
+ }
+ },
+
+ clickSelect: function(inIndex, inCtrlKey, inShiftKey){
+ if(this.mode == 'none'){ return; }
+ this._beginUpdate();
+ if(this.mode != 'extended'){
+ this.select(inIndex);
+ }else{
+ var lastSelected = this.selectedIndex;
+ if(!inCtrlKey){
+ this.deselectAll(inIndex);
+ }
+ if(inShiftKey){
+ this.selectRange(lastSelected, inIndex);
+ }else if(inCtrlKey){
+ this.toggleSelect(inIndex);
+ }else{
+ this.addToSelection(inIndex);
+ }
+ }
+ this._endUpdate();
+ },
+
+ clickSelectEvent: function(e){
+ this.clickSelect(e.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+ },
+
+ clear: function(){
+ this._beginUpdate();
+ this.deselectAll();
+ this._endUpdate();
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Events"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Events"] = true;
+dojo.provide("dojox.grid._Events");
+
+dojo.declare("dojox.grid._Events", null, {
+ // summary:
+ // _Grid mixin that provides default implementations for grid events.
+ // description:
+ // Default synthetic events dispatched for _Grid. dojo.connect to events to
+ // retain default implementation or override them for custom handling.
+
+ // cellOverClass: String
+ // css class to apply to grid cells over which the cursor is placed.
+ cellOverClass: "dojoxGridCellOver",
+
+ onKeyEvent: function(e){
+ // summary: top level handler for Key Events
+ this.dispatchKeyEvent(e);
+ },
+
+ onContentEvent: function(e){
+ // summary: Top level handler for Content events
+ this.dispatchContentEvent(e);
+ },
+
+ onHeaderEvent: function(e){
+ // summary: Top level handler for header events
+ this.dispatchHeaderEvent(e);
+ },
+
+ onStyleRow: function(inRow){
+ // summary:
+ // Perform row styling on a given row. Called whenever row styling is updated.
+ //
+ // inRow: Object
+ // Object containing row state information: selected, true if the row is selcted; over:
+ // true of the mouse is over the row; odd: true if the row is odd. Use customClasses and
+ // customStyles to control row css classes and styles; both properties are strings.
+ //
+ // example: onStyleRow({ selected: true, over:true, odd:false })
+ var i = inRow;
+ i.customClasses += (i.odd?" dojoxGridRowOdd":"") + (i.selected?" dojoxGridRowSelected":"") + (i.over?" dojoxGridRowOver":"");
+ this.focus.styleRow(inRow);
+ this.edit.styleRow(inRow);
+ },
+
+ onKeyDown: function(e){
+ // summary:
+ // Grid key event handler. By default enter begins editing and applies edits, escape cancels an edit,
+ // tab, shift-tab, and arrow keys move grid cell focus.
+ if(e.altKey || e.metaKey){
+ return;
+ }
+ var dk = dojo.keys;
+ var colIdx;
+ switch(e.keyCode){
+ case dk.ESCAPE:
+ this.edit.cancel();
+ break;
+ case dk.ENTER:
+ if(!this.edit.isEditing()){
+ colIdx = this.focus.getHeaderIndex();
+ if(colIdx >= 0) {
+ this.setSortIndex(colIdx);
+ break;
+ }else {
+ this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+ }
+ dojo.stopEvent(e);
+ }
+ if(!e.shiftKey){
+ var isEditing = this.edit.isEditing();
+ this.edit.apply();
+ if(!isEditing){
+ this.edit.setEditCell(this.focus.cell, this.focus.rowIndex);
+ }
+ }
+ if (!this.edit.isEditing()){
+ var curView = this.focus.focusView || this.views.views[0]; //if no focusView than only one view
+ curView.content.decorateEvent(e);
+ this.onRowClick(e);
+ }
+ break;
+ case dk.SPACE:
+ if(!this.edit.isEditing()){
+ colIdx = this.focus.getHeaderIndex();
+ if(colIdx >= 0) {
+ this.setSortIndex(colIdx);
+ break;
+ }else {
+ this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+ }
+ dojo.stopEvent(e);
+ }
+ break;
+ case dk.TAB:
+ this.focus[e.shiftKey ? 'previousKey' : 'nextKey'](e);
+ break;
+ case dk.LEFT_ARROW:
+ case dk.RIGHT_ARROW:
+ if(!this.edit.isEditing()){
+ var keyCode = e.keyCode; // IE seems to lose after stopEvent when modifier keys
+ dojo.stopEvent(e);
+ colIdx = this.focus.getHeaderIndex();
+ if (colIdx >= 0 && (e.shiftKey && e.ctrlKey)){
+ this.focus.colSizeAdjust(e, colIdx, (keyCode == dk.LEFT_ARROW ? -1 : 1)*5);
+ }
+ else{
+ var offset = (keyCode == dk.LEFT_ARROW) ? 1 : -1;
+ if(dojo._isBodyLtr()){ offset *= -1; }
+ this.focus.move(0, offset);
+ }
+ }
+ break;
+ case dk.UP_ARROW:
+ if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
+ dojo.stopEvent(e);
+ this.focus.move(-1, 0);
+ }
+ break;
+ case dk.DOWN_ARROW:
+ if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
+ dojo.stopEvent(e);
+ this.focus.move(1, 0);
+ }
+ break;
+ case dk.PAGE_UP:
+ if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
+ dojo.stopEvent(e);
+ if(this.focus.rowIndex != this.scroller.firstVisibleRow+1){
+ this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex, 0);
+ }else{
+ this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));
+ this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1, 0);
+ }
+ }
+ break;
+ case dk.PAGE_DOWN:
+ if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
+ dojo.stopEvent(e);
+ if(this.focus.rowIndex != this.scroller.lastVisibleRow-1){
+ this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1, 0);
+ }else{
+ this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));
+ this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1, 0);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ },
+
+ onMouseOver: function(e){
+ // summary:
+ // Event fired when mouse is over the grid.
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ e.rowIndex == -1 ? this.onHeaderCellMouseOver(e) : this.onCellMouseOver(e);
+ },
+
+ onMouseOut: function(e){
+ // summary:
+ // Event fired when mouse moves out of the grid.
+ // e: Event
+ // Decorated event object that contains reference to grid, cell, and rowIndex
+ e.rowIndex == -1 ? this.onHeaderCellMouseOut(e) : this.onCellMouseOut(e);
+ },
+
+ onMouseDown: function(e){
+ // summary:
+ // Event fired when mouse is down inside grid.
+ // e: Event
+ // Decorated event object that contains reference to grid, cell, and rowIndex
+ e.rowIndex == -1 ? this.onHeaderCellMouseDown(e) : this.onCellMouseDown(e);
+ },
+
+ onMouseOverRow: function(e){
+ // summary:
+ // Event fired when mouse is over any row (data or header).
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ if(!this.rows.isOver(e.rowIndex)){
+ this.rows.setOverRow(e.rowIndex);
+ e.rowIndex == -1 ? this.onHeaderMouseOver(e) : this.onRowMouseOver(e);
+ }
+ },
+ onMouseOutRow: function(e){
+ // summary:
+ // Event fired when mouse moves out of any row (data or header).
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ if(this.rows.isOver(-1)){
+ this.onHeaderMouseOut(e);
+ }else if(!this.rows.isOver(-2)){
+ this.rows.setOverRow(-2);
+ this.onRowMouseOut(e);
+ }
+ },
+
+ onMouseDownRow: function(e){
+ // summary:
+ // Event fired when mouse is down inside grid row
+ // e: Event
+ // Decorated event object that contains reference to grid, cell, and rowIndex
+ if(e.rowIndex != -1)
+ this.onRowMouseDown(e);
+ },
+
+ // cell events
+ onCellMouseOver: function(e){
+ // summary:
+ // Event fired when mouse is over a cell.
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ if(e.cellNode){
+ dojo.addClass(e.cellNode, this.cellOverClass);
+ }
+ },
+
+ onCellMouseOut: function(e){
+ // summary:
+ // Event fired when mouse moves out of a cell.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ if(e.cellNode){
+ dojo.removeClass(e.cellNode, this.cellOverClass);
+ }
+ },
+
+ onCellMouseDown: function(e){
+ // summary:
+ // Event fired when mouse is down in a header cell.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onCellClick: function(e){
+ // summary:
+ // Event fired when a cell is clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this._click[0] = this._click[1];
+ this._click[1] = e;
+ if(!this.edit.isEditCell(e.rowIndex, e.cellIndex)){
+ this.focus.setFocusCell(e.cell, e.rowIndex);
+ }
+ this.onRowClick(e);
+ },
+
+ onCellDblClick: function(e){
+ // summary:
+ // Event fired when a cell is double-clicked.
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ if(this._click.length > 1 && dojo.isIE){
+ this.edit.setEditCell(this._click[1].cell, this._click[1].rowIndex);
+ }else if(this._click.length > 1 && this._click[0].rowIndex != this._click[1].rowIndex){
+ this.edit.setEditCell(this._click[0].cell, this._click[0].rowIndex);
+ }else{
+ this.edit.setEditCell(e.cell, e.rowIndex);
+ }
+ this.onRowDblClick(e);
+ },
+
+ onCellContextMenu: function(e){
+ // summary:
+ // Event fired when a cell context menu is accessed via mouse right click.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this.onRowContextMenu(e);
+ },
+
+ onCellFocus: function(inCell, inRowIndex){
+ // summary:
+ // Event fired when a cell receives focus.
+ // inCell: Object
+ // Cell object containing properties of the grid column.
+ // inRowIndex: Integer
+ // Index of the grid row
+ this.edit.cellFocus(inCell, inRowIndex);
+ },
+
+ // row events
+ onRowClick: function(e){
+ // summary:
+ // Event fired when a row is clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this.edit.rowClick(e);
+ this.selection.clickSelectEvent(e);
+ },
+
+ onRowDblClick: function(e){
+ // summary:
+ // Event fired when a row is double clicked.
+ // e: Event
+ // decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onRowMouseOver: function(e){
+ // summary:
+ // Event fired when mouse moves over a data row.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onRowMouseOut: function(e){
+ // summary:
+ // Event fired when mouse moves out of a data row.
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ },
+
+ onRowMouseDown: function(e){
+ // summary:
+ // Event fired when mouse is down in a row.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onRowContextMenu: function(e){
+ // summary:
+ // Event fired when a row context menu is accessed via mouse right click.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ dojo.stopEvent(e);
+ },
+
+ // header events
+ onHeaderMouseOver: function(e){
+ // summary:
+ // Event fired when mouse moves over the grid header.
+ // e: Event
+ // Decorated event object contains reference to grid, cell, and rowIndex
+ },
+
+ onHeaderMouseOut: function(e){
+ // summary:
+ // Event fired when mouse moves out of the grid header.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onHeaderCellMouseOver: function(e){
+ // summary:
+ // Event fired when mouse moves over a header cell.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ if(e.cellNode){
+ dojo.addClass(e.cellNode, this.cellOverClass);
+ }
+ },
+
+ onHeaderCellMouseOut: function(e){
+ // summary:
+ // Event fired when mouse moves out of a header cell.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ if(e.cellNode){
+ dojo.removeClass(e.cellNode, this.cellOverClass);
+ }
+ },
+
+ onHeaderCellMouseDown: function(e) {
+ // summary:
+ // Event fired when mouse is down in a header cell.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onHeaderClick: function(e){
+ // summary:
+ // Event fired when the grid header is clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onHeaderCellClick: function(e){
+ // summary:
+ // Event fired when a header cell is clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this.setSortIndex(e.cell.index);
+ this.onHeaderClick(e);
+ },
+
+ onHeaderDblClick: function(e){
+ // summary:
+ // Event fired when the grid header is double clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ },
+
+ onHeaderCellDblClick: function(e){
+ // summary:
+ // Event fired when a header cell is double clicked.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this.onHeaderDblClick(e);
+ },
+
+ onHeaderCellContextMenu: function(e){
+ // summary:
+ // Event fired when a header cell context menu is accessed via mouse right click.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ this.onHeaderContextMenu(e);
+ },
+
+ onHeaderContextMenu: function(e){
+ // summary:
+ // Event fired when the grid header context menu is accessed via mouse right click.
+ // e: Event
+ // Decorated event object which contains reference to grid, cell, and rowIndex
+ if(!this.headerMenu){
+ dojo.stopEvent(e);
+ }
+ },
+
+ // editing
+ onStartEdit: function(inCell, inRowIndex){
+ // summary:
+ // Event fired when editing is started for a given grid cell
+ // inCell: Object
+ // Cell object containing properties of the grid column.
+ // inRowIndex: Integer
+ // Index of the grid row
+ },
+
+ onApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){
+ // summary:
+ // Event fired when editing is applied for a given grid cell
+ // inValue: String
+ // Value from cell editor
+ // inRowIndex: Integer
+ // Index of the grid row
+ // inFieldIndex: Integer
+ // Index in the grid's data store
+ },
+
+ onCancelEdit: function(inRowIndex){
+ // summary:
+ // Event fired when editing is cancelled for a given grid cell
+ // inRowIndex: Integer
+ // Index of the grid row
+ },
+
+ onApplyEdit: function(inRowIndex){
+ // summary:
+ // Event fired when editing is applied for a given grid row
+ // inRowIndex: Integer
+ // Index of the grid row
+ },
+
+ onCanSelect: function(inRowIndex){
+ // summary:
+ // Event to determine if a grid row may be selected
+ // inRowIndex: Integer
+ // Index of the grid row
+ // returns: Boolean
+ // true if the row can be selected
+ return true;
+ },
+
+ onCanDeselect: function(inRowIndex){
+ // summary:
+ // Event to determine if a grid row may be deselected
+ // inRowIndex: Integer
+ // Index of the grid row
+ // returns: Boolean
+ // true if the row can be deselected
+ return true;
+ },
+
+ onSelected: function(inRowIndex){
+ // summary:
+ // Event fired when a grid row is selected
+ // inRowIndex: Integer
+ // Index of the grid row
+ this.updateRowStyles(inRowIndex);
+ },
+
+ onDeselected: function(inRowIndex){
+ // summary:
+ // Event fired when a grid row is deselected
+ // inRowIndex: Integer
+ // Index of the grid row
+ this.updateRowStyles(inRowIndex);
+ },
+
+ onSelectionChanged: function(){
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.i18n"] = true;
+dojo.provide("dojo.i18n");
+
+/*=====
+dojo.i18n = {
+ // summary: Utility classes to enable loading of resources for internationalization (i18n)
+};
+=====*/
+
+dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+ // summary:
+ // Returns an Object containing the localization for a given resource
+ // bundle in a package, matching the specified locale.
+ // description:
+ // Returns a hash containing name/value pairs in its prototypesuch
+ // that values can be easily overridden. Throws an exception if the
+ // bundle is not found. Bundle must have already been loaded by
+ // `dojo.requireLocalization()` or by a build optimization step. NOTE:
+ // try not to call this method as part of an object property
+ // definition (`var foo = { bar: dojo.i18n.getLocalization() }`). In
+ // some loading situations, the bundle may not be available in time
+ // for the object definition. Instead, call this method inside a
+ // function that is run after all modules load or the page loads (like
+ // in `dojo.addOnLoad()`), or in a widget lifecycle method.
+ // packageName:
+ // package which is associated with this resource
+ // bundleName:
+ // the base filename of the resource bundle (without the ".js" suffix)
+ // locale:
+ // the variant to load (optional). By default, the locale defined by
+ // the host environment: dojo.locale
+
+ locale = dojo.i18n.normalizeLocale(locale);
+
+ // look for nearest locale match
+ var elements = locale.split('-');
+ var module = [packageName,"nls",bundleName].join('.');
+ var bundle = dojo._loadedModules[module];
+ if(bundle){
+ var localization;
+ for(var i = elements.length; i > 0; i--){
+ var loc = elements.slice(0, i).join('_');
+ if(bundle[loc]){
+ localization = bundle[loc];
+ break;
+ }
+ }
+ if(!localization){
+ localization = bundle.ROOT;
+ }
+
+ // make a singleton prototype so that the caller won't accidentally change the values globally
+ if(localization){
+ var clazz = function(){};
+ clazz.prototype = localization;
+ return new clazz(); // Object
+ }
+ }
+
+ throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
+};
+
+dojo.i18n.normalizeLocale = function(/*String?*/locale){
+ // summary:
+ // Returns canonical form of locale, as used by Dojo.
+ //
+ // description:
+ // All variants are case-insensitive and are separated by '-' as specified in [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+ // If no locale is specified, the dojo.locale is returned. dojo.locale is defined by
+ // the user agent's locale unless overridden by djConfig.
+
+ var result = locale ? locale.toLowerCase() : dojo.locale;
+ if(result == "root"){
+ result = "ROOT";
+ }
+ return result; // String
+};
+
+dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+ // summary:
+ // See dojo.requireLocalization()
+ // description:
+ // Called by the bootstrap, but factored out so that it is only
+ // included in the build when needed.
+
+ var targetLocale = dojo.i18n.normalizeLocale(locale);
+ var bundlePackage = [moduleName, "nls", bundleName].join(".");
+ // NOTE:
+ // When loading these resources, the packaging does not match what is
+ // on disk. This is an implementation detail, as this is just a
+ // private data structure to hold the loaded resources. e.g.
+ // `tests/hello/nls/en-us/salutations.js` is loaded as the object
+ // `tests.hello.nls.salutations.en_us={...}` The structure on disk is
+ // intended to be most convenient for developers and translators, but
+ // in memory it is more logical and efficient to store in a different
+ // order. Locales cannot use dashes, since the resulting path will
+ // not evaluate as valid JS, so we translate them to underscores.
+
+ //Find the best-match locale to load if we have available flat locales.
+ var bestLocale = "";
+ if(availableFlatLocales){
+ var flatLocales = availableFlatLocales.split(",");
+ for(var i = 0; i < flatLocales.length; i++){
+ //Locale must match from start of string.
+ //Using ["indexOf"] so customBase builds do not see
+ //this as a dojo._base.array dependency.
+ if(targetLocale["indexOf"](flatLocales[i]) == 0){
+ if(flatLocales[i].length > bestLocale.length){
+ bestLocale = flatLocales[i];
+ }
+ }
+ }
+ if(!bestLocale){
+ bestLocale = "ROOT";
+ }
+ }
+
+ //See if the desired locale is already loaded.
+ var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
+ var bundle = dojo._loadedModules[bundlePackage];
+ var localizedBundle = null;
+ if(bundle){
+ if(dojo.config.localizationComplete && bundle._built){return;}
+ var jsLoc = tempLocale.replace(/-/g, '_');
+ var translationPackage = bundlePackage+"."+jsLoc;
+ localizedBundle = dojo._loadedModules[translationPackage];
+ }
+
+ if(!localizedBundle){
+ bundle = dojo["provide"](bundlePackage);
+ var syms = dojo._getModuleSymbols(moduleName);
+ var modpath = syms.concat("nls").join("/");
+ var parent;
+
+ dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){
+ var jsLoc = loc.replace(/-/g, '_');
+ var translationPackage = bundlePackage + "." + jsLoc;
+ var loaded = false;
+ if(!dojo._loadedModules[translationPackage]){
+ // Mark loaded whether it's found or not, so that further load attempts will not be made
+ dojo["provide"](translationPackage);
+ var module = [modpath];
+ if(loc != "ROOT"){module.push(loc);}
+ module.push(bundleName);
+ var filespec = module.join("/") + '.js';
+ loaded = dojo._loadPath(filespec, null, function(hash){
+ // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
+ var clazz = function(){};
+ clazz.prototype = parent;
+ bundle[jsLoc] = new clazz();
+ for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
+ });
+ }else{
+ loaded = true;
+ }
+ if(loaded && bundle[jsLoc]){
+ parent = bundle[jsLoc];
+ }else{
+ bundle[jsLoc] = parent;
+ }
+
+ if(availableFlatLocales){
+ //Stop the locale path searching if we know the availableFlatLocales, since
+ //the first call to this function will load the only bundle that is needed.
+ return true;
+ }
+ });
+ }
+
+ //Save the best locale bundle as the target locale bundle when we know the
+ //the available bundles.
+ if(availableFlatLocales && targetLocale != bestLocale){
+ bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')];
+ }
+};
+
+(function(){
+ // If other locales are used, dojo.requireLocalization should load them as
+ // well, by default.
+ //
+ // Override dojo.requireLocalization to do load the default bundle, then
+ // iterate through the extraLocale list and load those translations as
+ // well, unless a particular locale was requested.
+
+ var extra = dojo.config.extraLocale;
+ if(extra){
+ if(!extra instanceof Array){
+ extra = [extra];
+ }
+
+ var req = dojo.i18n._requireLocalization;
+ dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){
+ req(m,b,locale, availableFlatLocales);
+ if(locale){return;}
+ for(var i=0; i<extra.length; i++){
+ req(m,b,extra[i], availableFlatLocales);
+ }
+ };
+ }
+})();
+
+dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
+ // summary:
+ // A helper method to assist in searching for locale-based resources.
+ // Will iterate through the variants of a particular locale, either up
+ // or down, executing a callback function. For example, "en-us" and
+ // true will try "en-us" followed by "en" and finally "ROOT".
+
+ locale = dojo.i18n.normalizeLocale(locale);
+
+ var elements = locale.split('-');
+ var searchlist = [];
+ for(var i = elements.length; i > 0; i--){
+ searchlist.push(elements.slice(0, i).join('-'));
+ }
+ searchlist.push(false);
+ if(down){searchlist.reverse();}
+
+ for(var j = searchlist.length - 1; j >= 0; j--){
+ var loc = searchlist[j] || "ROOT";
+ var stop = searchFunc(loc);
+ if(stop){ break; }
+ }
+};
+
+dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
+ // summary:
+ // Load built, flattened resource bundles, if available for all
+ // locales used in the page. Only called by built layer files.
+
+ function preload(locale){
+ locale = dojo.i18n.normalizeLocale(locale);
+ dojo.i18n._searchLocalePath(locale, true, function(loc){
+ for(var i=0; i<localesGenerated.length;i++){
+ if(localesGenerated[i] == loc){
+ dojo["require"](bundlePrefix+"_"+loc);
+ return true; // Boolean
+ }
+ }
+ return false; // Boolean
+ });
+ }
+ preload();
+ var extra = dojo.config.extraLocale||[];
+ for(var i=0; i<extra.length; i++){
+ preload(extra[i]);
+ }
+};
+
+}
+
+if(!dojo._hasResource["dojox.grid._Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Grid"] = true;
+dojo.provide("dojox.grid._Grid");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(function(){
+ // NOTE: this is for backwards compatibility with Dojo 1.3
+ if(!dojo.isCopyKey){
+ dojo.isCopyKey = dojo.dnd.getCopyKeyState;
+ }
+ /*=====
+ dojox.grid.__CellDef = function(){
+ // name: String?
+ // The text to use in the header of the grid for this cell.
+ // get: Function?
+ // function(rowIndex){} rowIndex is of type Integer. This
+ // function will be called when a cell requests data. Returns the
+ // unformatted data for the cell.
+ // value: String?
+ // If "get" is not specified, this is used as the data for the cell.
+ // defaultValue: String?
+ // If "get" and "value" aren't specified or if "get" returns an undefined
+ // value, this is used as the data for the cell. "formatter" is not run
+ // on this if "get" returns an undefined value.
+ // formatter: Function?
+ // function(data, rowIndex){} data is of type anything, rowIndex
+ // is of type Integer. This function will be called after the cell
+ // has its data but before it passes it back to the grid to render.
+ // Returns the formatted version of the cell's data.
+ // type: dojox.grid.cells._Base|Function?
+ // TODO
+ // editable: Boolean?
+ // Whether this cell should be editable or not.
+ // hidden: Boolean?
+ // If true, the cell will not be displayed.
+ // noresize: Boolean?
+ // If true, the cell will not be able to be resized.
+ // width: Integer|String?
+ // A CSS size. If it's an Integer, the width will be in em's.
+ // colSpan: Integer?
+ // How many columns to span this cell. Will not work in the first
+ // sub-row of cells.
+ // rowSpan: Integer?
+ // How many sub-rows to span this cell.
+ // styles: String?
+ // A string of styles to apply to both the header cell and main
+ // grid cells. Must end in a ';'.
+ // headerStyles: String?
+ // A string of styles to apply to just the header cell. Must end
+ // in a ';'
+ // cellStyles: String?
+ // A string of styles to apply to just the main grid cells. Must
+ // end in a ';'
+ // classes: String?
+ // A space separated list of classes to apply to both the header
+ // cell and the main grid cells.
+ // headerClasses: String?
+ // A space separated list of classes to apply to just the header
+ // cell.
+ // cellClasses: String?
+ // A space separated list of classes to apply to just the main
+ // grid cells.
+ // attrs: String?
+ // A space separated string of attribute='value' pairs to add to
+ // the header cell element and main grid cell elements.
+ this.name = name;
+ this.value = value;
+ this.get = get;
+ this.formatter = formatter;
+ this.type = type;
+ this.editable = editable;
+ this.hidden = hidden;
+ this.width = width;
+ this.colSpan = colSpan;
+ this.rowSpan = rowSpan;
+ this.styles = styles;
+ this.headerStyles = headerStyles;
+ this.cellStyles = cellStyles;
+ this.classes = classes;
+ this.headerClasses = headerClasses;
+ this.cellClasses = cellClasses;
+ this.attrs = attrs;
+ }
+ =====*/
+
+ /*=====
+ dojox.grid.__ViewDef = function(){
+ // noscroll: Boolean?
+ // If true, no scrollbars will be rendered without scrollbars.
+ // width: Integer|String?
+ // A CSS size. If it's an Integer, the width will be in em's. If
+ // "noscroll" is true, this value is ignored.
+ // cells: dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]]?
+ // The structure of the cells within this grid.
+ // type: String?
+ // A string containing the constructor of a subclass of
+ // dojox.grid._View. If this is not specified, dojox.grid._View
+ // is used.
+ // defaultCell: dojox.grid.__CellDef?
+ // A cell definition with default values for all cells in this view. If
+ // a property is defined in a cell definition in the "cells" array and
+ // this property, the cell definition's property will override this
+ // property's property.
+ // onBeforeRow: Function?
+ // function(rowIndex, cells){} rowIndex is of type Integer, cells
+ // is of type Array[dojox.grid.__CellDef[]]. This function is called
+ // before each row of data is rendered. Before the header is
+ // rendered, rowIndex will be -1. "cells" is a reference to the
+ // internal structure of this view's cells so any changes you make to
+ // it will persist between calls.
+ // onAfterRow: Function?
+ // function(rowIndex, cells, rowNode){} rowIndex is of type Integer, cells
+ // is of type Array[dojox.grid.__CellDef[]], rowNode is of type DOMNode.
+ // This function is called after each row of data is rendered. After the
+ // header is rendered, rowIndex will be -1. "cells" is a reference to the
+ // internal structure of this view's cells so any changes you make to
+ // it will persist between calls.
+ this.noscroll = noscroll;
+ this.width = width;
+ this.cells = cells;
+ this.type = type;
+ this.defaultCell = defaultCell;
+ this.onBeforeRow = onBeforeRow;
+ this.onAfterRow = onAfterRow;
+ }
+ =====*/
+
+ dojo.declare('dojox.grid._Grid',
+ [ dijit._Widget, dijit._Templated, dojox.grid._Events ],
+ {
+ // summary:
+ // A grid widget with virtual scrolling, cell editing, complex rows,
+ // sorting, fixed columns, sizeable columns, etc.
+ //
+ // description:
+ // _Grid provides the full set of grid features without any
+ // direct connection to a data store.
+ //
+ // The grid exposes a get function for the grid, or optionally
+ // individual columns, to populate cell contents.
+ //
+ // The grid is rendered based on its structure, an object describing
+ // column and cell layout.
+ //
+ // example:
+ // A quick sample:
+ //
+ // define a get function
+ // | function get(inRowIndex){ // called in cell context
+ // | return [this.index, inRowIndex].join(', ');
+ // | }
+ //
+ // define the grid structure:
+ // | var structure = [ // array of view objects
+ // | { cells: [// array of rows, a row is an array of cells
+ // | [
+ // | { name: "Alpha", width: 6 },
+ // | { name: "Beta" },
+ // | { name: "Gamma", get: get }]
+ // | ]}
+ // | ];
+ //
+ // | <div id="grid"
+ // | rowCount="100" get="get"
+ // | structure="structure"
+ // | dojoType="dojox.grid._Grid"></div>
+
+ templateString:"<div class=\"dojoxGrid\" hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",
+
+ // classTag: String
+ // CSS class applied to the grid's domNode
+ classTag: 'dojoxGrid',
+
+ get: function(inRowIndex){
+ // summary: Default data getter.
+ // description:
+ // Provides data to display in a grid cell. Called in grid cell context.
+ // So this.cell.index is the column index.
+ // inRowIndex: Integer
+ // Row for which to provide data
+ // returns:
+ // Data to display for a given grid cell.
+ },
+
+ // settings
+ // rowCount: Integer
+ // Number of rows to display.
+ rowCount: 5,
+
+ // keepRows: Integer
+ // Number of rows to keep in the rendering cache.
+ keepRows: 75,
+
+ // rowsPerPage: Integer
+ // Number of rows to render at a time.
+ rowsPerPage: 25,
+
+ // autoWidth: Boolean
+ // If autoWidth is true, grid width is automatically set to fit the data.
+ autoWidth: false,
+
+ // initialWidth: String
+ // A css string to use to set our initial width (only used if autoWidth
+ // is true). The first rendering of the grid will be this width, any
+ // resizing of columns, etc will result in the grid switching to
+ // autoWidth mode. Note, this width will override any styling in a
+ // stylesheet or directly on the node.
+ initialWidth: "",
+
+ // autoHeight: Boolean|Integer
+ // If autoHeight is true, grid height is automatically set to fit the data.
+ // If it is an integer, the height will be automatically set to fit the data
+ // if there are fewer than that many rows - and the height will be set to show
+ // that many rows if there are more
+ autoHeight: '',
+
+ // rowHeight: Integer
+ // If rowHeight is set to a positive number, it will define the height of the rows
+ // in pixels. This can provide a significant performance advantage, since it
+ // eliminates the need to measure row sizes during rendering, which is one
+ // the primary bottlenecks in the DataGrid's performance.
+ rowHeight: 0,
+
+ // autoRender: Boolean
+ // If autoRender is true, grid will render itself after initialization.
+ autoRender: true,
+
+ // defaultHeight: String
+ // default height of the grid, measured in any valid css unit.
+ defaultHeight: '15em',
+
+ // height: String
+ // explicit height of the grid, measured in any valid css unit. This will be populated (and overridden)
+ // if the height: css attribute exists on the source node.
+ height: '',
+
+ // structure: dojox.grid.__ViewDef|dojox.grid.__ViewDef[]|dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]]
+ // View layout defintion.
+ structure: null,
+
+ // elasticView: Integer
+ // Override defaults and make the indexed grid view elastic, thus filling available horizontal space.
+ elasticView: -1,
+
+ // singleClickEdit: boolean
+ // Single-click starts editing. Default is double-click
+ singleClickEdit: false,
+
+ // selectionMode: String
+ // Set the selection mode of grid's Selection. Value must be 'single', 'multiple',
+ // or 'extended'. Default is 'extended'.
+ selectionMode: 'extended',
+
+ // rowSelector: Boolean|String
+ // If set to true, will add a row selector view to this grid. If set to a CSS width, will add
+ // a row selector of that width to this grid.
+ rowSelector: '',
+
+ // columnReordering: Boolean
+ // If set to true, will add drag and drop reordering to views with one row of columns.
+ columnReordering: false,
+
+ // headerMenu: dijit.Menu
+ // If set to a dijit.Menu, will use this as a context menu for the grid headers.
+ headerMenu: null,
+
+ // placeholderLabel: String
+ // Label of placeholders to search for in the header menu to replace with column toggling
+ // menu items.
+ placeholderLabel: "GridColumns",
+
+ // selectable: Boolean
+ // Set to true if you want to be able to select the text within the grid.
+ selectable: false,
+
+ // Used to store the last two clicks, to ensure double-clicking occurs based on the intended row
+ _click: null,
+
+ // loadingMessage: String
+ // Message that shows while the grid is loading
+ loadingMessage: "<span class='dojoxGridLoading'>${loadingState}</span>",
+
+ // errorMessage: String
+ // Message that shows when the grid encounters an error loading
+ errorMessage: "<span class='dojoxGridError'>${errorState}</span>",
+
+ // noDataMessage: String
+ // Message that shows if the grid has no data - wrap it in a
+ // span with class 'dojoxGridNoData' if you want it to be
+ // styled similar to the loading and error messages
+ noDataMessage: "",
+
+ // escapeHTMLInData: Boolean
+ // This will escape HTML brackets from the data to prevent HTML from
+ // user-inputted data being rendered with may contain JavaScript and result in
+ // XSS attacks. This is true by default, and it is recommended that it remain
+ // true. Setting this to false will allow data to be displayed in the grid without
+ // filtering, and should be only used if it is known that the data won't contain
+ // malicious scripts. If HTML is needed in grid cells, it is recommended that
+ // you use the formatter function to generate the HTML (the output of
+ // formatter functions is not filtered, even with escapeHTMLInData set to true).
+ escapeHTMLInData: true,
+
+ // formatterScope: Object
+ // An object to execute format functions within. If not set, the
+ // format functions will execute within the scope of the cell that
+ // has a format function.
+ formatterScope: null,
+
+ // editable: boolean
+ // indicates if the grid contains editable cells, default is false
+ // set to true if editable cell encountered during rendering
+ editable: false,
+
+ // private
+ sortInfo: 0,
+ themeable: true,
+ _placeholders: null,
+
+ // _layoutClass: Object
+ // The class to use for our layout - can be overridden by grid subclasses
+ _layoutClass: dojox.grid._Layout,
+
+ // initialization
+ buildRendering: function(){
+ this.inherited(arguments);
+ // reset get from blank function (needed for markup parsing) to null, if not changed
+ if(this.get == dojox.grid._Grid.prototype.get){
+ this.get = null;
+ }
+ if(!this.domNode.getAttribute('tabIndex')){
+ this.domNode.tabIndex = "0";
+ }
+ this.createScroller();
+ this.createLayout();
+ this.createViews();
+ this.createManagers();
+
+ this.createSelection();
+
+ this.connect(this.selection, "onSelected", "onSelected");
+ this.connect(this.selection, "onDeselected", "onDeselected");
+ this.connect(this.selection, "onChanged", "onSelectionChanged");
+
+ dojox.html.metrics.initOnFontResize();
+ this.connect(dojox.html.metrics, "onFontResize", "textSizeChanged");
+ dojox.grid.util.funnelEvents(this.domNode, this, 'doKeyEvent', dojox.grid.util.keyEvents);
+ if (this.selectionMode != "none") {
+ dojo.attr(this.domNode, "aria-multiselectable", this.selectionMode == "single" ? "false" : "true");
+ }
+ },
+
+ postMixInProperties: function(){
+ this.inherited(arguments);
+ var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
+ this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
+ this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
+ if(this.srcNodeRef && this.srcNodeRef.style.height){
+ this.height = this.srcNodeRef.style.height;
+ }
+ // Call this to update our autoheight to start out
+ this._setAutoHeightAttr(this.autoHeight, true);
+ this.lastScrollTop = this.scrollTop = 0;
+ },
+
+ postCreate: function(){
+ this._placeholders = [];
+ this._setHeaderMenuAttr(this.headerMenu);
+ this._setStructureAttr(this.structure);
+ this._click = [];
+ this.inherited(arguments);
+ if(this.domNode && this.autoWidth && this.initialWidth){
+ this.domNode.style.width = this.initialWidth;
+ }
+ if (this.domNode && !this.editable){
+ // default value for aria-readonly is false, set to true if grid is not editable
+ dojo.attr(this.domNode,"aria-readonly", "true");
+ }
+ },
+
+ destroy: function(){
+ this.domNode.onReveal = null;
+ this.domNode.onSizeChange = null;
+
+ // Fixes IE domNode leak
+ delete this._click;
+
+ this.edit.destroy();
+ delete this.edit;
+
+ this.views.destroyViews();
+ if(this.scroller){
+ this.scroller.destroy();
+ delete this.scroller;
+ }
+ if(this.focus){
+ this.focus.destroy();
+ delete this.focus;
+ }
+ if(this.headerMenu&&this._placeholders.length){
+ dojo.forEach(this._placeholders, function(p){ p.unReplace(true); });
+ this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+ }
+ this.inherited(arguments);
+ },
+
+ _setAutoHeightAttr: function(ah, skipRender){
+ // Calculate our autoheight - turn it into a boolean or an integer
+ if(typeof ah == "string"){
+ if(!ah || ah == "false"){
+ ah = false;
+ }else if (ah == "true"){
+ ah = true;
+ }else{
+ ah = window.parseInt(ah, 10);
+ }
+ }
+ if(typeof ah == "number"){
+ if(isNaN(ah)){
+ ah = false;
+ }
+ // Autoheight must be at least 1, if it's a number. If it's
+ // less than 0, we'll take that to mean "all" rows (same as
+ // autoHeight=true - if it is equal to zero, we'll take that
+ // to mean autoHeight=false
+ if(ah < 0){
+ ah = true;
+ }else if (ah === 0){
+ ah = false;
+ }
+ }
+ this.autoHeight = ah;
+ if(typeof ah == "boolean"){
+ this._autoHeight = ah;
+ }else if(typeof ah == "number"){
+ this._autoHeight = (ah >= this.attr('rowCount'));
+ }else{
+ this._autoHeight = false;
+ }
+ if(this._started && !skipRender){
+ this.render();
+ }
+ },
+
+ _getRowCountAttr: function(){
+ return this.updating && this.invalidated && this.invalidated.rowCount != undefined ?
+ this.invalidated.rowCount : this.rowCount;
+ },
+
+ textSizeChanged: function(){
+ this.render();
+ },
+
+ sizeChange: function(){
+ this.update();
+ },
+
+ createManagers: function(){
+ // summary:
+ // create grid managers for various tasks including rows, focus, selection, editing
+
+ // row manager
+ this.rows = new dojox.grid._RowManager(this);
+ // focus manager
+ this.focus = new dojox.grid._FocusManager(this);
+ // edit manager
+ this.edit = new dojox.grid._EditManager(this);
+ },
+
+ createSelection: function(){
+ // summary: Creates a new Grid selection manager.
+
+ // selection manager
+ this.selection = new dojox.grid.Selection(this);
+ },
+
+ createScroller: function(){
+ // summary: Creates a new virtual scroller
+ this.scroller = new dojox.grid._Scroller();
+ this.scroller.grid = this;
+ this.scroller.renderRow = dojo.hitch(this, "renderRow");
+ this.scroller.removeRow = dojo.hitch(this, "rowRemoved");
+ },
+
+ createLayout: function(){
+ // summary: Creates a new Grid layout
+ this.layout = new this._layoutClass(this);
+ this.connect(this.layout, "moveColumn", "onMoveColumn");
+ },
+
+ onMoveColumn: function(){
+ this.render();
+ },
+
+ onResizeColumn: function(/*int*/ cellIdx){
+ // Called when a column is resized.
+ },
+
+ // views
+ createViews: function(){
+ this.views = new dojox.grid._ViewManager(this);
+ this.views.createView = dojo.hitch(this, "createView");
+ },
+
+ createView: function(inClass, idx){
+ var c = dojo.getObject(inClass);
+ var view = new c({ grid: this, index: idx });
+ this.viewsNode.appendChild(view.domNode);
+ this.viewsHeaderNode.appendChild(view.headerNode);
+ this.views.addView(view);
+ return view;
+ },
+
+ buildViews: function(){
+ for(var i=0, vs; (vs=this.layout.structure[i]); i++){
+ this.createView(vs.type || dojox._scopeName + ".grid._View", i).setStructure(vs);
+ }
+ this.scroller.setContentNodes(this.views.getContentNodes());
+ },
+
+ _setStructureAttr: function(structure){
+ var s = structure;
+ if(s && dojo.isString(s)){
+ dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')", "use dojox.grid._Grid.attr('structure', objVar) instead", "2.0");
+ s=dojo.getObject(s);
+ }
+ this.structure = s;
+ if(!s){
+ if(this.layout.structure){
+ s = this.layout.structure;
+ }else{
+ return;
+ }
+ }
+ this.views.destroyViews();
+ if(s !== this.layout.structure){
+ this.layout.setStructure(s);
+ }
+ this._structureChanged();
+ },
+
+ setStructure: function(/* dojox.grid.__ViewDef|dojox.grid.__ViewDef[]|dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]] */ inStructure){
+ // summary:
+ // Install a new structure and rebuild the grid.
+ dojo.deprecated("dojox.grid._Grid.setStructure(obj)", "use dojox.grid._Grid.attr('structure', obj) instead.", "2.0");
+ this._setStructureAttr(inStructure);
+ },
+
+ getColumnTogglingItems: function(){
+ // Summary: returns an array of dijit.CheckedMenuItem widgets that can be
+ // added to a menu for toggling columns on and off.
+ return dojo.map(this.layout.cells, function(cell){
+ if(!cell.menuItems){ cell.menuItems = []; }
+
+ var self = this;
+ var item = new dijit.CheckedMenuItem({
+ label: cell.name,
+ checked: !cell.hidden,
+ _gridCell: cell,
+ onChange: function(checked){
+ if(self.layout.setColumnVisibility(this._gridCell.index, checked)){
+ var items = this._gridCell.menuItems;
+ if(items.length > 1){
+ dojo.forEach(items, function(item){
+ if(item !== this){
+ item.setAttribute("checked", checked);
+ }
+ }, this);
+ }
+ checked = dojo.filter(self.layout.cells, function(c){
+ if(c.menuItems.length > 1){
+ dojo.forEach(c.menuItems, "item.attr('disabled', false);");
+ }else{
+ c.menuItems[0].attr('disabled', false);
+ }
+ return !c.hidden;
+ });
+ if(checked.length == 1){
+ dojo.forEach(checked[0].menuItems, "item.attr('disabled', true);");
+ }
+ }
+ },
+ destroy: function(){
+ var index = dojo.indexOf(this._gridCell.menuItems, this);
+ this._gridCell.menuItems.splice(index, 1);
+ delete this._gridCell;
+ dijit.CheckedMenuItem.prototype.destroy.apply(this, arguments);
+ }
+ });
+ cell.menuItems.push(item);
+ return item;
+ }, this); // dijit.CheckedMenuItem[]
+ },
+
+ _setHeaderMenuAttr: function(menu){
+ if(this._placeholders && this._placeholders.length){
+ dojo.forEach(this._placeholders, function(p){
+ p.unReplace(true);
+ });
+ this._placeholders = [];
+ }
+ if(this.headerMenu){
+ this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+ }
+ this.headerMenu = menu;
+ if(!menu){ return; }
+
+ this.headerMenu.bindDomNode(this.viewsHeaderNode);
+ if(this.headerMenu.getPlaceholders){
+ this._placeholders = this.headerMenu.getPlaceholders(this.placeholderLabel);
+ }
+ },
+
+ setHeaderMenu: function(/* dijit.Menu */ menu){
+ dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)", "use dojox.grid._Grid.attr('headerMenu', obj) instead.", "2.0");
+ this._setHeaderMenuAttr(menu);
+ },
+
+ setupHeaderMenu: function(){
+ if(this._placeholders && this._placeholders.length){
+ dojo.forEach(this._placeholders, function(p){
+ if(p._replaced){
+ p.unReplace(true);
+ }
+ p.replace(this.getColumnTogglingItems());
+ }, this);
+ }
+ },
+
+ _fetch: function(start){
+ this.setScrollTop(0);
+ },
+
+ getItem: function(inRowIndex){
+ return null;
+ },
+
+ showMessage: function(message){
+ if(message){
+ this.messagesNode.innerHTML = message;
+ this.messagesNode.style.display = "";
+ }else{
+ this.messagesNode.innerHTML = "";
+ this.messagesNode.style.display = "none";
+ }
+ },
+
+ _structureChanged: function() {
+ this.buildViews();
+ if(this.autoRender && this._started){
+ this.render();
+ }
+ },
+
+ hasLayout: function() {
+ return this.layout.cells.length;
+ },
+
+ // sizing
+ resize: function(changeSize, resultSize){
+ // summary:
+ // Update the grid's rendering dimensions and resize it
+
+ // Calling sizeChange calls update() which calls _resize...so let's
+ // save our input values, if any, and use them there when it gets
+ // called. This saves us an extra call to _resize(), which can
+ // get kind of heavy.
+ this._pendingChangeSize = changeSize;
+ this._pendingResultSize = resultSize;
+ this.sizeChange();
+ },
+
+ _getPadBorder: function() {
+ this._padBorder = this._padBorder || dojo._getPadBorderExtents(this.domNode);
+ return this._padBorder;
+ },
+
+ _getHeaderHeight: function(){
+ var vns = this.viewsHeaderNode.style, t = vns.display == "none" ? 0 : this.views.measureHeader();
+ vns.height = t + 'px';
+ // header heights are reset during measuring so must be normalized after measuring.
+ this.views.normalizeHeaderNodeHeight();
+ return t;
+ },
+
+ _resize: function(changeSize, resultSize){
+ // Restore our pending values, if any
+ changeSize = changeSize || this._pendingChangeSize;
+ resultSize = resultSize || this._pendingResultSize;
+ delete this._pendingChangeSize;
+ delete this._pendingResultSize;
+ // if we have set up everything except the DOM, we cannot resize
+ if(!this.domNode){ return; }
+ var pn = this.domNode.parentNode;
+ if(!pn || pn.nodeType != 1 || !this.hasLayout() || pn.style.visibility == "hidden" || pn.style.display == "none"){
+ return;
+ }
+ // useful measurement
+ var padBorder = this._getPadBorder();
+ var hh = undefined;
+ var h;
+ // grid height
+ if(this._autoHeight){
+ this.domNode.style.height = 'auto';
+ this.viewsNode.style.height = '';
+ }else if(typeof this.autoHeight == "number"){
+ h = hh = this._getHeaderHeight();
+ h += (this.scroller.averageRowHeight * this.autoHeight);
+ this.domNode.style.height = h + "px";
+ }else if(this.domNode.clientHeight <= padBorder.h){
+ if(pn == document.body){
+ this.domNode.style.height = this.defaultHeight;
+ }else if(this.height){
+ this.domNode.style.height = this.height;
+ }else{
+ this.fitTo = "parent";
+ }
+ }
+ // if we are given dimensions, size the grid's domNode to those dimensions
+ if(resultSize){
+ changeSize = resultSize;
+ }
+ if(changeSize){
+ dojo.marginBox(this.domNode, changeSize);
+ this.height = this.domNode.style.height;
+ delete this.fitTo;
+ }else if(this.fitTo == "parent"){
+ h = this._parentContentBoxHeight = this._parentContentBoxHeight || dojo._getContentBox(pn).h;
+ this.domNode.style.height = Math.max(0, h) + "px";
+ }
+
+ var hasFlex = dojo.some(this.views.views, function(v){ return v.flexCells; });
+
+ if(!this._autoHeight && (h || dojo._getContentBox(this.domNode).h) === 0){
+ // We need to hide the header, since the Grid is essentially hidden.
+ this.viewsHeaderNode.style.display = "none";
+ }else{
+ // Otherwise, show the header and give it an appropriate height.
+ this.viewsHeaderNode.style.display = "block";
+ if(!hasFlex && hh === undefined){
+ hh = this._getHeaderHeight();
+ }
+ }
+ if(hasFlex){
+ hh = undefined;
+ }
+
+ // NOTE: it is essential that width be applied before height
+ // Header height can only be calculated properly after view widths have been set.
+ // This is because flex column width is naturally 0 in Firefox.
+ // Therefore prior to width sizing flex columns with spaces are maximally wrapped
+ // and calculated to be too tall.
+ this.adaptWidth();
+ this.adaptHeight(hh);
+
+ this.postresize();
+ },
+
+ adaptWidth: function() {
+ // private: sets width and position for views and update grid width if necessary
+ var doAutoWidth = (!this.initialWidth && this.autoWidth);
+ var w = doAutoWidth ? 0 : this.domNode.clientWidth || (this.domNode.offsetWidth - this._getPadBorder().w),
+ vw = this.views.arrange(1, w);
+ this.views.onEach("adaptWidth");
+ if(doAutoWidth){
+ this.domNode.style.width = vw + "px";
+ }
+ },
+
+ adaptHeight: function(inHeaderHeight){
+ // private: measures and normalizes header height, then sets view heights, and then updates scroller
+ // content extent
+ var t = inHeaderHeight === undefined ? this._getHeaderHeight() : inHeaderHeight;
+ var h = (this._autoHeight ? -1 : Math.max(this.domNode.clientHeight - t, 0) || 0);
+ this.views.onEach('setSize', [0, h]);
+ this.views.onEach('adaptHeight');
+ if(!this._autoHeight){
+ var numScroll = 0, numNoScroll = 0;
+ var noScrolls = dojo.filter(this.views.views, function(v){
+ var has = v.hasHScrollbar();
+ if(has){ numScroll++; }else{ numNoScroll++; }
+ return (!has);
+ });
+ if(numScroll > 0 && numNoScroll > 0){
+ dojo.forEach(noScrolls, function(v){
+ v.adaptHeight(true);
+ });
+ }
+ }
+ if(this.autoHeight === true || h != -1 || (typeof this.autoHeight == "number" && this.autoHeight >= this.attr('rowCount'))){
+ this.scroller.windowHeight = h;
+ }else{
+ this.scroller.windowHeight = Math.max(this.domNode.clientHeight - t, 0);
+ }
+ },
+
+ // startup
+ startup: function(){
+ if(this._started){return;}
+ this.inherited(arguments);
+ if(this.autoRender){
+ this.render();
+ }
+ },
+
+ // render
+ render: function(){
+ // summary:
+ // Render the grid, headers, and views. Edit and scrolling states are reset. To retain edit and
+ // scrolling states, see Update.
+
+ if(!this.domNode){return;}
+ if(!this._started){return;}
+
+ if(!this.hasLayout()) {
+ this.scroller.init(0, this.keepRows, this.rowsPerPage);
+ return;
+ }
+ //
+ this.update = this.defaultUpdate;
+ this._render();
+ },
+
+ _render: function(){
+ this.scroller.init(this.attr('rowCount'), this.keepRows, this.rowsPerPage);
+ this.prerender();
+ this.setScrollTop(0);
+ this.postrender();
+ },
+
+ prerender: function(){
+ // if autoHeight, make sure scroller knows not to virtualize; everything must be rendered.
+ this.keepRows = this._autoHeight ? 0 : this.keepRows;
+ this.scroller.setKeepInfo(this.keepRows);
+ this.views.render();
+ this._resize();
+ },
+
+ postrender: function(){
+ this.postresize();
+ this.focus.initFocusView();
+ // make rows unselectable
+ dojo.setSelectable(this.domNode, this.selectable);
+ },
+
+ postresize: function(){
+ // views are position absolute, so they do not inflate the parent
+ if(this._autoHeight){
+ var size = Math.max(this.views.measureContent()) + 'px';
+
+ this.viewsNode.style.height = size;
+ }
+ },
+
+ renderRow: function(inRowIndex, inNodes){
+ // summary: private, used internally to render rows
+ this.views.renderRow(inRowIndex, inNodes, this._skipRowRenormalize);
+ },
+
+ rowRemoved: function(inRowIndex){
+ // summary: private, used internally to remove rows
+ this.views.rowRemoved(inRowIndex);
+ },
+
+ invalidated: null,
+
+ updating: false,
+
+ beginUpdate: function(){
+ // summary:
+ // Use to make multiple changes to rows while queueing row updating.
+ // NOTE: not currently supporting nested begin/endUpdate calls
+ this.invalidated = [];
+ this.updating = true;
+ },
+
+ endUpdate: function(){
+ // summary:
+ // Use after calling beginUpdate to render any changes made to rows.
+ this.updating = false;
+ var i = this.invalidated, r;
+ if(i.all){
+ this.update();
+ }else if(i.rowCount != undefined){
+ this.updateRowCount(i.rowCount);
+ }else{
+ for(r in i){
+ this.updateRow(Number(r));
+ }
+ }
+ this.invalidated = [];
+ },
+
+ // update
+ defaultUpdate: function(){
+ // note: initial update calls render and subsequently this function.
+ if(!this.domNode){return;}
+ if(this.updating){
+ this.invalidated.all = true;
+ return;
+ }
+ //this.edit.saveState(inRowIndex);
+ this.lastScrollTop = this.scrollTop;
+ this.prerender();
+ this.scroller.invalidateNodes();
+ this.setScrollTop(this.lastScrollTop);
+ this.postrender();
+ //this.edit.restoreState(inRowIndex);
+ },
+
+ update: function(){
+ // summary:
+ // Update the grid, retaining edit and scrolling states.
+ this.render();
+ },
+
+ updateRow: function(inRowIndex){
+ // summary:
+ // Render a single row.
+ // inRowIndex: Integer
+ // Index of the row to render
+ inRowIndex = Number(inRowIndex);
+ if(this.updating){
+ this.invalidated[inRowIndex]=true;
+ }else{
+ this.views.updateRow(inRowIndex);
+ this.scroller.rowHeightChanged(inRowIndex);
+ }
+ },
+
+ updateRows: function(startIndex, howMany){
+ // summary:
+ // Render consecutive rows at once.
+ // startIndex: Integer
+ // Index of the starting row to render
+ // howMany: Integer
+ // How many rows to update.
+ startIndex = Number(startIndex);
+ howMany = Number(howMany);
+ var i;
+ if(this.updating){
+ for(i=0; i<howMany; i++){
+ this.invalidated[i+startIndex]=true;
+ }
+ }else{
+ for(i=0; i<howMany; i++){
+ this.views.updateRow(i+startIndex, this._skipRowRenormalize);
+ }
+ this.scroller.rowHeightChanged(startIndex);
+ }
+ },
+
+ updateRowCount: function(inRowCount){
+ //summary:
+ // Change the number of rows.
+ // inRowCount: int
+ // Number of rows in the grid.
+ if(this.updating){
+ this.invalidated.rowCount = inRowCount;
+ }else{
+ this.rowCount = inRowCount;
+ this._setAutoHeightAttr(this.autoHeight, true);
+ if(this.layout.cells.length){
+ this.scroller.updateRowCount(inRowCount);
+ }
+ this._resize();
+ if(this.layout.cells.length){
+ this.setScrollTop(this.scrollTop);
+ }
+ }
+ },
+
+ updateRowStyles: function(inRowIndex){
+ // summary:
+ // Update the styles for a row after it's state has changed.
+ this.views.updateRowStyles(inRowIndex);
+ },
+ getRowNode: function(inRowIndex){
+ // summary:
+ // find the rowNode that is not a rowSelector
+ if (this.focus.focusView && !(this.focus.focusView instanceof dojox.grid._RowSelector)){
+ return this.focus.focusView.rowNodes[inRowIndex];
+ }else{ // search through views
+ for (var i = 0, cView; (cView = this.views.views[i]); i++) {
+ if (!(cView instanceof dojox.grid._RowSelector)) {
+ return cView.rowNodes[inRowIndex];
+ }
+ }
+ }
+ return null;
+ },
+ rowHeightChanged: function(inRowIndex){
+ // summary:
+ // Update grid when the height of a row has changed. Row height is handled automatically as rows
+ // are rendered. Use this function only to update a row's height outside the normal rendering process.
+ // inRowIndex: Integer
+ // index of the row that has changed height
+
+ this.views.renormalizeRow(inRowIndex);
+ this.scroller.rowHeightChanged(inRowIndex);
+ },
+
+ // fastScroll: Boolean
+ // flag modifies vertical scrolling behavior. Defaults to true but set to false for slower
+ // scroll performance but more immediate scrolling feedback
+ fastScroll: true,
+
+ delayScroll: false,
+
+ // scrollRedrawThreshold: int
+ // pixel distance a user must scroll vertically to trigger grid scrolling.
+ scrollRedrawThreshold: (dojo.isIE ? 100 : 50),
+
+ // scroll methods
+ scrollTo: function(inTop){
+ // summary:
+ // Vertically scroll the grid to a given pixel position
+ // inTop: Integer
+ // vertical position of the grid in pixels
+ if(!this.fastScroll){
+ this.setScrollTop(inTop);
+ return;
+ }
+ var delta = Math.abs(this.lastScrollTop - inTop);
+ this.lastScrollTop = inTop;
+ if(delta > this.scrollRedrawThreshold || this.delayScroll){
+ this.delayScroll = true;
+ this.scrollTop = inTop;
+ this.views.setScrollTop(inTop);
+ if(this._pendingScroll){
+ window.clearTimeout(this._pendingScroll);
+ }
+ var _this = this;
+ this._pendingScroll = window.setTimeout(function(){
+ delete _this._pendingScroll;
+ _this.finishScrollJob();
+ }, 200);
+ }else{
+ this.setScrollTop(inTop);
+ }
+ },
+
+ finishScrollJob: function(){
+ this.delayScroll = false;
+ this.setScrollTop(this.scrollTop);
+ },
+
+ setScrollTop: function(inTop){
+ this.scroller.scroll(this.views.setScrollTop(inTop));
+ },
+
+ scrollToRow: function(inRowIndex){
+ // summary:
+ // Scroll the grid to a specific row.
+ // inRowIndex: Integer
+ // grid row index
+ this.setScrollTop(this.scroller.findScrollTop(inRowIndex) + 1);
+ },
+
+ // styling (private, used internally to style individual parts of a row)
+ styleRowNode: function(inRowIndex, inRowNode){
+ if(inRowNode){
+ this.rows.styleRowNode(inRowIndex, inRowNode);
+ }
+ },
+
+ // called when the mouse leaves the grid so we can deselect all hover rows
+ _mouseOut: function(e){
+ this.rows.setOverRow(-2);
+ },
+
+ // cells
+ getCell: function(inIndex){
+ // summary:
+ // Retrieves the cell object for a given grid column.
+ // inIndex: Integer
+ // Grid column index of cell to retrieve
+ // returns:
+ // a grid cell
+ return this.layout.cells[inIndex];
+ },
+
+ setCellWidth: function(inIndex, inUnitWidth){
+ this.getCell(inIndex).unitWidth = inUnitWidth;
+ },
+
+ getCellName: function(inCell){
+ // summary: Returns the cell name of a passed cell
+ return "Cell " + inCell.index; // String
+ },
+
+ // sorting
+ canSort: function(inSortInfo){
+ // summary:
+ // Determines if the grid can be sorted
+ // inSortInfo: Integer
+ // Sort information, 1-based index of column on which to sort, positive for an ascending sort
+ // and negative for a descending sort
+ // returns: Boolean
+ // True if grid can be sorted on the given column in the given direction
+ },
+
+ sort: function(){
+ },
+
+ getSortAsc: function(inSortInfo){
+ // summary:
+ // Returns true if grid is sorted in an ascending direction.
+ inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
+ return Boolean(inSortInfo > 0); // Boolean
+ },
+
+ getSortIndex: function(inSortInfo){
+ // summary:
+ // Returns the index of the column on which the grid is sorted
+ inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
+ return Math.abs(inSortInfo) - 1; // Integer
+ },
+
+ setSortIndex: function(inIndex, inAsc){
+ // summary:
+ // Sort the grid on a column in a specified direction
+ // inIndex: Integer
+ // Column index on which to sort.
+ // inAsc: Boolean
+ // If true, sort the grid in ascending order, otherwise in descending order
+ var si = inIndex +1;
+ if(inAsc != undefined){
+ si *= (inAsc ? 1 : -1);
+ } else if(this.getSortIndex() == inIndex){
+ si = -this.sortInfo;
+ }
+ this.setSortInfo(si);
+ },
+
+ setSortInfo: function(inSortInfo){
+ if(this.canSort(inSortInfo)){
+ this.sortInfo = inSortInfo;
+ this.sort();
+ this.update();
+ }
+ },
+
+ // DOM event handler
+ doKeyEvent: function(e){
+ e.dispatch = 'do' + e.type;
+ this.onKeyEvent(e);
+ },
+
+ // event dispatch
+ //: protected
+ _dispatch: function(m, e){
+ if(m in this){
+ return this[m](e);
+ }
+ return false;
+ },
+
+ dispatchKeyEvent: function(e){
+ this._dispatch(e.dispatch, e);
+ },
+
+ dispatchContentEvent: function(e){
+ this.edit.dispatchEvent(e) || e.sourceView.dispatchContentEvent(e) || this._dispatch(e.dispatch, e);
+ },
+
+ dispatchHeaderEvent: function(e){
+ e.sourceView.dispatchHeaderEvent(e) || this._dispatch('doheader' + e.type, e);
+ },
+
+ dokeydown: function(e){
+ this.onKeyDown(e);
+ },
+
+ doclick: function(e){
+ if(e.cellNode){
+ this.onCellClick(e);
+ }else{
+ this.onRowClick(e);
+ }
+ },
+
+ dodblclick: function(e){
+ if(e.cellNode){
+ this.onCellDblClick(e);
+ }else{
+ this.onRowDblClick(e);
+ }
+ },
+
+ docontextmenu: function(e){
+ if(e.cellNode){
+ this.onCellContextMenu(e);
+ }else{
+ this.onRowContextMenu(e);
+ }
+ },
+
+ doheaderclick: function(e){
+ if(e.cellNode){
+ this.onHeaderCellClick(e);
+ }else{
+ this.onHeaderClick(e);
+ }
+ },
+
+ doheaderdblclick: function(e){
+ if(e.cellNode){
+ this.onHeaderCellDblClick(e);
+ }else{
+ this.onHeaderDblClick(e);
+ }
+ },
+
+ doheadercontextmenu: function(e){
+ if(e.cellNode){
+ this.onHeaderCellContextMenu(e);
+ }else{
+ this.onHeaderContextMenu(e);
+ }
+ },
+
+ // override to modify editing process
+ doStartEdit: function(inCell, inRowIndex){
+ this.onStartEdit(inCell, inRowIndex);
+ },
+
+ doApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){
+ this.onApplyCellEdit(inValue, inRowIndex, inFieldIndex);
+ },
+
+ doCancelEdit: function(inRowIndex){
+ this.onCancelEdit(inRowIndex);
+ },
+
+ doApplyEdit: function(inRowIndex){
+ this.onApplyEdit(inRowIndex);
+ },
+
+ // row editing
+ addRow: function(){
+ // summary:
+ // Add a row to the grid.
+ this.updateRowCount(this.attr('rowCount')+1);
+ },
+
+ removeSelectedRows: function(){
+ // summary:
+ // Remove the selected rows from the grid.
+ if(this.allItemsSelected){
+ this.updateRowCount(0);
+ }else{
+ this.updateRowCount(Math.max(0, this.attr('rowCount') - this.selection.getSelected().length));
+ }
+ this.selection.clear();
+ }
+
+ });
+
+ dojox.grid._Grid.markupFactory = function(props, node, ctor, cellFunc){
+ var d = dojo;
+ var widthFromAttr = function(n){
+ var w = d.attr(n, "width")||"auto";
+ if((w != "auto")&&(w.slice(-2) != "em")&&(w.slice(-1) != "%")){
+ w = parseInt(w, 10)+"px";
+ }
+ return w;
+ };
+ // if(!props.store){ console.debug("no store!"); }
+ // if a structure isn't referenced, do we have enough
+ // data to try to build one automatically?
+ if( !props.structure &&
+ node.nodeName.toLowerCase() == "table"){
+
+ // try to discover a structure
+ props.structure = d.query("> colgroup", node).map(function(cg){
+ var sv = d.attr(cg, "span");
+ var v = {
+ noscroll: (d.attr(cg, "noscroll") == "true") ? true : false,
+ __span: (!!sv ? parseInt(sv, 10) : 1),
+ cells: []
+ };
+ if(d.hasAttr(cg, "width")){
+ v.width = widthFromAttr(cg);
+ }
+ return v; // for vendetta
+ });
+ if(!props.structure.length){
+ props.structure.push({
+ __span: Infinity,
+ cells: [] // catch-all view
+ });
+ }
+ // check to see if we're gonna have more than one view
+
+ // for each tr in our th, create a row of cells
+ d.query("thead > tr", node).forEach(function(tr, tr_idx){
+ var cellCount = 0;
+ var viewIdx = 0;
+ var lastViewIdx;
+ var cView = null;
+ d.query("> th", tr).map(function(th){
+ // what view will this cell go into?
+
+ // NOTE:
+ // to prevent extraneous iteration, we start counters over
+ // for each row, incrementing over the surface area of the
+ // structure that colgroup processing generates and
+ // creating cell objects for each <th> to place into those
+ // cell groups. There's a lot of state-keepking logic
+ // here, but it is what it has to be.
+ if(!cView){ // current view book keeping
+ lastViewIdx = 0;
+ cView = props.structure[0];
+ }else if(cellCount >= (lastViewIdx+cView.__span)){
+ viewIdx++;
+ // move to allocating things into the next view
+ lastViewIdx += cView.__span;
+ var lastView = cView;
+ cView = props.structure[viewIdx];
+ }
+
+ // actually define the cell from what markup hands us
+ var cell = {
+ name: d.trim(d.attr(th, "name")||th.innerHTML),
+ colSpan: parseInt(d.attr(th, "colspan")||1, 10),
+ type: d.trim(d.attr(th, "cellType")||""),
+ id: d.trim(d.attr(th,"id")||"")
+ };
+ cellCount += cell.colSpan;
+ var rowSpan = d.attr(th, "rowspan");
+ if(rowSpan){
+ cell.rowSpan = rowSpan;
+ }
+ if(d.hasAttr(th, "width")){
+ cell.width = widthFromAttr(th);
+ }
+ if(d.hasAttr(th, "relWidth")){
+ cell.relWidth = window.parseInt(dojo.attr(th, "relWidth"), 10);
+ }
+ if(d.hasAttr(th, "hidden")){
+ cell.hidden = d.attr(th, "hidden") == "true";
+ }
+
+ if(cellFunc){
+ cellFunc(th, cell);
+ }
+
+ cell.type = cell.type ? dojo.getObject(cell.type) : dojox.grid.cells.Cell;
+
+ if(cell.type && cell.type.markupFactory){
+ cell.type.markupFactory(th, cell);
+ }
+
+ if(!cView.cells[tr_idx]){
+ cView.cells[tr_idx] = [];
+ }
+ cView.cells[tr_idx].push(cell);
+ });
+ });
+ }
+
+ return new ctor(props, node);
+ };
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.DataSelection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.DataSelection"] = true;
+dojo.provide("dojox.grid.DataSelection");
+
+
+dojo.declare("dojox.grid.DataSelection", dojox.grid.Selection, {
+ getFirstSelected: function(){
+ var idx = dojox.grid.Selection.prototype.getFirstSelected.call(this);
+
+ if(idx == -1){ return null; }
+ return this.grid.getItem(idx);
+ },
+
+ getNextSelected: function(inPrev){
+ var old_idx = this.grid.getItemIndex(inPrev);
+ var idx = dojox.grid.Selection.prototype.getNextSelected.call(this, old_idx);
+
+ if(idx == -1){ return null; }
+ return this.grid.getItem(idx);
+ },
+
+ getSelected: function(){
+ var result = [];
+ for(var i=0, l=this.selected.length; i<l; i++){
+ if(this.selected[i]){
+ result.push(this.grid.getItem(i));
+ }
+ }
+ return result;
+ },
+
+ addToSelection: function(inItemOrIndex){
+ if(this.mode == 'none'){ return; }
+ var idx = null;
+ if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+ idx = inItemOrIndex;
+ }else{
+ idx = this.grid.getItemIndex(inItemOrIndex);
+ }
+ dojox.grid.Selection.prototype.addToSelection.call(this, idx);
+ },
+
+ deselect: function(inItemOrIndex){
+ if(this.mode == 'none'){ return; }
+ var idx = null;
+ if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+ idx = inItemOrIndex;
+ }else{
+ idx = this.grid.getItemIndex(inItemOrIndex);
+ }
+ dojox.grid.Selection.prototype.deselect.call(this, idx);
+ },
+
+ deselectAll: function(inItemOrIndex){
+ var idx = null;
+ if(inItemOrIndex || typeof inItemOrIndex == "number"){
+ if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+ idx = inItemOrIndex;
+ }else{
+ idx = this.grid.getItemIndex(inItemOrIndex);
+ }
+ dojox.grid.Selection.prototype.deselectAll.call(this, idx);
+ }else{
+ this.inherited(arguments);
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid.DataGrid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.DataGrid"] = true;
+dojo.provide("dojox.grid.DataGrid");
+
+
+
+
+/*=====
+dojo.declare("dojox.grid.__DataCellDef", dojox.grid.__CellDef, {
+ constructor: function(){
+ // field: String?
+ // The attribute to read from the dojo.data item for the row.
+ // fields: String[]?
+ // An array of fields to grab the values of and pass as an array to the grid
+ // get: Function?
+ // function(rowIndex, item?){} rowIndex is of type Integer, item is of type
+ // Object. This function will be called when a cell requests data. Returns
+ // the unformatted data for the cell.
+ }
+});
+=====*/
+
+/*=====
+dojo.declare("dojox.grid.__DataViewDef", dojox.grid.__ViewDef, {
+ constructor: function(){
+ // cells: dojox.grid.__DataCellDef[]|Array[dojox.grid.__DataCellDef[]]?
+ // The structure of the cells within this grid.
+ // defaultCell: dojox.grid.__DataCellDef?
+ // A cell definition with default values for all cells in this view. If
+ // a property is defined in a cell definition in the "cells" array and
+ // this property, the cell definition's property will override this
+ // property's property.
+ }
+});
+=====*/
+
+dojo.declare("dojox.grid.DataGrid", dojox.grid._Grid, {
+ store: null,
+ query: null,
+ queryOptions: null,
+ fetchText: '...',
+ sortFields: null,
+
+ // updateDelay: int
+ // Time, in milliseconds, to delay updates automatically so that multiple
+ // calls to onSet/onNew/onDelete don't keep rerendering the grid. Set
+ // to 0 to immediately cause updates. A higher value will result in
+ // better performance at the expense of responsiveness of the grid.
+ updateDelay: 1,
+
+/*=====
+ // structure: dojox.grid.__DataViewDef|dojox.grid.__DataViewDef[]|dojox.grid.__DataCellDef[]|Array[dojox.grid.__DataCellDef[]]
+ // View layout defintion.
+ structure: '',
+=====*/
+
+ // You can specify items instead of a query, if you like. They do not need
+ // to be loaded - but the must be items in the store
+ items: null,
+
+ _store_connects: null,
+ _by_idty: null,
+ _by_idx: null,
+ _cache: null,
+ _pages: null,
+ _pending_requests: null,
+ _bop: -1,
+ _eop: -1,
+ _requests: 0,
+ rowCount: 0,
+
+ _isLoaded: false,
+ _isLoading: false,
+
+ postCreate: function(){
+ this._pages = [];
+ this._store_connects = [];
+ this._by_idty = {};
+ this._by_idx = [];
+ this._cache = [];
+ this._pending_requests = {};
+
+ this._setStore(this.store);
+ this.inherited(arguments);
+ },
+
+ createSelection: function(){
+ this.selection = new dojox.grid.DataSelection(this);
+ },
+
+ get: function(inRowIndex, inItem){
+ if(inItem && this.field == "_item" && !this.fields){
+ return inItem;
+ }else if(inItem && this.fields){
+ var ret = [];
+ var s = this.grid.store;
+ dojo.forEach(this.fields, function(f){
+ ret = ret.concat(s.getValues(inItem, f));
+ });
+ return ret;
+ }
+ return (!inItem ? this.defaultValue : (!this.field ? this.value : (this.field == "_item" ? inItem : this.grid.store.getValue(inItem, this.field))));
+ },
+
+ _checkUpdateStatus: function(){
+ if(this.updateDelay > 0){
+ var iStarted = false;
+ if(this._endUpdateDelay){
+ clearTimeout(this._endUpdateDelay);
+ delete this._endUpdateDelay;
+ iStarted = true;
+ }
+ if(!this.updating){
+ this.beginUpdate();
+ iStarted = true;
+ }
+ if(iStarted){
+ var _this = this;
+ this._endUpdateDelay = setTimeout(function(){
+ delete _this._endUpdateDelay;
+ _this.endUpdate();
+ }, this.updateDelay);
+ }
+ }
+ },
+
+ _onSet: function(item, attribute, oldValue, newValue){
+ this._checkUpdateStatus();
+ var idx = this.getItemIndex(item);
+ if(idx>-1){
+ this.updateRow(idx);
+ }
+ },
+
+ _createItem: function(item, index){
+ var idty = this._hasIdentity ? this.store.getIdentity(item) : dojo.toJson(this.query) + ":idx:" + index + ":sort:" + dojo.toJson(this.getSortProps());
+ var o = this._by_idty[idty] = { idty: idty, item: item };
+ return o;
+ },
+
+ _addItem: function(item, index, noUpdate){
+ this._by_idx[index] = this._createItem(item, index);
+ if(!noUpdate){
+ this.updateRow(index);
+ }
+ },
+
+ _onNew: function(item, parentInfo){
+ this._checkUpdateStatus();
+ var rowCount = this.attr('rowCount');
+ this._addingItem = true;
+ this.updateRowCount(rowCount+1);
+ this._addingItem = false;
+ this._addItem(item, rowCount);
+ this.showMessage();
+ },
+
+ _onDelete: function(item){
+ this._checkUpdateStatus();
+ var idx = this._getItemIndex(item, true);
+
+ if(idx >= 0){
+ // When a row is deleted, all rest rows are shifted down,
+ // and migrate from page to page. If some page is not
+ // loaded yet empty rows can migrate to initialized pages
+ // without refreshing. It causes empty rows in some pages, see:
+ // http://bugs.dojotoolkit.org/ticket/6818
+ // this code fix this problem by reseting loaded page info
+ this._pages = [];
+ this._bop = -1;
+ this._eop = -1;
+
+ var o = this._by_idx[idx];
+ this._by_idx.splice(idx, 1);
+ delete this._by_idty[o.idty];
+ this.updateRowCount(this.attr('rowCount')-1);
+ if(this.attr('rowCount') === 0){
+ this.showMessage(this.noDataMessage);
+ }
+ }
+ },
+
+ _onRevert: function(){
+ this._refresh();
+ },
+
+ setStore: function(store, query, queryOptions){
+ this._setQuery(query, queryOptions);
+ this._setStore(store);
+ this._refresh(true);
+ },
+
+ setQuery: function(query, queryOptions){
+ this._setQuery(query, queryOptions);
+ this._refresh(true);
+ },
+
+ setItems: function(items){
+ this.items = items;
+ this._setStore(this.store);
+ this._refresh(true);
+ },
+
+ _setQuery: function(query, queryOptions){
+ this.query = query;
+ this.queryOptions = queryOptions || this.queryOptions;
+ },
+
+ _setStore: function(store){
+ if(this.store&&this._store_connects){
+ dojo.forEach(this._store_connects,function(arr){
+ dojo.forEach(arr, dojo.disconnect);
+ });
+ }
+ this.store = store;
+
+ if(this.store){
+ var f = this.store.getFeatures();
+ var h = [];
+
+ this._canEdit = !!f["dojo.data.api.Write"] && !!f["dojo.data.api.Identity"];
+ this._hasIdentity = !!f["dojo.data.api.Identity"];
+
+ if(!!f["dojo.data.api.Notification"] && !this.items){
+ h.push(this.connect(this.store, "onSet", "_onSet"));
+ h.push(this.connect(this.store, "onNew", "_onNew"));
+ h.push(this.connect(this.store, "onDelete", "_onDelete"));
+ }
+ if(this._canEdit){
+ h.push(this.connect(this.store, "revert", "_onRevert"));
+ }
+
+ this._store_connects = h;
+ }
+ },
+
+ _onFetchBegin: function(size, req){
+ if(!this.scroller){ return; }
+ if(this.rowCount != size){
+ if(req.isRender){
+ this.scroller.init(size, this.keepRows, this.rowsPerPage);
+ this.rowCount = size;
+ this._setAutoHeightAttr(this.autoHeight, true);
+ this._skipRowRenormalize = true;
+ this.prerender();
+ this._skipRowRenormalize = false;
+ }else{
+ this.updateRowCount(size);
+ }
+ }
+ if(!size){
+ this.views.render();
+ this._resize();
+ this.showMessage(this.noDataMessage);
+ this.focus.initFocusView();
+ }else{
+ this.showMessage();
+ }
+ },
+
+ _onFetchComplete: function(items, req){
+ if(!this.scroller){ return; }
+ if(items && items.length > 0){
+ //console.log(items);
+ dojo.forEach(items, function(item, idx){
+ this._addItem(item, req.start+idx, true);
+ }, this);
+ if(this._autoHeight){
+ this._skipRowRenormalize = true;
+ }
+ this.updateRows(req.start, items.length);
+ if(this._autoHeight){
+ this._skipRowRenormalize = false;
+ }
+ if(req.isRender){
+ this.setScrollTop(0);
+ this.postrender();
+ }else if(this._lastScrollTop){
+ this.setScrollTop(this._lastScrollTop);
+ }
+ }
+ delete this._lastScrollTop;
+ if(!this._isLoaded){
+ this._isLoading = false;
+ this._isLoaded = true;
+ }
+ this._pending_requests[req.start] = false;
+ },
+
+ _onFetchError: function(err, req){
+ console.log(err);
+ delete this._lastScrollTop;
+ if(!this._isLoaded){
+ this._isLoading = false;
+ this._isLoaded = true;
+ this.showMessage(this.errorMessage);
+ }
+ this._pending_requests[req.start] = false;
+ this.onFetchError(err, req);
+ },
+
+ onFetchError: function(err, req){
+ },
+
+ _fetch: function(start, isRender){
+ start = start || 0;
+ if(this.store && !this._pending_requests[start]){
+ if(!this._isLoaded && !this._isLoading){
+ this._isLoading = true;
+ this.showMessage(this.loadingMessage);
+ }
+ this._pending_requests[start] = true;
+ //console.log("fetch: ", start);
+ try{
+ if(this.items){
+ var items = this.items;
+ var store = this.store;
+ this.rowsPerPage = items.length;
+ var req = {
+ start: start,
+ count: this.rowsPerPage,
+ isRender: isRender
+ };
+ this._onFetchBegin(items.length, req);
+
+ // Load them if we need to
+ var waitCount = 0;
+ dojo.forEach(items, function(i){
+ if(!store.isItemLoaded(i)){ waitCount++; }
+ });
+ if(waitCount === 0){
+ this._onFetchComplete(items, req);
+ }else{
+ var onItem = function(item){
+ waitCount--;
+ if(waitCount === 0){
+ this._onFetchComplete(items, req);
+ }
+ };
+ dojo.forEach(items, function(i){
+ if(!store.isItemLoaded(i)){
+ store.loadItem({item: i, onItem: onItem, scope: this});
+ }
+ }, this);
+ }
+ }else{
+ this.store.fetch({
+ start: start,
+ count: this.rowsPerPage,
+ query: this.query,
+ sort: this.getSortProps(),
+ queryOptions: this.queryOptions,
+ isRender: isRender,
+ onBegin: dojo.hitch(this, "_onFetchBegin"),
+ onComplete: dojo.hitch(this, "_onFetchComplete"),
+ onError: dojo.hitch(this, "_onFetchError")
+ });
+ }
+ }catch(e){
+ this._onFetchError(e, {start: start, count: this.rowsPerPage});
+ }
+ }
+ },
+
+ _clearData: function(){
+ this.updateRowCount(0);
+ this._by_idty = {};
+ this._by_idx = [];
+ this._pages = [];
+ this._bop = this._eop = -1;
+ this._isLoaded = false;
+ this._isLoading = false;
+ },
+
+ getItem: function(idx){
+ var data = this._by_idx[idx];
+ if(!data||(data&&!data.item)){
+ this._preparePage(idx);
+ return null;
+ }
+ return data.item;
+ },
+
+ getItemIndex: function(item){
+ return this._getItemIndex(item, false);
+ },
+
+ _getItemIndex: function(item, isDeleted){
+ if(!isDeleted && !this.store.isItem(item)){
+ return -1;
+ }
+
+ var idty = this._hasIdentity ? this.store.getIdentity(item) : null;
+
+ for(var i=0, l=this._by_idx.length; i<l; i++){
+ var d = this._by_idx[i];
+ if(d && ((idty && d.idty == idty) || (d.item === item))){
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ filter: function(query, reRender){
+ this.query = query;
+ if(reRender){
+ this._clearData();
+ }
+ this._fetch();
+ },
+
+ _getItemAttr: function(idx, attr){
+ var item = this.getItem(idx);
+ return (!item ? this.fetchText : this.store.getValue(item, attr));
+ },
+
+ // rendering
+ _render: function(){
+ if(this.domNode.parentNode){
+ this.scroller.init(this.attr('rowCount'), this.keepRows, this.rowsPerPage);
+ this.prerender();
+ this._fetch(0, true);
+ }
+ },
+
+ // paging
+ _requestsPending: function(inRowIndex){
+ return this._pending_requests[inRowIndex];
+ },
+
+ _rowToPage: function(inRowIndex){
+ return (this.rowsPerPage ? Math.floor(inRowIndex / this.rowsPerPage) : inRowIndex);
+ },
+
+ _pageToRow: function(inPageIndex){
+ return (this.rowsPerPage ? this.rowsPerPage * inPageIndex : inPageIndex);
+ },
+
+ _preparePage: function(inRowIndex){
+ if((inRowIndex < this._bop || inRowIndex >= this._eop) && !this._addingItem){
+ var pageIndex = this._rowToPage(inRowIndex);
+ this._needPage(pageIndex);
+ this._bop = pageIndex * this.rowsPerPage;
+ this._eop = this._bop + (this.rowsPerPage || this.attr('rowCount'));
+ }
+ },
+
+ _needPage: function(inPageIndex){
+ if(!this._pages[inPageIndex]){
+ this._pages[inPageIndex] = true;
+ this._requestPage(inPageIndex);
+ }
+ },
+
+ _requestPage: function(inPageIndex){
+ var row = this._pageToRow(inPageIndex);
+ var count = Math.min(this.rowsPerPage, this.attr('rowCount') - row);
+ if(count > 0){
+ this._requests++;
+ if(!this._requestsPending(row)){
+ setTimeout(dojo.hitch(this, "_fetch", row, false), 1);
+ //this.requestRows(row, count);
+ }
+ }
+ },
+
+ getCellName: function(inCell){
+ return inCell.field;
+ //console.log(inCell);
+ },
+
+ _refresh: function(isRender){
+ this._clearData();
+ this._fetch(0, isRender);
+ },
+
+ sort: function(){
+ this._lastScrollTop = this.scrollTop;
+ this._refresh();
+ },
+
+ canSort: function(){
+ return (!this._isLoading);
+ },
+
+ getSortProps: function(){
+ var c = this.getCell(this.getSortIndex());
+ if(!c){
+ if(this.sortFields){
+ return this.sortFields;
+ }
+ return null;
+ }else{
+ var desc = c["sortDesc"];
+ var si = !(this.sortInfo>0);
+ if(typeof desc == "undefined"){
+ desc = si;
+ }else{
+ desc = si ? !desc : desc;
+ }
+ return [{ attribute: c.field, descending: desc }];
+ }
+ },
+
+ styleRowState: function(inRow){
+ // summary: Perform row styling
+ if(this.store && this.store.getState){
+ var states=this.store.getState(inRow.index), c='';
+ for(var i=0, ss=["inflight", "error", "inserting"], s; s=ss[i]; i++){
+ if(states[s]){
+ c = ' dojoxGridRow-' + s;
+ break;
+ }
+ }
+ inRow.customClasses += c;
+ }
+ },
+
+ onStyleRow: function(inRow){
+ this.styleRowState(inRow);
+ this.inherited(arguments);
+ },
+
+ // editing
+ canEdit: function(inCell, inRowIndex){
+ return this._canEdit;
+ },
+
+ _copyAttr: function(idx, attr){
+ var row = {};
+ var backstop = {};
+ var src = this.getItem(idx);
+ return this.store.getValue(src, attr);
+ },
+
+ doStartEdit: function(inCell, inRowIndex){
+ if(!this._cache[inRowIndex]){
+ this._cache[inRowIndex] = this._copyAttr(inRowIndex, inCell.field);
+ }
+ this.onStartEdit(inCell, inRowIndex);
+ },
+
+ doApplyCellEdit: function(inValue, inRowIndex, inAttrName){
+ this.store.fetchItemByIdentity({
+ identity: this._by_idx[inRowIndex].idty,
+ onItem: dojo.hitch(this, function(item){
+ var oldValue = this.store.getValue(item, inAttrName);
+ if(typeof oldValue == 'number'){
+ inValue = isNaN(inValue) ? inValue : parseFloat(inValue);
+ }else if(typeof oldValue == 'boolean'){
+ inValue = inValue == 'true' ? true : inValue == 'false' ? false : inValue;
+ }else if(oldValue instanceof Date){
+ var asDate = new Date(inValue);
+ inValue = isNaN(asDate.getTime()) ? inValue : asDate;
+ }
+ this.store.setValue(item, inAttrName, inValue);
+ this.onApplyCellEdit(inValue, inRowIndex, inAttrName);
+ })
+ });
+ },
+
+ doCancelEdit: function(inRowIndex){
+ var cache = this._cache[inRowIndex];
+ if(cache){
+ this.updateRow(inRowIndex);
+ delete this._cache[inRowIndex];
+ }
+ this.onCancelEdit.apply(this, arguments);
+ },
+
+ doApplyEdit: function(inRowIndex, inDataAttr){
+ var cache = this._cache[inRowIndex];
+ /*if(cache){
+ var data = this.getItem(inRowIndex);
+ if(this.store.getValue(data, inDataAttr) != cache){
+ this.update(cache, data, inRowIndex);
+ }
+ delete this._cache[inRowIndex];
+ }*/
+ this.onApplyEdit(inRowIndex);
+ },
+
+ removeSelectedRows: function(){
+ // summary:
+ // Remove the selected rows from the grid.
+ if(this._canEdit){
+ this.edit.apply();
+ var fx = dojo.hitch(this, function(items){
+ if(items.length){
+ dojo.forEach(items, this.store.deleteItem, this.store);
+ this.selection.clear();
+ }
+ });
+ if(this.allItemsSelected){
+ this.store.fetch({
+ query: this.query,
+ queryOptions: this.queryOptions,
+ onComplete: fx});
+ }else{
+ fx(this.selection.getSelected());
+ }
+ }
+ }
+});
+
+dojox.grid.DataGrid.cell_markupFactory = function(cellFunc, node, cellDef){
+ var field = dojo.trim(dojo.attr(node, "field")||"");
+ if(field){
+ cellDef.field = field;
+ }
+ cellDef.field = cellDef.field||cellDef.name;
+ var fields = dojo.trim(dojo.attr(node, "fields")||"");
+ if(fields){
+ cellDef.fields = fields.split(",");
+ }
+ if(cellFunc){
+ cellFunc(node, cellDef);
+ }
+};
+
+dojox.grid.DataGrid.markupFactory = function(props, node, ctor, cellFunc){
+ return dojox.grid._Grid.markupFactory(props, node, ctor,
+ dojo.partial(dojox.grid.DataGrid.cell_markupFactory, cellFunc));
+};
+
+}
+
+
+dojo.i18n._preloadLocalizations("dojox.grid.nls.DataGrid", ["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
diff --git a/js/dojo/dojox/grid/DataSelection.js b/js/dojo/dojox/grid/DataSelection.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/DataSelection.js
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.DataSelection"]){
+dojo._hasResource["dojox.grid.DataSelection"]=true;
+dojo.provide("dojox.grid.DataSelection");
+dojo.require("dojox.grid.Selection");
+dojo.declare("dojox.grid.DataSelection",dojox.grid.Selection,{getFirstSelected:function(){
+var _1=dojox.grid.Selection.prototype.getFirstSelected.call(this);
+if(_1==-1){
+return null;
+}
+return this.grid.getItem(_1);
+},getNextSelected:function(_2){
+var _3=this.grid.getItemIndex(_2);
+var _4=dojox.grid.Selection.prototype.getNextSelected.call(this,_3);
+if(_4==-1){
+return null;
+}
+return this.grid.getItem(_4);
+},getSelected:function(){
+var _5=[];
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+_5.push(this.grid.getItem(i));
+}
+}
+return _5;
+},addToSelection:function(_6){
+if(this.mode=="none"){
+return;
+}
+var _7=null;
+if(typeof _6=="number"||typeof _6=="string"){
+_7=_6;
+}else{
+_7=this.grid.getItemIndex(_6);
+}
+dojox.grid.Selection.prototype.addToSelection.call(this,_7);
+},deselect:function(_8){
+if(this.mode=="none"){
+return;
+}
+var _9=null;
+if(typeof _8=="number"||typeof _8=="string"){
+_9=_8;
+}else{
+_9=this.grid.getItemIndex(_8);
+}
+dojox.grid.Selection.prototype.deselect.call(this,_9);
+},deselectAll:function(_a){
+var _b=null;
+if(_a||typeof _a=="number"){
+if(typeof _a=="number"||typeof _a=="string"){
+_b=_a;
+}else{
+_b=this.grid.getItemIndex(_a);
+}
+dojox.grid.Selection.prototype.deselectAll.call(this,_b);
+}else{
+this.inherited(arguments);
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/EnhancedGrid.js b/js/dojo/dojox/grid/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/EnhancedGrid.js
@@ -0,0 +1,77 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.EnhancedGrid"]){
+dojo._hasResource["dojox.grid.EnhancedGrid"]=true;
+dojo.provide("dojox.grid.EnhancedGrid");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.grid.enhanced._Plugin");
+dojo.requireLocalization("dojox.grid.enhanced","EnhancedGrid",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ru,zh,zh-tw");
+dojo.experimental("dojox.grid.EnhancedGrid");
+dojo.declare("dojox.grid.EnhancedGrid",dojox.grid.DataGrid,{plugins:null,pluginMgr:null,doubleAffordance:false,postMixInProperties:function(){
+this._nls=dojo.i18n.getLocalization("dojox.grid.enhanced","EnhancedGrid",this.lang);
+this.inherited(arguments);
+},postCreate:function(){
+if(this.plugins){
+this.pluginMgr=new dojox.grid.enhanced._Plugin(this);
+this.pluginMgr.preInit();
+}
+this.inherited(arguments);
+this.pluginMgr&&this.pluginMgr.postInit();
+},_fillContent:function(){
+this.menuContainer=this.srcNodeRef;
+this.inherited(arguments);
+},startup:function(){
+this.menuContainer&&this._initMenus&&this._initMenus();
+this.inherited(arguments);
+if(this.doubleAffordance){
+dojo.addClass(this.domNode,"dojoxGridDoubleAffordance");
+}
+},textSizeChanged:function(){
+if(!dojo.isWebKit){
+this.inherited(arguments);
+}else{
+if(this.textSizeChanging){
+return;
+}
+this.textSizeChanging=true;
+this.inherited(arguments);
+this.textSizeChanging=false;
+}
+},removeSelectedRows:function(){
+if(this.indirectSelection&&this._canEdit){
+var _1=dojo.clone(this.selection.selected);
+this.inherited(arguments);
+dojo.forEach(_1,function(_2,_3){
+_2&&this.grid.rowSelectCell.toggleRow(_3,false);
+});
+}
+},doApplyCellEdit:function(_4,_5,_6){
+if(!_6){
+this.invalidated[_5]=true;
+return;
+}
+this.inherited(arguments);
+},mixin:function(_7,_8){
+var _9={};
+for(p in _8){
+if(p=="_inherited"||p=="declaredClass"||p=="constructor"){
+continue;
+}
+_9[p]=_8[p];
+}
+dojo.mixin(_7,_9);
+},_copyAttr:function(_a,_b){
+if(!_b){
+return;
+}
+return this.inherited(arguments);
+}});
+dojox.grid.EnhancedGrid.markupFactory=function(_c,_d,_e,_f){
+return dojox.grid._Grid.markupFactory(_c,_d,_e,dojo.partial(dojox.grid.DataGrid.cell_markupFactory,_f));
+};
+}
diff --git a/js/dojo/dojox/grid/Selection.js b/js/dojo/dojox/grid/Selection.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/Selection.js
@@ -0,0 +1,209 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.Selection"]){
+dojo._hasResource["dojox.grid.Selection"]=true;
+dojo.provide("dojox.grid.Selection");
+dojo.declare("dojox.grid.Selection",null,{constructor:function(_1){
+this.grid=_1;
+this.selected=[];
+this.setMode(_1.selectionMode);
+},mode:"extended",selected:null,updating:0,selectedIndex:-1,setMode:function(_2){
+if(this.selected.length){
+this.deselectAll();
+}
+if(_2!="extended"&&_2!="multiple"&&_2!="single"&&_2!="none"){
+this.mode="extended";
+}else{
+this.mode=_2;
+}
+},onCanSelect:function(_3){
+return this.grid.onCanSelect(_3);
+},onCanDeselect:function(_4){
+return this.grid.onCanDeselect(_4);
+},onSelected:function(_5){
+},onDeselected:function(_6){
+},onChanging:function(){
+},onChanged:function(){
+},isSelected:function(_7){
+if(this.mode=="none"){
+return false;
+}
+return this.selected[_7];
+},getFirstSelected:function(){
+if(!this.selected.length||this.mode=="none"){
+return -1;
+}
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+return i;
+}
+}
+return -1;
+},getNextSelected:function(_8){
+if(this.mode=="none"){
+return -1;
+}
+for(var i=_8+1,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+return i;
+}
+}
+return -1;
+},getSelected:function(){
+var _9=[];
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+_9.push(i);
+}
+}
+return _9;
+},getSelectedCount:function(){
+var c=0;
+for(var i=0;i<this.selected.length;i++){
+if(this.selected[i]){
+c++;
+}
+}
+return c;
+},_beginUpdate:function(){
+if(this.updating===0){
+this.onChanging();
+}
+this.updating++;
+},_endUpdate:function(){
+this.updating--;
+if(this.updating===0){
+this.onChanged();
+}
+},select:function(_a){
+if(this.mode=="none"){
+return;
+}
+if(this.mode!="multiple"){
+this.deselectAll(_a);
+this.addToSelection(_a);
+}else{
+this.toggleSelect(_a);
+}
+},addToSelection:function(_b){
+if(this.mode=="none"){
+return;
+}
+if(dojo.isArray(_b)){
+dojo.forEach(_b,this.addToSelection,this);
+return;
+}
+_b=Number(_b);
+if(this.selected[_b]){
+this.selectedIndex=_b;
+}else{
+if(this.onCanSelect(_b)!==false){
+this.selectedIndex=_b;
+var _c=this.grid.getRowNode(_b);
+if(_c){
+dojo.attr(_c,"aria-selected","true");
+}
+this._beginUpdate();
+this.selected[_b]=true;
+this.onSelected(_b);
+this._endUpdate();
+}
+}
+},deselect:function(_d){
+if(this.mode=="none"){
+return;
+}
+if(dojo.isArray(_d)){
+dojo.forEach(_d,this.deselect,this);
+return;
+}
+_d=Number(_d);
+if(this.selectedIndex==_d){
+this.selectedIndex=-1;
+}
+if(this.selected[_d]){
+if(this.onCanDeselect(_d)===false){
+return;
+}
+var _e=this.grid.getRowNode(_d);
+if(_e){
+dojo.attr(_e,"aria-selected","false");
+}
+this._beginUpdate();
+delete this.selected[_d];
+this.onDeselected(_d);
+this._endUpdate();
+}
+},setSelected:function(_f,_10){
+this[(_10?"addToSelection":"deselect")](_f);
+},toggleSelect:function(_11){
+if(dojo.isArray(_11)){
+dojo.forEach(_11,this.toggleSelect,this);
+return;
+}
+this.setSelected(_11,!this.selected[_11]);
+},_range:function(_12,_13,_14){
+var s=(_12>=0?_12:_13),e=_13;
+if(s>e){
+e=s;
+s=_13;
+}
+for(var i=s;i<=e;i++){
+_14(i);
+}
+},selectRange:function(_15,_16){
+this._range(_15,_16,dojo.hitch(this,"addToSelection"));
+},deselectRange:function(_17,_18){
+this._range(_17,_18,dojo.hitch(this,"deselect"));
+},insert:function(_19){
+this.selected.splice(_19,0,false);
+if(this.selectedIndex>=_19){
+this.selectedIndex++;
+}
+},remove:function(_1a){
+this.selected.splice(_1a,1);
+if(this.selectedIndex>=_1a){
+this.selectedIndex--;
+}
+},deselectAll:function(_1b){
+for(var i in this.selected){
+if((i!=_1b)&&(this.selected[i]===true)){
+this.deselect(i);
+}
+}
+},clickSelect:function(_1c,_1d,_1e){
+if(this.mode=="none"){
+return;
+}
+this._beginUpdate();
+if(this.mode!="extended"){
+this.select(_1c);
+}else{
+var _1f=this.selectedIndex;
+if(!_1d){
+this.deselectAll(_1c);
+}
+if(_1e){
+this.selectRange(_1f,_1c);
+}else{
+if(_1d){
+this.toggleSelect(_1c);
+}else{
+this.addToSelection(_1c);
+}
+}
+}
+this._endUpdate();
+},clickSelectEvent:function(e){
+this.clickSelect(e.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+},clear:function(){
+this._beginUpdate();
+this.deselectAll();
+this._endUpdate();
+}});
+}
diff --git a/js/dojo/dojox/grid/TreeGrid.js b/js/dojo/dojox/grid/TreeGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/TreeGrid.js
@@ -0,0 +1,727 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.TreeGrid"]){
+dojo._hasResource["dojox.grid.TreeGrid"]=true;
+dojo.experimental("dojox.grid.TreeGrid");
+dojo.provide("dojox.grid.TreeGrid");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.grid._TreeView");
+dojo.require("dojox.grid.cells.tree");
+dojo.require("dojox.grid.TreeSelection");
+dojo.declare("dojox.grid._TreeAggregator",null,{cells:[],grid:null,childFields:[],constructor:function(_1){
+this.cells=_1.cells||[];
+this.childFields=_1.childFields||[];
+this.grid=_1.grid;
+this.store=this.grid.store;
+},_cacheValue:function(_2,id,_3){
+_2[id]=_3;
+return _3;
+},clearSubtotalCache:function(){
+if(this.store){
+delete this.store._cachedAggregates;
+}
+},cnt:function(_4,_5,_6){
+var _7=0;
+var _8=this.store;
+var _9=this.childFields;
+if(_9[_5]){
+var _a=_8.getValues(_6,_9[_5]);
+if(_4.index<=_5+1){
+_7=_a.length;
+}else{
+dojo.forEach(_a,function(c){
+_7+=this.getForCell(_4,_5+1,c,"cnt");
+},this);
+}
+}else{
+_7=1;
+}
+return _7;
+},sum:function(_b,_c,_d){
+var _e=0;
+var _f=this.store;
+var _10=this.childFields;
+if(_10[_c]){
+dojo.forEach(_f.getValues(_d,_10[_c]),function(c){
+_e+=this.getForCell(_b,_c+1,c,"sum");
+},this);
+}else{
+_e+=_f.getValue(_d,_b.field);
+}
+return _e;
+},value:function(_11,_12,_13){
+},getForCell:function(_14,_15,_16,_17){
+var _18=this.store;
+if(!_18||!_16||!_18.isItem(_16)){
+return "";
+}
+var _19=_18._cachedAggregates=_18._cachedAggregates||{};
+var id=_18.getIdentity(_16);
+var _1a=_19[id]=_19[id]||[];
+if(!_14.getOpenState){
+_14=this.grid.getCell(_14.layoutIndex+_15+1);
+}
+var idx=_14.index;
+var _1b=_1a[idx]=_1a[idx]||{};
+_17=(_17||(_14.parentCell?_14.parentCell.aggregate:"sum"))||"sum";
+var _1c=_14.field;
+if(_1c==_18.getLabelAttributes()[0]){
+_17="cnt";
+}
+var _1d=_1b[_17]=_1b[_17]||[];
+if(_1d[_15]!=undefined){
+return _1d[_15];
+}
+var _1e=((_14.parentCell&&_14.parentCell.itemAggregates)?_14.parentCell.itemAggregates[_14.idxInParent]:"")||"";
+if(_1e&&_18.hasAttribute(_16,_1e)){
+return this._cacheValue(_1d,_15,_18.getValue(_16,_1e));
+}else{
+if(_1e){
+return this._cacheValue(_1d,_15,0);
+}
+}
+return this._cacheValue(_1d,_15,this[_17](_14,_15,_16));
+}});
+dojo.declare("dojox.grid._TreeLayout",dojox.grid._Layout,{_isCollapsable:false,_getInternalStructure:function(_1f){
+var g=this.grid;
+var s=_1f;
+var _20=s[0].cells[0];
+var _21={type:"dojox.grid._TreeView",cells:[[]]};
+var _22=[];
+var _23=0;
+var _24=function(_25,_26){
+var _27=_25.children;
+var _28=function(_29,idx){
+var k,n={};
+for(k in _29){
+n[k]=_29[k];
+}
+n=dojo.mixin(n,{level:_26,idxInParent:_26>0?idx:-1,parentCell:_26>0?_25:null});
+return n;
+};
+var ret=[];
+dojo.forEach(_27,function(c,idx){
+if("children" in c){
+_22.push(c.field);
+var _2a=ret[ret.length-1];
+_2a.isCollapsable=true;
+c.level=_26;
+ret=ret.concat(_24(c,_26+1));
+}else{
+ret.push(_28(c,idx));
+}
+});
+_23=Math.max(_23,_26);
+return ret;
+};
+var _2b={children:_20,itemAggregates:[]};
+_21.cells[0]=_24(_2b,0);
+g.aggregator=new dojox.grid._TreeAggregator({cells:_21.cells[0],grid:g,childFields:_22});
+if(g.scroller&&g.defaultOpen){
+g.scroller.defaultRowHeight=g.scroller._origDefaultRowHeight*(2*_23+1);
+}
+return [_21];
+},setStructure:function(_2c){
+var s=_2c;
+var g=this.grid;
+if(g&&g.treeModel&&!dojo.every(s,function(i){
+return ("cells" in i);
+})){
+s=arguments[0]=[{cells:[s]}];
+}
+if(s.length==1&&s[0].cells.length==1){
+if(g&&g.treeModel){
+s[0].type="dojox.grid._TreeView";
+this._isCollapsable=true;
+s[0].cells[0][(this.grid.treeModel?this.grid.expandoCell:0)].isCollapsable=true;
+}else{
+var _2d=dojo.filter(s[0].cells[0],function(c){
+return ("children" in c);
+});
+if(_2d.length===1){
+this._isCollapsable=true;
+}
+}
+}
+if(this._isCollapsable&&(!g||!g.treeModel)){
+arguments[0]=this._getInternalStructure(s);
+}
+this.inherited(arguments);
+},addCellDef:function(_2e,_2f,_30){
+var obj=this.inherited(arguments);
+return dojo.mixin(obj,dojox.grid.cells.TreeCell);
+}});
+dojo.declare("dojox.grid.TreePath",null,{level:0,_str:"",_arr:null,grid:null,store:null,cell:null,item:null,constructor:function(_31,_32){
+if(dojo.isString(_31)){
+this._str=_31;
+this._arr=dojo.map(_31.split("/"),function(_33){
+return parseInt(_33,10);
+});
+}else{
+if(dojo.isArray(_31)){
+this._str=_31.join("/");
+this._arr=_31.slice(0);
+}else{
+if(typeof _31=="number"){
+this._str=String(_31);
+this._arr=[_31];
+}else{
+this._str=_31._str;
+this._arr=_31._arr.slice(0);
+}
+}
+}
+this.level=this._arr.length-1;
+this.grid=_32;
+this.store=this.grid.store;
+if(_32.treeModel){
+this.cell=_32.layout.cells[_32.expandoCell];
+}else{
+this.cell=_32.layout.cells[this.level];
+}
+},item:function(){
+if(!this._item){
+this._item=this.grid.getItem(this._arr);
+}
+return this._item;
+},compare:function(_34){
+if(dojo.isString(_34)||dojo.isArray(_34)){
+if(this._str==_34){
+return 0;
+}
+if(_34.join&&this._str==_34.join("/")){
+return 0;
+}
+_34=new dojox.grid.TreePath(_34,this.grid);
+}else{
+if(_34 instanceof dojox.grid.TreePath){
+if(this._str==_34._str){
+return 0;
+}
+}
+}
+for(var i=0,l=(this._arr.length<_34._arr.length?this._arr.length:_34._arr.length);i<l;i++){
+if(this._arr[i]<_34._arr[i]){
+return -1;
+}
+if(this._arr[i]>_34._arr[i]){
+return 1;
+}
+}
+if(this._arr.length<_34._arr.length){
+return -1;
+}
+if(this._arr.length>_34._arr.length){
+return 1;
+}
+return 0;
+},isOpen:function(){
+return this.cell.openStates&&this.cell.getOpenState(this.item());
+},previous:function(){
+var _35=this._arr.slice(0);
+if(this._str=="0"){
+return null;
+}
+var _36=_35.length-1;
+if(_35[_36]===0){
+_35.pop();
+return new dojox.grid.TreePath(_35,this.grid);
+}
+_35[_36]--;
+var _37=new dojox.grid.TreePath(_35,this.grid);
+return _37.lastChild(true);
+},next:function(){
+var _38=this._arr.slice(0);
+if(this.isOpen()){
+_38.push(0);
+}else{
+_38[_38.length-1]++;
+for(var i=this.level;i>=0;i--){
+var _39=this.grid.getItem(_38.slice(0,i+1));
+if(i>0){
+if(!_39){
+_38.pop();
+_38[i-1]++;
+}
+}else{
+if(!_39){
+return null;
+}
+}
+}
+}
+return new dojox.grid.TreePath(_38,this.grid);
+},children:function(_3a){
+if(!this.isOpen()&&!_3a){
+return null;
+}
+var _3b=[];
+var _3c=this.grid.treeModel;
+if(_3c){
+var _3d=this.item();
+var _3e=_3c.store;
+if(!_3c.mayHaveChildren(_3d)){
+return null;
+}
+dojo.forEach(_3c.childrenAttrs,function(_3f){
+_3b=_3b.concat(_3e.getValues(_3d,_3f));
+});
+}else{
+_3b=this.store.getValues(this.item(),this.grid.layout.cells[this.cell.level+1].parentCell.field);
+if(_3b.length>1&&this.grid.sortChildItems){
+var _40=this.grid.getSortProps();
+if(_40&&_40.length){
+var _41=_40[0].attribute,_42=this.grid;
+if(_41&&_3b[0][_41]){
+var _43=!!_40[0].descending;
+_3b=_3b.slice(0);
+_3b.sort(function(a,b){
+return _42._childItemSorter(a,b,_41,_43);
+});
+}
+}
+}
+}
+return _3b;
+},childPaths:function(){
+var _44=this.children();
+if(!_44){
+return [];
+}
+return dojo.map(_44,function(_45,_46){
+return new dojox.grid.TreePath(this._str+"/"+_46,this.grid);
+},this);
+},parent:function(){
+if(this.level===0){
+return null;
+}
+return new dojox.grid.TreePath(this._arr.slice(0,this.level),this.grid);
+},lastChild:function(_47){
+var _48=this.children();
+if(!_48||!_48.length){
+return this;
+}
+var _49=new dojox.grid.TreePath(this._str+"/"+String(_48.length-1),this.grid);
+if(!_47){
+return _49;
+}
+return _49.lastChild(true);
+},toString:function(){
+return this._str;
+}});
+dojo.declare("dojox.grid._TreeFocusManager",dojox.grid._FocusManager,{setFocusCell:function(_4a,_4b){
+if(_4a&&_4a.getNode(_4b)){
+this.inherited(arguments);
+}
+},isLastFocusCell:function(){
+if(this.cell&&this.cell.index==this.grid.layout.cellCount-1){
+var _4c=new dojox.grid.TreePath(this.grid.rowCount-1,this.grid);
+_4c=_4c.lastChild(true);
+return this.rowIndex==_4c._str;
+}
+return false;
+},next:function(){
+if(this.cell){
+var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1;
+var _4d=new dojox.grid.TreePath(this.rowIndex,this.grid);
+if(col>cc){
+var _4e=_4d.next();
+if(!_4e){
+col--;
+}else{
+col=0;
+_4d=_4e;
+}
+}
+if(this.grid.edit.isEditing()){
+var _4f=this.grid.getCell(col);
+if(!this.isLastFocusCell()&&!_4f.editable){
+this._focusifyCellNode(false);
+this.cell=_4f;
+this.rowIndex=_4d._str;
+this.next();
+return;
+}
+}
+this.setFocusIndex(_4d._str,col);
+}
+},previous:function(){
+if(this.cell){
+var row=(this.rowIndex||0),col=(this.cell.index||0)-1;
+var _50=new dojox.grid.TreePath(row,this.grid);
+if(col<0){
+var _51=_50.previous();
+if(!_51){
+col=0;
+}else{
+col=this.grid.layout.cellCount-1;
+_50=_51;
+}
+}
+if(this.grid.edit.isEditing()){
+var _52=this.grid.getCell(col);
+if(!this.isFirstFocusCell()&&!_52.editable){
+this._focusifyCellNode(false);
+this.cell=_52;
+this.rowIndex=_50._str;
+this.previous();
+return;
+}
+}
+this.setFocusIndex(_50._str,col);
+}
+},move:function(_53,_54){
+if(this.isNavHeader()){
+this.inherited(arguments);
+return;
+}
+if(!this.cell){
+return;
+}
+var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,_55=new dojox.grid.TreePath(this.rowIndex,this.grid);
+if(_53){
+var row;
+if(_53>0){
+_55=_55.next();
+row=_55._arr[0];
+if(row>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+}
+}else{
+if(_53<0){
+_55=_55.previous();
+row=_55._arr[0];
+if(row<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+}
+}
+}
+}
+var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_54));
+var _56=this.grid.getCell(col);
+var _57=_54<0?-1:1;
+while(col>=0&&col<cc&&_56&&_56.hidden===true){
+col+=_57;
+_56=this.grid.getCell(col);
+}
+if(!_56||_56.hidden===true){
+col=i;
+}
+if(_53){
+this.grid.updateRow(r);
+}
+this.setFocusIndex(_55._str,col);
+}});
+dojo.declare("dojox.grid.TreeGrid",dojox.grid.DataGrid,{defaultOpen:true,sortChildItems:false,openAtLevels:[],treeModel:null,expandoCell:0,aggregator:null,_layoutClass:dojox.grid._TreeLayout,createSelection:function(){
+this.selection=new dojox.grid.TreeSelection(this);
+},_childItemSorter:function(a,b,_58,_59){
+var av=this.store.getValue(a,_58);
+var bv=this.store.getValue(b,_58);
+if(av!=bv){
+return av<bv==_59?1:-1;
+}
+return 0;
+},_onNew:function(_5a,_5b){
+if(!_5b||!_5b.item){
+this.inherited(arguments);
+}else{
+var idx=this.getItemIndex(_5b.item);
+if(typeof idx=="string"){
+this.updateRow(idx.split("/")[0]);
+}else{
+if(idx>-1){
+this.updateRow(idx);
+}
+}
+}
+},_onSet:function(_5c,_5d,_5e,_5f){
+this._checkUpdateStatus();
+if(this.aggregator){
+this.aggregator.clearSubtotalCache();
+}
+var idx=this.getItemIndex(_5c);
+if(typeof idx=="string"){
+this.updateRow(idx.split("/")[0]);
+}else{
+if(idx>-1){
+this.updateRow(idx);
+}
+}
+},_onDelete:function(_60){
+this._cleanupExpandoCache(this._getItemIndex(_60,true),this.store.getIdentity(_60),_60);
+this.inherited(arguments);
+},_cleanupExpandoCache:function(_61,_62,_63){
+},_addItem:function(_64,_65,_66,_67){
+if(!_67&&this.model&&dojo.indexOf(this.model.root.children,_64)==-1){
+this.model.root.children[_65]=_64;
+}
+this.inherited(arguments);
+},getItem:function(idx){
+var _68=dojo.isArray(idx);
+if(dojo.isString(idx)&&idx.indexOf("/")){
+idx=idx.split("/");
+_68=true;
+}
+if(_68&&idx.length==1){
+idx=idx[0];
+_68=false;
+}
+if(!_68){
+return dojox.grid.DataGrid.prototype.getItem.call(this,idx);
+}
+var s=this.store;
+var itm=dojox.grid.DataGrid.prototype.getItem.call(this,idx[0]);
+var cf;
+if(this.aggregator){
+cf=this.aggregator.childFields||[];
+}else{
+if(this.treeModel){
+cf=this.treeModel.childrenAttrs||[];
+}
+}
+if(cf){
+for(var i=0;i<idx.length-1&&itm;i++){
+if(cf[i]){
+itm=(s.getValues(itm,cf[i])||[])[idx[i+1]];
+}else{
+itm=null;
+}
+}
+}
+return itm||null;
+},_getItemIndex:function(_69,_6a){
+if(!_6a&&!this.store.isItem(_69)){
+return -1;
+}
+var idx=this.inherited(arguments);
+if(idx==-1){
+var _6b=this.store.getIdentity(_69);
+return this._by_idty_paths[_6b]||-1;
+}
+return idx;
+},postMixInProperties:function(){
+if(this.treeModel&&!("defaultOpen" in this.params)){
+this.defaultOpen=false;
+}
+var def=this.defaultOpen;
+this.openAtLevels=dojo.map(this.openAtLevels,function(l){
+if(typeof l=="string"){
+switch(l.toLowerCase()){
+case "true":
+return true;
+break;
+case "false":
+return false;
+break;
+default:
+var r=parseInt(l,10);
+if(isNaN(r)){
+return def;
+}
+return r;
+break;
+}
+}
+return l;
+});
+this._by_idty_paths={};
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+if(this.treeModel){
+this._setModel(this.treeModel);
+}
+},setModel:function(_6c){
+this._setModel(_6c);
+this._refresh(true);
+},_setModel:function(_6d){
+if(_6d&&(!dijit.tree.ForestStoreModel||!(_6d instanceof dijit.tree.ForestStoreModel))){
+throw new Error("dojox.grid.TreeGrid: treeModel must be an instance of dijit.tree.ForestStoreModel");
+}
+this.treeModel=_6d;
+dojo.toggleClass(this.domNode,"dojoxGridTreeModel",this.treeModel?true:false);
+this._setQuery(_6d?_6d.query:null);
+this._setStore(_6d?_6d.store:null);
+},createScroller:function(){
+this.inherited(arguments);
+this.scroller._origDefaultRowHeight=this.scroller.defaultRowHeight;
+},createManagers:function(){
+this.rows=new dojox.grid._RowManager(this);
+this.focus=new dojox.grid._TreeFocusManager(this);
+this.edit=new dojox.grid._EditManager(this);
+},_setStore:function(_6e){
+this.inherited(arguments);
+if(this.treeModel&&!this.treeModel.root.children){
+this.treeModel.root.children=[];
+}
+if(this.aggregator){
+this.aggregator.store=_6e;
+}
+},getDefaultOpenState:function(_6f,_70){
+var cf;
+var _71=this.store;
+if(this.treeModel){
+return this.defaultOpen;
+}
+if(!_6f||!_71||!_71.isItem(_70)||!(cf=this.aggregator.childFields[_6f.level])){
+return this.defaultOpen;
+}
+if(this.openAtLevels.length>_6f.level){
+var _72=this.openAtLevels[_6f.level];
+if(typeof _72=="boolean"){
+return _72;
+}else{
+if(typeof _72=="number"){
+return (_71.getValues(_70,cf).length<=_72);
+}
+}
+}
+return this.defaultOpen;
+},onStyleRow:function(row){
+if(!this.layout._isCollapsable){
+this.inherited(arguments);
+return;
+}
+var _73=dojo.attr(row.node,"dojoxTreeGridBaseClasses");
+if(_73){
+row.customClasses=_73;
+}
+var i=row;
+var _74=i.node.tagName.toLowerCase();
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected&&_74=="tr"?" dojoxGridRowSelected":"")+(i.over&&_74=="tr"?" dojoxGridRowOver":"");
+this.focus.styleRow(i);
+this.edit.styleRow(i);
+},styleRowNode:function(_75,_76){
+if(_76){
+if(_76.tagName.toLowerCase()=="div"&&this.aggregator){
+dojo.query("tr[dojoxTreeGridPath]",_76).forEach(function(_77){
+this.rows.styleRowNode(dojo.attr(_77,"dojoxTreeGridPath"),_77);
+},this);
+}
+this.rows.styleRowNode(_75,_76);
+}
+},onCanSelect:function(_78){
+var _79=dojo.query("tr[dojoxTreeGridPath='"+_78+"']",this.domNode);
+if(_79.length){
+if(dojo.hasClass(_79[0],"dojoxGridSummaryRow")){
+return false;
+}
+}
+return this.inherited(arguments);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.UP_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex!="0"){
+dojo.stopEvent(e);
+this.focus.move(-1,0);
+}
+break;
+case dk.DOWN_ARROW:
+var _7a=new dojox.grid.TreePath(this.focus.rowIndex,this);
+var _7b=new dojox.grid.TreePath(this.rowCount-1,this);
+_7b=_7b.lastChild(true);
+if(!this.edit.isEditing()&&_7a.toString()!=_7b.toString()){
+dojo.stopEvent(e);
+this.focus.move(1,0);
+}
+break;
+default:
+this.inherited(arguments);
+break;
+}
+},canEdit:function(_7c,_7d){
+var _7e=_7c.getNode(_7d);
+return _7e&&this._canEdit;
+},doApplyCellEdit:function(_7f,_80,_81){
+var _82=this.getItem(_80);
+var _83=this.store.getValue(_82,_81);
+if(typeof _83=="number"){
+_7f=isNaN(_7f)?_7f:parseFloat(_7f);
+}else{
+if(typeof _83=="boolean"){
+_7f=_7f=="true"?true:_7f=="false"?false:_7f;
+}else{
+if(_83 instanceof Date){
+var _84=new Date(_7f);
+_7f=isNaN(_84.getTime())?_7f:_84;
+}
+}
+}
+this.store.setValue(_82,_81,_7f);
+this.onApplyCellEdit(_7f,_80,_81);
+}});
+dojox.grid.TreeGrid.markupFactory=function(_85,_86,_87,_88){
+var d=dojo;
+var _89=function(n){
+var w=d.attr(n,"width")||"auto";
+if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){
+w=parseInt(w,10)+"px";
+}
+return w;
+};
+var _8a=function(_8b){
+var _8c;
+if(_8b.nodeName.toLowerCase()=="table"&&d.query("> colgroup",_8b).length===0&&(_8c=d.query("> thead > tr",_8b)).length==1){
+var tr=_8c[0];
+return d.query("> th",_8c[0]).map(function(th){
+var _8d={type:d.trim(d.attr(th,"cellType")||""),field:d.trim(d.attr(th,"field")||"")};
+if(_8d.type){
+_8d.type=d.getObject(_8d.type);
+}
+var _8e=d.query("> table",th)[0];
+if(_8e){
+_8d.name="";
+_8d.children=_8a(_8e);
+if(d.hasAttr(th,"itemAggregates")){
+_8d.itemAggregates=d.map(d.attr(th,"itemAggregates").split(","),function(v){
+return d.trim(v);
+});
+}else{
+_8d.itemAggregates=[];
+}
+if(d.hasAttr(th,"aggregate")){
+_8d.aggregate=d.attr(th,"aggregate");
+}
+_8d.type=_8d.type||dojox.grid.cells.SubtableCell;
+}else{
+_8d.name=d.trim(d.attr(th,"name")||th.innerHTML);
+if(d.hasAttr(th,"width")){
+_8d.width=_89(th);
+}
+if(d.hasAttr(th,"relWidth")){
+_8d.relWidth=window.parseInt(d.attr(th,"relWidth"),10);
+}
+if(d.hasAttr(th,"hidden")){
+_8d.hidden=d.attr(th,"hidden")=="true";
+}
+_8d.field=_8d.field||_8d.name;
+dojox.grid.DataGrid.cell_markupFactory(_88,th,_8d);
+_8d.type=_8d.type||dojox.grid.cells.Cell;
+}
+if(_8d.type&&_8d.type.markupFactory){
+_8d.type.markupFactory(th,_8d);
+}
+return _8d;
+});
+}
+return [];
+};
+var _8f;
+if(!_85.structure){
+var row=_8a(_86);
+if(row.length){
+_85.structure=[{__span:Infinity,cells:[row]}];
+}
+}
+return dojox.grid.DataGrid.markupFactory(_85,_86,_87,_88);
+};
+}
diff --git a/js/dojo/dojox/grid/TreeSelection.js b/js/dojo/dojox/grid/TreeSelection.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/TreeSelection.js
@@ -0,0 +1,214 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.TreeSelection"]){
+dojo._hasResource["dojox.grid.TreeSelection"]=true;
+dojo.provide("dojox.grid.TreeSelection");
+dojo.require("dojox.grid.DataSelection");
+dojo.declare("dojox.grid.TreeSelection",dojox.grid.DataSelection,{setMode:function(_1){
+this.selected={};
+this.sorted_sel=[];
+this.sorted_ltos={};
+this.sorted_stol={};
+dojox.grid.DataSelection.prototype.setMode.call(this,_1);
+},addToSelection:function(_2){
+if(this.mode=="none"){
+return;
+}
+var _3=null;
+if(typeof _2=="number"||typeof _2=="string"){
+_3=_2;
+}else{
+_3=this.grid.getItemIndex(_2);
+}
+if(this.selected[_3]){
+this.selectedIndex=_3;
+}else{
+if(this.onCanSelect(_3)!==false){
+this.selectedIndex=_3;
+var _4=dojo.query("tr[dojoxTreeGridPath='"+_3+"']",this.grid.domNode);
+if(_4.length){
+dojo.attr(_4[0],"aria-selected","true");
+}
+this._beginUpdate();
+this.selected[_3]=true;
+this._insertSortedSelection(_3);
+this.onSelected(_3);
+this._endUpdate();
+}
+}
+},deselect:function(_5){
+if(this.mode=="none"){
+return;
+}
+var _6=null;
+if(typeof _5=="number"||typeof _5=="string"){
+_6=_5;
+}else{
+_6=this.grid.getItemIndex(_5);
+}
+if(this.selectedIndex==_6){
+this.selectedIndex=-1;
+}
+if(this.selected[_6]){
+if(this.onCanDeselect(_6)===false){
+return;
+}
+var _7=dojo.query("tr[dojoxTreeGridPath='"+_6+"']",this.grid.domNode);
+if(_7.length){
+dojo.attr(_7[0],"aria-selected","false");
+}
+this._beginUpdate();
+delete this.selected[_6];
+this._removeSortedSelection(_6);
+this.onDeselected(_6);
+this._endUpdate();
+}
+},getSelected:function(){
+var _8=[];
+for(var i in this.selected){
+if(this.selected[i]){
+_8.push(this.grid.getItem(i));
+}
+}
+return _8;
+},getSelectedCount:function(){
+var c=0;
+for(var i in this.selected){
+if(this.selected[i]){
+c++;
+}
+}
+return c;
+},_bsearch:function(v){
+var o=this.sorted_sel;
+var h=o.length-1,l=0,m;
+while(l<=h){
+var _9=this._comparePaths(o[m=(l+h)>>1],v);
+if(_9<0){
+l=m+1;
+continue;
+}
+if(_9>0){
+h=m-1;
+continue;
+}
+return m;
+}
+return _9<0?m-_9:m;
+},_comparePaths:function(a,b){
+for(var i=0,l=(a.length<b.length?a.length:b.length);i<l;i++){
+if(a[i]<b[i]){
+return -1;
+}
+if(a[i]>b[i]){
+return 1;
+}
+}
+if(a.length<b.length){
+return -1;
+}
+if(a.length>b.length){
+return 1;
+}
+return 0;
+},_insertSortedSelection:function(_a){
+_a=String(_a);
+var s=this.sorted_sel;
+var sl=this.sorted_ltos;
+var ss=this.sorted_stol;
+var _b=_a.split("/");
+_b=dojo.map(_b,function(_c){
+return parseInt(_c,10);
+});
+sl[_b]=_a;
+ss[_a]=_b;
+if(s.length===0){
+s.push(_b);
+return;
+}
+if(s.length==1){
+var _d=this._comparePaths(s[0],_b);
+if(_d==1){
+s.unshift(_b);
+}else{
+s.push(_b);
+}
+return;
+}
+var _e=this._bsearch(_b);
+this.sorted_sel.splice(_e,0,_b);
+},_removeSortedSelection:function(_f){
+_f=String(_f);
+var s=this.sorted_sel;
+var sl=this.sorted_ltos;
+var ss=this.sorted_stol;
+if(s.length===0){
+return;
+}
+var _10=ss[_f];
+if(!_10){
+return;
+}
+var idx=this._bsearch(_10);
+if(idx>-1){
+delete sl[_10];
+delete ss[_f];
+s.splice(idx,1);
+}
+},getFirstSelected:function(){
+if(!this.sorted_sel.length||this.mode=="none"){
+return -1;
+}
+var _11=this.sorted_sel[0];
+if(!_11){
+return -1;
+}
+_11=this.sorted_ltos[_11];
+if(!_11){
+return -1;
+}
+return _11;
+},getNextSelected:function(_12){
+if(!this.sorted_sel.length||this.mode=="none"){
+return -1;
+}
+_12=String(_12);
+var _13=this.sorted_stol[_12];
+if(!_13){
+return -1;
+}
+var idx=this._bsearch(_13);
+var _14=this.sorted_sel[idx+1];
+if(!_14){
+return -1;
+}
+return this.sorted_ltos[_14];
+},_range:function(_15,_16,_17){
+if(!dojo.isString(_15)&&_15<0){
+_15=_16;
+}
+var _18=this.grid.layout.cells,_19=this.grid.store,_1a=this.grid;
+_15=new dojox.grid.TreePath(String(_15),_1a);
+_16=new dojox.grid.TreePath(String(_16),_1a);
+if(_15.compare(_16)>0){
+var tmp=_15;
+_15=_16;
+_16=tmp;
+}
+var _1b=_15._str,_1c=_16._str;
+_17(_1b);
+var p=_15;
+while((p=p.next())){
+if(p._str==_1c){
+break;
+}
+_17(p._str);
+}
+_17(_1c);
+}});
+}
diff --git a/js/dojo/dojox/grid/_Builder.js b/js/dojo/dojox/grid/_Builder.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Builder.js
@@ -0,0 +1,531 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Builder"]){
+dojo._hasResource["dojox.grid._Builder"]=true;
+dojo.provide("dojox.grid._Builder");
+dojo.require("dojox.grid.util");
+dojo.require("dojo.dnd.Moveable");
+(function(){
+var dg=dojox.grid;
+var _1=function(td){
+return td.cellIndex>=0?td.cellIndex:dojo.indexOf(td.parentNode.cells,td);
+};
+var _2=function(tr){
+return tr.rowIndex>=0?tr.rowIndex:dojo.indexOf(tr.parentNode.childNodes,tr);
+};
+var _3=function(_4,_5){
+return _4&&((_4.rows||0)[_5]||_4.childNodes[_5]);
+};
+var _6=function(_7){
+for(var n=_7;n&&n.tagName!="TABLE";n=n.parentNode){
+}
+return n;
+};
+var _8=function(_9,_a){
+for(var n=_9;n&&_a(n);n=n.parentNode){
+}
+return n;
+};
+var _b=function(_c){
+var _d=_c.toUpperCase();
+return function(_e){
+return _e.tagName!=_d;
+};
+};
+var _f=dojox.grid.util.rowIndexTag;
+var _10=dojox.grid.util.gridViewTag;
+dg._Builder=dojo.extend(function(_11){
+if(_11){
+this.view=_11;
+this.grid=_11.grid;
+}
+},{view:null,_table:"<table class=\"dojoxGridRowTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"",getTableArray:function(){
+var _12=[this._table];
+if(this.view.viewWidth){
+_12.push([" style=\"width:",this.view.viewWidth,";\""].join(""));
+}
+_12.push(">");
+return _12;
+},generateCellMarkup:function(_13,_14,_15,_16){
+var _17=[],_18;
+if(_16){
+var _19=_13.index!=_13.grid.getSortIndex()?"":_13.grid.sortInfo>0?"aria-sort=\"ascending\"":"aria-sort=\"descending\"";
+if(!_13.id){
+_13.id=this.grid.id+"Hdr"+_13.index;
+}
+_18=["<th tabIndex=\"-1\" aria-readonly=\"true\" role=\"columnheader\"",_19,"id=\"",_13.id,"\""];
+}else{
+var _1a=this.grid.editable&&!_13.editable?"aria-readonly=\"true\"":"";
+_18=["<td tabIndex=\"-1\" role=\"gridcell\"",_1a];
+}
+if(_13.colSpan){
+_18.push(" colspan=\"",_13.colSpan,"\"");
+}
+if(_13.rowSpan){
+_18.push(" rowspan=\"",_13.rowSpan,"\"");
+}
+_18.push(" class=\"dojoxGridCell ");
+if(_13.classes){
+_18.push(_13.classes," ");
+}
+if(_15){
+_18.push(_15," ");
+}
+_17.push(_18.join(""));
+_17.push("");
+_18=["\" idx=\"",_13.index,"\" style=\""];
+if(_14&&_14[_14.length-1]!=";"){
+_14+=";";
+}
+_18.push(_13.styles,_14||"",_13.hidden?"display:none;":"");
+if(_13.unitWidth){
+_18.push("width:",_13.unitWidth,";");
+}
+_17.push(_18.join(""));
+_17.push("");
+_18=["\""];
+if(_13.attrs){
+_18.push(" ",_13.attrs);
+}
+_18.push(">");
+_17.push(_18.join(""));
+_17.push("");
+_17.push(_16?"</th>":"</td>");
+return _17;
+},isCellNode:function(_1b){
+return Boolean(_1b&&_1b!=dojo.doc&&dojo.attr(_1b,"idx"));
+},getCellNodeIndex:function(_1c){
+return _1c?Number(dojo.attr(_1c,"idx")):-1;
+},getCellNode:function(_1d,_1e){
+for(var i=0,row;(row=_3(_1d.firstChild,i));i++){
+for(var j=0,_1f;(_1f=row.cells[j]);j++){
+if(this.getCellNodeIndex(_1f)==_1e){
+return _1f;
+}
+}
+}
+return null;
+},findCellTarget:function(_20,_21){
+var n=_20;
+while(n&&(!this.isCellNode(n)||(n.offsetParent&&_10 in n.offsetParent.parentNode&&n.offsetParent.parentNode[_10]!=this.view.id))&&(n!=_21)){
+n=n.parentNode;
+}
+return n!=_21?n:null;
+},baseDecorateEvent:function(e){
+e.dispatch="do"+e.type;
+e.grid=this.grid;
+e.sourceView=this.view;
+e.cellNode=this.findCellTarget(e.target,e.rowNode);
+e.cellIndex=this.getCellNodeIndex(e.cellNode);
+e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);
+},findTarget:function(_22,_23){
+var n=_22;
+while(n&&(n!=this.domNode)&&(!(_23 in n)||(_10 in n&&n[_10]!=this.view.id))){
+n=n.parentNode;
+}
+return (n!=this.domNode)?n:null;
+},findRowTarget:function(_24){
+return this.findTarget(_24,_f);
+},isIntraNodeEvent:function(e){
+try{
+return (e.cellNode&&e.relatedTarget&&dojo.isDescendant(e.relatedTarget,e.cellNode));
+}
+catch(x){
+return false;
+}
+},isIntraRowEvent:function(e){
+try{
+var row=e.relatedTarget&&this.findRowTarget(e.relatedTarget);
+return !row&&(e.rowIndex==-1)||row&&(e.rowIndex==row.gridRowIndex);
+}
+catch(x){
+return false;
+}
+},dispatchEvent:function(e){
+if(e.dispatch in this){
+return this[e.dispatch](e);
+}
+return false;
+},domouseover:function(e){
+if(e.cellNode&&(e.cellNode!=this.lastOverCellNode)){
+this.lastOverCellNode=e.cellNode;
+this.grid.onMouseOver(e);
+}
+this.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(e.cellNode&&(e.cellNode==this.lastOverCellNode)&&!this.isIntraNodeEvent(e,this.lastOverCellNode)){
+this.lastOverCellNode=null;
+this.grid.onMouseOut(e);
+if(!this.isIntraRowEvent(e)){
+this.grid.onMouseOutRow(e);
+}
+}
+},domousedown:function(e){
+if(e.cellNode){
+this.grid.onMouseDown(e);
+}
+this.grid.onMouseDownRow(e);
+}});
+dg._ContentBuilder=dojo.extend(function(_25){
+dg._Builder.call(this,_25);
+},dg._Builder.prototype,{update:function(){
+this.prepareHtml();
+},prepareHtml:function(){
+var _26=this.grid.get,_27=this.view.structure.cells;
+for(var j=0,row;(row=_27[j]);j++){
+for(var i=0,_28;(_28=row[i]);i++){
+_28.get=_28.get||(_28.value==undefined)&&_26;
+_28.markup=this.generateCellMarkup(_28,_28.cellStyles,_28.cellClasses,false);
+if(!this.grid.editable&&_28.editable){
+this.grid.editable=true;
+}
+}
+}
+},generateHtml:function(_29,_2a){
+var _2b=this.getTableArray(),v=this.view,_2c=v.structure.cells,_2d=this.grid.getItem(_2a);
+dojox.grid.util.fire(this.view,"onBeforeRow",[_2a,_2c]);
+for(var j=0,row;(row=_2c[j]);j++){
+if(row.hidden||row.header){
+continue;
+}
+_2b.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");
+for(var i=0,_2e,m,cc,cs;(_2e=row[i]);i++){
+m=_2e.markup;
+cc=_2e.customClasses=[];
+cs=_2e.customStyles=[];
+m[5]=_2e.format(_2a,_2d);
+m[1]=cc.join(" ");
+m[3]=cs.join(";");
+_2b.push.apply(_2b,m);
+}
+_2b.push("</tr>");
+}
+_2b.push("</table>");
+return _2b.join("");
+},decorateEvent:function(e){
+e.rowNode=this.findRowTarget(e.target);
+if(!e.rowNode){
+return false;
+}
+e.rowIndex=e.rowNode[_f];
+this.baseDecorateEvent(e);
+e.cell=this.grid.getCell(e.cellIndex);
+return true;
+}});
+dg._HeaderBuilder=dojo.extend(function(_2f){
+this.moveable=null;
+dg._Builder.call(this,_2f);
+},dg._Builder.prototype,{_skipBogusClicks:false,overResizeWidth:4,minColWidth:1,update:function(){
+if(this.tableMap){
+this.tableMap.mapRows(this.view.structure.cells);
+}else{
+this.tableMap=new dg._TableMap(this.view.structure.cells);
+}
+},generateHtml:function(_30,_31){
+var _32=this.getTableArray(),_33=this.view.structure.cells;
+dojox.grid.util.fire(this.view,"onBeforeRow",[-1,_33]);
+for(var j=0,row;(row=_33[j]);j++){
+if(row.hidden){
+continue;
+}
+_32.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");
+for(var i=0,_34,_35;(_34=row[i]);i++){
+_34.customClasses=[];
+_34.customStyles=[];
+if(this.view.simpleStructure){
+if(_34.draggable){
+if(_34.headerClasses){
+if(_34.headerClasses.indexOf("dojoDndItem")==-1){
+_34.headerClasses+=" dojoDndItem";
+}
+}else{
+_34.headerClasses="dojoDndItem";
+}
+}
+if(_34.attrs){
+if(_34.attrs.indexOf("dndType='gridColumn_")==-1){
+_34.attrs+=" dndType='gridColumn_"+this.grid.id+"'";
+}
+}else{
+_34.attrs="dndType='gridColumn_"+this.grid.id+"'";
+}
+}
+_35=this.generateCellMarkup(_34,_34.headerStyles,_34.headerClasses,true);
+_35[5]=(_31!=undefined?_31:_30(_34));
+_35[3]=_34.customStyles.join(";");
+_35[1]=_34.customClasses.join(" ");
+_32.push(_35.join(""));
+}
+_32.push("</tr>");
+}
+_32.push("</table>");
+return _32.join("");
+},getCellX:function(e){
+var n,x=e.layerX;
+if(dojo.isMoz){
+n=_8(e.target,_b("th"));
+x-=(n&&n.offsetLeft)||0;
+var t=e.sourceView.getScrollbarWidth();
+if(!dojo._isBodyLtr()&&e.sourceView.headerNode.scrollLeft<t){
+x-=t;
+}
+}
+n=_8(e.target,function(){
+if(!n||n==e.cellNode){
+return false;
+}
+x+=(n.offsetLeft<0?0:n.offsetLeft);
+return true;
+});
+return x;
+},decorateEvent:function(e){
+this.baseDecorateEvent(e);
+e.rowIndex=-1;
+e.cellX=this.getCellX(e);
+return true;
+},prepareResize:function(e,mod){
+do{
+var i=_1(e.cellNode);
+e.cellNode=(i?e.cellNode.parentNode.cells[i+mod]:null);
+e.cellIndex=(e.cellNode?this.getCellNodeIndex(e.cellNode):-1);
+}while(e.cellNode&&e.cellNode.style.display=="none");
+return Boolean(e.cellNode);
+},canResize:function(e){
+if(!e.cellNode||e.cellNode.colSpan>1){
+return false;
+}
+var _36=this.grid.getCell(e.cellIndex);
+return !_36.noresize&&_36.canResize();
+},overLeftResizeArea:function(e){
+if(dojo.hasClass(dojo.body(),"dojoDndMove")){
+return false;
+}
+if(dojo.isIE){
+var tN=e.target;
+if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){
+return false;
+}
+}
+if(dojo._isBodyLtr()){
+return (e.cellIndex>0)&&(e.cellX<this.overResizeWidth)&&this.prepareResize(e,-1);
+}
+var t=e.cellNode&&(e.cellX<this.overResizeWidth);
+return t;
+},overRightResizeArea:function(e){
+if(dojo.hasClass(dojo.body(),"dojoDndMove")){
+return false;
+}
+if(dojo.isIE){
+var tN=e.target;
+if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){
+return false;
+}
+}
+if(dojo._isBodyLtr()){
+return e.cellNode&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth);
+}
+return (e.cellIndex>0)&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth)&&this.prepareResize(e,-1);
+},domousemove:function(e){
+if(!this.moveable){
+var c=(this.overRightResizeArea(e)?"dojoxGridColResize":(this.overLeftResizeArea(e)?"dojoxGridColResize":""));
+if(c&&!this.canResize(e)){
+c="dojoxGridColNoResize";
+}
+dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColNoResize",(c=="dojoxGridColNoResize"));
+dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColResize",(c=="dojoxGridColResize"));
+if(dojo.isIE){
+var t=e.sourceView.headerNode.scrollLeft;
+e.sourceView.headerNode.scrollLeft=t;
+}
+if(c){
+dojo.stopEvent(e);
+}
+}
+},domousedown:function(e){
+if(!this.moveable){
+if((this.overRightResizeArea(e)||this.overLeftResizeArea(e))&&this.canResize(e)){
+this.beginColumnResize(e);
+}else{
+this.grid.onMouseDown(e);
+this.grid.onMouseOverRow(e);
+}
+}
+},doclick:function(e){
+if(this._skipBogusClicks){
+dojo.stopEvent(e);
+return true;
+}
+return false;
+},colResizeSetup:function(e,_37){
+var _38=dojo.contentBox(e.sourceView.headerNode);
+if(_37){
+this.lineDiv=document.createElement("div");
+var vw=(dojo.position||dojo._abs)(e.sourceView.headerNode,true);
+var _39=dojo.contentBox(e.sourceView.domNode);
+dojo.style(this.lineDiv,{top:vw.y+"px",left:e.clientX+"px",height:(_39.h+_38.h)+"px"});
+dojo.addClass(this.lineDiv,"dojoxGridResizeColLine");
+this.lineDiv._origLeft=e.clientX;
+dojo.body().appendChild(this.lineDiv);
+}
+var _3a=[],_3b=this.tableMap.findOverlappingNodes(e.cellNode);
+for(var i=0,_3c;(_3c=_3b[i]);i++){
+_3a.push({node:_3c,index:this.getCellNodeIndex(_3c),width:_3c.offsetWidth});
+}
+var _3d=e.sourceView;
+var adj=dojo._isBodyLtr()?1:-1;
+var _3e=e.grid.views.views;
+var _3f=[];
+for(var j=_3d.idx+adj,_40;(_40=_3e[j]);j=j+adj){
+_3f.push({node:_40.headerNode,left:window.parseInt(_40.headerNode.style.left)});
+}
+var _41=_3d.headerContentNode.firstChild;
+var _42={scrollLeft:e.sourceView.headerNode.scrollLeft,view:_3d,node:e.cellNode,index:e.cellIndex,w:dojo.contentBox(e.cellNode).w,vw:_38.w,table:_41,tw:dojo.contentBox(_41).w,spanners:_3a,followers:_3f};
+return _42;
+},beginColumnResize:function(e){
+this.moverDiv=document.createElement("div");
+dojo.style(this.moverDiv,{position:"absolute",left:0});
+dojo.body().appendChild(this.moverDiv);
+dojo.addClass(this.grid.domNode,"dojoxGridColumnResizing");
+var m=(this.moveable=new dojo.dnd.Moveable(this.moverDiv));
+var _43=this.colResizeSetup(e,true);
+m.onMove=dojo.hitch(this,"doResizeColumn",_43);
+dojo.connect(m,"onMoveStop",dojo.hitch(this,function(){
+this.endResizeColumn(_43);
+if(_43.node.releaseCapture){
+_43.node.releaseCapture();
+}
+this.moveable.destroy();
+delete this.moveable;
+this.moveable=null;
+dojo.removeClass(this.grid.domNode,"dojoxGridColumnResizing");
+}));
+if(e.cellNode.setCapture){
+e.cellNode.setCapture();
+}
+m.onMouseDown(e);
+},doResizeColumn:function(_44,_45,_46){
+var _47=_46.l;
+var _48={deltaX:_47,w:_44.w+_47,vw:_44.vw+_47,tw:_44.tw+_47};
+this.dragRecord={inDrag:_44,mover:_45,leftTop:_46};
+if(_48.w>=this.minColWidth){
+if(!_45){
+this.doResizeNow(_44,_48);
+}else{
+dojo.style(this.lineDiv,"left",(this.lineDiv._origLeft+_48.deltaX)+"px");
+}
+}
+},endResizeColumn:function(_49){
+if(this.dragRecord){
+var _4a=this.dragRecord.leftTop;
+var _4b=dojo._isBodyLtr()?_4a.l:-_4a.l;
+_4b+=Math.max(_49.w+_4b,this.minColWidth)-(_49.w+_4b);
+if(dojo.isWebKit&&_49.spanners.length){
+_4b+=dojo._getPadBorderExtents(_49.spanners[0].node).w;
+}
+var _4c={deltaX:_4b,w:_49.w+_4b,vw:_49.vw+_4b,tw:_49.tw+_4b};
+this.doResizeNow(_49,_4c);
+}
+dojo.destroy(this.lineDiv);
+dojo.destroy(this.moverDiv);
+dojo.destroy(this.moverDiv);
+delete this.moverDiv;
+this._skipBogusClicks=true;
+_49.view.update();
+this._skipBogusClicks=false;
+this.grid.onResizeColumn(_49.index);
+},doResizeNow:function(_4d,_4e){
+_4d.view.convertColPctToFixed();
+if(_4d.view.flexCells&&!_4d.view.testFlexCells()){
+var t=_6(_4d.node);
+if(t){
+(t.style.width="");
+}
+}
+var i,s,sw,f,fl;
+for(i=0;(s=_4d.spanners[i]);i++){
+sw=s.width+_4e.deltaX;
+s.node.style.width=sw+"px";
+_4d.view.setColWidth(s.index,sw);
+}
+for(i=0;(f=_4d.followers[i]);i++){
+fl=f.left+_4e.deltaX;
+f.node.style.left=fl+"px";
+}
+_4d.node.style.width=_4e.w+"px";
+_4d.view.setColWidth(_4d.index,_4e.w);
+_4d.view.headerNode.style.width=_4e.vw+"px";
+_4d.view.setColumnsWidth(_4e.tw);
+if(!dojo._isBodyLtr()){
+_4d.view.headerNode.scrollLeft=_4d.scrollLeft+_4e.deltaX;
+}
+}});
+dg._TableMap=dojo.extend(function(_4f){
+this.mapRows(_4f);
+},{map:null,mapRows:function(_50){
+var _51=_50.length;
+if(!_51){
+return;
+}
+this.map=[];
+var row;
+for(var k=0;(row=_50[k]);k++){
+this.map[k]=[];
+}
+for(var j=0;(row=_50[j]);j++){
+for(var i=0,x=0,_52,_53,_54;(_52=row[i]);i++){
+while(this.map[j][x]){
+x++;
+}
+this.map[j][x]={c:i,r:j};
+_54=_52.rowSpan||1;
+_53=_52.colSpan||1;
+for(var y=0;y<_54;y++){
+for(var s=0;s<_53;s++){
+this.map[j+y][x+s]=this.map[j][x];
+}
+}
+x+=_53;
+}
+}
+},dumpMap:function(){
+for(var j=0,row,h="";(row=this.map[j]);j++,h=""){
+for(var i=0,_55;(_55=row[i]);i++){
+h+=_55.r+","+_55.c+" ";
+}
+}
+},getMapCoords:function(_56,_57){
+for(var j=0,row;(row=this.map[j]);j++){
+for(var i=0,_58;(_58=row[i]);i++){
+if(_58.c==_57&&_58.r==_56){
+return {j:j,i:i};
+}
+}
+}
+return {j:-1,i:-1};
+},getNode:function(_59,_5a,_5b){
+var row=_59&&_59.rows[_5a];
+return row&&row.cells[_5b];
+},_findOverlappingNodes:function(_5c,_5d,_5e){
+var _5f=[];
+var m=this.getMapCoords(_5d,_5e);
+for(var j=0,row;(row=this.map[j]);j++){
+if(j==m.j){
+continue;
+}
+var rw=row[m.i];
+var n=(rw?this.getNode(_5c,rw.r,rw.c):null);
+if(n){
+_5f.push(n);
+}
+}
+return _5f;
+},findOverlappingNodes:function(_60){
+return this._findOverlappingNodes(_6(_60),_2(_60.parentNode),_1(_60));
+}});
+})();
+}
diff --git a/js/dojo/dojox/grid/_CheckBoxSelector.js b/js/dojo/dojox/grid/_CheckBoxSelector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_CheckBoxSelector.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._CheckBoxSelector"]){
+dojo._hasResource["dojox.grid._CheckBoxSelector"]=true;
+dojo.provide("dojox.grid._CheckBoxSelector");
+dojo.require("dojox.grid._Selector");
+}
diff --git a/js/dojo/dojox/grid/_EditManager.js b/js/dojo/dojox/grid/_EditManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_EditManager.js
@@ -0,0 +1,131 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._EditManager"]){
+dojo._hasResource["dojox.grid._EditManager"]=true;
+dojo.provide("dojox.grid._EditManager");
+dojo.require("dojox.grid.util");
+dojo.declare("dojox.grid._EditManager",null,{constructor:function(_1){
+this.grid=_1;
+this.connections=[];
+if(dojo.isIE){
+this.connections.push(dojo.connect(document.body,"onfocus",dojo.hitch(this,"_boomerangFocus")));
+}
+},info:{},destroy:function(){
+dojo.forEach(this.connections,dojo.disconnect);
+},cellFocus:function(_2,_3){
+if(this.grid.singleClickEdit||this.isEditRow(_3)){
+this.setEditCell(_2,_3);
+}else{
+this.apply();
+}
+if(this.isEditing()||(_2&&_2.editable&&_2.alwaysEditing)){
+this._focusEditor(_2,_3);
+}
+},rowClick:function(e){
+if(this.isEditing()&&!this.isEditRow(e.rowIndex)){
+this.apply();
+}
+},styleRow:function(_4){
+if(_4.index==this.info.rowIndex){
+_4.customClasses+=" dojoxGridRowEditing";
+}
+},dispatchEvent:function(e){
+var c=e.cell,ed=(c&&c["editable"])?c:0;
+return ed&&ed.dispatchEvent(e.dispatch,e);
+},isEditing:function(){
+return this.info.rowIndex!==undefined;
+},isEditCell:function(_5,_6){
+return (this.info.rowIndex===_5)&&(this.info.cell.index==_6);
+},isEditRow:function(_7){
+return this.info.rowIndex===_7;
+},setEditCell:function(_8,_9){
+if(!this.isEditCell(_9,_8.index)&&this.grid.canEdit&&this.grid.canEdit(_8,_9)){
+this.start(_8,_9,this.isEditRow(_9)||_8.editable);
+}
+},_focusEditor:function(_a,_b){
+dojox.grid.util.fire(_a,"focus",[_b]);
+},focusEditor:function(){
+if(this.isEditing()){
+this._focusEditor(this.info.cell,this.info.rowIndex);
+}
+},_boomerangWindow:500,_shouldCatchBoomerang:function(){
+return this._catchBoomerang>new Date().getTime();
+},_boomerangFocus:function(){
+if(this._shouldCatchBoomerang()){
+this.grid.focus.focusGrid();
+this.focusEditor();
+this._catchBoomerang=0;
+}
+},_doCatchBoomerang:function(){
+if(dojo.isIE){
+this._catchBoomerang=new Date().getTime()+this._boomerangWindow;
+}
+},start:function(_c,_d,_e){
+this.grid.beginUpdate();
+this.editorApply();
+if(this.isEditing()&&!this.isEditRow(_d)){
+this.applyRowEdit();
+this.grid.updateRow(_d);
+}
+if(_e){
+this.info={cell:_c,rowIndex:_d};
+this.grid.doStartEdit(_c,_d);
+this.grid.updateRow(_d);
+}else{
+this.info={};
+}
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._focusEditor(_c,_d);
+this._doCatchBoomerang();
+},_editorDo:function(_f){
+var c=this.info.cell;
+if(c&&c.editable){
+c[_f](this.info.rowIndex);
+}
+},editorApply:function(){
+this._editorDo("apply");
+},editorCancel:function(){
+this._editorDo("cancel");
+},applyCellEdit:function(_10,_11,_12){
+if(this.grid.canEdit(_11,_12)){
+this.grid.doApplyCellEdit(_10,_12,_11.field);
+}
+},applyRowEdit:function(){
+this.grid.doApplyEdit(this.info.rowIndex,this.info.cell.field);
+},apply:function(){
+if(this.isEditing()){
+this.grid.beginUpdate();
+this.editorApply();
+this.applyRowEdit();
+this.info={};
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._doCatchBoomerang();
+}
+},cancel:function(){
+if(this.isEditing()){
+this.grid.beginUpdate();
+this.editorCancel();
+this.info={};
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._doCatchBoomerang();
+}
+},save:function(_13,_14){
+var c=this.info.cell;
+if(this.isEditRow(_13)&&(!_14||c.view==_14)&&c.editable){
+c.save(c,this.info.rowIndex);
+}
+},restore:function(_15,_16){
+var c=this.info.cell;
+if(this.isEditRow(_16)&&c.view==_15&&c.editable){
+c.restore(c,this.info.rowIndex);
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/_Events.js b/js/dojo/dojox/grid/_Events.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Events.js
@@ -0,0 +1,227 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Events"]){
+dojo._hasResource["dojox.grid._Events"]=true;
+dojo.provide("dojox.grid._Events");
+dojo.declare("dojox.grid._Events",null,{cellOverClass:"dojoxGridCellOver",onKeyEvent:function(e){
+this.dispatchKeyEvent(e);
+},onContentEvent:function(e){
+this.dispatchContentEvent(e);
+},onHeaderEvent:function(e){
+this.dispatchHeaderEvent(e);
+},onStyleRow:function(_1){
+var i=_1;
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over?" dojoxGridRowOver":"");
+this.focus.styleRow(_1);
+this.edit.styleRow(_1);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+var dk=dojo.keys;
+var _2;
+switch(e.keyCode){
+case dk.ESCAPE:
+this.edit.cancel();
+break;
+case dk.ENTER:
+if(!this.edit.isEditing()){
+_2=this.focus.getHeaderIndex();
+if(_2>=0){
+this.setSortIndex(_2);
+break;
+}else{
+this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+if(!e.shiftKey){
+var _3=this.edit.isEditing();
+this.edit.apply();
+if(!_3){
+this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);
+}
+}
+if(!this.edit.isEditing()){
+var _4=this.focus.focusView||this.views.views[0];
+_4.content.decorateEvent(e);
+this.onRowClick(e);
+}
+break;
+case dk.SPACE:
+if(!this.edit.isEditing()){
+_2=this.focus.getHeaderIndex();
+if(_2>=0){
+this.setSortIndex(_2);
+break;
+}else{
+this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+break;
+case dk.TAB:
+this.focus[e.shiftKey?"previousKey":"nextKey"](e);
+break;
+case dk.LEFT_ARROW:
+case dk.RIGHT_ARROW:
+if(!this.edit.isEditing()){
+var _5=e.keyCode;
+dojo.stopEvent(e);
+_2=this.focus.getHeaderIndex();
+if(_2>=0&&(e.shiftKey&&e.ctrlKey)){
+this.focus.colSizeAdjust(e,_2,(_5==dk.LEFT_ARROW?-1:1)*5);
+}else{
+var _6=(_5==dk.LEFT_ARROW)?1:-1;
+if(dojo._isBodyLtr()){
+_6*=-1;
+}
+this.focus.move(0,_6);
+}
+}
+break;
+case dk.UP_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex!==0){
+dojo.stopEvent(e);
+this.focus.move(-1,0);
+}
+break;
+case dk.DOWN_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){
+dojo.stopEvent(e);
+this.focus.move(1,0);
+}
+break;
+case dk.PAGE_UP:
+if(!this.edit.isEditing()&&this.focus.rowIndex!==0){
+dojo.stopEvent(e);
+if(this.focus.rowIndex!=this.scroller.firstVisibleRow+1){
+this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex,0);
+}else{
+this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));
+this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1,0);
+}
+}
+break;
+case dk.PAGE_DOWN:
+if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){
+dojo.stopEvent(e);
+if(this.focus.rowIndex!=this.scroller.lastVisibleRow-1){
+this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1,0);
+}else{
+this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));
+this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1,0);
+}
+}
+break;
+default:
+break;
+}
+},onMouseOver:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseOver(e):this.onCellMouseOver(e);
+},onMouseOut:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseOut(e):this.onCellMouseOut(e);
+},onMouseDown:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseDown(e):this.onCellMouseDown(e);
+},onMouseOverRow:function(e){
+if(!this.rows.isOver(e.rowIndex)){
+this.rows.setOverRow(e.rowIndex);
+e.rowIndex==-1?this.onHeaderMouseOver(e):this.onRowMouseOver(e);
+}
+},onMouseOutRow:function(e){
+if(this.rows.isOver(-1)){
+this.onHeaderMouseOut(e);
+}else{
+if(!this.rows.isOver(-2)){
+this.rows.setOverRow(-2);
+this.onRowMouseOut(e);
+}
+}
+},onMouseDownRow:function(e){
+if(e.rowIndex!=-1){
+this.onRowMouseDown(e);
+}
+},onCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+}
+},onCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+}
+},onCellMouseDown:function(e){
+},onCellClick:function(e){
+this._click[0]=this._click[1];
+this._click[1]=e;
+if(!this.edit.isEditCell(e.rowIndex,e.cellIndex)){
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}
+this.onRowClick(e);
+},onCellDblClick:function(e){
+if(this._click.length>1&&dojo.isIE){
+this.edit.setEditCell(this._click[1].cell,this._click[1].rowIndex);
+}else{
+if(this._click.length>1&&this._click[0].rowIndex!=this._click[1].rowIndex){
+this.edit.setEditCell(this._click[0].cell,this._click[0].rowIndex);
+}else{
+this.edit.setEditCell(e.cell,e.rowIndex);
+}
+}
+this.onRowDblClick(e);
+},onCellContextMenu:function(e){
+this.onRowContextMenu(e);
+},onCellFocus:function(_7,_8){
+this.edit.cellFocus(_7,_8);
+},onRowClick:function(e){
+this.edit.rowClick(e);
+this.selection.clickSelectEvent(e);
+},onRowDblClick:function(e){
+},onRowMouseOver:function(e){
+},onRowMouseOut:function(e){
+},onRowMouseDown:function(e){
+},onRowContextMenu:function(e){
+dojo.stopEvent(e);
+},onHeaderMouseOver:function(e){
+},onHeaderMouseOut:function(e){
+},onHeaderCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+}
+},onHeaderCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+}
+},onHeaderCellMouseDown:function(e){
+},onHeaderClick:function(e){
+},onHeaderCellClick:function(e){
+this.setSortIndex(e.cell.index);
+this.onHeaderClick(e);
+},onHeaderDblClick:function(e){
+},onHeaderCellDblClick:function(e){
+this.onHeaderDblClick(e);
+},onHeaderCellContextMenu:function(e){
+this.onHeaderContextMenu(e);
+},onHeaderContextMenu:function(e){
+if(!this.headerMenu){
+dojo.stopEvent(e);
+}
+},onStartEdit:function(_9,_a){
+},onApplyCellEdit:function(_b,_c,_d){
+},onCancelEdit:function(_e){
+},onApplyEdit:function(_f){
+},onCanSelect:function(_10){
+return true;
+},onCanDeselect:function(_11){
+return true;
+},onSelected:function(_12){
+this.updateRowStyles(_12);
+},onDeselected:function(_13){
+this.updateRowStyles(_13);
+},onSelectionChanged:function(){
+}});
+}
diff --git a/js/dojo/dojox/grid/_FocusManager.js b/js/dojo/dojox/grid/_FocusManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_FocusManager.js
@@ -0,0 +1,464 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._FocusManager"]){
+dojo._hasResource["dojox.grid._FocusManager"]=true;
+dojo.provide("dojox.grid._FocusManager");
+dojo.require("dojox.grid.util");
+dojo.declare("dojox.grid._FocusManager",null,{constructor:function(_1){
+this.grid=_1;
+this.cell=null;
+this.rowIndex=-1;
+this._connects=[];
+this.headerMenu=this.grid.headerMenu;
+this._connects.push(dojo.connect(this.grid.domNode,"onfocus",this,"doFocus"));
+this._connects.push(dojo.connect(this.grid.domNode,"onblur",this,"doBlur"));
+this._connects.push(dojo.connect(this.grid.domNode,"oncontextmenu",this,"doContextMenu"));
+this._connects.push(dojo.connect(this.grid.lastFocusNode,"onfocus",this,"doLastNodeFocus"));
+this._connects.push(dojo.connect(this.grid.lastFocusNode,"onblur",this,"doLastNodeBlur"));
+this._connects.push(dojo.connect(this.grid,"_onFetchComplete",this,"_delayedCellFocus"));
+this._connects.push(dojo.connect(this.grid,"postrender",this,"_delayedHeaderFocus"));
+},destroy:function(){
+dojo.forEach(this._connects,dojo.disconnect);
+delete this.grid;
+delete this.cell;
+},_colHeadNode:null,_colHeadFocusIdx:null,_contextMenuBindNode:null,tabbingOut:false,focusClass:"dojoxGridCellFocus",focusView:null,initFocusView:function(){
+this.focusView=this.grid.views.getFirstScrollingView()||this.focusView;
+this._initColumnHeaders();
+},isFocusCell:function(_2,_3){
+return (this.cell==_2)&&(this.rowIndex==_3);
+},isLastFocusCell:function(){
+if(this.cell){
+return (this.rowIndex==this.grid.rowCount-1)&&(this.cell.index==this.grid.layout.cellCount-1);
+}
+return false;
+},isFirstFocusCell:function(){
+if(this.cell){
+return (this.rowIndex===0)&&(this.cell.index===0);
+}
+return false;
+},isNoFocusCell:function(){
+return (this.rowIndex<0)||!this.cell;
+},isNavHeader:function(){
+return (!!this._colHeadNode);
+},getHeaderIndex:function(){
+if(this._colHeadNode){
+return dojo.indexOf(this._findHeaderCells(),this._colHeadNode);
+}else{
+return -1;
+}
+},_focusifyCellNode:function(_4){
+var n=this.cell&&this.cell.getNode(this.rowIndex);
+if(n){
+dojo.toggleClass(n,this.focusClass,_4);
+if(_4){
+var sl=this.scrollIntoView();
+try{
+if(!this.grid.edit.isEditing()){
+dojox.grid.util.fire(n,"focus");
+if(sl){
+this.cell.view.scrollboxNode.scrollLeft=sl;
+}
+}
+}
+catch(e){
+}
+}
+}
+},_delayedCellFocus:function(){
+if(this.isNavHeader()||!this.grid._focused){
+return;
+}
+var n=this.cell&&this.cell.getNode(this.rowIndex);
+if(n){
+try{
+if(!this.grid.edit.isEditing()){
+dojo.toggleClass(n,this.focusClass,true);
+this.blurHeader();
+dojox.grid.util.fire(n,"focus");
+}
+}
+catch(e){
+}
+}
+},_delayedHeaderFocus:function(){
+if(this.isNavHeader()){
+this.focusHeader();
+this.grid.domNode.focus();
+}
+},_initColumnHeaders:function(){
+var _5=this._findHeaderCells();
+for(var i=0;i<_5.length;i++){
+this._connects.push(dojo.connect(_5[i],"onfocus",this,"doColHeaderFocus"));
+this._connects.push(dojo.connect(_5[i],"onblur",this,"doColHeaderBlur"));
+}
+},_findHeaderCells:function(){
+var _6=dojo.query("th",this.grid.viewsHeaderNode);
+var _7=[];
+for(var i=0;i<_6.length;i++){
+var _8=_6[i];
+var _9=dojo.hasAttr(_8,"tabIndex");
+var _a=dojo.attr(_8,"tabIndex");
+if(_9&&_a<0){
+_7.push(_8);
+}
+}
+return _7;
+},_setActiveColHeader:function(_b,_c,_d){
+dojo.attr(this.grid.domNode,"aria-activedescendant",_b.id);
+if(_d!=null&&_d>=0&&_d!=_c){
+dojo.toggleClass(this._findHeaderCells()[_d],this.focusClass,false);
+}
+dojo.toggleClass(_b,this.focusClass,true);
+this._colHeadNode=_b;
+this._colHeadFocusIdx=_c;
+this._scrollHeader(this._colHeadFocusIdx);
+},scrollIntoView:function(){
+var _e=(this.cell?this._scrollInfo(this.cell):null);
+if(!_e||!_e.s){
+return null;
+}
+var rt=this.grid.scroller.findScrollTop(this.rowIndex);
+if(_e.n&&_e.sr){
+if(_e.n.offsetLeft+_e.n.offsetWidth>_e.sr.l+_e.sr.w){
+_e.s.scrollLeft=_e.n.offsetLeft+_e.n.offsetWidth-_e.sr.w;
+}else{
+if(_e.n.offsetLeft<_e.sr.l){
+_e.s.scrollLeft=_e.n.offsetLeft;
+}
+}
+}
+if(_e.r&&_e.sr){
+if(rt+_e.r.offsetHeight>_e.sr.t+_e.sr.h){
+this.grid.setScrollTop(rt+_e.r.offsetHeight-_e.sr.h);
+}else{
+if(rt<_e.sr.t){
+this.grid.setScrollTop(rt);
+}
+}
+}
+return _e.s.scrollLeft;
+},_scrollInfo:function(_f,_10){
+if(_f){
+var cl=_f,sbn=cl.view.scrollboxNode,_11={w:sbn.clientWidth,l:sbn.scrollLeft,t:sbn.scrollTop,h:sbn.clientHeight},rn=cl.view.getRowNode(this.rowIndex);
+return {c:cl,s:sbn,sr:_11,n:(_10?_10:_f.getNode(this.rowIndex)),r:rn};
+}
+return null;
+},_scrollHeader:function(_12){
+var _13=null;
+if(this._colHeadNode){
+var _14=this.grid.getCell(_12);
+_13=this._scrollInfo(_14,_14.getNode(0));
+}
+if(_13&&_13.s&&_13.sr&&_13.n){
+var _15=_13.sr.l+_13.sr.w;
+if(_13.n.offsetLeft+_13.n.offsetWidth>_15){
+_13.s.scrollLeft=_13.n.offsetLeft+_13.n.offsetWidth-_13.sr.w;
+}else{
+if(_13.n.offsetLeft<_13.sr.l){
+_13.s.scrollLeft=_13.n.offsetLeft;
+}else{
+if(dojo.isIE<=7&&_14&&_14.view.headerNode){
+_14.view.headerNode.scrollLeft=_13.s.scrollLeft;
+}
+}
+}
+}
+},_isHeaderHidden:function(){
+var _16=this.focusView;
+if(!_16){
+for(var i=0,_17;(_17=this.grid.views.views[i]);i++){
+if(_17.headerNode){
+_16=_17;
+break;
+}
+}
+}
+return (_16&&dojo.getComputedStyle(_16.headerNode).display=="none");
+},colSizeAdjust:function(e,_18,_19){
+var _1a=this._findHeaderCells();
+var _1b=this.focusView;
+if(!_1b){
+for(var i=0,_1c;(_1c=this.grid.views.views[i]);i++){
+if(_1c.header.tableMap.map){
+_1b=_1c;
+break;
+}
+}
+}
+var _1d=_1a[_18];
+if(!_1b||(_18==_1a.length-1&&_18===0)){
+return;
+}
+_1b.content.baseDecorateEvent(e);
+e.cellNode=_1d;
+e.cellIndex=_1b.content.getCellNodeIndex(e.cellNode);
+e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);
+if(_1b.header.canResize(e)){
+var _1e={l:_19};
+var _1f=_1b.header.colResizeSetup(e,false);
+_1b.header.doResizeColumn(_1f,null,_1e);
+_1b.update();
+}
+},styleRow:function(_20){
+return;
+},setFocusIndex:function(_21,_22){
+this.setFocusCell(this.grid.getCell(_22),_21);
+},setFocusCell:function(_23,_24){
+if(_23&&!this.isFocusCell(_23,_24)){
+this.tabbingOut=false;
+if(this._colHeadNode){
+this.blurHeader();
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.focusGridView();
+this._focusifyCellNode(false);
+this.cell=_23;
+this.rowIndex=_24;
+this._focusifyCellNode(true);
+}
+if(dojo.isOpera){
+setTimeout(dojo.hitch(this.grid,"onCellFocus",this.cell,this.rowIndex),1);
+}else{
+this.grid.onCellFocus(this.cell,this.rowIndex);
+}
+},next:function(){
+if(this.cell){
+var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1,rc=this.grid.rowCount-1;
+if(col>cc){
+col=0;
+row++;
+}
+if(row>rc){
+col=cc;
+row=rc;
+}
+if(this.grid.edit.isEditing()){
+var _25=this.grid.getCell(col);
+if(!this.isLastFocusCell()&&!_25.editable){
+this.cell=_25;
+this.rowIndex=row;
+this.next();
+return;
+}
+}
+this.setFocusIndex(row,col);
+}
+},previous:function(){
+if(this.cell){
+var row=(this.rowIndex||0),col=(this.cell.index||0)-1;
+if(col<0){
+col=this.grid.layout.cellCount-1;
+row--;
+}
+if(row<0){
+row=0;
+col=0;
+}
+if(this.grid.edit.isEditing()){
+var _26=this.grid.getCell(col);
+if(!this.isFirstFocusCell()&&!_26.editable){
+this.cell=_26;
+this.rowIndex=row;
+this.previous();
+return;
+}
+}
+this.setFocusIndex(row,col);
+}
+},move:function(_27,_28){
+var _29=_28<0?-1:1;
+if(this.isNavHeader()){
+var _2a=this._findHeaderCells();
+var _2b=currentIdx=dojo.indexOf(_2a,this._colHeadNode);
+currentIdx+=_28;
+while(currentIdx>=0&&currentIdx<_2a.length&&_2a[currentIdx].style.display=="none"){
+currentIdx+=_29;
+}
+if((currentIdx>=0)&&(currentIdx<_2a.length)){
+this._setActiveColHeader(_2a[currentIdx],currentIdx,_2b);
+}
+}else{
+if(this.cell){
+var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,row=Math.min(rc,Math.max(0,r+_27));
+if(_27){
+if(_27>0){
+if(row>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+}
+}else{
+if(_27<0){
+if(row<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+}
+}
+}
+}
+var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_28));
+var _2c=this.grid.getCell(col);
+while(col>=0&&col<cc&&_2c&&_2c.hidden===true){
+col+=_29;
+_2c=this.grid.getCell(col);
+}
+if(!_2c||_2c.hidden===true){
+col=i;
+}
+this.setFocusIndex(row,col);
+if(_27){
+this.grid.updateRow(r);
+}
+}
+}
+},previousKey:function(e){
+if(this.grid.edit.isEditing()){
+dojo.stopEvent(e);
+this.previous();
+}else{
+if(!this.isNavHeader()&&!this._isHeaderHidden()){
+this.grid.domNode.focus();
+dojo.stopEvent(e);
+}else{
+this.tabOut(this.grid.domNode);
+if(this._colHeadFocusIdx!=null){
+dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx],this.focusClass,false);
+this._colHeadFocusIdx=null;
+}
+this._focusifyCellNode(false);
+}
+}
+},nextKey:function(e){
+var _2d=(this.grid.rowCount===0);
+if(e.target===this.grid.domNode&&this._colHeadFocusIdx==null){
+this.focusHeader();
+dojo.stopEvent(e);
+}else{
+if(this.isNavHeader()){
+this.blurHeader();
+if(!this.findAndFocusGridCell()){
+this.tabOut(this.grid.lastFocusNode);
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+}else{
+if(this.grid.edit.isEditing()){
+dojo.stopEvent(e);
+this.next();
+}else{
+this.tabOut(this.grid.lastFocusNode);
+}
+}
+}
+},tabOut:function(_2e){
+this.tabbingOut=true;
+_2e.focus();
+},focusGridView:function(){
+dojox.grid.util.fire(this.focusView,"focus");
+},focusGrid:function(_2f){
+this.focusGridView();
+this._focusifyCellNode(true);
+},findAndFocusGridCell:function(){
+var _30=true;
+var _31=(this.grid.rowCount===0);
+if(this.isNoFocusCell()&&!_31){
+var _32=0;
+var _33=this.grid.getCell(_32);
+if(_33.hidden){
+_32=this.isNavHeader()?this._colHeadFocusIdx:0;
+}
+this.setFocusIndex(0,_32);
+}else{
+if(this.cell&&!_31){
+if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){
+this.grid.scrollToRow(this.rowIndex);
+}
+this.focusGrid();
+}else{
+_30=false;
+}
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+return _30;
+},focusHeader:function(){
+var _34=this._findHeaderCells();
+var _35=this._colHeadFocusIdx;
+if(this._isHeaderHidden()){
+this.findAndFocusGridCell();
+}else{
+if(!this._colHeadFocusIdx){
+if(this.isNoFocusCell()){
+this._colHeadFocusIdx=0;
+}else{
+this._colHeadFocusIdx=this.cell.index;
+}
+}
+}
+this._colHeadNode=_34[this._colHeadFocusIdx];
+while(this._colHeadNode&&this._colHeadFocusIdx>=0&&this._colHeadFocusIdx<_34.length&&this._colHeadNode.style.display=="none"){
+this._colHeadFocusIdx++;
+this._colHeadNode=_34[this._colHeadFocusIdx];
+}
+if(this._colHeadNode&&this._colHeadNode.style.display!="none"){
+if(this.headerMenu&&this._contextMenuBindNode!=this.grid.domNode){
+this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);
+this.headerMenu.bindDomNode(this.grid.domNode);
+this._contextMenuBindNode=this.grid.domNode;
+}
+this._setActiveColHeader(this._colHeadNode,this._colHeadFocusIdx,_35);
+this._scrollHeader(this._colHeadFocusIdx);
+this._focusifyCellNode(false);
+}else{
+this.findAndFocusGridCell();
+}
+},blurHeader:function(){
+dojo.removeClass(this._colHeadNode,this.focusClass);
+dojo.removeAttr(this.grid.domNode,"aria-activedescendant");
+if(this.headerMenu&&this._contextMenuBindNode==this.grid.domNode){
+var _36=this.grid.viewsHeaderNode;
+this.headerMenu.unBindDomNode(this.grid.domNode);
+this.headerMenu.bindDomNode(_36);
+this._contextMenuBindNode=_36;
+}
+},doFocus:function(e){
+if(e&&e.target!=e.currentTarget){
+dojo.stopEvent(e);
+return;
+}
+if(!this.tabbingOut){
+this.focusHeader();
+}
+this.tabbingOut=false;
+dojo.stopEvent(e);
+},doBlur:function(e){
+dojo.stopEvent(e);
+},doContextMenu:function(e){
+if(!this.headerMenu){
+dojo.stopEvent(e);
+}
+},doLastNodeFocus:function(e){
+if(this.tabbingOut){
+this._focusifyCellNode(false);
+}else{
+if(this.grid.rowCount>0){
+if(this.isNoFocusCell()){
+this.setFocusIndex(0,0);
+}
+this._focusifyCellNode(true);
+}else{
+this.focusHeader();
+}
+}
+this.tabbingOut=false;
+dojo.stopEvent(e);
+},doLastNodeBlur:function(e){
+dojo.stopEvent(e);
+},doColHeaderFocus:function(e){
+this._setActiveColHeader(e.target,dojo.attr(e.target,"idx"),this._colHeadFocusIdx);
+this._scrollHeader(this.getHeaderIndex());
+dojo.stopEvent(e);
+},doColHeaderBlur:function(e){
+dojo.toggleClass(e.target,this.focusClass,false);
+}});
+}
diff --git a/js/dojo/dojox/grid/_Grid.js b/js/dojo/dojox/grid/_Grid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Grid.js
@@ -0,0 +1,727 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Grid"]){
+dojo._hasResource["dojox.grid._Grid"]=true;
+dojo.provide("dojox.grid._Grid");
+dojo.require("dijit.dijit");
+dojo.require("dijit.Menu");
+dojo.require("dojox.html.metrics");
+dojo.require("dojox.grid.util");
+dojo.require("dojox.grid._Scroller");
+dojo.require("dojox.grid._Layout");
+dojo.require("dojox.grid._View");
+dojo.require("dojox.grid._ViewManager");
+dojo.require("dojox.grid._RowManager");
+dojo.require("dojox.grid._FocusManager");
+dojo.require("dojox.grid._EditManager");
+dojo.require("dojox.grid.Selection");
+dojo.require("dojox.grid._RowSelector");
+dojo.require("dojox.grid._Events");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+(function(){
+if(!dojo.isCopyKey){
+dojo.isCopyKey=dojo.dnd.getCopyKeyState;
+}
+dojo.declare("dojox.grid._Grid",[dijit._Widget,dijit._Templated,dojox.grid._Events],{templateString:"<div class=\"dojoxGrid\" hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",classTag:"dojoxGrid",get:function(_1){
+},rowCount:5,keepRows:75,rowsPerPage:25,autoWidth:false,initialWidth:"",autoHeight:"",rowHeight:0,autoRender:true,defaultHeight:"15em",height:"",structure:null,elasticView:-1,singleClickEdit:false,selectionMode:"extended",rowSelector:"",columnReordering:false,headerMenu:null,placeholderLabel:"GridColumns",selectable:false,_click:null,loadingMessage:"<span class='dojoxGridLoading'>${loadingState}</span>",errorMessage:"<span class='dojoxGridError'>${errorState}</span>",noDataMessage:"",escapeHTMLInData:true,formatterScope:null,editable:false,sortInfo:0,themeable:true,_placeholders:null,_layoutClass:dojox.grid._Layout,buildRendering:function(){
+this.inherited(arguments);
+if(this.get==dojox.grid._Grid.prototype.get){
+this.get=null;
+}
+if(!this.domNode.getAttribute("tabIndex")){
+this.domNode.tabIndex="0";
+}
+this.createScroller();
+this.createLayout();
+this.createViews();
+this.createManagers();
+this.createSelection();
+this.connect(this.selection,"onSelected","onSelected");
+this.connect(this.selection,"onDeselected","onDeselected");
+this.connect(this.selection,"onChanged","onSelectionChanged");
+dojox.html.metrics.initOnFontResize();
+this.connect(dojox.html.metrics,"onFontResize","textSizeChanged");
+dojox.grid.util.funnelEvents(this.domNode,this,"doKeyEvent",dojox.grid.util.keyEvents);
+if(this.selectionMode!="none"){
+dojo.attr(this.domNode,"aria-multiselectable",this.selectionMode=="single"?"false":"true");
+}
+},postMixInProperties:function(){
+this.inherited(arguments);
+var _2=dojo.i18n.getLocalization("dijit","loading",this.lang);
+this.loadingMessage=dojo.string.substitute(this.loadingMessage,_2);
+this.errorMessage=dojo.string.substitute(this.errorMessage,_2);
+if(this.srcNodeRef&&this.srcNodeRef.style.height){
+this.height=this.srcNodeRef.style.height;
+}
+this._setAutoHeightAttr(this.autoHeight,true);
+this.lastScrollTop=this.scrollTop=0;
+},postCreate:function(){
+this._placeholders=[];
+this._setHeaderMenuAttr(this.headerMenu);
+this._setStructureAttr(this.structure);
+this._click=[];
+this.inherited(arguments);
+if(this.domNode&&this.autoWidth&&this.initialWidth){
+this.domNode.style.width=this.initialWidth;
+}
+if(this.domNode&&!this.editable){
+dojo.attr(this.domNode,"aria-readonly","true");
+}
+},destroy:function(){
+this.domNode.onReveal=null;
+this.domNode.onSizeChange=null;
+delete this._click;
+this.edit.destroy();
+delete this.edit;
+this.views.destroyViews();
+if(this.scroller){
+this.scroller.destroy();
+delete this.scroller;
+}
+if(this.focus){
+this.focus.destroy();
+delete this.focus;
+}
+if(this.headerMenu&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+p.unReplace(true);
+});
+this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+}
+this.inherited(arguments);
+},_setAutoHeightAttr:function(ah,_3){
+if(typeof ah=="string"){
+if(!ah||ah=="false"){
+ah=false;
+}else{
+if(ah=="true"){
+ah=true;
+}else{
+ah=window.parseInt(ah,10);
+}
+}
+}
+if(typeof ah=="number"){
+if(isNaN(ah)){
+ah=false;
+}
+if(ah<0){
+ah=true;
+}else{
+if(ah===0){
+ah=false;
+}
+}
+}
+this.autoHeight=ah;
+if(typeof ah=="boolean"){
+this._autoHeight=ah;
+}else{
+if(typeof ah=="number"){
+this._autoHeight=(ah>=this.attr("rowCount"));
+}else{
+this._autoHeight=false;
+}
+}
+if(this._started&&!_3){
+this.render();
+}
+},_getRowCountAttr:function(){
+return this.updating&&this.invalidated&&this.invalidated.rowCount!=undefined?this.invalidated.rowCount:this.rowCount;
+},textSizeChanged:function(){
+this.render();
+},sizeChange:function(){
+this.update();
+},createManagers:function(){
+this.rows=new dojox.grid._RowManager(this);
+this.focus=new dojox.grid._FocusManager(this);
+this.edit=new dojox.grid._EditManager(this);
+},createSelection:function(){
+this.selection=new dojox.grid.Selection(this);
+},createScroller:function(){
+this.scroller=new dojox.grid._Scroller();
+this.scroller.grid=this;
+this.scroller.renderRow=dojo.hitch(this,"renderRow");
+this.scroller.removeRow=dojo.hitch(this,"rowRemoved");
+},createLayout:function(){
+this.layout=new this._layoutClass(this);
+this.connect(this.layout,"moveColumn","onMoveColumn");
+},onMoveColumn:function(){
+this.render();
+},onResizeColumn:function(_4){
+},createViews:function(){
+this.views=new dojox.grid._ViewManager(this);
+this.views.createView=dojo.hitch(this,"createView");
+},createView:function(_5,_6){
+var c=dojo.getObject(_5);
+var _7=new c({grid:this,index:_6});
+this.viewsNode.appendChild(_7.domNode);
+this.viewsHeaderNode.appendChild(_7.headerNode);
+this.views.addView(_7);
+return _7;
+},buildViews:function(){
+for(var i=0,vs;(vs=this.layout.structure[i]);i++){
+this.createView(vs.type||dojox._scopeName+".grid._View",i).setStructure(vs);
+}
+this.scroller.setContentNodes(this.views.getContentNodes());
+},_setStructureAttr:function(_8){
+var s=_8;
+if(s&&dojo.isString(s)){
+dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')","use dojox.grid._Grid.attr('structure', objVar) instead","2.0");
+s=dojo.getObject(s);
+}
+this.structure=s;
+if(!s){
+if(this.layout.structure){
+s=this.layout.structure;
+}else{
+return;
+}
+}
+this.views.destroyViews();
+if(s!==this.layout.structure){
+this.layout.setStructure(s);
+}
+this._structureChanged();
+},setStructure:function(_9){
+dojo.deprecated("dojox.grid._Grid.setStructure(obj)","use dojox.grid._Grid.attr('structure', obj) instead.","2.0");
+this._setStructureAttr(_9);
+},getColumnTogglingItems:function(){
+return dojo.map(this.layout.cells,function(_a){
+if(!_a.menuItems){
+_a.menuItems=[];
+}
+var _b=this;
+var _c=new dijit.CheckedMenuItem({label:_a.name,checked:!_a.hidden,_gridCell:_a,onChange:function(_d){
+if(_b.layout.setColumnVisibility(this._gridCell.index,_d)){
+var _e=this._gridCell.menuItems;
+if(_e.length>1){
+dojo.forEach(_e,function(_f){
+if(_f!==this){
+_f.setAttribute("checked",_d);
+}
+},this);
+}
+_d=dojo.filter(_b.layout.cells,function(c){
+if(c.menuItems.length>1){
+dojo.forEach(c.menuItems,"item.attr('disabled', false);");
+}else{
+c.menuItems[0].attr("disabled",false);
+}
+return !c.hidden;
+});
+if(_d.length==1){
+dojo.forEach(_d[0].menuItems,"item.attr('disabled', true);");
+}
+}
+},destroy:function(){
+var _10=dojo.indexOf(this._gridCell.menuItems,this);
+this._gridCell.menuItems.splice(_10,1);
+delete this._gridCell;
+dijit.CheckedMenuItem.prototype.destroy.apply(this,arguments);
+}});
+_a.menuItems.push(_c);
+return _c;
+},this);
+},_setHeaderMenuAttr:function(_11){
+if(this._placeholders&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+p.unReplace(true);
+});
+this._placeholders=[];
+}
+if(this.headerMenu){
+this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+}
+this.headerMenu=_11;
+if(!_11){
+return;
+}
+this.headerMenu.bindDomNode(this.viewsHeaderNode);
+if(this.headerMenu.getPlaceholders){
+this._placeholders=this.headerMenu.getPlaceholders(this.placeholderLabel);
+}
+},setHeaderMenu:function(_12){
+dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)","use dojox.grid._Grid.attr('headerMenu', obj) instead.","2.0");
+this._setHeaderMenuAttr(_12);
+},setupHeaderMenu:function(){
+if(this._placeholders&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+if(p._replaced){
+p.unReplace(true);
+}
+p.replace(this.getColumnTogglingItems());
+},this);
+}
+},_fetch:function(_13){
+this.setScrollTop(0);
+},getItem:function(_14){
+return null;
+},showMessage:function(_15){
+if(_15){
+this.messagesNode.innerHTML=_15;
+this.messagesNode.style.display="";
+}else{
+this.messagesNode.innerHTML="";
+this.messagesNode.style.display="none";
+}
+},_structureChanged:function(){
+this.buildViews();
+if(this.autoRender&&this._started){
+this.render();
+}
+},hasLayout:function(){
+return this.layout.cells.length;
+},resize:function(_16,_17){
+this._pendingChangeSize=_16;
+this._pendingResultSize=_17;
+this.sizeChange();
+},_getPadBorder:function(){
+this._padBorder=this._padBorder||dojo._getPadBorderExtents(this.domNode);
+return this._padBorder;
+},_getHeaderHeight:function(){
+var vns=this.viewsHeaderNode.style,t=vns.display=="none"?0:this.views.measureHeader();
+vns.height=t+"px";
+this.views.normalizeHeaderNodeHeight();
+return t;
+},_resize:function(_18,_19){
+_18=_18||this._pendingChangeSize;
+_19=_19||this._pendingResultSize;
+delete this._pendingChangeSize;
+delete this._pendingResultSize;
+if(!this.domNode){
+return;
+}
+var pn=this.domNode.parentNode;
+if(!pn||pn.nodeType!=1||!this.hasLayout()||pn.style.visibility=="hidden"||pn.style.display=="none"){
+return;
+}
+var _1a=this._getPadBorder();
+var hh=undefined;
+var h;
+if(this._autoHeight){
+this.domNode.style.height="auto";
+this.viewsNode.style.height="";
+}else{
+if(typeof this.autoHeight=="number"){
+h=hh=this._getHeaderHeight();
+h+=(this.scroller.averageRowHeight*this.autoHeight);
+this.domNode.style.height=h+"px";
+}else{
+if(this.domNode.clientHeight<=_1a.h){
+if(pn==document.body){
+this.domNode.style.height=this.defaultHeight;
+}else{
+if(this.height){
+this.domNode.style.height=this.height;
+}else{
+this.fitTo="parent";
+}
+}
+}
+}
+}
+if(_19){
+_18=_19;
+}
+if(_18){
+dojo.marginBox(this.domNode,_18);
+this.height=this.domNode.style.height;
+delete this.fitTo;
+}else{
+if(this.fitTo=="parent"){
+h=this._parentContentBoxHeight=this._parentContentBoxHeight||dojo._getContentBox(pn).h;
+this.domNode.style.height=Math.max(0,h)+"px";
+}
+}
+var _1b=dojo.some(this.views.views,function(v){
+return v.flexCells;
+});
+if(!this._autoHeight&&(h||dojo._getContentBox(this.domNode).h)===0){
+this.viewsHeaderNode.style.display="none";
+}else{
+this.viewsHeaderNode.style.display="block";
+if(!_1b&&hh===undefined){
+hh=this._getHeaderHeight();
+}
+}
+if(_1b){
+hh=undefined;
+}
+this.adaptWidth();
+this.adaptHeight(hh);
+this.postresize();
+},adaptWidth:function(){
+var _1c=(!this.initialWidth&&this.autoWidth);
+var w=_1c?0:this.domNode.clientWidth||(this.domNode.offsetWidth-this._getPadBorder().w),vw=this.views.arrange(1,w);
+this.views.onEach("adaptWidth");
+if(_1c){
+this.domNode.style.width=vw+"px";
+}
+},adaptHeight:function(_1d){
+var t=_1d===undefined?this._getHeaderHeight():_1d;
+var h=(this._autoHeight?-1:Math.max(this.domNode.clientHeight-t,0)||0);
+this.views.onEach("setSize",[0,h]);
+this.views.onEach("adaptHeight");
+if(!this._autoHeight){
+var _1e=0,_1f=0;
+var _20=dojo.filter(this.views.views,function(v){
+var has=v.hasHScrollbar();
+if(has){
+_1e++;
+}else{
+_1f++;
+}
+return (!has);
+});
+if(_1e>0&&_1f>0){
+dojo.forEach(_20,function(v){
+v.adaptHeight(true);
+});
+}
+}
+if(this.autoHeight===true||h!=-1||(typeof this.autoHeight=="number"&&this.autoHeight>=this.attr("rowCount"))){
+this.scroller.windowHeight=h;
+}else{
+this.scroller.windowHeight=Math.max(this.domNode.clientHeight-t,0);
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(this.autoRender){
+this.render();
+}
+},render:function(){
+if(!this.domNode){
+return;
+}
+if(!this._started){
+return;
+}
+if(!this.hasLayout()){
+this.scroller.init(0,this.keepRows,this.rowsPerPage);
+return;
+}
+this.update=this.defaultUpdate;
+this._render();
+},_render:function(){
+this.scroller.init(this.attr("rowCount"),this.keepRows,this.rowsPerPage);
+this.prerender();
+this.setScrollTop(0);
+this.postrender();
+},prerender:function(){
+this.keepRows=this._autoHeight?0:this.keepRows;
+this.scroller.setKeepInfo(this.keepRows);
+this.views.render();
+this._resize();
+},postrender:function(){
+this.postresize();
+this.focus.initFocusView();
+dojo.setSelectable(this.domNode,this.selectable);
+},postresize:function(){
+if(this._autoHeight){
+var _21=Math.max(this.views.measureContent())+"px";
+this.viewsNode.style.height=_21;
+}
+},renderRow:function(_22,_23){
+this.views.renderRow(_22,_23,this._skipRowRenormalize);
+},rowRemoved:function(_24){
+this.views.rowRemoved(_24);
+},invalidated:null,updating:false,beginUpdate:function(){
+this.invalidated=[];
+this.updating=true;
+},endUpdate:function(){
+this.updating=false;
+var i=this.invalidated,r;
+if(i.all){
+this.update();
+}else{
+if(i.rowCount!=undefined){
+this.updateRowCount(i.rowCount);
+}else{
+for(r in i){
+this.updateRow(Number(r));
+}
+}
+}
+this.invalidated=[];
+},defaultUpdate:function(){
+if(!this.domNode){
+return;
+}
+if(this.updating){
+this.invalidated.all=true;
+return;
+}
+this.lastScrollTop=this.scrollTop;
+this.prerender();
+this.scroller.invalidateNodes();
+this.setScrollTop(this.lastScrollTop);
+this.postrender();
+},update:function(){
+this.render();
+},updateRow:function(_25){
+_25=Number(_25);
+if(this.updating){
+this.invalidated[_25]=true;
+}else{
+this.views.updateRow(_25);
+this.scroller.rowHeightChanged(_25);
+}
+},updateRows:function(_26,_27){
+_26=Number(_26);
+_27=Number(_27);
+var i;
+if(this.updating){
+for(i=0;i<_27;i++){
+this.invalidated[i+_26]=true;
+}
+}else{
+for(i=0;i<_27;i++){
+this.views.updateRow(i+_26,this._skipRowRenormalize);
+}
+this.scroller.rowHeightChanged(_26);
+}
+},updateRowCount:function(_28){
+if(this.updating){
+this.invalidated.rowCount=_28;
+}else{
+this.rowCount=_28;
+this._setAutoHeightAttr(this.autoHeight,true);
+if(this.layout.cells.length){
+this.scroller.updateRowCount(_28);
+}
+this._resize();
+if(this.layout.cells.length){
+this.setScrollTop(this.scrollTop);
+}
+}
+},updateRowStyles:function(_29){
+this.views.updateRowStyles(_29);
+},getRowNode:function(_2a){
+if(this.focus.focusView&&!(this.focus.focusView instanceof dojox.grid._RowSelector)){
+return this.focus.focusView.rowNodes[_2a];
+}else{
+for(var i=0,_2b;(_2b=this.views.views[i]);i++){
+if(!(_2b instanceof dojox.grid._RowSelector)){
+return _2b.rowNodes[_2a];
+}
+}
+}
+return null;
+},rowHeightChanged:function(_2c){
+this.views.renormalizeRow(_2c);
+this.scroller.rowHeightChanged(_2c);
+},fastScroll:true,delayScroll:false,scrollRedrawThreshold:(dojo.isIE?100:50),scrollTo:function(_2d){
+if(!this.fastScroll){
+this.setScrollTop(_2d);
+return;
+}
+var _2e=Math.abs(this.lastScrollTop-_2d);
+this.lastScrollTop=_2d;
+if(_2e>this.scrollRedrawThreshold||this.delayScroll){
+this.delayScroll=true;
+this.scrollTop=_2d;
+this.views.setScrollTop(_2d);
+if(this._pendingScroll){
+window.clearTimeout(this._pendingScroll);
+}
+var _2f=this;
+this._pendingScroll=window.setTimeout(function(){
+delete _2f._pendingScroll;
+_2f.finishScrollJob();
+},200);
+}else{
+this.setScrollTop(_2d);
+}
+},finishScrollJob:function(){
+this.delayScroll=false;
+this.setScrollTop(this.scrollTop);
+},setScrollTop:function(_30){
+this.scroller.scroll(this.views.setScrollTop(_30));
+},scrollToRow:function(_31){
+this.setScrollTop(this.scroller.findScrollTop(_31)+1);
+},styleRowNode:function(_32,_33){
+if(_33){
+this.rows.styleRowNode(_32,_33);
+}
+},_mouseOut:function(e){
+this.rows.setOverRow(-2);
+},getCell:function(_34){
+return this.layout.cells[_34];
+},setCellWidth:function(_35,_36){
+this.getCell(_35).unitWidth=_36;
+},getCellName:function(_37){
+return "Cell "+_37.index;
+},canSort:function(_38){
+},sort:function(){
+},getSortAsc:function(_39){
+_39=_39==undefined?this.sortInfo:_39;
+return Boolean(_39>0);
+},getSortIndex:function(_3a){
+_3a=_3a==undefined?this.sortInfo:_3a;
+return Math.abs(_3a)-1;
+},setSortIndex:function(_3b,_3c){
+var si=_3b+1;
+if(_3c!=undefined){
+si*=(_3c?1:-1);
+}else{
+if(this.getSortIndex()==_3b){
+si=-this.sortInfo;
+}
+}
+this.setSortInfo(si);
+},setSortInfo:function(_3d){
+if(this.canSort(_3d)){
+this.sortInfo=_3d;
+this.sort();
+this.update();
+}
+},doKeyEvent:function(e){
+e.dispatch="do"+e.type;
+this.onKeyEvent(e);
+},_dispatch:function(m,e){
+if(m in this){
+return this[m](e);
+}
+return false;
+},dispatchKeyEvent:function(e){
+this._dispatch(e.dispatch,e);
+},dispatchContentEvent:function(e){
+this.edit.dispatchEvent(e)||e.sourceView.dispatchContentEvent(e)||this._dispatch(e.dispatch,e);
+},dispatchHeaderEvent:function(e){
+e.sourceView.dispatchHeaderEvent(e)||this._dispatch("doheader"+e.type,e);
+},dokeydown:function(e){
+this.onKeyDown(e);
+},doclick:function(e){
+if(e.cellNode){
+this.onCellClick(e);
+}else{
+this.onRowClick(e);
+}
+},dodblclick:function(e){
+if(e.cellNode){
+this.onCellDblClick(e);
+}else{
+this.onRowDblClick(e);
+}
+},docontextmenu:function(e){
+if(e.cellNode){
+this.onCellContextMenu(e);
+}else{
+this.onRowContextMenu(e);
+}
+},doheaderclick:function(e){
+if(e.cellNode){
+this.onHeaderCellClick(e);
+}else{
+this.onHeaderClick(e);
+}
+},doheaderdblclick:function(e){
+if(e.cellNode){
+this.onHeaderCellDblClick(e);
+}else{
+this.onHeaderDblClick(e);
+}
+},doheadercontextmenu:function(e){
+if(e.cellNode){
+this.onHeaderCellContextMenu(e);
+}else{
+this.onHeaderContextMenu(e);
+}
+},doStartEdit:function(_3e,_3f){
+this.onStartEdit(_3e,_3f);
+},doApplyCellEdit:function(_40,_41,_42){
+this.onApplyCellEdit(_40,_41,_42);
+},doCancelEdit:function(_43){
+this.onCancelEdit(_43);
+},doApplyEdit:function(_44){
+this.onApplyEdit(_44);
+},addRow:function(){
+this.updateRowCount(this.attr("rowCount")+1);
+},removeSelectedRows:function(){
+if(this.allItemsSelected){
+this.updateRowCount(0);
+}else{
+this.updateRowCount(Math.max(0,this.attr("rowCount")-this.selection.getSelected().length));
+}
+this.selection.clear();
+}});
+dojox.grid._Grid.markupFactory=function(_45,_46,_47,_48){
+var d=dojo;
+var _49=function(n){
+var w=d.attr(n,"width")||"auto";
+if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){
+w=parseInt(w,10)+"px";
+}
+return w;
+};
+if(!_45.structure&&_46.nodeName.toLowerCase()=="table"){
+_45.structure=d.query("> colgroup",_46).map(function(cg){
+var sv=d.attr(cg,"span");
+var v={noscroll:(d.attr(cg,"noscroll")=="true")?true:false,__span:(!!sv?parseInt(sv,10):1),cells:[]};
+if(d.hasAttr(cg,"width")){
+v.width=_49(cg);
+}
+return v;
+});
+if(!_45.structure.length){
+_45.structure.push({__span:Infinity,cells:[]});
+}
+d.query("thead > tr",_46).forEach(function(tr,_4a){
+var _4b=0;
+var _4c=0;
+var _4d;
+var _4e=null;
+d.query("> th",tr).map(function(th){
+if(!_4e){
+_4d=0;
+_4e=_45.structure[0];
+}else{
+if(_4b>=(_4d+_4e.__span)){
+_4c++;
+_4d+=_4e.__span;
+var _4f=_4e;
+_4e=_45.structure[_4c];
+}
+}
+var _50={name:d.trim(d.attr(th,"name")||th.innerHTML),colSpan:parseInt(d.attr(th,"colspan")||1,10),type:d.trim(d.attr(th,"cellType")||""),id:d.trim(d.attr(th,"id")||"")};
+_4b+=_50.colSpan;
+var _51=d.attr(th,"rowspan");
+if(_51){
+_50.rowSpan=_51;
+}
+if(d.hasAttr(th,"width")){
+_50.width=_49(th);
+}
+if(d.hasAttr(th,"relWidth")){
+_50.relWidth=window.parseInt(dojo.attr(th,"relWidth"),10);
+}
+if(d.hasAttr(th,"hidden")){
+_50.hidden=d.attr(th,"hidden")=="true";
+}
+if(_48){
+_48(th,_50);
+}
+_50.type=_50.type?dojo.getObject(_50.type):dojox.grid.cells.Cell;
+if(_50.type&&_50.type.markupFactory){
+_50.type.markupFactory(th,_50);
+}
+if(!_4e.cells[_4a]){
+_4e.cells[_4a]=[];
+}
+_4e.cells[_4a].push(_50);
+});
+});
+}
+return new _47(_45,_46);
+};
+})();
+}
diff --git a/js/dojo/dojox/grid/_Layout.js b/js/dojo/dojox/grid/_Layout.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Layout.js
@@ -0,0 +1,214 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Layout"]){
+dojo._hasResource["dojox.grid._Layout"]=true;
+dojo.provide("dojox.grid._Layout");
+dojo.require("dojox.grid.cells");
+dojo.require("dojox.grid._RowSelector");
+dojo.declare("dojox.grid._Layout",null,{constructor:function(_1){
+this.grid=_1;
+},cells:[],structure:null,defaultWidth:"6em",moveColumn:function(_2,_3,_4,_5,_6){
+var _7=this.structure[_2].cells[0];
+var _8=this.structure[_3].cells[0];
+var _9=null;
+var _a=0;
+var _b=0;
+for(var i=0,c;c=_7[i];i++){
+if(c.index==_4){
+_a=i;
+break;
+}
+}
+_9=_7.splice(_a,1)[0];
+_9.view=this.grid.views.views[_3];
+for(i=0,c=null;c=_8[i];i++){
+if(c.index==_5){
+_b=i;
+break;
+}
+}
+if(!_6){
+_b+=1;
+}
+_8.splice(_b,0,_9);
+var _c=this.grid.getCell(this.grid.getSortIndex());
+if(_c){
+_c._currentlySorted=this.grid.getSortAsc();
+}
+this.cells=[];
+_4=0;
+var v;
+for(i=0;v=this.structure[i];i++){
+for(var j=0,cs;cs=v.cells[j];j++){
+for(var k=0;c=cs[k];k++){
+c.index=_4;
+this.cells.push(c);
+if("_currentlySorted" in c){
+var si=_4+1;
+si*=c._currentlySorted?1:-1;
+this.grid.sortInfo=si;
+delete c._currentlySorted;
+}
+_4++;
+}
+}
+}
+this.grid.setupHeaderMenu();
+},setColumnVisibility:function(_d,_e){
+var _f=this.cells[_d];
+if(_f.hidden==_e){
+_f.hidden=!_e;
+var v=_f.view,w=v.viewWidth;
+if(w&&w!="auto"){
+v._togglingColumn=dojo.marginBox(_f.getHeaderNode()).w||0;
+}
+v.update();
+return true;
+}else{
+return false;
+}
+},addCellDef:function(_10,_11,_12){
+var _13=this;
+var _14=function(_15){
+var w=0;
+if(_15.colSpan>1){
+w=0;
+}else{
+w=_15.width||_13._defaultCellProps.width||_13.defaultWidth;
+if(!isNaN(w)){
+w=w+"em";
+}
+}
+return w;
+};
+var _16={grid:this.grid,subrow:_10,layoutIndex:_11,index:this.cells.length};
+if(_12&&_12 instanceof dojox.grid.cells._Base){
+var _17=dojo.clone(_12);
+_16.unitWidth=_14(_17._props);
+_17=dojo.mixin(_17,this._defaultCellProps,_12._props,_16);
+return _17;
+}
+var _18=_12.type||this._defaultCellProps.type||dojox.grid.cells.Cell;
+_16.unitWidth=_14(_12);
+return new _18(dojo.mixin({},this._defaultCellProps,_12,_16));
+},addRowDef:function(_19,_1a){
+var _1b=[];
+var _1c=0,_1d=0,_1e=true;
+for(var i=0,def,_1f;(def=_1a[i]);i++){
+_1f=this.addCellDef(_19,i,def);
+_1b.push(_1f);
+this.cells.push(_1f);
+if(_1e&&_1f.relWidth){
+_1c+=_1f.relWidth;
+}else{
+if(_1f.width){
+var w=_1f.width;
+if(typeof w=="string"&&w.slice(-1)=="%"){
+_1d+=window.parseInt(w,10);
+}else{
+if(w=="auto"){
+_1e=false;
+}
+}
+}
+}
+}
+if(_1c&&_1e){
+dojo.forEach(_1b,function(_20){
+if(_20.relWidth){
+_20.width=_20.unitWidth=((_20.relWidth/_1c)*(100-_1d))+"%";
+}
+});
+}
+return _1b;
+},addRowsDef:function(_21){
+var _22=[];
+if(dojo.isArray(_21)){
+if(dojo.isArray(_21[0])){
+for(var i=0,row;_21&&(row=_21[i]);i++){
+_22.push(this.addRowDef(i,row));
+}
+}else{
+_22.push(this.addRowDef(0,_21));
+}
+}
+return _22;
+},addViewDef:function(_23){
+this._defaultCellProps=_23.defaultCell||{};
+if(_23.width&&_23.width=="auto"){
+delete _23.width;
+}
+return dojo.mixin({},_23,{cells:this.addRowsDef(_23.rows||_23.cells)});
+},setStructure:function(_24){
+this.fieldIndex=0;
+this.cells=[];
+var s=this.structure=[];
+if(this.grid.rowSelector){
+var sel={type:dojox._scopeName+".grid._RowSelector"};
+if(dojo.isString(this.grid.rowSelector)){
+var _25=this.grid.rowSelector;
+if(_25=="false"){
+sel=null;
+}else{
+if(_25!="true"){
+sel["width"]=_25;
+}
+}
+}else{
+if(!this.grid.rowSelector){
+sel=null;
+}
+}
+if(sel){
+s.push(this.addViewDef(sel));
+}
+}
+var _26=function(def){
+return ("name" in def||"field" in def||"get" in def);
+};
+var _27=function(def){
+if(dojo.isArray(def)){
+if(dojo.isArray(def[0])||_26(def[0])){
+return true;
+}
+}
+return false;
+};
+var _28=function(def){
+return (def!==null&&dojo.isObject(def)&&("cells" in def||"rows" in def||("type" in def&&!_26(def))));
+};
+if(dojo.isArray(_24)){
+var _29=false;
+for(var i=0,st;(st=_24[i]);i++){
+if(_28(st)){
+_29=true;
+break;
+}
+}
+if(!_29){
+s.push(this.addViewDef({cells:_24}));
+}else{
+for(i=0;(st=_24[i]);i++){
+if(_27(st)){
+s.push(this.addViewDef({cells:st}));
+}else{
+if(_28(st)){
+s.push(this.addViewDef(st));
+}
+}
+}
+}
+}else{
+if(_28(_24)){
+s.push(this.addViewDef(_24));
+}
+}
+this.cellCount=this.cells.length;
+this.grid.setupHeaderMenu();
+}});
+}
diff --git a/js/dojo/dojox/grid/_RadioSelector.js b/js/dojo/dojox/grid/_RadioSelector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_RadioSelector.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RadioSelector"]){
+dojo._hasResource["dojox.grid._RadioSelector"]=true;
+dojo.provide("dojox.grid._RadioSelector");
+dojo.require("dojox.grid._Selector");
+}
diff --git a/js/dojo/dojox/grid/_RowManager.js b/js/dojo/dojox/grid/_RowManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_RowManager.js
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RowManager"]){
+dojo._hasResource["dojox.grid._RowManager"]=true;
+dojo.provide("dojox.grid._RowManager");
+(function(){
+var _1=function(_2,_3){
+if(_2.style.cssText==undefined){
+_2.setAttribute("style",_3);
+}else{
+_2.style.cssText=_3;
+}
+};
+dojo.declare("dojox.grid._RowManager",null,{constructor:function(_4){
+this.grid=_4;
+},linesToEms:2,overRow:-2,prepareStylingRow:function(_5,_6){
+return {index:_5,node:_6,odd:Boolean(_5&1),selected:!!this.grid.selection.isSelected(_5),over:this.isOver(_5),customStyles:"",customClasses:"dojoxGridRow"};
+},styleRowNode:function(_7,_8){
+var _9=this.prepareStylingRow(_7,_8);
+this.grid.onStyleRow(_9);
+this.applyStyles(_9);
+},applyStyles:function(_a){
+var i=_a;
+i.node.className=i.customClasses;
+var h=i.node.style.height;
+_1(i.node,i.customStyles+";"+(i.node._style||""));
+i.node.style.height=h;
+},updateStyles:function(_b){
+this.grid.updateRowStyles(_b);
+},setOverRow:function(_c){
+var _d=this.overRow;
+this.overRow=_c;
+if((_d!=this.overRow)&&(dojo.isString(_d)||_d>=0)){
+this.updateStyles(_d);
+}
+this.updateStyles(this.overRow);
+},isOver:function(_e){
+return (this.overRow==_e&&!dojo.hasClass(this.grid.domNode,"dojoxGridColumnResizing"));
+}});
+})();
+}
diff --git a/js/dojo/dojox/grid/_RowSelector.js b/js/dojo/dojox/grid/_RowSelector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_RowSelector.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RowSelector"]){
+dojo._hasResource["dojox.grid._RowSelector"]=true;
+dojo.provide("dojox.grid._RowSelector");
+dojo.require("dojox.grid._View");
+dojo.declare("dojox.grid._RowSelector",dojox.grid._View,{defaultWidth:"2em",noscroll:true,padBorderWidth:2,buildRendering:function(){
+this.inherited("buildRendering",arguments);
+this.scrollboxNode.style.overflow="hidden";
+this.headerNode.style.visibility="hidden";
+},getWidth:function(){
+return this.viewWidth||this.defaultWidth;
+},buildRowContent:function(_1,_2){
+var w=this.contentWidth||0;
+_2.innerHTML="<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;height:1px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr><td class=\"dojoxGridRowbarInner\">&nbsp;</td></tr></table>";
+},renderHeader:function(){
+},updateRow:function(){
+},resize:function(){
+this.adaptHeight();
+},adaptWidth:function(){
+if(!("contentWidth" in this)&&this.contentNode){
+this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;
+}
+},doStyleRowNode:function(_3,_4){
+var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];
+if(this.grid.rows.isOver(_3)){
+n.push("dojoxGridRowbarOver");
+}
+if(this.grid.selection.isSelected(_3)){
+n.push("dojoxGridRowbarSelected");
+}
+_4.className=n.join(" ");
+},domouseover:function(e){
+this.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(!this.isIntraRowEvent(e)){
+this.grid.onMouseOutRow(e);
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/_Scroller.js b/js/dojo/dojox/grid/_Scroller.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Scroller.js
@@ -0,0 +1,403 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Scroller"]){
+dojo._hasResource["dojox.grid._Scroller"]=true;
+dojo.provide("dojox.grid._Scroller");
+(function(){
+var _1=function(_2){
+var i=0,n,p=_2.parentNode;
+while((n=p.childNodes[i++])){
+if(n==_2){
+return i-1;
+}
+}
+return -1;
+};
+var _3=function(_4){
+if(!_4){
+return;
+}
+var _5=function(_6){
+return _6.domNode&&dojo.isDescendant(_6.domNode,_4,true);
+};
+var ws=dijit.registry.filter(_5);
+for(var i=0,w;(w=ws[i]);i++){
+w.destroy();
+}
+delete ws;
+};
+var _7=function(_8){
+var _9=dojo.byId(_8);
+return (_9&&_9.tagName?_9.tagName.toLowerCase():"");
+};
+var _a=function(_b,_c){
+var _d=[];
+var i=0,n;
+while((n=_b.childNodes[i])){
+i++;
+if(_7(n)==_c){
+_d.push(n);
+}
+}
+return _d;
+};
+var _e=function(_f){
+return _a(_f,"div");
+};
+dojo.declare("dojox.grid._Scroller",null,{constructor:function(_10){
+this.setContentNodes(_10);
+this.pageHeights=[];
+this.pageNodes=[];
+this.stack=[];
+},rowCount:0,defaultRowHeight:32,keepRows:100,contentNode:null,scrollboxNode:null,defaultPageHeight:0,keepPages:10,pageCount:0,windowHeight:0,firstVisibleRow:0,lastVisibleRow:0,averageRowHeight:0,page:0,pageTop:0,init:function(_11,_12,_13){
+switch(arguments.length){
+case 3:
+this.rowsPerPage=_13;
+case 2:
+this.keepRows=_12;
+case 1:
+this.rowCount=_11;
+default:
+break;
+}
+this.defaultPageHeight=this.defaultRowHeight*this.rowsPerPage;
+this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);
+this.setKeepInfo(this.keepRows);
+this.invalidate();
+if(this.scrollboxNode){
+this.scrollboxNode.scrollTop=0;
+this.scroll(0);
+this.scrollboxNode.onscroll=dojo.hitch(this,"onscroll");
+}
+},_getPageCount:function(_14,_15){
+return _14?(Math.ceil(_14/_15)||1):0;
+},destroy:function(){
+this.invalidateNodes();
+delete this.contentNodes;
+delete this.contentNode;
+delete this.scrollboxNode;
+},setKeepInfo:function(_16){
+this.keepRows=_16;
+this.keepPages=!this.keepRows?this.keepPages:Math.max(Math.ceil(this.keepRows/this.rowsPerPage),2);
+},setContentNodes:function(_17){
+this.contentNodes=_17;
+this.colCount=(this.contentNodes?this.contentNodes.length:0);
+this.pageNodes=[];
+for(var i=0;i<this.colCount;i++){
+this.pageNodes[i]=[];
+}
+},getDefaultNodes:function(){
+return this.pageNodes[0]||[];
+},invalidate:function(){
+this._invalidating=true;
+this.invalidateNodes();
+this.pageHeights=[];
+this.height=(this.pageCount?(this.pageCount-1)*this.defaultPageHeight+this.calcLastPageHeight():0);
+this.resize();
+this._invalidating=false;
+},updateRowCount:function(_18){
+this.invalidateNodes();
+this.rowCount=_18;
+var _19=this.pageCount;
+if(_19===0){
+this.height=1;
+}
+this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);
+if(this.pageCount<_19){
+for(var i=_19-1;i>=this.pageCount;i--){
+this.height-=this.getPageHeight(i);
+delete this.pageHeights[i];
+}
+}else{
+if(this.pageCount>_19){
+this.height+=this.defaultPageHeight*(this.pageCount-_19-1)+this.calcLastPageHeight();
+}
+}
+this.resize();
+},pageExists:function(_1a){
+return Boolean(this.getDefaultPageNode(_1a));
+},measurePage:function(_1b){
+if(this.grid.rowHeight){
+var _1c=this.grid.rowHeight+1;
+return ((_1b+1)*this.rowsPerPage>this.rowCount?this.rowCount-_1b*this.rowsPerPage:this.rowsPerPage)*_1c;
+}
+var n=this.getDefaultPageNode(_1b);
+return (n&&n.innerHTML)?n.offsetHeight:undefined;
+},positionPage:function(_1d,_1e){
+for(var i=0;i<this.colCount;i++){
+this.pageNodes[i][_1d].style.top=_1e+"px";
+}
+},repositionPages:function(_1f){
+var _20=this.getDefaultNodes();
+var _21=0;
+for(var i=0;i<this.stack.length;i++){
+_21=Math.max(this.stack[i],_21);
+}
+var n=_20[_1f];
+var y=(n?this.getPageNodePosition(n)+this.getPageHeight(_1f):0);
+for(var p=_1f+1;p<=_21;p++){
+n=_20[p];
+if(n){
+if(this.getPageNodePosition(n)==y){
+return;
+}
+this.positionPage(p,y);
+}
+y+=this.getPageHeight(p);
+}
+},installPage:function(_22){
+for(var i=0;i<this.colCount;i++){
+this.contentNodes[i].appendChild(this.pageNodes[i][_22]);
+}
+},preparePage:function(_23,_24){
+var p=(_24?this.popPage():null);
+for(var i=0;i<this.colCount;i++){
+var _25=this.pageNodes[i];
+var _26=(p===null?this.createPageNode():this.invalidatePageNode(p,_25));
+_26.pageIndex=_23;
+_25[_23]=_26;
+}
+},renderPage:function(_27){
+var _28=[];
+var i,j;
+for(i=0;i<this.colCount;i++){
+_28[i]=this.pageNodes[i][_27];
+}
+for(i=0,j=_27*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){
+this.renderRow(j,_28);
+}
+},removePage:function(_29){
+for(var i=0,j=_29*this.rowsPerPage;i<this.rowsPerPage;i++,j++){
+this.removeRow(j);
+}
+},destroyPage:function(_2a){
+for(var i=0;i<this.colCount;i++){
+var n=this.invalidatePageNode(_2a,this.pageNodes[i]);
+if(n){
+dojo.destroy(n);
+}
+}
+},pacify:function(_2b){
+},pacifying:false,pacifyTicks:200,setPacifying:function(_2c){
+if(this.pacifying!=_2c){
+this.pacifying=_2c;
+this.pacify(this.pacifying);
+}
+},startPacify:function(){
+this.startPacifyTicks=new Date().getTime();
+},doPacify:function(){
+var _2d=(new Date().getTime()-this.startPacifyTicks)>this.pacifyTicks;
+this.setPacifying(true);
+this.startPacify();
+return _2d;
+},endPacify:function(){
+this.setPacifying(false);
+},resize:function(){
+if(this.scrollboxNode){
+this.windowHeight=this.scrollboxNode.clientHeight;
+}
+for(var i=0;i<this.colCount;i++){
+dojox.grid.util.setStyleHeightPx(this.contentNodes[i],Math.max(1,this.height));
+}
+var _2e=(!this._invalidating);
+if(!_2e){
+var ah=this.grid.attr("autoHeight");
+if(typeof ah=="number"&&ah<=Math.min(this.rowsPerPage,this.rowCount)){
+_2e=true;
+}
+}
+if(_2e){
+this.needPage(this.page,this.pageTop);
+}
+var _2f=(this.page<this.pageCount-1)?this.rowsPerPage:((this.rowCount%this.rowsPerPage)||this.rowsPerPage);
+var _30=this.getPageHeight(this.page);
+this.averageRowHeight=(_30>0&&_2f>0)?(_30/_2f):0;
+},calcLastPageHeight:function(){
+if(!this.pageCount){
+return 0;
+}
+var _31=this.pageCount-1;
+var _32=((this.rowCount%this.rowsPerPage)||(this.rowsPerPage))*this.defaultRowHeight;
+this.pageHeights[_31]=_32;
+return _32;
+},updateContentHeight:function(_33){
+this.height+=_33;
+this.resize();
+},updatePageHeight:function(_34,_35){
+if(this.pageExists(_34)){
+var oh=this.getPageHeight(_34);
+var h=(this.measurePage(_34));
+if(h===undefined){
+h=oh;
+}
+this.pageHeights[_34]=h;
+if(oh!=h){
+this.updateContentHeight(h-oh);
+var ah=this.grid.attr("autoHeight");
+if((typeof ah=="number"&&ah>this.rowCount)||(ah===true&&!_35)){
+this.grid.sizeChange();
+}else{
+this.repositionPages(_34);
+}
+}
+return h;
+}
+return 0;
+},rowHeightChanged:function(_36){
+this.updatePageHeight(Math.floor(_36/this.rowsPerPage),false);
+},invalidateNodes:function(){
+while(this.stack.length){
+this.destroyPage(this.popPage());
+}
+},createPageNode:function(){
+var p=document.createElement("div");
+dojo.attr(p,"role","presentation");
+p.style.position="absolute";
+p.style[dojo._isBodyLtr()?"left":"right"]="0";
+return p;
+},getPageHeight:function(_37){
+var ph=this.pageHeights[_37];
+return (ph!==undefined?ph:this.defaultPageHeight);
+},pushPage:function(_38){
+return this.stack.push(_38);
+},popPage:function(){
+return this.stack.shift();
+},findPage:function(_39){
+var i=0,h=0;
+for(var ph=0;i<this.pageCount;i++,h+=ph){
+ph=this.getPageHeight(i);
+if(h+ph>=_39){
+break;
+}
+}
+this.page=i;
+this.pageTop=h;
+},buildPage:function(_3a,_3b,_3c){
+this.preparePage(_3a,_3b);
+this.positionPage(_3a,_3c);
+this.installPage(_3a);
+this.renderPage(_3a);
+this.pushPage(_3a);
+},needPage:function(_3d,_3e){
+var h=this.getPageHeight(_3d),oh=h;
+if(!this.pageExists(_3d)){
+this.buildPage(_3d,this.keepPages&&(this.stack.length>=this.keepPages),_3e);
+h=this.updatePageHeight(_3d,true);
+}else{
+this.positionPage(_3d,_3e);
+}
+return h;
+},onscroll:function(){
+this.scroll(this.scrollboxNode.scrollTop);
+},scroll:function(_3f){
+this.grid.scrollTop=_3f;
+if(this.colCount){
+this.startPacify();
+this.findPage(_3f);
+var h=this.height;
+var b=this.getScrollBottom(_3f);
+for(var p=this.page,y=this.pageTop;(p<this.pageCount)&&((b<0)||(y<b));p++){
+y+=this.needPage(p,y);
+}
+this.firstVisibleRow=this.getFirstVisibleRow(this.page,this.pageTop,_3f);
+this.lastVisibleRow=this.getLastVisibleRow(p-1,y,b);
+if(h!=this.height){
+this.repositionPages(p-1);
+}
+this.endPacify();
+}
+},getScrollBottom:function(_40){
+return (this.windowHeight>=0?_40+this.windowHeight:-1);
+},processNodeEvent:function(e,_41){
+var t=e.target;
+while(t&&(t!=_41)&&t.parentNode&&(t.parentNode.parentNode!=_41)){
+t=t.parentNode;
+}
+if(!t||!t.parentNode||(t.parentNode.parentNode!=_41)){
+return false;
+}
+var _42=t.parentNode;
+e.topRowIndex=_42.pageIndex*this.rowsPerPage;
+e.rowIndex=e.topRowIndex+_1(t);
+e.rowTarget=t;
+return true;
+},processEvent:function(e){
+return this.processNodeEvent(e,this.contentNode);
+},renderRow:function(_43,_44){
+},removeRow:function(_45){
+},getDefaultPageNode:function(_46){
+return this.getDefaultNodes()[_46];
+},positionPageNode:function(_47,_48){
+},getPageNodePosition:function(_49){
+return _49.offsetTop;
+},invalidatePageNode:function(_4a,_4b){
+var p=_4b[_4a];
+if(p){
+delete _4b[_4a];
+this.removePage(_4a,p);
+_3(p);
+p.innerHTML="";
+}
+return p;
+},getPageRow:function(_4c){
+return _4c*this.rowsPerPage;
+},getLastPageRow:function(_4d){
+return Math.min(this.rowCount,this.getPageRow(_4d+1))-1;
+},getFirstVisibleRow:function(_4e,_4f,_50){
+if(!this.pageExists(_4e)){
+return 0;
+}
+var row=this.getPageRow(_4e);
+var _51=this.getDefaultNodes();
+var _52=_e(_51[_4e]);
+for(var i=0,l=_52.length;i<l&&_4f<_50;i++,row++){
+_4f+=_52[i].offsetHeight;
+}
+return (row?row-1:row);
+},getLastVisibleRow:function(_53,_54,_55){
+if(!this.pageExists(_53)){
+return 0;
+}
+var _56=this.getDefaultNodes();
+var row=this.getLastPageRow(_53);
+var _57=_e(_56[_53]);
+for(var i=_57.length-1;i>=0&&_54>_55;i--,row--){
+_54-=_57[i].offsetHeight;
+}
+return row+1;
+},findTopRow:function(_58){
+var _59=this.getDefaultNodes();
+var _5a=_e(_59[this.page]);
+for(var i=0,l=_5a.length,t=this.pageTop,h;i<l;i++){
+h=_5a[i].offsetHeight;
+t+=h;
+if(t>=_58){
+this.offset=h-(t-_58);
+return i+this.page*this.rowsPerPage;
+}
+}
+return -1;
+},findScrollTop:function(_5b){
+var _5c=Math.floor(_5b/this.rowsPerPage);
+var t=0;
+var i,l;
+for(i=0;i<_5c;i++){
+t+=this.getPageHeight(i);
+}
+this.pageTop=t;
+this.needPage(_5c,this.pageTop);
+var _5d=this.getDefaultNodes();
+var _5e=_e(_5d[_5c]);
+var r=_5b-this.rowsPerPage*_5c;
+for(i=0,l=_5e.length;i<l&&i<r;i++){
+t+=_5e[i].offsetHeight;
+}
+return t;
+},dummy:0});
+})();
+}
diff --git a/js/dojo/dojox/grid/_Selector.js b/js/dojo/dojox/grid/_Selector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_Selector.js
@@ -0,0 +1,160 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Selector"]){
+dojo._hasResource["dojox.grid._Selector"]=true;
+dojo.provide("dojox.grid._Selector");
+dojo.require("dojox.grid.Selection");
+dojo.require("dojox.grid._View");
+dojo.require("dojox.grid._Builder");
+(function(){
+dojox.grid._InputSelectorHeaderBuilder=dojo.extend(function(_1){
+dojox.grid._HeaderBuilder.call(this,_1);
+},dojox.grid._HeaderBuilder.prototype,{generateHtml:function(){
+var w=this.view.contentWidth||0;
+var _2=this.view.grid.selection.getSelectedCount();
+var _3=(_2&&_2==this.view.grid.rowCount)?" dijitCheckBoxChecked dijitChecked":"";
+return "<table style=\"width:"+w+"px;\" "+"border=\"0\" cellspacing=\"0\" cellpadding=\"0\" "+"role=\"presentation\"><tr><th style=\"text-align: center;\">"+"<div class=\"dojoxGridCheckSelector dijitReset dijitInline dijitCheckBox"+_3+"\"></div></th></tr></table>";
+},doclick:function(e){
+var _4=this.view.grid.selection.getSelectedCount();
+this.view._selectionChanging=true;
+if(_4==this.view.grid.rowCount){
+this.view.grid.selection.deselectAll();
+}else{
+this.view.grid.selection.selectRange(0,this.view.grid.rowCount-1);
+}
+this.view._selectionChanging=false;
+this.view.onSelectionChanged();
+return true;
+}});
+dojox.grid._SelectorContentBuilder=dojo.extend(function(_5){
+dojox.grid._ContentBuilder.call(this,_5);
+},dojox.grid._ContentBuilder.prototype,{generateHtml:function(_6,_7){
+var w=this.view.contentWidth||0;
+return "<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;\" border=\"0\" "+"cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr>"+"<td style=\"text-align: center;\" class=\"dojoxGridRowbarInner\">"+this.getCellContent(_7)+"</td></tr></table>";
+},getCellContent:function(_8){
+return "&nbsp;";
+},findTarget:function(){
+var t=dojox.grid._ContentBuilder.prototype.findTarget.apply(this,arguments);
+return t;
+},domouseover:function(e){
+this.view.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(!this.isIntraRowEvent(e)){
+this.view.grid.onMouseOutRow(e);
+}
+},doclick:function(e){
+var _9=e.rowIndex;
+var _a=this.view.grid.selection.isSelected(_9);
+var _b=this.view.grid.selection.mode;
+if(!_a){
+if(_b=="single"){
+this.view.grid.selection.select(_9);
+}else{
+if(_b!="none"){
+this.view.grid.selection.addToSelection(_9);
+}
+}
+}else{
+this.view.grid.selection.deselect(_9);
+}
+return true;
+}});
+dojox.grid._InputSelectorContentBuilder=dojo.extend(function(_c){
+dojox.grid._SelectorContentBuilder.call(this,_c);
+},dojox.grid._SelectorContentBuilder.prototype,{getCellContent:function(_d){
+var v=this.view;
+var _e=v.inputType=="checkbox"?"CheckBox":"Radio";
+var _f=!!v.grid.selection.isSelected(_d)?" dijit"+_e+"Checked dijitChecked":"";
+return "<div class=\"dojoxGridCheckSelector dijitReset dijitInline dijit"+_e+_f+"\"></div>";
+}});
+dojo.declare("dojox.grid._Selector",dojox.grid._View,{inputType:"",selectionMode:"",defaultWidth:"2em",noscroll:true,padBorderWidth:2,_contentBuilderClass:dojox.grid._SelectorContentBuilder,postCreate:function(){
+this.inherited(arguments);
+if(this.selectionMode){
+this.grid.selection.mode=this.selectionMode;
+}
+this.connect(this.grid.selection,"onSelected","onSelected");
+this.connect(this.grid.selection,"onDeselected","onDeselected");
+},buildRendering:function(){
+this.inherited(arguments);
+this.scrollboxNode.style.overflow="hidden";
+},getWidth:function(){
+return this.viewWidth||this.defaultWidth;
+},resize:function(){
+this.adaptHeight();
+},setStructure:function(s){
+this.inherited(arguments);
+if(s.defaultWidth){
+this.defaultWidth=s.defaultWidth;
+}
+},adaptWidth:function(){
+if(!("contentWidth" in this)&&this.contentNode){
+this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;
+}
+},doStyleRowNode:function(_10,_11){
+var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];
+if(this.grid.rows.isOver(_10)){
+n.push("dojoxGridRowbarOver");
+}
+if(this.grid.selection.isSelected(_10)){
+n.push("dojoxGridRowbarSelected");
+}
+_11.className=n.join(" ");
+},onSelected:function(_12){
+this.grid.updateRow(_12);
+},onDeselected:function(_13){
+this.grid.updateRow(_13);
+}});
+if(!dojox.grid._View.prototype._headerBuilderClass&&!dojox.grid._View.prototype._contentBuilderClass){
+dojox.grid._Selector.prototype.postCreate=function(){
+this.connect(this.scrollboxNode,"onscroll","doscroll");
+dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);
+dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);
+if(this._contentBuilderClass){
+this.content=new this._contentBuilderClass(this);
+}else{
+this.content=new dojox.grid._ContentBuilder(this);
+}
+if(this._headerBuilderClass){
+this.header=new this._headerBuilderClass(this);
+}else{
+this.header=new dojox.grid._HeaderBuilder(this);
+}
+if(!dojo._isBodyLtr()){
+this.headerNodeContainer.style.width="";
+}
+this.connect(this.grid.selection,"onSelected","onSelected");
+this.connect(this.grid.selection,"onDeselected","onDeselected");
+};
+}
+dojo.declare("dojox.grid._RadioSelector",dojox.grid._Selector,{inputType:"radio",selectionMode:"single",_contentBuilderClass:dojox.grid._InputSelectorContentBuilder,buildRendering:function(){
+this.inherited(arguments);
+this.headerNode.style.visibility="hidden";
+},renderHeader:function(){
+}});
+dojo.declare("dojox.grid._CheckBoxSelector",dojox.grid._Selector,{inputType:"checkbox",_headerBuilderClass:dojox.grid._InputSelectorHeaderBuilder,_contentBuilderClass:dojox.grid._InputSelectorContentBuilder,postCreate:function(){
+this.inherited(arguments);
+this.connect(this.grid,"onSelectionChanged","onSelectionChanged");
+this.connect(this.grid,"updateRowCount","_updateVisibility");
+},renderHeader:function(){
+this.inherited(arguments);
+this._updateVisibility(this.grid.rowCount);
+},_updateVisibility:function(_14){
+this.headerNode.style.visibility=_14?"":"hidden";
+},onSelectionChanged:function(){
+if(this._selectionChanging){
+return;
+}
+var _15=dojo.query(".dojoxGridCheckSelector",this.headerNode)[0];
+var g=this.grid;
+var s=(g.rowCount&&g.rowCount==g.selection.getSelectedCount());
+g.allItemsSelected=s||false;
+dojo.toggleClass(_15,"dijitChecked",g.allItemsSelected);
+dojo.toggleClass(_15,"dijitCheckBoxChecked",g.allItemsSelected);
+}});
+})();
+}
diff --git a/js/dojo/dojox/grid/_TreeView.js b/js/dojo/dojox/grid/_TreeView.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_TreeView.js
@@ -0,0 +1,408 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._TreeView"]){
+dojo._hasResource["dojox.grid._TreeView"]=true;
+dojo.provide("dojox.grid._TreeView");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.grid._View");
+dojo.declare("dojox.grid._Expando",[dijit._Widget,dijit._Templated],{open:false,toggleClass:"",itemId:"",cellIdx:-1,view:null,rowNode:null,rowIdx:-1,expandoCell:null,level:0,templateString:"<div class=\"dojoxGridExpando\"\n\t><div class=\"dojoxGridExpandoNode\" dojoAttachEvent=\"onclick:onToggle\"\n\t\t><div class=\"dojoxGridExpandoNodeInner\" dojoAttachPoint=\"expandoInner\"></div\n\t></div\n></div>\n",_toggleRows:function(_1,_2){
+if(!_1||!this.rowNode){
+return;
+}
+if(dojo.query("table.dojoxGridRowTableNeedsRowUpdate").length){
+if(this._initialized){
+this.view.grid.updateRow(this.rowIdx);
+}
+return;
+}
+var _3=this;
+var g=this.view.grid;
+if(g.treeModel){
+var p=this._tableRow?dojo.attr(this._tableRow,"dojoxTreeGridPath"):"";
+if(p){
+dojo.query("tr[dojoxTreeGridPath^=\""+p+"/\"]",this.rowNode).forEach(function(n){
+var en=dojo.query(".dojoxGridExpando",n)[0];
+if(en&&en.parentNode&&en.parentNode.parentNode&&!dojo.hasClass(en.parentNode.parentNode,"dojoxGridNoChildren")){
+var ew=dijit.byNode(en);
+if(ew){
+ew._toggleRows(_1,ew.open&&_2);
+}
+}
+n.style.display=_2?"":"none";
+});
+}
+}else{
+dojo.query("tr."+_1,this.rowNode).forEach(function(n){
+if(dojo.hasClass(n,"dojoxGridExpandoRow")){
+var en=dojo.query(".dojoxGridExpando",n)[0];
+if(en){
+var ew=dijit.byNode(en);
+var _4=ew?ew.toggleClass:en.getAttribute("toggleClass");
+var _5=ew?ew.open:_3.expandoCell.getOpenState(en.getAttribute("itemId"));
+_3._toggleRows(_4,_5&&_2);
+}
+}
+n.style.display=_2?"":"none";
+});
+}
+},setOpen:function(_6){
+if(_6&&dojo.hasClass(this.domNode,"dojoxGridExpandoLoading")){
+_6=false;
+}
+var _7=this.view;
+var _8=_7.grid;
+var _9=_8.store;
+var _a=_8.treeModel;
+var d=this;
+var _b=this.rowIdx;
+var me=_8._by_idx[_b];
+if(!me){
+return;
+}
+if(_a&&!this._loadedChildren){
+if(_6){
+var _c=_8.getItem(dojo.attr(this._tableRow,"dojoxTreeGridPath"));
+if(_c){
+this.expandoInner.innerHTML="o";
+dojo.addClass(this.domNode,"dojoxGridExpandoLoading");
+_a.getChildren(_c,function(_d){
+d._loadedChildren=true;
+d._setOpen(_6);
+});
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}else{
+if(!_a&&_9){
+if(_6){
+var _e=_8._by_idx[this.rowIdx];
+if(_e&&!_9.isItemLoaded(_e.item)){
+this.expandoInner.innerHTML="o";
+dojo.addClass(this.domNode,"dojoxGridExpandoLoading");
+_9.loadItem({item:_e.item,onItem:dojo.hitch(this,function(i){
+var _f=_9.getIdentity(i);
+_8._by_idty[_f]=_8._by_idx[this.rowIdx]={idty:_f,item:i};
+this._setOpen(_6);
+})});
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}
+},_setOpen:function(_10){
+if(_10&&this._tableRow&&dojo.hasClass(this._tableRow,"dojoxGridNoChildren")){
+this._setOpen(false);
+return;
+}
+this.expandoInner.innerHTML=_10?"-":"+";
+dojo.removeClass(this.domNode,"dojoxGridExpandoLoading");
+dojo.toggleClass(this.domNode,"dojoxGridExpandoOpened",_10);
+if(this._tableRow){
+dojo.toggleClass(this._tableRow,"dojoxGridRowCollapsed",!_10);
+var _11=dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses");
+var _12="";
+if(_10){
+_12=dojo.trim((" "+_11+" ").replace(" dojoxGridRowCollapsed "," "));
+}else{
+if((" "+_11+" ").indexOf(" dojoxGridRowCollapsed ")<0){
+_12=_11+(_11?" ":"")+"dojoxGridRowCollapsed";
+}else{
+_12=_11;
+}
+}
+dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses",_12);
+}
+var _13=(this.open!==_10);
+this.open=_10;
+if(this.expandoCell&&this.itemId){
+this.expandoCell.openStates[this.itemId]=_10;
+}
+var v=this.view;
+var g=v.grid;
+if(this.toggleClass&&_13){
+if(!this._tableRow||!this._tableRow.style.display){
+this._toggleRows(this.toggleClass,_10);
+}
+}
+if(v&&this._initialized&&this.rowIdx>=0){
+g.rowHeightChanged(this.rowIdx);
+g.postresize();
+v.hasVScrollbar(true);
+}
+this._initialized=true;
+},onToggle:function(e){
+this.setOpen(!this.open);
+dojo.stopEvent(e);
+},setRowNode:function(_14,_15,_16){
+if(this.cellIdx<0||!this.itemId){
+return false;
+}
+this._initialized=false;
+this.view=_16;
+this.rowNode=_15;
+this.rowIdx=_14;
+this.expandoCell=_16.structure.cells[0][this.cellIdx];
+var d=this.domNode;
+if(d&&d.parentNode&&d.parentNode.parentNode){
+this._tableRow=d.parentNode.parentNode;
+}
+this.open=this.expandoCell.getOpenState(this.itemId);
+if(_16.grid.treeModel){
+dojo.style(this.domNode,"marginLeft",(this.level*18)+"px");
+if(this.domNode.parentNode){
+dojo.style(this.domNode.parentNode,"backgroundPosition",((this.level*18)+(3))+"px");
+}
+}
+this.setOpen(this.open);
+return true;
+}});
+dojo.declare("dojox.grid._TreeContentBuilder",dojox.grid._ContentBuilder,{generateHtml:function(_17,_18){
+var _19=this.getTableArray(),v=this.view,row=v.structure.cells[0],_1a=this.grid.getItem(_18),_1b=this.grid,_1c=this.grid.store;
+dojox.grid.util.fire(this.view,"onBeforeRow",[_18,[row]]);
+var _1d=function(_1e,_1f,_20,_21,_22,_23){
+if(!_23){
+if(_19[0].indexOf("dojoxGridRowTableNeedsRowUpdate")==-1){
+_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");
+}
+return;
+}
+var _24=_19.length;
+_21=_21||[];
+var _25=_21.join("|");
+var _26=_21[_21.length-1];
+var _27=_26+(_20?" dojoxGridSummaryRow":"");
+var _28="";
+if(_1b.treeModel&&_1f&&!_1b.treeModel.mayHaveChildren(_1f)){
+_27+=" dojoxGridNoChildren";
+}
+_19.push("<tr style=\""+_28+"\" class=\""+_27+"\" dojoxTreeGridPath=\""+_22.join("/")+"\" dojoxTreeGridBaseClasses=\""+_27+"\">");
+var _29=_1e+1;
+var _2a=null;
+for(var i=0,_2b;(_2b=row[i]);i++){
+var m=_2b.markup,cc=_2b.customClasses=[],cs=_2b.customStyles=[];
+m[5]=_2b.formatAtLevel(_22,_1f,_1e,_20,_26,cc);
+m[1]=cc.join(" ");
+m[3]=cs.join(";");
+_19.push.apply(_19,m);
+if(!_2a&&_2b.level===_29&&_2b.parentCell){
+_2a=_2b.parentCell;
+}
+}
+_19.push("</tr>");
+if(_1f&&_1c&&_1c.isItem(_1f)){
+var _2c=_1c.getIdentity(_1f);
+if(typeof _1b._by_idty_paths[_2c]=="undefined"){
+_1b._by_idty_paths[_2c]=_22.join("/");
+}
+}
+var _2d;
+var _2e;
+var _2f;
+var _30;
+var _31=_22.concat([]);
+if(_1b.treeModel&&_1f){
+if(_1b.treeModel.mayHaveChildren(_1f)){
+_2d=v.structure.cells[0][_1b.expandoCell||0];
+_2e=_2d.getOpenState(_1f)&&_23;
+_2f=new dojox.grid.TreePath(_22.join("/"),_1b);
+_30=_2f.children(true)||[];
+dojo.forEach(_30,function(_32,idx){
+var _33=_25.split("|");
+_33.push(_33[_33.length-1]+"-"+idx);
+_31.push(idx);
+_1d(_29,_32,false,_33,_31,_2e);
+_31.pop();
+});
+}
+}else{
+if(_1f&&_2a&&!_20){
+_2d=v.structure.cells[0][_2a.level];
+_2e=_2d.getOpenState(_1f)&&_23;
+if(_1c.hasAttribute(_1f,_2a.field)){
+var _34=_25.split("|");
+_34.pop();
+_2f=new dojox.grid.TreePath(_22.join("/"),_1b);
+_30=_2f.children(true)||[];
+if(_30.length){
+_19[_24]="<tr class=\""+_34.join(" ")+" dojoxGridExpandoRow\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+dojo.forEach(_30,function(_35,idx){
+var _36=_25.split("|");
+_36.push(_36[_36.length-1]+"-"+idx);
+_31.push(idx);
+_1d(_29,_35,false,_36,_31,_2e);
+_31.pop();
+});
+_31.push(_30.length);
+_1d(_1e,_1f,true,_21,_31,_2e);
+}else{
+_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}else{
+if(!_1c.isItemLoaded(_1f)){
+_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");
+}else{
+_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}
+}else{
+if(_1f&&!_20&&_21.length>1){
+_19[_24]="<tr class=\""+_21[_21.length-2]+"\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}
+}
+};
+_1d(0,_1a,false,["dojoxGridRowToggle-"+_18],[_18],true);
+_19.push("</table>");
+return _19.join("");
+},findTarget:function(_37,_38){
+var n=_37;
+while(n&&(n!=this.domNode)){
+if(n.tagName&&n.tagName.toLowerCase()=="tr"){
+break;
+}
+n=n.parentNode;
+}
+return (n!=this.domNode)?n:null;
+},getCellNode:function(_39,_3a){
+var _3b=dojo.query("td[idx='"+_3a+"']",_39)[0];
+if(_3b&&_3b.parentNode&&!dojo.hasClass(_3b.parentNode,"dojoxGridSummaryRow")){
+return _3b;
+}
+},decorateEvent:function(e){
+e.rowNode=this.findRowTarget(e.target);
+if(!e.rowNode){
+return false;
+}
+e.rowIndex=dojo.attr(e.rowNode,"dojoxTreeGridPath");
+this.baseDecorateEvent(e);
+e.cell=this.grid.getCell(e.cellIndex);
+return true;
+}});
+dojo.declare("dojox.grid._TreeView",[dojox.grid._View],{_contentBuilderClass:dojox.grid._TreeContentBuilder,_onDndDrop:function(_3c,_3d,_3e){
+if(this.grid&&this.grid.aggregator){
+this.grid.aggregator.clearSubtotalCache();
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.grid,"_cleanupExpandoCache","_cleanupExpandoCache");
+},_cleanupExpandoCache:function(_3f,_40,_41){
+if(_3f==-1){
+return;
+}
+dojo.forEach(this.grid.layout.cells,function(_42){
+if(typeof _42["openStates"]!="undefined"){
+if(_40 in _42.openStates){
+delete _42.openStates[_40];
+}
+}
+});
+if(typeof _3f=="string"&&_3f.indexOf("/")>-1){
+var _43=new dojox.grid.TreePath(_3f,this.grid);
+var _44=_43.parent();
+while(_44){
+_43=_44;
+_44=_43.parent();
+}
+var _45=_43.item();
+if(!_45){
+return;
+}
+var _46=this.grid.store.getIdentity(_45);
+if(typeof this._expandos[_46]!="undefined"){
+for(var i in this._expandos[_46]){
+var exp=this._expandos[_46][i];
+if(exp){
+exp.destroy();
+}
+delete this._expandos[_46][i];
+}
+delete this._expandos[_46];
+}
+}else{
+for(var i in this._expandos){
+if(typeof this._expandos[i]!="undefined"){
+for(var j in this._expandos[i]){
+var exp=this._expandos[i][j];
+if(exp){
+exp.destroy();
+}
+}
+}
+}
+this._expandos={};
+}
+},postMixInProperties:function(){
+this.inherited(arguments);
+this._expandos={};
+},onBeforeRow:function(_47,_48){
+var g=this.grid;
+if(g._by_idx&&g._by_idx[_47]&&g._by_idx[_47].idty){
+var _49=g._by_idx[_47].idty;
+this._expandos[_49]=this._expandos[_49]||{};
+}
+this.inherited(arguments);
+},onAfterRow:function(_4a,_4b,_4c){
+dojo.forEach(dojo.query("span.dojoxGridExpando",_4c),function(n){
+if(n&&n.parentNode){
+var tc=n.getAttribute("toggleClass");
+var _4d;
+var _4e;
+var g=this.grid;
+if(g._by_idx&&g._by_idx[_4a]&&g._by_idx[_4a].idty){
+_4d=g._by_idx[_4a].idty;
+_4e=this._expandos[_4d][tc];
+}
+if(_4e){
+dojo.place(_4e.domNode,n,"replace");
+_4e.itemId=n.getAttribute("itemId");
+_4e.cellIdx=parseInt(n.getAttribute("cellIdx"),10);
+if(isNaN(_4e.cellIdx)){
+_4e.cellIdx=-1;
+}
+}else{
+_4e=dojo.parser.parse(n.parentNode)[0];
+if(_4d){
+this._expandos[_4d][tc]=_4e;
+}
+}
+if(!_4e.setRowNode(_4a,_4c,this)){
+_4e.domNode.parentNode.removeChild(_4e.domNode);
+}
+}
+},this);
+var alt=false;
+var _4f=this;
+dojo.query("tr[dojoxTreeGridPath]",_4c).forEach(function(n){
+dojo.toggleClass(n,"dojoxGridSubRowAlt",alt);
+dojo.attr(n,"dojoxTreeGridBaseClasses",n.className);
+alt=!alt;
+_4f.grid.rows.styleRowNode(dojo.attr(n,"dojoxTreeGridPath"),n);
+});
+this.inherited(arguments);
+},updateRowStyles:function(_50){
+var _51=dojo.query("tr[dojoxTreeGridPath='"+_50+"']",this.domNode);
+if(_51.length){
+this.styleRowNode(_50,_51[0]);
+}
+},getCellNode:function(_52,_53){
+var row=dojo.query("tr[dojoxTreeGridPath='"+_52+"']",this.domNode)[0];
+if(row){
+return this.content.getCellNode(row,_53);
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/_View.js b/js/dojo/dojox/grid/_View.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_View.js
@@ -0,0 +1,616 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._View"]){
+dojo._hasResource["dojox.grid._View"]=true;
+dojo.provide("dojox.grid._View");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.grid._Builder");
+dojo.require("dojox.html.metrics");
+dojo.require("dojox.grid.util");
+dojo.require("dojo.dnd.Source");
+dojo.require("dojo.dnd.Manager");
+(function(){
+var _1=function(_2,_3){
+return _2.style.cssText==undefined?_2.getAttribute("style"):_2.style.cssText;
+};
+dojo.declare("dojox.grid._View",[dijit._Widget,dijit._Templated],{defaultWidth:"18em",viewWidth:"",templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",themeable:false,classTag:"dojoxGrid",marginBottom:0,rowPad:2,_togglingColumn:-1,_headerBuilderClass:dojox.grid._HeaderBuilder,_contentBuilderClass:dojox.grid._ContentBuilder,postMixInProperties:function(){
+this.rowNodes={};
+},postCreate:function(){
+this.connect(this.scrollboxNode,"onscroll","doscroll");
+dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);
+dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);
+this.content=new this._contentBuilderClass(this);
+this.header=new this._headerBuilderClass(this);
+if(!dojo._isBodyLtr()){
+this.headerNodeContainer.style.width="";
+}
+},destroy:function(){
+dojo.destroy(this.headerNode);
+delete this.headerNode;
+for(var i in this.rowNodes){
+dojo.destroy(this.rowNodes[i]);
+}
+this.rowNodes={};
+if(this.source){
+this.source.destroy();
+}
+this.inherited(arguments);
+},focus:function(){
+if(dojo.isIE||dojo.isWebKit||dojo.isOpera){
+this.hiddenFocusNode.focus();
+}else{
+this.scrollboxNode.focus();
+}
+},setStructure:function(_4){
+var vs=(this.structure=_4);
+if(vs.width&&!isNaN(vs.width)){
+this.viewWidth=vs.width+"em";
+}else{
+this.viewWidth=vs.width||(vs.noscroll?"auto":this.viewWidth);
+}
+this._onBeforeRow=vs.onBeforeRow||function(){
+};
+this._onAfterRow=vs.onAfterRow||function(){
+};
+this.noscroll=vs.noscroll;
+if(this.noscroll){
+this.scrollboxNode.style.overflow="hidden";
+}
+this.simpleStructure=Boolean(vs.cells.length==1);
+this.testFlexCells();
+this.updateStructure();
+},_cleanupRowWidgets:function(_5){
+if(_5){
+dojo.forEach(dojo.query("[widgetId]",_5).map(dijit.byNode),function(w){
+if(w._destroyOnRemove){
+w.destroy();
+delete w;
+}else{
+if(w.domNode&&w.domNode.parentNode){
+w.domNode.parentNode.removeChild(w.domNode);
+}
+}
+});
+}
+},onBeforeRow:function(_6,_7){
+this._onBeforeRow(_6,_7);
+if(_6>=0){
+this._cleanupRowWidgets(this.getRowNode(_6));
+}
+},onAfterRow:function(_8,_9,_a){
+this._onAfterRow(_8,_9,_a);
+var g=this.grid;
+dojo.forEach(dojo.query(".dojoxGridStubNode",_a),function(n){
+if(n&&n.parentNode){
+var lw=n.getAttribute("linkWidget");
+var _b=window.parseInt(dojo.attr(n,"cellIdx"),10);
+var _c=g.getCell(_b);
+var w=dijit.byId(lw);
+if(w){
+n.parentNode.replaceChild(w.domNode,n);
+if(!w._started){
+w.startup();
+}
+}else{
+n.innerHTML="";
+}
+}
+},this);
+},testFlexCells:function(){
+this.flexCells=false;
+for(var j=0,_d;(_d=this.structure.cells[j]);j++){
+for(var i=0,_e;(_e=_d[i]);i++){
+_e.view=this;
+this.flexCells=this.flexCells||_e.isFlex();
+}
+}
+return this.flexCells;
+},updateStructure:function(){
+this.header.update();
+this.content.update();
+},getScrollbarWidth:function(){
+var _f=this.hasVScrollbar();
+var _10=dojo.style(this.scrollboxNode,"overflow");
+if(this.noscroll||!_10||_10=="hidden"){
+_f=false;
+}else{
+if(_10=="scroll"){
+_f=true;
+}
+}
+return (_f?dojox.html.metrics.getScrollbar().w:0);
+},getColumnsWidth:function(){
+var h=this.headerContentNode;
+return h&&h.firstChild?h.firstChild.offsetWidth:0;
+},setColumnsWidth:function(_11){
+this.headerContentNode.firstChild.style.width=_11+"px";
+if(this.viewWidth){
+this.viewWidth=_11+"px";
+}
+},getWidth:function(){
+return this.viewWidth||(this.getColumnsWidth()+this.getScrollbarWidth())+"px";
+},getContentWidth:function(){
+return Math.max(0,dojo._getContentBox(this.domNode).w-this.getScrollbarWidth())+"px";
+},render:function(){
+this.scrollboxNode.style.height="";
+this.renderHeader();
+if(this._togglingColumn>=0){
+this.setColumnsWidth(this.getColumnsWidth()-this._togglingColumn);
+this._togglingColumn=-1;
+}
+var _12=this.grid.layout.cells;
+var _13=dojo.hitch(this,function(_14,_15){
+var inc=_15?-1:1;
+var idx=this.header.getCellNodeIndex(_14)+inc;
+var _16=_12[idx];
+while(_16&&_16.getHeaderNode()&&_16.getHeaderNode().style.display=="none"){
+idx+=inc;
+_16=_12[idx];
+}
+if(_16){
+return _16.getHeaderNode();
+}
+return null;
+});
+if(this.grid.columnReordering&&this.simpleStructure){
+if(this.source){
+this.source.destroy();
+}
+var _17="dojoxGrid_bottomMarker";
+var _18="dojoxGrid_topMarker";
+if(this.bottomMarker){
+dojo.destroy(this.bottomMarker);
+}
+this.bottomMarker=dojo.byId(_17);
+if(this.topMarker){
+dojo.destroy(this.topMarker);
+}
+this.topMarker=dojo.byId(_18);
+if(!this.bottomMarker){
+this.bottomMarker=dojo.create("div",{"id":_17,"class":"dojoxGridColPlaceBottom"},dojo.body());
+this._hide(this.bottomMarker);
+this.topMarker=dojo.create("div",{"id":_18,"class":"dojoxGridColPlaceTop"},dojo.body());
+this._hide(this.topMarker);
+}
+this.arrowDim=dojo.contentBox(this.bottomMarker);
+var _19=dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;
+this.source=new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0],{horizontal:true,accept:["gridColumn_"+this.grid.id],viewIndex:this.index,generateText:false,onMouseDown:dojo.hitch(this,function(e){
+this.header.decorateEvent(e);
+if((this.header.overRightResizeArea(e)||this.header.overLeftResizeArea(e))&&this.header.canResize(e)&&!this.header.moveable){
+this.header.beginColumnResize(e);
+}else{
+if(this.grid.headerMenu){
+this.grid.headerMenu.onCancel(true);
+}
+if(e.button===(dojo.isIE?1:0)){
+dojo.dnd.Source.prototype.onMouseDown.call(this.source,e);
+}
+}
+}),onMouseOver:dojo.hitch(this,function(e){
+var src=this.source;
+if(src._getChildByEvent(e)){
+dojo.dnd.Source.prototype.onMouseOver.apply(src,arguments);
+}
+}),_markTargetAnchor:dojo.hitch(this,function(_1a){
+var src=this.source;
+if(src.current==src.targetAnchor&&src.before==_1a){
+return;
+}
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._removeItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+dojo.dnd.Source.prototype._markTargetAnchor.call(src,_1a);
+var _1b=_1a?src.targetAnchor:_13(src.targetAnchor,src.before);
+var _1c=0;
+if(!_1b){
+_1b=src.targetAnchor;
+_1c=dojo.contentBox(_1b).w+this.arrowDim.w/2+2;
+}
+var pos=(dojo.position||dojo._abs)(_1b,true);
+var _1d=Math.floor(pos.x-this.arrowDim.w/2+_1c);
+dojo.style(this.bottomMarker,"visibility","visible");
+dojo.style(this.topMarker,"visibility","visible");
+dojo.style(this.bottomMarker,{"left":_1d+"px","top":(_19+pos.y)+"px"});
+dojo.style(this.topMarker,{"left":_1d+"px","top":(pos.y-this.arrowDim.h)+"px"});
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._addItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+}),_unmarkTargetAnchor:dojo.hitch(this,function(){
+var src=this.source;
+if(!src.targetAnchor){
+return;
+}
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._removeItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);
+}),destroy:dojo.hitch(this,function(){
+dojo.disconnect(this._source_conn);
+dojo.unsubscribe(this._source_sub);
+dojo.dnd.Source.prototype.destroy.call(this.source);
+if(this.bottomMarker){
+dojo.destroy(this.bottomMarker);
+delete this.bottomMarker;
+}
+if(this.topMarker){
+dojo.destroy(this.topMarker);
+delete this.topMarker;
+}
+}),onDndCancel:dojo.hitch(this,function(){
+dojo.dnd.Source.prototype.onDndCancel.call(this.source);
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+})});
+this._source_conn=dojo.connect(this.source,"onDndDrop",this,"_onDndDrop");
+this._source_sub=dojo.subscribe("/dnd/drop/before",this,"_onDndDropBefore");
+this.source.startup();
+}
+},_hide:function(_1e){
+dojo.style(_1e,{left:"-10000px",top:"-10000px","visibility":"hidden"});
+},_onDndDropBefore:function(_1f,_20,_21){
+if(dojo.dnd.manager().target!==this.source){
+return;
+}
+this.source._targetNode=this.source.targetAnchor;
+this.source._beforeTarget=this.source.before;
+var _22=this.grid.views.views;
+var _23=_22[_1f.viewIndex];
+var _24=_22[this.index];
+if(_24!=_23){
+_23.convertColPctToFixed();
+_24.convertColPctToFixed();
+}
+},_onDndDrop:function(_25,_26,_27){
+if(dojo.dnd.manager().target!==this.source){
+if(dojo.dnd.manager().source===this.source){
+this._removingColumn=true;
+}
+return;
+}
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+var _28=function(n){
+return n?dojo.attr(n,"idx"):null;
+};
+var w=dojo.marginBox(_26[0]).w;
+if(_25.viewIndex!==this.index){
+var _29=this.grid.views.views;
+var _2a=_29[_25.viewIndex];
+var _2b=_29[this.index];
+if(_2a.viewWidth&&_2a.viewWidth!="auto"){
+_2a.setColumnsWidth(_2a.getColumnsWidth()-w);
+}
+if(_2b.viewWidth&&_2b.viewWidth!="auto"){
+_2b.setColumnsWidth(_2b.getColumnsWidth());
+}
+}
+var stn=this.source._targetNode;
+var stb=this.source._beforeTarget;
+var _2c=this.grid.layout;
+var idx=this.index;
+delete this.source._targetNode;
+delete this.source._beforeTarget;
+_2c.moveColumn(_25.viewIndex,idx,_28(_26[0]),_28(stn),stb);
+},renderHeader:function(){
+this.headerContentNode.innerHTML=this.header.generateHtml(this._getHeaderContent);
+if(this.flexCells){
+this.contentWidth=this.getContentWidth();
+this.headerContentNode.firstChild.style.width=this.contentWidth;
+}
+dojox.grid.util.fire(this,"onAfterRow",[-1,this.structure.cells,this.headerContentNode]);
+},_getHeaderContent:function(_2d){
+var n=_2d.name||_2d.grid.getCellName(_2d);
+var ret=["<div class=\"dojoxGridSortNode"];
+if(_2d.index!=_2d.grid.getSortIndex()){
+ret.push("\">");
+}else{
+ret=ret.concat([" ",_2d.grid.sortInfo>0?"dojoxGridSortUp":"dojoxGridSortDown","\"><div class=\"dojoxGridArrowButtonChar\">",_2d.grid.sortInfo>0?"&#9650;":"&#9660;","</div><div class=\"dojoxGridArrowButtonNode\" role=\"presentation\"></div>"]);
+}
+ret=ret.concat([n,"</div>"]);
+return ret.join("");
+},resize:function(){
+this.adaptHeight();
+this.adaptWidth();
+},hasHScrollbar:function(_2e){
+var _2f=this._hasHScroll||false;
+if(this._hasHScroll==undefined||_2e){
+if(this.noscroll){
+this._hasHScroll=false;
+}else{
+var _30=dojo.style(this.scrollboxNode,"overflow");
+if(_30=="hidden"){
+this._hasHScroll=false;
+}else{
+if(_30=="scroll"){
+this._hasHScroll=true;
+}else{
+this._hasHScroll=(this.scrollboxNode.offsetWidth-this.getScrollbarWidth()<this.contentNode.offsetWidth);
+}
+}
+}
+}
+if(_2f!==this._hasHScroll){
+this.grid.update();
+}
+return this._hasHScroll;
+},hasVScrollbar:function(_31){
+var _32=this._hasVScroll||false;
+if(this._hasVScroll==undefined||_31){
+if(this.noscroll){
+this._hasVScroll=false;
+}else{
+var _33=dojo.style(this.scrollboxNode,"overflow");
+if(_33=="hidden"){
+this._hasVScroll=false;
+}else{
+if(_33=="scroll"){
+this._hasVScroll=true;
+}else{
+this._hasVScroll=(this.scrollboxNode.scrollHeight>this.scrollboxNode.clientHeight);
+}
+}
+}
+}
+if(_32!==this._hasVScroll){
+this.grid.update();
+}
+return this._hasVScroll;
+},convertColPctToFixed:function(){
+var _34=false;
+this.grid.initialWidth="";
+var _35=dojo.query("th",this.headerContentNode);
+var _36=dojo.map(_35,function(c,_37){
+var w=c.style.width;
+dojo.attr(c,"vIdx",_37);
+if(w&&w.slice(-1)=="%"){
+_34=true;
+}else{
+if(w&&w.slice(-2)=="px"){
+return window.parseInt(w,10);
+}
+}
+return dojo.contentBox(c).w;
+});
+if(_34){
+dojo.forEach(this.grid.layout.cells,function(_38,idx){
+if(_38.view==this){
+var _39=_38.view.getHeaderCellNode(_38.index);
+if(_39&&dojo.hasAttr(_39,"vIdx")){
+var _3a=window.parseInt(dojo.attr(_39,"vIdx"));
+this.setColWidth(idx,_36[_3a]);
+dojo.removeAttr(_39,"vIdx");
+}
+}
+},this);
+return true;
+}
+return false;
+},adaptHeight:function(_3b){
+if(!this.grid._autoHeight){
+var h=(this.domNode.style.height&&parseInt(this.domNode.style.height.replace(/px/,""),10))||this.domNode.clientHeight;
+var _3c=this;
+var _3d=function(){
+var v;
+for(var i in _3c.grid.views.views){
+v=_3c.grid.views.views[i];
+if(v!==_3c&&v.hasHScrollbar()){
+return true;
+}
+}
+return false;
+};
+if(_3b||(this.noscroll&&_3d())){
+h-=dojox.html.metrics.getScrollbar().h;
+}
+dojox.grid.util.setStyleHeightPx(this.scrollboxNode,h);
+}
+this.hasVScrollbar(true);
+},adaptWidth:function(){
+if(this.flexCells){
+this.contentWidth=this.getContentWidth();
+this.headerContentNode.firstChild.style.width=this.contentWidth;
+}
+var w=this.scrollboxNode.offsetWidth-this.getScrollbarWidth();
+if(!this._removingColumn){
+w=Math.max(w,this.getColumnsWidth())+"px";
+}else{
+w=Math.min(w,this.getColumnsWidth())+"px";
+this._removingColumn=false;
+}
+var cn=this.contentNode;
+cn.style.width=w;
+this.hasHScrollbar(true);
+},setSize:function(w,h){
+var ds=this.domNode.style;
+var hs=this.headerNode.style;
+if(w){
+ds.width=w;
+hs.width=w;
+}
+ds.height=(h>=0?h+"px":"");
+},renderRow:function(_3e){
+var _3f=this.createRowNode(_3e);
+this.buildRow(_3e,_3f);
+this.grid.edit.restore(this,_3e);
+return _3f;
+},createRowNode:function(_40){
+var _41=document.createElement("div");
+_41.className=this.classTag+"Row";
+if(this instanceof dojox.grid._RowSelector){
+dojo.attr(_41,"role","presentation");
+}else{
+dojo.attr(_41,"role","row");
+if(this.grid.selectionMode!="none"){
+dojo.attr(_41,"aria-selected","false");
+}
+}
+_41[dojox.grid.util.gridViewTag]=this.id;
+_41[dojox.grid.util.rowIndexTag]=_40;
+this.rowNodes[_40]=_41;
+return _41;
+},buildRow:function(_42,_43){
+this.buildRowContent(_42,_43);
+this.styleRow(_42,_43);
+},buildRowContent:function(_44,_45){
+_45.innerHTML=this.content.generateHtml(_44,_44);
+if(this.flexCells&&this.contentWidth){
+_45.firstChild.style.width=this.contentWidth;
+}
+dojox.grid.util.fire(this,"onAfterRow",[_44,this.structure.cells,_45]);
+},rowRemoved:function(_46){
+if(_46>=0){
+this._cleanupRowWidgets(this.getRowNode(_46));
+}
+this.grid.edit.save(this,_46);
+delete this.rowNodes[_46];
+},getRowNode:function(_47){
+return this.rowNodes[_47];
+},getCellNode:function(_48,_49){
+var row=this.getRowNode(_48);
+if(row){
+return this.content.getCellNode(row,_49);
+}
+},getHeaderCellNode:function(_4a){
+if(this.headerContentNode){
+return this.header.getCellNode(this.headerContentNode,_4a);
+}
+},styleRow:function(_4b,_4c){
+_4c._style=_1(_4c);
+this.styleRowNode(_4b,_4c);
+},styleRowNode:function(_4d,_4e){
+if(_4e){
+this.doStyleRowNode(_4d,_4e);
+}
+},doStyleRowNode:function(_4f,_50){
+this.grid.styleRowNode(_4f,_50);
+},updateRow:function(_51){
+var _52=this.getRowNode(_51);
+if(_52){
+_52.style.height="";
+this.buildRow(_51,_52);
+}
+return _52;
+},updateRowStyles:function(_53){
+this.styleRowNode(_53,this.getRowNode(_53));
+},lastTop:0,firstScroll:0,doscroll:function(_54){
+var _55=dojo._isBodyLtr();
+if(this.firstScroll<2){
+if((!_55&&this.firstScroll==1)||(_55&&this.firstScroll===0)){
+var s=dojo.marginBox(this.headerNodeContainer);
+if(dojo.isIE){
+this.headerNodeContainer.style.width=s.w+this.getScrollbarWidth()+"px";
+}else{
+if(dojo.isMoz){
+this.headerNodeContainer.style.width=s.w-this.getScrollbarWidth()+"px";
+this.scrollboxNode.scrollLeft=_55?this.scrollboxNode.clientWidth-this.scrollboxNode.scrollWidth:this.scrollboxNode.scrollWidth-this.scrollboxNode.clientWidth;
+}
+}
+}
+this.firstScroll++;
+}
+this.headerNode.scrollLeft=this.scrollboxNode.scrollLeft;
+var top=this.scrollboxNode.scrollTop;
+if(top!==this.lastTop){
+this.grid.scrollTo(top);
+}
+},setScrollTop:function(_56){
+this.lastTop=_56;
+this.scrollboxNode.scrollTop=_56;
+return this.scrollboxNode.scrollTop;
+},doContentEvent:function(e){
+if(this.content.decorateEvent(e)){
+this.grid.onContentEvent(e);
+}
+},doHeaderEvent:function(e){
+if(this.header.decorateEvent(e)){
+this.grid.onHeaderEvent(e);
+}
+},dispatchContentEvent:function(e){
+return this.content.dispatchEvent(e);
+},dispatchHeaderEvent:function(e){
+return this.header.dispatchEvent(e);
+},setColWidth:function(_57,_58){
+this.grid.setCellWidth(_57,_58+"px");
+},update:function(){
+if(!this.domNode){
+return;
+}
+this.content.update();
+this.grid.update();
+var _59=this.scrollboxNode.scrollLeft;
+this.scrollboxNode.scrollLeft=_59;
+this.headerNode.scrollLeft=_59;
+}});
+dojo.declare("dojox.grid._GridAvatar",dojo.dnd.Avatar,{construct:function(){
+var dd=dojo.doc;
+var a=dd.createElement("table");
+a.cellPadding=a.cellSpacing="0";
+a.className="dojoxGridDndAvatar";
+a.style.position="absolute";
+a.style.zIndex=1999;
+a.style.margin="0px";
+var b=dd.createElement("tbody");
+var tr=dd.createElement("tr");
+var td=dd.createElement("td");
+var img=dd.createElement("td");
+tr.className="dojoxGridDndAvatarItem";
+img.className="dojoxGridDndAvatarItemImage";
+img.style.width="16px";
+var _5a=this.manager.source,_5b;
+if(_5a.creator){
+_5b=_5a._normalizedCreator(_5a.getItem(this.manager.nodes[0].id).data,"avatar").node;
+}else{
+_5b=this.manager.nodes[0].cloneNode(true);
+var _5c,_5d;
+if(_5b.tagName.toLowerCase()=="tr"){
+_5c=dd.createElement("table");
+_5d=dd.createElement("tbody");
+_5d.appendChild(_5b);
+_5c.appendChild(_5d);
+_5b=_5c;
+}else{
+if(_5b.tagName.toLowerCase()=="th"){
+_5c=dd.createElement("table");
+_5d=dd.createElement("tbody");
+var r=dd.createElement("tr");
+_5c.cellPadding=_5c.cellSpacing="0";
+r.appendChild(_5b);
+_5d.appendChild(r);
+_5c.appendChild(_5d);
+_5b=_5c;
+}
+}
+}
+_5b.id="";
+td.appendChild(_5b);
+tr.appendChild(img);
+tr.appendChild(td);
+dojo.style(tr,"opacity",0.9);
+b.appendChild(tr);
+a.appendChild(b);
+this.node=a;
+var m=dojo.dnd.manager();
+this.oldOffsetY=m.OFFSET_Y;
+m.OFFSET_Y=1;
+},destroy:function(){
+dojo.dnd.manager().OFFSET_Y=this.oldOffsetY;
+this.inherited(arguments);
+}});
+var _5e=dojo.dnd.manager().makeAvatar;
+dojo.dnd.manager().makeAvatar=function(){
+var src=this.source;
+if(src.viewIndex!==undefined&&!dojo.hasClass(dojo.body(),"dijit_a11y")){
+return new dojox.grid._GridAvatar(this);
+}
+return _5e.call(dojo.dnd.manager());
+};
+})();
+}
diff --git a/js/dojo/dojox/grid/_ViewManager.js b/js/dojo/dojox/grid/_ViewManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/_ViewManager.js
@@ -0,0 +1,212 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._ViewManager"]){
+dojo._hasResource["dojox.grid._ViewManager"]=true;
+dojo.provide("dojox.grid._ViewManager");
+dojo.declare("dojox.grid._ViewManager",null,{constructor:function(_1){
+this.grid=_1;
+},defaultWidth:200,views:[],resize:function(){
+this.onEach("resize");
+},render:function(){
+this.onEach("render");
+},addView:function(_2){
+_2.idx=this.views.length;
+this.views.push(_2);
+},destroyViews:function(){
+for(var i=0,v;v=this.views[i];i++){
+v.destroy();
+}
+this.views=[];
+},getContentNodes:function(){
+var _3=[];
+for(var i=0,v;v=this.views[i];i++){
+_3.push(v.contentNode);
+}
+return _3;
+},forEach:function(_4){
+for(var i=0,v;v=this.views[i];i++){
+_4(v,i);
+}
+},onEach:function(_5,_6){
+_6=_6||[];
+for(var i=0,v;v=this.views[i];i++){
+if(_5 in v){
+v[_5].apply(v,_6);
+}
+}
+},normalizeHeaderNodeHeight:function(){
+var _7=[];
+for(var i=0,v;(v=this.views[i]);i++){
+if(v.headerContentNode.firstChild){
+_7.push(v.headerContentNode);
+}
+}
+this.normalizeRowNodeHeights(_7);
+},normalizeRowNodeHeights:function(_8){
+var h=0;
+var _9=[];
+if(this.grid.rowHeight){
+h=this.grid.rowHeight;
+}else{
+if(_8.length<=1){
+return;
+}
+for(var i=0,n;(n=_8[i]);i++){
+if(!dojo.hasClass(n,"dojoxGridNonNormalizedCell")){
+_9[i]=n.firstChild.offsetHeight;
+h=Math.max(h,_9[i]);
+}
+}
+h=(h>=0?h:0);
+if(dojo.isMoz&&h){
+h++;
+}
+}
+for(i=0;(n=_8[i]);i++){
+if(_9[i]!=h){
+n.firstChild.style.height=h+"px";
+}
+}
+},resetHeaderNodeHeight:function(){
+for(var i=0,v,n;(v=this.views[i]);i++){
+n=v.headerContentNode.firstChild;
+if(n){
+n.style.height="";
+}
+}
+},renormalizeRow:function(_a){
+var _b=[];
+for(var i=0,v,n;(v=this.views[i])&&(n=v.getRowNode(_a));i++){
+n.firstChild.style.height="";
+_b.push(n);
+}
+this.normalizeRowNodeHeights(_b);
+},getViewWidth:function(_c){
+return this.views[_c].getWidth()||this.defaultWidth;
+},measureHeader:function(){
+this.resetHeaderNodeHeight();
+this.forEach(function(_d){
+_d.headerContentNode.style.height="";
+});
+var h=0;
+this.forEach(function(_e){
+h=Math.max(_e.headerNode.offsetHeight,h);
+});
+return h;
+},measureContent:function(){
+var h=0;
+this.forEach(function(_f){
+h=Math.max(_f.domNode.offsetHeight,h);
+});
+return h;
+},findClient:function(_10){
+var c=this.grid.elasticView||-1;
+if(c<0){
+for(var i=1,v;(v=this.views[i]);i++){
+if(v.viewWidth){
+for(i=1;(v=this.views[i]);i++){
+if(!v.viewWidth){
+c=i;
+break;
+}
+}
+break;
+}
+}
+}
+if(c<0){
+c=Math.floor(this.views.length/2);
+}
+return c;
+},arrange:function(l,w){
+var i,v,vw,len=this.views.length;
+var c=(w<=0?len:this.findClient());
+var _11=function(v,l){
+var ds=v.domNode.style;
+var hs=v.headerNode.style;
+if(!dojo._isBodyLtr()){
+ds.right=l+"px";
+if(dojo.isMoz){
+hs.right=l+v.getScrollbarWidth()+"px";
+hs.width=parseInt(hs.width,10)-v.getScrollbarWidth()+"px";
+}else{
+hs.right=l+"px";
+}
+}else{
+ds.left=l+"px";
+hs.left=l+"px";
+}
+ds.top=0+"px";
+hs.top=0;
+};
+for(i=0;(v=this.views[i])&&(i<c);i++){
+vw=this.getViewWidth(i);
+v.setSize(vw,0);
+_11(v,l);
+if(v.headerContentNode&&v.headerContentNode.firstChild){
+vw=v.getColumnsWidth()+v.getScrollbarWidth();
+}else{
+vw=v.domNode.offsetWidth;
+}
+l+=vw;
+}
+i++;
+var r=w;
+for(var j=len-1;(v=this.views[j])&&(i<=j);j--){
+vw=this.getViewWidth(j);
+v.setSize(vw,0);
+vw=v.domNode.offsetWidth;
+r-=vw;
+_11(v,r);
+}
+if(c<len){
+v=this.views[c];
+vw=Math.max(1,r-l);
+v.setSize(vw+"px",0);
+_11(v,l);
+}
+return l;
+},renderRow:function(_12,_13,_14){
+var _15=[];
+for(var i=0,v,n,_16;(v=this.views[i])&&(n=_13[i]);i++){
+_16=v.renderRow(_12);
+n.appendChild(_16);
+_15.push(_16);
+}
+if(!_14){
+this.normalizeRowNodeHeights(_15);
+}
+},rowRemoved:function(_17){
+this.onEach("rowRemoved",[_17]);
+},updateRow:function(_18,_19){
+for(var i=0,v;v=this.views[i];i++){
+v.updateRow(_18);
+}
+if(!_19){
+this.renormalizeRow(_18);
+}
+},updateRowStyles:function(_1a){
+this.onEach("updateRowStyles",[_1a]);
+},setScrollTop:function(_1b){
+var top=_1b;
+for(var i=0,v;v=this.views[i];i++){
+top=v.setScrollTop(_1b);
+if(dojo.isIE&&v.headerNode&&v.scrollboxNode){
+v.headerNode.scrollLeft=v.scrollboxNode.scrollLeft;
+}
+}
+return top;
+},getFirstScrollingView:function(){
+for(var i=0,v;(v=this.views[i]);i++){
+if(v.hasHScrollbar()||v.hasVScrollbar()){
+return v;
+}
+}
+return null;
+}});
+}
diff --git a/js/dojo/dojox/grid/cells.js b/js/dojo/dojox/grid/cells.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/cells.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells"]){
+dojo._hasResource["dojox.grid.cells"]=true;
+dojo.provide("dojox.grid.cells");
+dojo.require("dojox.grid.cells._base");
+}
diff --git a/js/dojo/dojox/grid/cells/_base.js b/js/dojo/dojox/grid/cells/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/cells/_base.js
@@ -0,0 +1,271 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells._base"]){
+dojo._hasResource["dojox.grid.cells._base"]=true;
+dojo.provide("dojox.grid.cells._base");
+dojo.require("dojox.grid.util");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.grid._DeferredTextWidget",dijit._Widget,{deferred:null,_destroyOnRemove:true,postCreate:function(){
+if(this.deferred){
+this.deferred.addBoth(dojo.hitch(this,function(_1){
+if(this.domNode){
+this.domNode.innerHTML=_1;
+}
+}));
+}
+}});
+(function(){
+var _2=function(_3){
+try{
+dojox.grid.util.fire(_3,"focus");
+dojox.grid.util.fire(_3,"select");
+}
+catch(e){
+}
+};
+var _4=function(){
+setTimeout(dojo.hitch.apply(dojo,arguments),0);
+};
+var _5=dojox.grid.cells;
+dojo.declare("dojox.grid.cells._Base",null,{styles:"",classes:"",editable:false,alwaysEditing:false,formatter:null,defaultValue:"...",value:null,hidden:false,noresize:false,draggable:true,_valueProp:"value",_formatPending:false,constructor:function(_6){
+this._props=_6||{};
+dojo.mixin(this,_6);
+if(this.draggable===undefined){
+this.draggable=true;
+}
+},_defaultFormat:function(_7,_8){
+var s=this.grid.formatterScope||this;
+var f=this.formatter;
+if(f&&s&&typeof f=="string"){
+f=this.formatter=s[f];
+}
+var v=(_7!=this.defaultValue&&f)?f.apply(s,_8):_7;
+if(typeof v=="undefined"){
+return this.defaultValue;
+}
+if(v&&v.addBoth){
+v=new dojox.grid._DeferredTextWidget({deferred:v},dojo.create("span",{innerHTML:this.defaultValue}));
+}
+if(v&&v.declaredClass&&v.startup){
+return "<div class='dojoxGridStubNode' linkWidget='"+v.id+"' cellIdx='"+this.index+"'>"+this.defaultValue+"</div>";
+}
+return v;
+},format:function(_9,_a){
+var f,i=this.grid.edit.info,d=this.get?this.get(_9,_a):(this.value||this.defaultValue);
+d=(d&&d.replace&&this.grid.escapeHTMLInData)?d.replace(/&/g,"&amp;").replace(/</g,"&lt;"):d;
+if(this.editable&&(this.alwaysEditing||(i.rowIndex==_9&&i.cell==this))){
+return this.formatEditing(d,_9);
+}else{
+return this._defaultFormat(d,[d,_9,this]);
+}
+},formatEditing:function(_b,_c){
+},getNode:function(_d){
+return this.view.getCellNode(_d,this.index);
+},getHeaderNode:function(){
+return this.view.getHeaderCellNode(this.index);
+},getEditNode:function(_e){
+return (this.getNode(_e)||0).firstChild||0;
+},canResize:function(){
+var uw=this.unitWidth;
+return uw&&(uw!=="auto");
+},isFlex:function(){
+var uw=this.unitWidth;
+return uw&&dojo.isString(uw)&&(uw=="auto"||uw.slice(-1)=="%");
+},applyEdit:function(_f,_10){
+this.grid.edit.applyCellEdit(_f,this,_10);
+},cancelEdit:function(_11){
+this.grid.doCancelEdit(_11);
+},_onEditBlur:function(_12){
+if(this.grid.edit.isEditCell(_12,this.index)){
+this.grid.edit.apply();
+}
+},registerOnBlur:function(_13,_14){
+if(this.commitOnBlur){
+dojo.connect(_13,"onblur",function(e){
+setTimeout(dojo.hitch(this,"_onEditBlur",_14),250);
+});
+}
+},needFormatNode:function(_15,_16){
+this._formatPending=true;
+_4(this,"_formatNode",_15,_16);
+},cancelFormatNode:function(){
+this._formatPending=false;
+},_formatNode:function(_17,_18){
+if(this._formatPending){
+this._formatPending=false;
+dojo.setSelectable(this.grid.domNode,true);
+this.formatNode(this.getEditNode(_18),_17,_18);
+}
+},formatNode:function(_19,_1a,_1b){
+if(dojo.isIE){
+_4(this,"focus",_1b,_19);
+}else{
+this.focus(_1b,_19);
+}
+},dispatchEvent:function(m,e){
+if(m in this){
+return this[m](e);
+}
+},getValue:function(_1c){
+return this.getEditNode(_1c)[this._valueProp];
+},setValue:function(_1d,_1e){
+var n=this.getEditNode(_1d);
+if(n){
+n[this._valueProp]=_1e;
+}
+},focus:function(_1f,_20){
+_2(_20||this.getEditNode(_1f));
+},save:function(_21){
+this.value=this.value||this.getValue(_21);
+},restore:function(_22){
+this.setValue(_22,this.value);
+},_finish:function(_23){
+dojo.setSelectable(this.grid.domNode,false);
+this.cancelFormatNode();
+},apply:function(_24){
+this.applyEdit(this.getValue(_24),_24);
+this._finish(_24);
+},cancel:function(_25){
+this.cancelEdit(_25);
+this._finish(_25);
+}});
+_5._Base.markupFactory=function(_26,_27){
+var d=dojo;
+var _28=d.trim(d.attr(_26,"formatter")||"");
+if(_28){
+_27.formatter=dojo.getObject(_28)||_28;
+}
+var get=d.trim(d.attr(_26,"get")||"");
+if(get){
+_27.get=dojo.getObject(get);
+}
+var _29=function(_2a,_2b,_2c){
+var _2d=d.trim(d.attr(_26,_2a)||"");
+if(_2d){
+_2b[_2c||_2a]=!(_2d.toLowerCase()=="false");
+}
+};
+_29("sortDesc",_27);
+_29("editable",_27);
+_29("alwaysEditing",_27);
+_29("noresize",_27);
+_29("draggable",_27);
+var _2e=d.trim(d.attr(_26,"loadingText")||d.attr(_26,"defaultValue")||"");
+if(_2e){
+_27.defaultValue=_2e;
+}
+var _2f=function(_30,_31,_32){
+var _33=d.trim(d.attr(_26,_30)||"")||undefined;
+if(_33){
+_31[_32||_30]=_33;
+}
+};
+_2f("styles",_27);
+_2f("headerStyles",_27);
+_2f("cellStyles",_27);
+_2f("classes",_27);
+_2f("headerClasses",_27);
+_2f("cellClasses",_27);
+};
+dojo.declare("dojox.grid.cells.Cell",_5._Base,{constructor:function(){
+this.keyFilter=this.keyFilter;
+},keyFilter:null,formatEditing:function(_34,_35){
+this.needFormatNode(_34,_35);
+return "<input class=\"dojoxGridInput\" type=\"text\" value=\""+_34+"\">";
+},formatNode:function(_36,_37,_38){
+this.inherited(arguments);
+this.registerOnBlur(_36,_38);
+},doKey:function(e){
+if(this.keyFilter){
+var key=String.fromCharCode(e.charCode);
+if(key.search(this.keyFilter)==-1){
+dojo.stopEvent(e);
+}
+}
+},_finish:function(_39){
+this.inherited(arguments);
+var n=this.getEditNode(_39);
+try{
+dojox.grid.util.fire(n,"blur");
+}
+catch(e){
+}
+}});
+_5.Cell.markupFactory=function(_3a,_3b){
+_5._Base.markupFactory(_3a,_3b);
+var d=dojo;
+var _3c=d.trim(d.attr(_3a,"keyFilter")||"");
+if(_3c){
+_3b.keyFilter=new RegExp(_3c);
+}
+};
+dojo.declare("dojox.grid.cells.RowIndex",_5.Cell,{name:"Row",postscript:function(){
+this.editable=false;
+},get:function(_3d){
+return _3d+1;
+}});
+_5.RowIndex.markupFactory=function(_3e,_3f){
+_5.Cell.markupFactory(_3e,_3f);
+};
+dojo.declare("dojox.grid.cells.Select",_5.Cell,{options:null,values:null,returnIndex:-1,constructor:function(_40){
+this.values=this.values||this.options;
+},formatEditing:function(_41,_42){
+this.needFormatNode(_41,_42);
+var h=["<select class=\"dojoxGridSelect\">"];
+for(var i=0,o,v;((o=this.options[i])!==undefined)&&((v=this.values[i])!==undefined);i++){
+h.push("<option",(_41==v?" selected":"")," value=\""+v+"\"",">",o,"</option>");
+}
+h.push("</select>");
+return h.join("");
+},getValue:function(_43){
+var n=this.getEditNode(_43);
+if(n){
+var i=n.selectedIndex,o=n.options[i];
+return this.returnIndex>-1?i:o.value||o.innerHTML;
+}
+}});
+_5.Select.markupFactory=function(_44,_45){
+_5.Cell.markupFactory(_44,_45);
+var d=dojo;
+var _46=d.trim(d.attr(_44,"options")||"");
+if(_46){
+var o=_46.split(",");
+if(o[0]!=_46){
+_45.options=o;
+}
+}
+var _47=d.trim(d.attr(_44,"values")||"");
+if(_47){
+var v=_47.split(",");
+if(v[0]!=_47){
+_45.values=v;
+}
+}
+};
+dojo.declare("dojox.grid.cells.AlwaysEdit",_5.Cell,{alwaysEditing:true,_formatNode:function(_48,_49){
+this.formatNode(this.getEditNode(_49),_48,_49);
+},applyStaticValue:function(_4a){
+var e=this.grid.edit;
+e.applyCellEdit(this.getValue(_4a),this,_4a);
+e.start(this,_4a,true);
+}});
+_5.AlwaysEdit.markupFactory=function(_4b,_4c){
+_5.Cell.markupFactory(_4b,_4c);
+};
+dojo.declare("dojox.grid.cells.Bool",_5.AlwaysEdit,{_valueProp:"checked",formatEditing:function(_4d,_4e){
+return "<input class=\"dojoxGridInput\" type=\"checkbox\""+(_4d?" checked=\"checked\"":"")+" style=\"width: auto\" />";
+},doclick:function(e){
+if(e.target.tagName=="INPUT"){
+this.applyStaticValue(e.rowIndex);
+}
+}});
+_5.Bool.markupFactory=function(_4f,_50){
+_5.AlwaysEdit.markupFactory(_4f,_50);
+};
+})();
+}
diff --git a/js/dojo/dojox/grid/cells/dijit.js b/js/dojo/dojox/grid/cells/dijit.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/cells/dijit.js
@@ -0,0 +1,179 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells.dijit"]){
+dojo._hasResource["dojox.grid.cells.dijit"]=true;
+dojo.provide("dojox.grid.cells.dijit");
+dojo.require("dojox.grid.cells");
+dojo.require("dijit.form.DateTextBox");
+dojo.require("dijit.form.TimeTextBox");
+dojo.require("dijit.form.ComboBox");
+dojo.require("dojo.data.ItemFileReadStore");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.NumberSpinner");
+dojo.require("dijit.form.NumberTextBox");
+dojo.require("dijit.form.CurrencyTextBox");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.Editor");
+(function(){
+var _1=dojox.grid.cells;
+dojo.declare("dojox.grid.cells._Widget",_1._Base,{widgetClass:dijit.form.TextBox,constructor:function(_2){
+this.widget=null;
+if(typeof this.widgetClass=="string"){
+dojo.deprecated("Passing a string to widgetClass is deprecated","pass the widget class object instead","2.0");
+this.widgetClass=dojo.getObject(this.widgetClass);
+}
+},formatEditing:function(_3,_4){
+this.needFormatNode(_3,_4);
+return "<div></div>";
+},getValue:function(_5){
+return this.widget.attr("value");
+},setValue:function(_6,_7){
+if(this.widget&&this.widget.attr){
+if(this.widget.onLoadDeferred){
+var _8=this;
+this.widget.onLoadDeferred.addCallback(function(){
+_8.widget.attr("value",_7===null?"":_7);
+});
+}else{
+this.widget.attr("value",_7);
+}
+}else{
+this.inherited(arguments);
+}
+},getWidgetProps:function(_9){
+return dojo.mixin({},this.widgetProps||{},{constraints:dojo.mixin({},this.constraint)||{},value:_9});
+},createWidget:function(_a,_b,_c){
+return new this.widgetClass(this.getWidgetProps(_b),_a);
+},attachWidget:function(_d,_e,_f){
+_d.appendChild(this.widget.domNode);
+this.setValue(_f,_e);
+},formatNode:function(_10,_11,_12){
+if(!this.widgetClass){
+return _11;
+}
+if(!this.widget){
+this.widget=this.createWidget.apply(this,arguments);
+}else{
+this.attachWidget.apply(this,arguments);
+}
+this.sizeWidget.apply(this,arguments);
+this.grid.rowHeightChanged(_12);
+this.focus();
+return undefined;
+},sizeWidget:function(_13,_14,_15){
+var p=this.getNode(_15),box=dojo.contentBox(p);
+dojo.marginBox(this.widget.domNode,{w:box.w});
+},focus:function(_16,_17){
+if(this.widget){
+setTimeout(dojo.hitch(this.widget,function(){
+dojox.grid.util.fire(this,"focus");
+}),0);
+}
+},_finish:function(_18){
+this.inherited(arguments);
+dojox.grid.util.removeNode(this.widget.domNode);
+}});
+_1._Widget.markupFactory=function(_19,_1a){
+_1._Base.markupFactory(_19,_1a);
+var d=dojo;
+var _1b=d.trim(d.attr(_19,"widgetProps")||"");
+var _1c=d.trim(d.attr(_19,"constraint")||"");
+var _1d=d.trim(d.attr(_19,"widgetClass")||"");
+if(_1b){
+_1a.widgetProps=d.fromJson(_1b);
+}
+if(_1c){
+_1a.constraint=d.fromJson(_1c);
+}
+if(_1d){
+_1a.widgetClass=d.getObject(_1d);
+}
+};
+dojo.declare("dojox.grid.cells.ComboBox",_1._Widget,{widgetClass:dijit.form.ComboBox,getWidgetProps:function(_1e){
+var _1f=[];
+dojo.forEach(this.options,function(o){
+_1f.push({name:o,value:o});
+});
+var _20=new dojo.data.ItemFileReadStore({data:{identifier:"name",items:_1f}});
+return dojo.mixin({},this.widgetProps||{},{value:_1e,store:_20});
+},getValue:function(){
+var e=this.widget;
+e.attr("displayedValue",e.attr("displayedValue"));
+return e.attr("value");
+}});
+_1.ComboBox.markupFactory=function(_21,_22){
+_1._Widget.markupFactory(_21,_22);
+var d=dojo;
+var _23=d.trim(d.attr(_21,"options")||"");
+if(_23){
+var o=_23.split(",");
+if(o[0]!=_23){
+_22.options=o;
+}
+}
+};
+dojo.declare("dojox.grid.cells.DateTextBox",_1._Widget,{widgetClass:dijit.form.DateTextBox,setValue:function(_24,_25){
+if(this.widget){
+this.widget.attr("value",new Date(_25));
+}else{
+this.inherited(arguments);
+}
+},getWidgetProps:function(_26){
+return dojo.mixin(this.inherited(arguments),{value:new Date(_26)});
+}});
+_1.DateTextBox.markupFactory=function(_27,_28){
+_1._Widget.markupFactory(_27,_28);
+};
+dojo.declare("dojox.grid.cells.CheckBox",_1._Widget,{widgetClass:dijit.form.CheckBox,getValue:function(){
+return this.widget.checked;
+},setValue:function(_29,_2a){
+if(this.widget&&this.widget.attributeMap.checked){
+this.widget.attr("checked",_2a);
+}else{
+this.inherited(arguments);
+}
+},sizeWidget:function(_2b,_2c,_2d){
+return;
+}});
+_1.CheckBox.markupFactory=function(_2e,_2f){
+_1._Widget.markupFactory(_2e,_2f);
+};
+dojo.declare("dojox.grid.cells.Editor",_1._Widget,{widgetClass:dijit.Editor,getWidgetProps:function(_30){
+return dojo.mixin({},this.widgetProps||{},{height:this.widgetHeight||"100px"});
+},createWidget:function(_31,_32,_33){
+var _34=new this.widgetClass(this.getWidgetProps(_32),_31);
+dojo.connect(_34,"onLoad",dojo.hitch(this,"populateEditor"));
+return _34;
+},formatNode:function(_35,_36,_37){
+this.content=_36;
+this.inherited(arguments);
+if(dojo.isMoz){
+var e=this.widget;
+e.open();
+if(this.widgetToolbar){
+dojo.place(e.toolbar.domNode,e.editingArea,"before");
+}
+}
+},populateEditor:function(){
+this.widget.attr("value",this.content);
+this.widget.placeCursorAtEnd();
+}});
+_1.Editor.markupFactory=function(_38,_39){
+_1._Widget.markupFactory(_38,_39);
+var d=dojo;
+var h=dojo.trim(dojo.attr(_38,"widgetHeight")||"");
+if(h){
+if((h!="auto")&&(h.substr(-2)!="em")){
+h=parseInt(h,10)+"px";
+}
+_39.widgetHeight=h;
+}
+};
+})();
+}
diff --git a/js/dojo/dojox/grid/cells/tree.js b/js/dojo/dojox/grid/cells/tree.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/cells/tree.js
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells.tree"]){
+dojo._hasResource["dojox.grid.cells.tree"]=true;
+dojo.provide("dojox.grid.cells.tree");
+dojo.require("dojox.grid.cells");
+dojox.grid.cells.TreeCell={formatAggregate:function(_1,_2,_3){
+var f,g=this.grid,i=g.edit.info,d=g.aggregator?g.aggregator.getForCell(this,_2,_1,_2===this.level?"cnt":this.parentCell.aggregate):(this.value||this.defaultValue);
+return this._defaultFormat(d,[d,_2-this.level,_3,this]);
+},formatIndexes:function(_4,_5){
+var f,g=this.grid,i=g.edit.info,d=this.get?this.get(_4[0],_5,_4):(this.value||this.defaultValue);
+if(this.editable&&(this.alwaysEditing||(i.rowIndex==_4[0]&&i.cell==this))){
+return this.formatEditing(d,_4[0],_4);
+}else{
+return this._defaultFormat(d,[d,_4[0],_4,this]);
+}
+},getOpenState:function(_6){
+var _7=this.grid,_8=_7.store,_9=null;
+if(_8.isItem(_6)){
+_9=_6;
+_6=_8.getIdentity(_6);
+}
+if(!this.openStates){
+this.openStates={};
+}
+if(typeof _6!="string"||!(_6 in this.openStates)){
+this.openStates[_6]=_7.getDefaultOpenState(this,_9);
+}
+return this.openStates[_6];
+},formatAtLevel:function(_a,_b,_c,_d,_e,_f){
+if(!dojo.isArray(_a)){
+_a=[_a];
+}
+var _10="";
+if(_c>this.level||(_c===this.level&&_d)){
+_f.push("dojoxGridSpacerCell");
+if(_c===this.level){
+_f.push("dojoxGridTotalCell");
+}
+_10="<span></span>";
+}else{
+if(_c<this.level){
+_f.push("dojoxGridSummaryCell");
+_10="<span class=\"dojoxGridSummarySpan\">"+this.formatAggregate(_b,_c,_a)+"</span>";
+}else{
+var ret="";
+if(this.isCollapsable){
+var _11=this.grid.store,id="";
+if(_11.isItem(_b)){
+id=_11.getIdentity(_b);
+}
+_f.push("dojoxGridExpandoCell");
+ret="<span dojoType=\"dojox.grid._Expando\" level=\""+_c+"\" class=\"dojoxGridExpando\""+"\" toggleClass=\""+_e+"\" itemId=\""+id+"\" cellIdx=\""+this.index+"\"></span>";
+}
+_10=ret+this.formatIndexes(_a,_b);
+}
+}
+if(this.grid.focus.cell&&this.index==this.grid.focus.cell.index&&_a.join("/")==this.grid.focus.rowIndex){
+_f.push(this.grid.focus.focusClass);
+}
+return _10;
+}};
+}
diff --git a/js/dojo/dojox/grid/compatGrid.tar.gz b/js/dojo/dojox/grid/compatGrid.tar.gz
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..87c39c88eeeca3ce1d73bfc59858fc6aab0a10b5
GIT binary patch
literal 216813
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
diff --git a/js/dojo/dojox/grid/enhanced/_Builder.js b/js/dojo/dojox/grid/enhanced/_Builder.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/_Builder.js
@@ -0,0 +1,81 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Builder"]){
+dojo._hasResource["dojox.grid.enhanced._Builder"]=true;
+dojo.provide("dojox.grid.enhanced._Builder");
+dojo.require("dojox.grid._Builder");
+dojo.declare("dojox.grid.enhanced._BuilderMixin",null,{generateCellMarkup:function(_1,_2,_3,_4){
+var _5=this.inherited(arguments);
+if(!_4){
+_5[4]+="<div class=\"dojoxGridCellContent\">";
+_5[6]="</div></td>";
+}
+return _5;
+},domouseup:function(e){
+if(e.cellNode){
+this.grid.onMouseUp(e);
+}
+}});
+dojo.declare("dojox.grid.enhanced._HeaderBuilder",[dojox.grid._HeaderBuilder,dojox.grid.enhanced._BuilderMixin],{getCellX:function(e){
+if(this.grid.nestedSorting){
+var _6=function(_7,_8){
+for(var n=_7;n&&_8(n);n=n.parentNode){
+}
+return n;
+};
+var _9=function(_a){
+var _b=_a.toUpperCase();
+return function(_c){
+return _c.tagName!=_b;
+};
+};
+var no=_6(e.target,_9("th"));
+var x=no?e.pageX-dojo.coords(no,true).x:-1;
+if(dojo.isIE){
+var _d=dojo.body().getBoundingClientRect();
+var _e=(_d.right-_d.left)/document.body.clientWidth;
+return parseInt(x/_e);
+}
+return x;
+}
+return this.inherited(arguments);
+},decorateEvent:function(e){
+var _f=this.inherited(arguments);
+if(this.grid.nestedSorting){
+var _10=this.grid._getSortEventInfo(e);
+e.unarySortChoice=_10.unarySortChoice;
+e.nestedSortChoice=_10.nestedSortChoice;
+e.selectChoice=_10.selectChoice;
+}
+return _f;
+},doclick:function(e){
+if((this._skipBogusClicks&&!this.grid.nestedSorting)||(this.grid.nestedSorting&&this.grid.ignoreEvent(e))){
+dojo.stopEvent(e);
+return true;
+}
+},colResizeSetup:function(e,_11){
+var _12=this.minColWidth;
+if(e.sourceView.grid.nestedSorting&&!this.grid.pluginMgr.isFixedCell(e.cell)){
+this.minColWidth=this.grid.getMinColWidth();
+var _13=dojo.connect(this,"endResizeColumn",dojo.hitch(this,function(){
+this.minColWidth=_12;
+dojo.disconnect(_13);
+}));
+}
+var _14=this.inherited(arguments);
+if(!dojo._isBodyLtr()&&dojo.isIE&&_14.followers){
+dojo.forEach(_14.followers,function(_15){
+if(!_15.left){
+_15.left=dojo.position(_15.node).x;
+}
+});
+}
+return _14;
+}});
+dojo.declare("dojox.grid.enhanced._ContentBuilder",[dojox.grid._ContentBuilder,dojox.grid.enhanced._BuilderMixin],{});
+}
diff --git a/js/dojo/dojox/grid/enhanced/_Events.js b/js/dojo/dojox/grid/enhanced/_Events.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/_Events.js
@@ -0,0 +1,370 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Events"]){
+dojo._hasResource["dojox.grid.enhanced._Events"]=true;
+dojo.provide("dojox.grid.enhanced._Events");
+dojo.declare("dojox.grid.enhanced._Events",null,{_events:null,headerCellActiveClass:"dojoxGridHeaderActive",cellActiveClass:"dojoxGridCellActive",rowActiveClass:"dojoxGridRowActive",selectRegionHoverClass:"dojoxGridSelectRegionHover",constructor:function(_1){
+this._events=new dojox.grid._Events();
+for(p in this._events){
+if(!this[p]){
+this.p=this._events.p;
+}
+}
+_1.mixin(_1,this);
+},onStyleRow:function(_2){
+var i=_2;
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over&&!this.isDndSelectEnable?" dojoxGridRowOver":"");
+this.focus.styleRow(_2);
+this.edit.styleRow(_2);
+},dokeyup:function(e){
+this.indirectSelection&&!this.pluginMgr.inSingleSelection()&&this.indirectSelector.dokeyup(e);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+if(e.ctrlKey&&!e.shiftKey){
+dojo.publish("CTRL_KEY_DOWN",[this,e]);
+}
+var _3=false;
+if(this.isDndSelectEnable&&!e.ctrlKey){
+this.select.keepState=false;
+}
+if(this.isDndSelectEnable&&!e.shiftKey){
+this.select.extendSelect=false;
+}
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.ENTER:
+_3=true;
+if(!this.edit.isEditing()){
+var _4=this.focus.getHeaderIndex();
+if(_4>=0){
+this.nestedSorting&&this.focus.focusView.header.decorateEvent(e);
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+!e.selectChoice&&!_5&&this.setSortIndex(_4,null,e);
+break;
+}else{
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+if(!e.shiftKey){
+var _6=this.edit.isEditing();
+this.edit.apply();
+if(!_6&&!this.pluginMgr.isFixedCell(this.focus.cell)){
+this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);
+}
+}
+if(!this.edit.isEditing()){
+var _7=this.focus.focusView||this.views.views[0];
+_7.content.decorateEvent(e);
+this.onRowClick(e);
+}
+break;
+case dk.SPACE:
+_3=true;
+if(!this.edit.isEditing()){
+var _4=this.focus.getHeaderIndex();
+if(_4>=0){
+this.focus.focusView.header.decorateEvent(e);
+if(this.indirectSelection&&e.cell&&e.cell.isRowSelector){
+return;
+}
+if(this.isDndSelectEnable&&(!this.nestedSorting&&!this.canSort()||this.nestedSorting&&e.selectChoice)){
+this.inDNDKeySelectingColumnMode=true;
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(!this.select.extendSelect){
+this.select.drugSelectionStart.colIndex=_4;
+}
+this.select.drugSelectColumn(_4);
+}else{
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+!_5&&e.rowIndex==-1&&e.cell&&this.setSortIndex(_4,null,e);
+}
+break;
+}else{
+if(this.isDndSelectEnable&&this.focus.isRowBar()){
+this.inDNDKeySelectingRowMode=true;
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(!this.select.extendSelect||this.pluginMgr.inSingleSelection()){
+this.select.drugSelectionStart.rowIndex=this.focus.getFocusedRowIndex();
+}
+this.select.drugSelectRow(this.focus.getFocusedRowIndex());
+}else{
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+}
+dojo.stopEvent(e);
+}
+break;
+case dk.LEFT_ARROW:
+case dk.RIGHT_ARROW:
+_3=true;
+this.nestedSorting&&this.focus.focusView.header.decorateEvent(e);
+var _8=this.isDndSelectEnable&&e.shiftKey;
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+if(this.nestedSorting&&this.focus.isNavHeader()&&!_8&&!_5){
+this.focus.navHeader(e);
+return;
+}
+if(!this.edit.isEditing()){
+var _9=e.keyCode;
+dojo.stopEvent(e);
+var _a=this.focus.getHeaderIndex();
+if(_a>=0&&(e.shiftKey&&e.ctrlKey)){
+this.focus.colSizeAdjust(e,_a,(_9==dk.LEFT_ARROW?-1:1)*5);
+return;
+}
+var _b=(_9==dk.LEFT_ARROW)?1:-1;
+if(dojo._isBodyLtr()){
+_b*=-1;
+}
+if(this.nestedSorting&&this.focus.isNavHeader()&&(_8||_5)){
+this.focus.navHeaderNode(_b,true);
+}else{
+if(!(this.isDndSelectEnable&&this.focus.isRowBar())){
+this.focus.move(0,_b);
+}
+}
+if(_8){
+var _4=this.focus.getHeaderIndex();
+if(!this.select.isColSelected(_a)){
+this.inDNDKeySelectingColumnMode=true;
+this.select.drugSelectionStart.colIndex=_a;
+}else{
+if(this.select.drugSelectionStart.colIndex==-1){
+this.select.restorLastDragPoint();
+}
+}
+if(e.ctrlKey){
+this.select.drugSelectColumnToMax(e.keyCode==dk.LEFT_ARROW?"left":"right");
+}else{
+this.select.drugSelectColumn(_4);
+}
+}
+}
+break;
+case dk.UP_ARROW:
+case dk.DOWN_ARROW:
+_3=true;
+if(this.nestedSorting&&this.focus.isNavHeader()){
+return;
+}
+var _c=e.keyCode==dk.UP_ARROW?-1:1;
+if(this.isDndSelectEnable){
+var _d=this.focus.getFocusedRowIndex();
+}
+if(this.isDndSelectEnable&&this.focus.isRowBar()){
+this.focus[e.keyCode==dk.UP_ARROW?"focusPrevRowBar":"focusNextRowBar"]();
+dojo.stopEvent(e);
+}else{
+if(!this.edit.isEditing()&&this.store&&0<=(this.focus.rowIndex+_c)&&(this.focus.rowIndex+_c)<this.rowCount){
+dojo.stopEvent(e);
+this.focus.move(_c,0);
+this.indirectSelection&&this.focus.cell&&this.focus.cell.focus(this.focus.rowIndex);
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+}
+if(this.isDndSelectEnable&&this.focus.isRowBar()&&e.shiftKey&&!this.pluginMgr.inSingleSelection()){
+if(!this.select.isRowSelected(_d)){
+this.inDNDKeySelectingRowMode=true;
+this.select.drugSelectionStart.rowIndex=_d;
+}else{
+if(this.select.drugSelectionStart.rowIndex==-1){
+this.select.restorLastDragPoint();
+}
+}
+if(e.ctrlKey){
+this.select.drugSelectRowToMax(e.keyCode==dk.UP_ARROW?"up":"down");
+}else{
+var _e=this.focus.getFocusedRowIndex();
+this.select.drugSelectRow(_e);
+}
+}else{
+if(this.indirectSelection&&e.shiftKey&&!this.pluginMgr.inSingleSelection()&&this.focus.rowIndex>=0){
+this.focus.focusView.content.decorateEvent(e);
+if(e.cellIndex!=0||e.rowIndex==0&&_c==-1){
+return;
+}
+this.indirectSelector.swipeSelectionByKey(e,_c);
+}
+}
+break;
+case dk.ESCAPE:
+try{
+this.select.cancelDND();
+}
+catch(e){
+}
+break;
+}
+!_3&&(dojo.hitch(this,this._events.onKeyDown)(e));
+},onMouseDown:function(e){
+dojo.hitch(this,this._events.onMouseDown)(e);
+if(this.isDndSelectEnable&&!e.shiftKey){
+this.select.setDrugStartPoint(e.cellIndex,e.rowIndex);
+}
+},onMouseUp:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseUp(e):this.onCellMouseUp(e);
+},onMouseOutRow:function(e){
+if(this.isDndSelectEnable){
+return;
+}
+dojo.hitch(this,this._events.onMouseOutRow)(e);
+},onMouseDownRow:function(e){
+if(this.isDndSelectEnable){
+return;
+}
+dojo.hitch(this,this._events.onMouseDownRow)(e);
+},onCellMouseOver:function(e){
+dojo.hitch(this,this._events.onCellMouseOver)(e);
+var _f=this.pluginMgr.isFixedCell(e.cell)||this.rowSelectCell&&this.rowSelectCell.inIndirectSelectionMode();
+if(this.isDndSelectEnable&&!_f){
+if(this.select.isInSelectingMode("col")){
+this.select.drugSelectColumn(e.cell.index);
+}else{
+if(this.select.isInSelectingMode("cell")){
+this.select.drugSelectCell(e.cellIndex,e.rowIndex);
+}else{
+this.select.setDrugCoverDivs(e.cellIndex,e.rowIndex);
+}
+}
+}
+},onCellMouseOut:function(e){
+dojo.hitch(this,this._events.onCellMouseOut)(e);
+this.doubleAffordance&&e.cellNode&&dojo.removeClass(e.cellNode,this.cellActiveClass);
+},onCellMouseDown:function(e){
+dojo.addClass(e.cellNode,this.cellActiveClass);
+dojo.addClass(e.rowNode,this.rowActiveClass);
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+if(e.cellIndex>this.select.exceptColumnsTo){
+this.select.setInSelectingMode("cell",true);
+}
+}
+},onCellMouseUp:function(e){
+dojo.removeClass(e.cellNode,this.cellActiveClass);
+dojo.removeClass(e.rowNode,this.rowActiveClass);
+},onCellClick:function(e){
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+this._click[0]=this._click[1];
+this._click[1]=e;
+this.select.cellClick(e.cellIndex,e.rowIndex);
+!this.edit.isEditCell(e.rowIndex,e.cellIndex)&&!this.edit.isEditing()&&this.select.cleanAll();
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}else{
+dojo.hitch(this,this._events.onCellClick)(e);
+}
+},onCellDblClick:function(e){
+if(this.pluginMgr.isFixedCell(e.cell)){
+return;
+}
+this._click.length>1&&(!this._click[0]||!this._click[1])&&(this._click[0]=this._click[1]=e);
+dojo.hitch(this,this._events.onCellDblClick)(e);
+},onRowClick:function(e){
+this.edit.rowClick(e);
+!this.indirectSelection&&this.selection.clickSelectEvent(e);
+},onRowMouseOver:function(e){
+if(this.isDndSelectEnable&&!this.pluginMgr.inSingleSelection()){
+if(this.select.isInSelectingMode("row")){
+this.select.drugSelectRow(e.rowIndex);
+}else{
+}
+}
+if(!e.cell&&e.cellIndex<0||e.cell&&(e.cell!=this.rowSelectCell)&&this.indirectSelection){
+var _10=this.rowSelectCell;
+_10&&_10.onRowMouseOver&&_10.onRowMouseOver(e);
+}
+},onRowMouseOut:function(e){
+if(this.isDndSelectEnable){
+if(this.select.isInSelectingMode("row")){
+this.select.drugSelectRow(e.rowIndex);
+}
+}
+},onRowContextMenu:function(e){
+!this.edit.isEditing()&&this.menus&&this.showRowCellMenu(e);
+},onSelectedRegionContextMenu:function(e){
+if(this.selectedRegionMenu){
+this.selectedRegionMenu._openMyself(e);
+dojo.stopEvent(e);
+}
+},onHeaderCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+if(this.nestedSorting&&!this._inResize(e.sourceView)&&!this.pluginMgr.isFixedCell(e.cell)&&!(this.isDndSelectEnable&&this.select.isInSelectingMode("col"))){
+this.addHoverSortTip(e);
+}
+if(this.isDndSelectEnable){
+if(this.select.isInSelectingMode("col")){
+this.select.drugSelectColumn(e.cell.index);
+}else{
+this.select.clearDrugDivs();
+}
+}
+}
+},onHeaderCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+dojo.removeClass(e.cellNode,this.headerCellActiveClass);
+if(this.nestedSorting&&!this.pluginMgr.isFixedCell(e.cell)){
+if(this.focus.headerCellInFocus(e.cellIndex)){
+this._toggleHighlight(e.sourceView,e,true);
+}else{
+this.removeHoverSortTip(e);
+}
+}
+}
+},onHeaderCellMouseDown:function(e){
+var _11=!this.nestedSorting?e.cellNode:this._getChoiceRegion(e.cellNode,e);
+_11&&dojo.addClass(_11,this.headerCellActiveClass);
+if(this.nestedSorting&&!e.selectChoice){
+return;
+}
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+try{
+this.focus.focusHeaderNode(e.cellIndex,false,true);
+}
+catch(e){
+}
+if(e.button==2){
+return;
+}
+if(e.cellNode){
+this.select.setInSelectingMode("col",true);
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(this.select.extendSelect){
+this.select.restorLastDragPoint();
+}else{
+this.select.drugSelectionStart.colIndex=e.cellIndex;
+}
+this.select.drugSelectColumn(e.cellIndex);
+}
+}
+},onHeaderCellMouseUp:function(e){
+var _12=!this.nestedSorting?e.cellNode:this._getChoiceRegion(e.cellNode,e);
+if(_12){
+dojo.removeClass(_12,this.headerCellActiveClass);
+e.selectChoice&&dojo.addClass(_12,this.selectRegionHoverClass);
+}
+},onHeaderCellClick:function(e){
+if(this.indirectSelection&&e.cell&&e.cell.isRowSelector){
+return;
+}
+dojo.hitch(this,this._events.onHeaderCellClick)(e);
+},onHeaderContextMenu:function(e){
+if(this.nestedSorting&&this.headerMenu){
+this._toggleHighlight(e.sourceView,e,true);
+}
+dojo.hitch(this,this._events.onHeaderContextMenu)(e);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/_Plugin.js b/js/dojo/dojox/grid/enhanced/_Plugin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/_Plugin.js
@@ -0,0 +1,191 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Plugin"]){
+dojo._hasResource["dojox.grid.enhanced._Plugin"]=true;
+dojo.provide("dojox.grid.enhanced._Plugin");
+dojo.require("dojox.grid.enhanced._Builder");
+dojo.require("dojox.grid.enhanced._Events");
+dojo.declare("dojox.grid.enhanced._Plugin",null,{fixedCellNum:-1,funcMap:{},rowSelectionChangedTopic:"ROW_SELECTION_CHANGED",sortRowSelectionChangedTopic:"SORT_ROW_SELECTION_CHANGED",rowMovedTopic:"ROW_MOVED",constructor:function(_1){
+this.grid=_1;
+this._parseProps(this.grid);
+},_parseProps:function(_2){
+_2.plugins&&dojo.mixin(_2,_2.plugins);
+_2.rowSelectionChangedTopic=this.rowSelectionChangedTopic;
+_2.sortRowSelectionChangedTopic=this.sortRowSelectionChangedTopic;
+_2.rowSelectCell=null;
+_2.dnd&&(_2.nestedSorting=true);
+(_2.dnd||_2.indirectSelection)&&(_2.columnReordering=false);
+},preInit:function(){
+var _3=this.grid;
+_3.indirectSelection&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.IndirectSelection"))(_3));
+if(_3.dnd&&(!_3.rowSelector||_3.rowSelector=="false")){
+_3.rowSelector="20px";
+}
+if(_3.nestedSorting){
+dojox.grid._View.prototype._headerBuilderClass=dojox.grid.enhanced._HeaderBuilder;
+}
+dojox.grid._View.prototype._contentBuilderClass=dojox.grid.enhanced._ContentBuilder;
+},postInit:function(){
+var _4=this.grid;
+new dojox.grid.enhanced._Events(_4);
+_4.menus&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.Menu"))(_4));
+_4.nestedSorting&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.NestedSorting"))(_4));
+if(_4.dnd){
+_4.isDndSelectEnable=_4.dnd;
+_4.dndDisabledTypes=["cell"];
+new (this.getPluginClazz("dojox.grid.enhanced.plugins.DnD"))(_4);
+}
+dojo.isChrome<3&&(_4.constructor.prototype.startup=_4.startup);
+this.fixedCellNum=this.getFixedCellNumber();
+this._bindFuncs();
+},getPluginClazz:function(_5){
+var _6=dojo.getObject(_5);
+if(_6){
+return _6;
+}
+throw new Error("Please make sure class \""+_5+"\" is required.");
+},isFixedCell:function(_7){
+return _7&&(_7.isRowSelector||_7.positionFixed);
+},getFixedCellNumber:function(){
+if(this.fixedCellNum>=0){
+return this.fixedCellNum;
+}
+var i=0;
+dojo.forEach(this.grid.layout.cells,dojo.hitch(this,function(_8){
+this.isFixedCell(_8)&&(i++);
+}));
+return i;
+},inSingleSelection:function(){
+return this.grid.selectionMode&&this.grid.selectionMode=="single";
+},needUpdateRow:function(){
+return ((this.grid.indirectSelection||this.grid.isDndSelectEnable)?this.grid.edit.isEditing():true);
+},_bindFuncs:function(){
+dojo.forEach(this.grid.views.views,dojo.hitch(this,function(_9){
+dojox.grid.util.funnelEvents(_9.contentNode,_9,"doContentEvent",["mouseup","mousemove"]);
+dojox.grid.util.funnelEvents(_9.headerNode,_9,"doHeaderEvent",["mouseup"]);
+this.funcMap[_9.id+"-"+"setColumnsWidth"]=_9.setColumnsWidth;
+_9.setColumnsWidth=this.setColumnsWidth;
+this.grid.nestedSorting&&(_9._getHeaderContent=this.grid._getNestedSortHeaderContent);
+this.grid.dnd&&(_9.setScrollTop=this.setScrollTop);
+}));
+this.funcMap["nextKey"]=this.grid.focus.nextKey;
+this.grid.focus.nextKey=this.nextKey;
+this.funcMap["previousKey"]=this.grid.focus.previousKey;
+this.grid.focus.previousKey=this.previousKey;
+if(this.grid.indirectSelection){
+this.funcMap["renderPage"]=this.grid.scroller.renderPage;
+this.grid.scroller.renderPage=this.renderPage;
+}
+this.funcMap["updateRow"]=this.grid.updateRow;
+this.grid.updateRow=this.updateRow;
+if(this.grid.nestedSorting){
+dojox.grid.cells._Base.prototype.getEditNode=this.getEditNode;
+dojox.grid.cells._Widget.prototype.sizeWidget=this.sizeWidget;
+}
+dojox.grid._EditManager.prototype.styleRow=function(_a){
+};
+},setColumnsWidth:function(_b){
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.headerContentNode.style.width=_b+"px";
+this.headerContentNode.parentNode.style.width=_b+"px";
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap[this.id+"-"+"setColumnsWidth"])(_b);
+},previousKey:function(e){
+var _c=this.grid.edit.isEditing();
+if(!_c&&!this.isNavHeader()&&!this._isHeaderHidden()){
+if(!this.grid.isDndSelectEnable){
+this.focusHeader();
+}else{
+if(!this.isRowBar()){
+this.focusRowBar();
+}else{
+this._blurRowBar();
+this.focusHeader();
+}
+}
+dojo.stopEvent(e);
+return;
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap["previousKey"])(e);
+},nextKey:function(e){
+var _d=this.grid.rowCount==0;
+var _e=(e.target===this.grid.domNode);
+if(!_e&&this.grid.isDndSelectEnable&&this.isNavHeader()){
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.focusRowBar();
+return;
+}else{
+if(!_e&&(!this.grid.isDndSelectEnable&&this.isNavHeader())||(this.grid.isDndSelectEnable&&this.isRowBar())){
+this._colHeadNode=this._colHeadFocusIdx=null;
+if(this.grid.isDndSelectEnable){
+this._blurRowBar();
+}
+if(this.isNoFocusCell()&&!_d){
+this.setFocusIndex(0,0);
+}else{
+if(this.cell&&!_d){
+if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){
+this.grid.scrollToRow(this.rowIndex);
+}
+this.focusGrid();
+}else{
+if(!this.findAndFocusGridCell()){
+this.tabOut(this.grid.lastFocusNode);
+}
+}
+}
+return;
+}
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap["nextKey"])(e);
+},renderPage:function(_f){
+for(var i=0,j=_f*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){
+}
+this.grid.lastRenderingRowIdx=--j;
+dojo.addClass(this.grid.domNode,"dojoxGridSortInProgress");
+dojo.hitch(this,this.grid.pluginMgr.funcMap["renderPage"])(_f);
+},updateRow:function(_10){
+var _11=arguments.callee.caller;
+if(_11.nom=="move"&&!this.pluginMgr.needUpdateRow()){
+return;
+}
+dojo.hitch(this,this.pluginMgr.funcMap["updateRow"])(_10);
+},getEditNode:function(_12){
+return ((this.getNode(_12)||0).firstChild||0).firstChild||0;
+},sizeWidget:function(_13,_14,_15){
+var p=this.getNode(_15).firstChild,box=dojo.contentBox(p);
+dojo.marginBox(this.widget.domNode,{w:box.w});
+},setScrollTop:function(_16){
+this.lastTop=_16;
+this.scrollboxNode.scrollTop=_16;
+return this.scrollboxNode.scrollTop;
+},getViewByCellIdx:function(_17){
+var _18=function(_19){
+var j=0,_1a=false;
+for(;j<_19.length;j++){
+if(dojo.isArray(_19[j])){
+if(_18(_19[j])){
+return true;
+}
+}else{
+if(_19[j].index==_17){
+return true;
+}
+}
+}
+};
+var i=0,_1b=this.grid.views.views;
+for(;i<_1b.length;i++){
+cells=_1b[i].structure.cells;
+if(_18(cells)){
+return _1b[i];
+}
+}
+return null;
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js b/js/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndBuilder"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndBuilder"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndBuilder");
+dojo.declare("dojox.grid.enhanced.dnd._DndBuilder",null,{domouseup:function(e){
+if(this.grid.select.isInSelectingMode("col")){
+this.grid.nestedSorting?this.grid.focus.focusSelectColEndingHeader(e):this.grid.focus.focusHeaderNode(e.cellIndex);
+}
+if(e.cellNode){
+this.grid.onMouseUp(e);
+}
+this.grid.onMouseUpRow(e);
+}});
+dojo.declare("dojox.grid.enhanced.dnd._DndHeaderBuilder",null,{domouseup:function(e){
+if(this.grid.select.isInSelectingMode("col")){
+this.grid.nestedSorting?this.grid.focus.focusSelectColEndingHeader(e):this.grid.focus.focusHeaderNode(e.cellIndex);
+}
+this.grid.onMouseUp(e);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndEvents.js b/js/dojo/dojox/grid/enhanced/dnd/_DndEvents.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndEvents.js
@@ -0,0 +1,47 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndEvents"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndEvents"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndEvents");
+dojo.declare("dojox.grid.enhanced.dnd._DndEvents",null,{onMouseUp:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseUp(e):this.onCellMouseUp(e);
+this.select.resetStartPoint();
+this.select.clearInSelectingMode();
+!isNaN(e.rowIndex)&&e.cellIndex==-1&&this.focus.focusRowBarNode(e.rowIndex);
+},onMouseUpRow:function(e){
+if(this.dndSelectable){
+}else{
+if(e.rowIndex!=-1){
+this.onRowMouseUp(e);
+}
+}
+},onCellMouseUp:function(e){
+if(e.cellIndex>this.select.exceptColumnsTo){
+this.select.setInSelectingMode("cell",true);
+}
+},onRowHeaderMouseDown:function(e){
+this.focus._colHeadNode=this.focus._colHeadFocusIdx=null;
+this.focus.focusRowBarNode(e.rowIndex);
+if(e.button==2){
+return;
+}
+this.select.setInSelectingMode("row",true);
+this.select.keepState=e.ctrlKey&&!this.pluginMgr.inSingleSelection();
+this.select.extendSelect=e.shiftKey;
+this.select.setDrugStartPoint(-1,e.rowIndex);
+if(this.select.extendSelect&&!this.pluginMgr.inSingleSelection()){
+this.select.restorLastDragPoint();
+}
+this.select.drugSelectRow(e.rowIndex);
+dojo.stopEvent(e);
+},onRowHeaderMouseUp:function(e){
+this.onMouseUp(e);
+},onRowMouseUp:function(e){
+this.select.setInSelectingMode("row",false);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js b/js/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js
@@ -0,0 +1,69 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndFocusManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndFocusManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndFocusManager");
+dojo.declare("dojox.grid.enhanced.dnd._DndFocusManager",null,{_rowBarNode:null,_rowBarFocusIdy:null,isRowBar:function(){
+return (!!this._rowBarNode);
+},getRowBarNode:function(_1){
+return this.grid.views.views[0].getCellNode(_1,0);
+},focusRowBar:function(){
+this.focusRowBarNode(0);
+this._focusifyCellNode(false);
+},focusRowBarNode:function(_2){
+this._blurRowBar();
+this._focusifyCellNode(false);
+var _3=this.getRowBarNode(_2);
+if(!_3){
+return;
+}
+this._rowBarNode=_3;
+this._rowBarFocusIdy=_2;
+this._rowBarNode.tabIndex=-1;
+dojox.grid.util.fire(this._rowBarNode,"focus");
+dojo.toggleClass(this._rowBarNode,this.focusClass,true);
+},_blurRowBar:function(){
+if(this._rowBarNode){
+dojo.toggleClass(this._rowBarNode,this.focusClass,false);
+this._rowBarNode=this._rowBarFocusIdy=null;
+}
+},focusNextRowBar:function(){
+var sc=this.grid.scroller,r=this._rowBarFocusIdy,rc=this.grid.rowCount-1,_4=Math.min(rc,Math.max(0,r+1));
+var _5=this._rowBarFocusIdy+1;
+if(_4>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(_4)-sc.findScrollTop(r));
+}
+this.focusRowBarNode(_5);
+this.scrollRowBarIntoView();
+},focusPrevRowBar:function(){
+var sc=this.grid.scroller,r=this._rowBarFocusIdy,rc=this.grid.rowCount-1,_6=Math.min(rc,Math.max(0,r-1));
+var _7=this._rowBarFocusIdy-1;
+if(_7<0){
+return;
+}
+if(_7<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(_6));
+}
+this.focusRowBarNode(_7);
+this.scrollRowBarIntoView();
+},getFocusedRowIndex:function(){
+return this._rowBarFocusIdy;
+},scrollRowBarIntoView:function(){
+this.cell=this._rowBarNode;
+this.cell.view=this.grid.views.views[0];
+this.cell.getNode=function(_8){
+return this.cell;
+};
+this.rowIndex=this._rowBarFocusIdy;
+this.scrollIntoView();
+this.cell=null;
+},focusHeaderNode:function(_9){
+this._colHeadFocusIdx=_9;
+this.focusHeader.apply(this,arguments);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndGrid.js b/js/dojo/dojox/grid/enhanced/dnd/_DndGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndGrid.js
@@ -0,0 +1,23 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndGrid"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndGrid"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndGrid");
+dojo.require("dojox.grid.enhanced.dnd._DndEvents");
+dojo.declare("dojox.grid.enhanced.dnd._DndGrid",dojox.grid.enhanced.dnd._DndEvents,{select:null,dndSelectable:true,constructor:function(_1){
+this.select=_1;
+},domousedown:function(e){
+if(!e.cellNode){
+this.onRowHeaderMouseDown(e);
+}
+},domouseup:function(e){
+if(!e.cellNode){
+this.onRowHeaderMouseUp(e);
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndMover.js b/js/dojo/dojox/grid/enhanced/dnd/_DndMover.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndMover.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndMover"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndMover"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndMover");
+dojo.require("dojo.dnd.move");
+dojo.declare("dojox.grid.enhanced.dnd._DndMover",dojo.dnd.Mover,{onMouseMove:function(e){
+dojo.dnd.autoScroll(e);
+var m=this.marginBox;
+this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY},{x:e.pageX,y:e.pageY});
+dojo.stopEvent(e);
+}});
+dojo.declare("dojox.grid.enhanced.dnd._DndBoxConstrainedMoveable",dojo.dnd.move.boxConstrainedMoveable,{movingType:"row",constructor:function(_1,_2){
+if(!_2||!_2.movingType){
+return;
+}
+this.movingType=_2.movingType;
+},onFirstMove:function(_3){
+this.inherited(arguments);
+if(this.within){
+var c=this.constraintBox,mb=dojo.marginBox(_3.node);
+if(this.movingType=="row"){
+c.r+=mb.w;
+}else{
+if(this.movingType=="col"){
+c.b+=mb.h;
+}
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js b/js/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js
@@ -0,0 +1,691 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndMovingManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndMovingManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndMovingManager");
+dojo.require("dojox.grid.enhanced.dnd._DndSelectingManager");
+dojo.require("dojox.grid.enhanced.dnd._DndMover");
+dojo.require("dojo.dnd.move");
+dojo.declare("dojox.grid.enhanced.dnd._DndMovingManager",dojox.grid.enhanced.dnd._DndSelectingManager,{exceptRowsTo:-1,exceptColumnsTo:-1,coverDIVs:[],movers:[],constructor:function(_1){
+if(this.grid.indirectSelection){
+this.exceptColumnsTo=this.grid.pluginMgr.getFixedCellNumber()-1;
+}
+this.coverDIVs=this.movers=[];
+dojo.subscribe("CTRL_KEY_DOWN",dojo.hitch(this,function(_2,_3){
+if(_2==this.grid&&_2!=this){
+this.keyboardMove(_3);
+}
+}));
+dojo.forEach(this.grid.views.views,function(_4){
+dojo.connect(_4.scrollboxNode,"onscroll",dojo.hitch(this,function(){
+this.clearDrugDivs();
+}));
+},this);
+},getGridWidth:function(){
+return dojo.contentBox(this.grid.domNode).w-this.grid.views.views[0].getWidth().replace("px","");
+},isColSelected:function(_5){
+return this.selectedColumns[_5]&&_5>this.exceptColumnsTo;
+},getHScrollBarHeight:function(){
+this.scrollbarHeight=0;
+dojo.forEach(this.grid.views.views,function(_6,_7){
+if(_6.scrollboxNode){
+var _8=_6.scrollboxNode.offsetHeight-_6.scrollboxNode.clientHeight;
+this.scrollbarHeight=_8>this.scrollbarHeight?_8:this.scrollbarHeight;
+}
+},this);
+return this.scrollbarHeight;
+},getExceptionalColOffsetWidth:function(){
+if(!this.grid.indirectSelection||!this.grid.rowSelectCell){
+return 0;
+}
+var _9=(normalizedOffsetWidth=0),_a=this.grid.rowSelectCell.view.scrollboxNode;
+dojo.forEach(this.getHeaderNodes(),function(_b,_c){
+if(_c<=this.exceptColumnsTo){
+var _d=dojo.coords(_b);
+_9+=_d.w;
+}
+},this);
+normalizedOffsetWidth=_9-_a.scrollLeft*(dojo._isBodyLtr()?1:(dojo.isMoz?-1:1));
+return normalizedOffsetWidth>0?normalizedOffsetWidth:0;
+},getGridCoords:function(_e){
+if(!this.gridCoords||_e){
+this.gridCoords=new Object();
+if(!this.headerHeight){
+this.headerHeight=dojo.coords(this.getHeaderNodes()[0]).h;
+}
+var _f=dojo.coords(this.grid.views.views[0].domNode);
+var _10=dojo.coords(this.grid.domNode);
+var _11=dojo.contentBox(this.grid.domNode);
+this.gridCoords.h=_11.h-this.headerHeight-this.getHScrollBarHeight();
+this.gridCoords.t=_10.y;
+this.gridCoords.l=dojo._isBodyLtr()?(_10.x+_f.w):_10.x;
+this.gridCoords.w=_11.w-_f.w;
+}
+return this.gridCoords;
+},createAvatar:function(_12,_13,_14,top,_15){
+this.gridCoords=null;
+var _16=this.getGridCoords();
+var _17=dojo.doc.createElement("DIV");
+_17.className="dojoxGridSelectedDIV";
+_17.id="grid_dnd_cover_div_"+_14+"_"+top;
+_17.style.width=_12+"px";
+var _18=dojo._docScroll();
+var _19=top<_16.t+this.headerHeight?_16.t+this.headerHeight-top:0;
+var _1a=_16.t+_16.h+this.headerHeight;
+var _1b=0;
+if(top<_16.t+this.headerHeight){
+_1b=(_16.t+this.headerHeight);
+}else{
+if(top>_1a){
+_1b=10000;
+}else{
+_1b=top;
+}
+}
+_17.style.top=_1b+_18.y+"px";
+_17.style.left=(_14+_18.x)+"px";
+var _1c=_1b+_13-_19;
+if(_1c>_1a+(_15?this.scrollbarHeight:0)){
+_1c=_1a;
+}
+_17.style.height=((_1c-_1b)>=0?(_1c-_1b):0)+"px";
+dojo.doc.body.appendChild(_17);
+_17.connections=[];
+_17.connections.push(dojo.connect(_17,"onmouseout",this,function(){
+this.clearDrugDivs();
+}));
+_17.connections.push(dojo.connect(_17,"onclick",this,"avataDivClick"));
+_17.connections.push(dojo.connect(_17,"keydown",this,function(e){
+this.handleESC(e,this);
+}));
+this.coverDIVs.push(_17);
+return _17;
+},handleESC:function(e,_1d){
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.ESCAPE:
+try{
+this.cancelDND();
+}
+catch(e){
+}
+break;
+}
+},cancelDND:function(){
+this.cleanAll();
+this.clearDrugDivs();
+if(this.mover){
+this.mover.destroy();
+}
+this.cleanAll();
+},createCoverMover:function(_1e,_1f,_20,top,_21){
+var _22=this.getGridCoords(),_23=(_21=="col"?true:false);
+var _24={box:{l:(_21=="row"?_20:_22.l)+dojo._docScroll().x,t:(_21=="col"?top:_22.t+this.headerHeight)+dojo._docScroll().y,w:_21=="row"?1:_22.w,h:_21=="col"?1:_22.h},within:true,movingType:_21,mover:dojox.grid.enhanced.dnd._DndMover};
+return new dojox.grid.enhanced.dnd._DndBoxConstrainedMoveable(this.createAvatar(_1e,_1f,_20,top,_23),_24);
+},getBorderDiv:function(){
+var _25=dojo.byId("borderDIV"+this.grid.id);
+if(_25==null){
+_25=dojo.doc.createElement("DIV");
+_25.id="borderDIV"+this.grid.id;
+_25.className="dojoxGridBorderDIV";
+dojo.doc.body.appendChild(_25);
+}
+return _25;
+},setBorderDiv:function(_26,_27,_28,top){
+var _29=this.getBorderDiv();
+dojo.style(_29,{"height":_27+"px","top":top+"px","width":_26+"px","left":_28+"px"});
+return _29;
+},removeOtherMovers:function(id){
+if(!this.coverDIVs.hasRemovedOtherMovers){
+var _2a;
+dojo.forEach(this.coverDIVs,function(div){
+if(div.id!=id){
+dojo.doc.body.removeChild(div);
+}else{
+_2a=div;
+}
+},this);
+this.coverDIVs=[_2a];
+this.coverDIVs.hasRemovedOtherMovers=true;
+}
+},addColMovers:function(){
+var _2b=-1;
+dojo.forEach(this.selectedColumns,function(col,_2c){
+if(this.isColSelected(_2c)){
+if(_2b==-1){
+_2b=_2c;
+}
+if(this.selectedColumns[_2c+1]==null){
+this.addColMover(_2b,_2c);
+_2b=-1;
+}
+}
+},this);
+},addColMover:function(_2d,_2e){
+if(this.lock){
+return;
+}
+var _2f=(_30=0);
+var top=null,_31=null;
+if(dojo._isBodyLtr()){
+dojo.forEach(this.getHeaderNodes(),function(_32,_33){
+var _34=dojo.coords(_32);
+if(_33==_2d){
+_2f=_34.x;
+top=_34.y+_34.h;
+_31=_34.h;
+}
+if(_33==_2e){
+_30=_34.x+_34.w;
+}
+});
+}else{
+dojo.forEach(this.getHeaderNodes(),function(_35,_36){
+var _37=dojo.coords(_35);
+if(_36==_2d){
+_30=_37.x+_37.w;
+_31=_37.h;
+}
+if(_36==_2e){
+_2f=_37.x;
+top=_37.y+_37.h;
+}
+});
+}
+var _38=this.normalizeColMoverCoords(_2f,_30,_2d,_2e);
+var _39=_38.h,_3a=_38.w,_2f=_38.l,_30=_38.r;
+var _3b=this.createCoverMover(_3a,_39,_2f,top,"col");
+this.movers.push(_3b);
+var _3c=this.setBorderDiv(3,_39,-1000,top+dojo._docScroll().y);
+dojo.attr(_3c,"colH",_38.colH);
+dojo.connect(_3b,"onMoveStart",dojo.hitch(this,function(_3d,_3e){
+this.mover=_3d;
+this.removeOtherMovers(_3d.node.id);
+}));
+dojo.connect(_3b,"onMove",dojo.hitch(this,function(_3f,_40,_41){
+if(_3f.node==null||_3f.node.parentNode==null){
+return;
+}
+this.isMoving=true;
+this.moveColBorder(_3f,_41,_3c);
+}));
+dojo.connect(_3b,"onMoveStop",dojo.hitch(this,function(_42){
+if(this.drugDestIndex==null||this.isContinuousSelection(this.selectedColumns)&&(this.drugDestIndex==_2d||this.drugDestIndex==_2e||this.drugDestIndex==(_2e+1)&&this.drugBefore)){
+this.movingIgnored=true;
+if(this.isMoving){
+this.isMoving=false;
+this.clearDrugDivs();
+}
+return;
+}
+this.isMoving=false;
+this.mover=null;
+this.startMoveCols();
+this.drugDestIndex=null;
+}));
+},normalizeColMoverCoords:function(_43,_44,_45,_46){
+var _47=_44-_43,_48=this.grid.views.views,_49=this.grid.pluginMgr;
+var _4a={"w":_47,"h":0,"l":_43,"r":_44,"colH":0};
+var _4b=this.getGridWidth()-_48[_48.length-1].getScrollbarWidth();
+var rtl=!dojo._isBodyLtr();
+var _4c=_49.getViewByCellIdx(!rtl?_45:_46);
+var _4d=_49.getViewByCellIdx(!rtl?_46:_45);
+var _4e=(_4c==_4d);
+if(!_4c||!_4d){
+return _4a;
+}
+var _4f=dojo.coords(_4c.scrollboxNode).x+(rtl&&dojo.isIE?_4c.getScrollbarWidth():0);
+var _50=dojo.coords(_4d.scrollboxNode);
+var _51=_50.x+_50.w-((!rtl||!dojo.isIE)?_4d.getScrollbarWidth():0);
+if(_4a.l<_4f){
+_4a.w=_4a.r-_4f;
+_4a.l=_4f;
+}
+if(_4a.r>_51){
+_4a.w=_51-_4a.l;
+}
+var i,_52=this.grid.views.views[0],_53=dojo.coords(_52.contentNode).h;
+var _54=_4d,_55=_50.h;
+_4a.colH=_53;
+_55=!_4e?_55:(_55-(_54.scrollboxNode.offsetHeight-_54.scrollboxNode.clientHeight));
+_4a.h=_53<_55?_53:_55;
+return _4a;
+},moveColBorder:function(_56,_57,_58){
+var _59=dojo._docScroll(),rtl=!dojo._isBodyLtr();
+_57.x-=_59.x;
+var _5a=this.grid.views.views,_5b=this.getGridCoords();
+var _5c=_5a[!rtl?1:_5a.length-1].scrollboxNode;
+var _5d=_5a[!rtl?_5a.length-1:1].scrollboxNode;
+var _5e=(!rtl||!dojo.isIE)?_5b.l:(_5b.l+_5c.offsetWidth-_5c.clientWidth);
+var _5f=(!rtl||dojo.isMoz)?(_5b.l+_5b.w-(_5d.offsetWidth-_5d.clientWidth)):(_5b.l+_5b.w);
+dojo.forEach(this.getHeaderNodes(),dojo.hitch(this,function(_60,_61){
+if(_61>this.exceptColumnsTo){
+var x,_62=dojo.coords(_60);
+if(_57.x>=_62.x&&_57.x<=_62.x+_62.w){
+if(!this.selectedColumns[_61]||!this.selectedColumns[_61-1]){
+x=_62.x+_59.x+(rtl?_62.w:0);
+if(_57.x<_5e||_57.x>_5f||x<_5e||x>_5f){
+return;
+}
+dojo.style(_58,"left",x+"px");
+this.drugDestIndex=_61;
+this.drugBefore=true;
+!dojo.isIE&&this.normalizeColBorderHeight(_58,_61);
+}
+}else{
+if(this.getHeaderNodes()[_61+1]==null&&(!rtl?(_57.x>_62.x+_62.w):(_57.x<_62.x))){
+x=_57.x<_5e?_5e:(_57.x>_5f?_5f:(_62.x+_59.x+(rtl?0:_62.w)));
+dojo.style(_58,"left",x+"px");
+this.drugDestIndex=_61;
+this.drugBefore=false;
+!dojo.isIE&&this.normalizeColBorderHeight(_58,_61);
+}
+}
+}
+}));
+},normalizeColBorderHeight:function(_63,_64){
+var _65=this.grid.pluginMgr.getViewByCellIdx(_64);
+if(!_65){
+return;
+}
+var _66=_65.scrollboxNode,_67=dojo.attr(_63,"colH");
+var _68=dojo.coords(_66).h-(_66.offsetHeight-_66.clientHeight);
+_68=_67>0&&_67<_68?_67:_68;
+dojo.style(_63,"height",_68+"px");
+},avataDivClick:function(e){
+if(this.movingIgnored){
+this.movingIgnored=false;
+return;
+}
+this.cleanAll();
+this.clearDrugDivs();
+},startMoveCols:function(){
+this.changeCursorState("wait");
+this.srcIndexdelta=0;
+deltaColAmount=0;
+dojo.forEach(this.selectedColumns,dojo.hitch(this,function(col,_69){
+if(this.isColSelected(_69)){
+if(this.drugDestIndex>_69){
+_69-=deltaColAmount;
+}
+deltaColAmount+=1;
+var _6a=this.grid.layout.cells[_69].view.idx;
+var _6b=this.grid.layout.cells[this.drugDestIndex].view.idx;
+if(_69!=this.drugDestIndex){
+this.grid.layout.moveColumn(_6a,_6b,_69,this.drugDestIndex,this.drugBefore);
+}
+if(this.drugDestIndex<=_69&&this.drugDestIndex+1<this.grid.layout.cells.length){
+this.drugDestIndex+=1;
+}
+}
+}));
+var _6c=this.drugDestIndex+(this.drugBefore?0:1);
+this.clearDrugDivs();
+this.cleanAll();
+this.resetCellIdx();
+this.drugSelectionStart.colIndex=_6c-deltaColAmount;
+this.drugSelectColumn(this.drugSelectionStart.colIndex+deltaColAmount-1);
+},changeCursorState:function(_6d){
+dojo.forEach(this.coverDIVs,function(div){
+div.style.cursor="wait";
+});
+},addRowMovers:function(){
+var _6e=-1;
+dojo.forEach(this.grid.selection.selected,function(row,_6f){
+var _70=this.grid.views.views[0];
+if(row&&_70.rowNodes[_6f]){
+if(_6e==-1){
+_6e=_6f;
+}
+if(this.grid.selection.selected[_6f+1]==null||!_70.rowNodes[_6f+1]){
+this.addRowMover(_6e,_6f);
+_6e=-1;
+}
+}
+},this);
+},addRowMover:function(_71,to){
+var _72=0,_73=this.grid.views.views;
+dojo.forEach(_73,function(_74,_75){
+_72+=_74.getScrollbarWidth();
+});
+var _76=_73[_73.length-1].getScrollbarWidth();
+var _77=!dojo._isBodyLtr()?(dojo.isIE?_72-_76:_72):0;
+var _78=this.getGridWidth()-_76;
+var _79=this.grid.views.views[0];
+var _7a=_79.rowNodes[_71],_7b=_79.rowNodes[to];
+if(!_7a||!_7b){
+return;
+}
+var _7c=dojo.coords(_7a),_7d=dojo.coords(_7b);
+var _7e=this.getExceptionalColOffsetWidth();
+var _7f=this.createCoverMover(_78-_7e,(_7d.y-_7c.y+_7d.h),dojo._isBodyLtr()?(_7c.x+_7c.w+_7e):(_7c.x-_78-_77),_7c.y,"row");
+var _80=this.setBorderDiv(_78,3,(dojo._isBodyLtr()?(_7d.x+_7d.w):(_7d.x-_78-_77))+dojo._docScroll().x,-100);
+var _81=dojo.connect(_7f,"onMoveStart",dojo.hitch(this,function(_82,_83){
+this.mover=_82;
+this.removeOtherMovers(_82.node.id);
+}));
+var _84=dojo.connect(_7f,"onMove",dojo.hitch(this,function(_85,_86,_87){
+if(_85.node==null||_85.node.parentNode==null){
+return;
+}
+this.isMoving=true;
+this.moveRowBorder(_85,_86,_80,_87);
+}));
+var _88=dojo.connect(_7f,"onMoveStop",dojo.hitch(this,function(_89){
+if(this.avaOnRowIndex==null||this.isContinuousSelection(this.grid.selection.selected)&&(this.avaOnRowIndex==_71||this.avaOnRowIndex==(to+1))){
+this.movingIgnored=true;
+if(this.isMoving){
+this.isMoving=false;
+this.clearDrugDivs();
+}
+return;
+}
+this.isMoving=false;
+this.mover=null;
+this.grid.select.outRangeY=false;
+this.grid.select.moveOutTop=false;
+this.grid.scroller.findScrollTop(this.grid.scroller.page*this.grid.scroller.rowsPerPage);
+this.startMoveRows();
+this.avaOnRowIndex=null;
+delete _7f;
+}));
+},moveRowBorder:function(_8a,_8b,_8c,_8d){
+var _8e=this.getGridCoords(true),_8f=dojo._docScroll();
+var _90=_8e.t+this.headerHeight+_8e.h;
+_8b.t-=_8f.y,_8d.y-=_8f.y;
+if(_8d.y>=_90){
+this.grid.select.outRangeY=true;
+this.autoMoveToNextRow();
+}else{
+if(_8d.y<=_8e.t+this.headerHeight){
+this.grid.select.moveOutTop=true;
+this.autoMoveToPreRow();
+}else{
+this.grid.select.outRangeY=this.grid.select.moveOutTop=false;
+var _91=this.grid.views.views[0],_92=_91.rowNodes;
+var _93=dojo.coords(_91.contentNode).h;
+var _94=0,_95=-1;
+for(i in _92){
+++_94;
+if(i>_95){
+_95=i;
+}
+}
+var _96=dojo.coords(_92[_95]);
+if(_93<_8e.h&&_8d.y>(_96.y+_96.h)){
+this.avaOnRowIndex=_94;
+dojo.style(_8c,{"top":_96.y+_96.h+_8f.y+"px"});
+return;
+}
+var _97,_98,_99;
+for(var _9a in _92){
+_9a=parseInt(_9a);
+if(isNaN(_9a)){
+continue;
+}
+_98=_92[_9a];
+if(!_98){
+continue;
+}
+_97=dojo.coords(_98),_99=(_97.y<=_90);
+if(_99&&_8d.y>_97.y&&_8d.y<_97.y+_97.h){
+if(!this.grid.selection.selected[_9a]||!this.grid.selection.selected[_9a-1]){
+this.avaOnRowIndex=_9a;
+dojo.style(_8c,{"top":_97.y+_8f.y+"px"});
+}
+}
+}
+}
+}
+},autoMoveToPreRow:function(){
+if(this.grid.select.moveOutTop){
+if(this.grid.scroller.firstVisibleRow>0){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow-1);
+this.autoMoveBorderDivPre();
+setTimeout(dojo.hitch(this,"autoMoveToPreRow"),this.autoScrollRate);
+}
+}
+},autoMoveBorderDivPre:function(){
+var _9b=dojo._docScroll(),_9c=this.getGridCoords();
+var _9d=_9c.t+this.headerHeight+_9b.y;
+var _9e,_9f=this.getBorderDiv();
+if(this.avaOnRowIndex-1<=0){
+this.avaOnRowIndex=0;
+_9e=_9d;
+}else{
+this.avaOnRowIndex--;
+_9e=dojo.coords(this.grid.views.views[0].rowNodes[this.avaOnRowIndex]).y+_9b.y;
+}
+_9f.style.top=(_9e<_9d?_9d:_9e)+"px";
+},autoMoveToNextRow:function(){
+if(this.grid.select.outRangeY){
+if(this.avaOnRowIndex+1<=this.grid.scroller.rowCount){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.autoMoveBorderDiv();
+setTimeout(dojo.hitch(this,"autoMoveToNextRow"),this.autoScrollRate);
+}
+}
+},autoMoveBorderDiv:function(){
+var _a0=dojo._docScroll(),_a1=this.getGridCoords();
+var _a2=_a1.t+this.headerHeight+_a1.h+_a0.y;
+var _a3,_a4=this.getBorderDiv();
+if(this.avaOnRowIndex+1>=this.grid.scroller.rowCount){
+this.avaOnRowIndex=this.grid.scroller.rowCount;
+_a3=_a2;
+}else{
+this.avaOnRowIndex++;
+_a3=dojo.coords(this.grid.views.views[0].rowNodes[this.avaOnRowIndex]).y+_a0.y;
+}
+_a4.style.top=(_a3>_a2?_a2:_a3)+"px";
+},startMoveRows:function(){
+var _a5=Math.min(this.avaOnRowIndex,this.getFirstSelected());
+var end=Math.max(this.avaOnRowIndex-1,this.getLastSelected());
+this.moveRows(_a5,end,this.getPageInfo());
+},moveRows:function(_a6,end,_a7){
+var i,_a8=false,_a9=(selectedRowsAboveBorderDIV=0),_aa=[];
+var _ab=this.grid.scroller,_ac=_ab.rowsPerPage;
+var _ad=_a7.topPage*_ac,_ae=(_a7.bottomPage+1)*_ac-1;
+var _af=dojo.hitch(this,function(_b0,to){
+for(i=_b0;i<to;i++){
+if(!this.grid.selection.selected[i]||!this.grid._by_idx[i]){
+_aa.push(this.grid._by_idx[i]);
+}
+}
+});
+_af(_a6,this.avaOnRowIndex);
+for(i=_a6;i<=end;i++){
+if(this.grid.selection.selected[i]&&this.grid._by_idx[i]){
+_aa.push(this.grid._by_idx[i]);
+_a9++;
+if(this.avaOnRowIndex>i){
+selectedRowsAboveBorderDIV++;
+}
+}
+}
+_af(this.avaOnRowIndex,end+1);
+for(i=_a6,j=0;i<=end;i++){
+this.grid._by_idx[i]=_aa[j++];
+if(i>=_ad&&i<=_ae){
+this.grid.updateRow(i);
+_a8=true;
+}
+}
+this.avaOnRowIndex+=_a9-selectedRowsAboveBorderDIV;
+try{
+this.clearDrugDivs();
+this.cleanAll();
+this.drugSelectionStart.rowIndex=this.avaOnRowIndex-_a9;
+this.drugSelectRow(this.drugSelectionStart.rowIndex+_a9-1);
+if(_a8){
+var _b1=_ab.stack;
+dojo.forEach(_a7.invalidPages,function(_b2){
+_ab.destroyPage(_b2);
+i=dojo.indexOf(_b1,_b2);
+if(i>=0){
+_b1.splice(i,1);
+}
+});
+}
+this.publishRowMove();
+}
+catch(e){
+}
+},clearDrugDivs:function(){
+if(!this.isMoving){
+var _b3=this.getBorderDiv();
+_b3.style.top=-100+"px";
+_b3.style.height="0px";
+_b3.style.left=-100+"px";
+dojo.forEach(this.coverDIVs,function(div){
+dojo.forEach(div.connections,function(_b4){
+dojo.disconnect(_b4);
+});
+dojo.doc.body.removeChild(div);
+delete div;
+},this);
+this.coverDIVs=[];
+}
+},setDrugCoverDivs:function(_b5,_b6){
+if(!this.isMoving){
+if(this.isColSelected(_b5)){
+this.addColMovers();
+}else{
+if(this.grid.selection.selected[_b6]){
+this.addRowMovers();
+}else{
+this.clearDrugDivs();
+}
+}
+}
+},getPageInfo:function(){
+var _b7=this.grid.scroller,_b8=(bottomPage=_b7.page);
+var _b9=_b7.firstVisibleRow,_ba=_b7.lastVisibleRow;
+var _bb=_b7.rowsPerPage,_bc=_b7.pageNodes[0];
+var _bd,_be,_bf=[],_c0;
+dojo.forEach(_bc,function(_c1,_c2){
+if(!_c1){
+return;
+}
+_c0=false;
+_bd=_c2*_bb;
+_be=(_c2+1)*_bb-1;
+if(_b9>=_bd&&_b9<=_be){
+_b8=_c2;
+_c0=true;
+}
+if(_ba>=_bd&&_ba<=_be){
+bottomPage=_c2;
+_c0=true;
+}
+if(!_c0&&(_bd>_ba||_be<_b9)){
+_bf.push(_c2);
+}
+});
+return {topPage:_b8,bottomPage:bottomPage,invalidPages:_bf};
+},resetCellIdx:function(){
+var _c3=0;
+var _c4=-1;
+dojo.forEach(this.grid.views.views,function(_c5,_c6){
+if(_c6==0){
+return;
+}
+if(_c5.structure.cells&&_c5.structure.cells[0]){
+dojo.forEach(_c5.structure.cells[0],function(_c7,_c8){
+var _c9=_c7.markup[2].split(" ");
+var idx=_c3+_c8;
+_c9[1]="idx=\""+idx+"\"";
+_c7.markup[2]=_c9.join(" ");
+});
+}
+for(i in _c5.rowNodes){
+if(!_c5.rowNodes[i]){
+return;
+}
+dojo.forEach(_c5.rowNodes[i].firstChild.rows[0].cells,function(_ca,_cb){
+if(_ca&&_ca.attributes){
+if(_cb+_c3>_c4){
+_c4=_cb+_c3;
+}
+var idx=document.createAttribute("idx");
+idx.value=_cb+_c3;
+_ca.attributes.setNamedItem(idx);
+}
+});
+}
+_c3=_c4+1;
+});
+},publishRowMove:function(){
+dojo.publish(this.grid.rowMovedTopic,[this]);
+},keyboardMove:function(_cc){
+var _cd=this.selectedColumns.length>0;
+var _ce=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype["getFirstSelected"])()>=0;
+var i,_cf,dk=dojo.keys,_d0=_cc.keyCode;
+if(!dojo._isBodyLtr()){
+_d0=(_cc.keyCode==dk.LEFT_ARROW)?dk.RIGHT_ARROW:(_cc.keyCode==dk.RIGHT_ARROW?dk.LEFT_ARROW:_d0);
+}
+switch(_d0){
+case dk.LEFT_ARROW:
+if(!_cd){
+return;
+}
+_cf=this.getHeaderNodes().length;
+for(i=0;i<_cf;i++){
+if(this.isColSelected(i)){
+this.drugDestIndex=i-1;
+this.drugBefore=true;
+break;
+}
+}
+var _d1=this.grid.indirectSelection?1:0;
+(this.drugDestIndex>=_d1)?this.startMoveCols():(this.drugDestIndex=_d1);
+break;
+case dk.RIGHT_ARROW:
+if(!_cd){
+return;
+}
+_cf=this.getHeaderNodes().length;
+this.drugBefore=true;
+for(i=0;i<_cf;i++){
+if(this.isColSelected(i)&&!this.isColSelected(i+1)){
+this.drugDestIndex=i+2;
+if(this.drugDestIndex==_cf){
+this.drugDestIndex--;
+this.drugBefore=false;
+}
+break;
+}
+}
+if(this.drugDestIndex<_cf){
+this.startMoveCols();
+}
+break;
+case dk.UP_ARROW:
+if(!_ce){
+return;
+}
+this.avaOnRowIndex=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype["getFirstSelected"])()-1;
+if(this.avaOnRowIndex>-1){
+this.startMoveRows();
+}
+break;
+case dk.DOWN_ARROW:
+if(!_ce){
+return;
+}
+for(i=0;i<this.grid.rowCount;i++){
+if(this.grid.selection.selected[i]&&!this.grid.selection.selected[i+1]){
+this.avaOnRowIndex=i+2;
+break;
+}
+}
+if(this.avaOnRowIndex<=this.grid.rowCount){
+this.startMoveRows();
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js b/js/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndRowSelector"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndRowSelector"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndRowSelector");
+dojo.declare("dojox.grid.enhanced.dnd._DndRowSelector",null,{domousedown:function(e){
+this.grid.onMouseDown(e);
+},domouseup:function(e){
+this.grid.onMouseUp(e);
+},dofocus:function(e){
+e.cellNode.style.border="solid 1px";
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js b/js/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js
@@ -0,0 +1,371 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndSelectingManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndSelectingManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndSelectingManager");
+dojo.require("dojox.grid.util");
+dojo.require("dojox.grid._Builder");
+dojo.require("dojox.grid.enhanced.dnd._DndGrid");
+dojo.require("dojox.grid.enhanced.dnd._DndBuilder");
+dojo.require("dojox.grid.enhanced.dnd._DndRowSelector");
+dojo.require("dojox.grid.enhanced.dnd._DndFocusManager");
+dojo.declare("dojox.grid.enhanced.dnd._DndSelectingManager",null,{typeSelectingMode:[],selectingDisabledTypes:[],drugSelectionStart:null,drugCurrentPoint:null,drugMode:null,keepState:false,extendSelect:false,headerNodes:null,selectedCells:null,selectedColumns:[],selectedClass:"dojoxGridRowSelected",autoScrollRate:1000,constructor:function(_1){
+this.grid=_1;
+this.typeSelectingMode=[];
+this.selectingDisabledTypes=[];
+this.selectedColumns=[];
+this.drugSelectionStart=new Object();
+this.drugCurrentPoint=new Object();
+this.resetStartPoint();
+this.extendGridForDnd(_1);
+this.selectedCells=[];
+dojo.connect(this.grid,"_onFetchComplete",dojo.hitch(this,"refreshColumnSelection"));
+dojo.connect(this.grid.scroller,"scroll",dojo.hitch(this,"refreshColumnSelection"));
+dojo.subscribe(this.grid.rowSelectionChangedTopic,dojo.hitch(this,function(_2){
+try{
+if(_2.grid==this.grid&&_2!=this){
+this.cleanCellSelection();
+}
+}
+catch(e){
+}
+}));
+},extendGridForDnd:function(_3){
+var _4=_3.constructor;
+_3.mixin(_3,dojo.hitch(new dojox.grid.enhanced.dnd._DndGrid(this)));
+_3.constructor=_4;
+_3.mixin(_3.focus,new dojox.grid.enhanced.dnd._DndFocusManager());
+_3.mixin(_3.selection,{clickSelect:function(){
+}});
+dojo.forEach(_3.views.views,function(_5){
+_3.mixin(_5.content,new dojox.grid.enhanced.dnd._DndBuilder());
+_3.mixin(_5.header,new dojox.grid.enhanced.dnd._DndHeaderBuilder());
+if(_5.declaredClass=="dojox.grid._RowSelector"){
+_3.mixin(_5,new dojox.grid.enhanced.dnd._DndRowSelector());
+}
+dojox.grid.util.funnelEvents(_5.contentNode,_5,"doContentEvent",["mouseup"]);
+dojox.grid.util.funnelEvents(_5.headerNode,_5,"doHeaderEvent",["mouseup"]);
+});
+dojo.forEach(this.grid.dndDisabledTypes,function(_6){
+this.disableSelecting(_6);
+},this);
+this.disableFeatures();
+},disableFeatures:function(){
+if(this.selectingDisabledTypes["cell"]){
+this.cellClick=function(){
+};
+this.drugSelectCell=function(){
+};
+}
+if(this.selectingDisabledTypes["row"]){
+this.drugSelectRow=function(){
+};
+}
+if(this.selectingDisabledTypes["col"]){
+this.selectColumn=function(){
+};
+this.drugSelectColumn=function(){
+};
+}
+},disableSelecting:function(_7){
+this.selectingDisabledTypes[_7]=true;
+},isInSelectingMode:function(_8){
+return !!this.typeSelectingMode[_8];
+},setInSelectingMode:function(_9,_a){
+this.typeSelectingMode[_9]=_a;
+},getSelectedRegionInfo:function(){
+var _b=[],_c="";
+if(this.selectedColumns.length>0){
+_c="col";
+dojo.forEach(this.selectedColumns,function(_d,_e){
+!!_d&&_b.push(_e);
+});
+}else{
+if(this.grid.selection.getSelectedCount()>0){
+_c="row";
+_b=dojox.grid.Selection.prototype.getSelected.call(this.grid.selection);
+}
+}
+return {"selectionType":_c,"selectedIdx":_b};
+},clearInSelectingMode:function(){
+this.typeSelectingMode=[];
+},getHeaderNodes:function(){
+return this.headerNodes==null?dojo.query("[role*='columnheader']",this.grid.viewsHeaderNode):this.headerNode;
+},_range:function(_f,_10,_11){
+var s=(_f>=0?_f:_10),e=_10;
+if(s>e){
+e=s;
+s=_10;
+}
+for(var i=s;i<=e;i++){
+_11(i);
+}
+},cellClick:function(_12,_13){
+if(_12>this.exceptColumnsTo){
+this.grid.selection.clear();
+this.publishRowChange();
+var _14=this.getCellNode(_12,_13);
+this.cleanAll();
+this.addCellToSelection(_14);
+}
+},setDrugStartPoint:function(_15,_16){
+this.drugSelectionStart.colIndex=_15;
+this.drugSelectionStart.rowIndex=_16;
+this.drugCurrentPoint.colIndex=_15;
+this.firstOut=true;
+var _17=dojo.connect(dojo.doc,"onmousemove",dojo.hitch(this,function(e){
+this.outRangeValue=e.clientY-dojo.coords(this.grid.domNode).y-this.grid.domNode.offsetHeight;
+if(this.outRangeValue>0){
+if(this.drugSelectionStart.colIndex==-1){
+if(!this.outRangeY){
+this.autoRowScrollDrug(e);
+}
+}else{
+if(this.drugSelectionStart.rowIndex==-1){
+}else{
+this.autoCellScrollDrug(e);
+}
+}
+}else{
+this.firstOut=true;
+this.outRangeY=false;
+}
+}));
+var _18=dojo.connect(dojo.doc,"onmouseup",dojo.hitch(this,function(e){
+this.outRangeY=false;
+dojo.disconnect(_18);
+dojo.disconnect(_17);
+this.grid.onMouseUp(e);
+}));
+},autoRowScrollDrug:function(e){
+this.outRangeY=true;
+this.autoSelectNextRow();
+},autoSelectNextRow:function(){
+if(this.grid.select.outRangeY){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.drugSelectRow(this.drugCurrentPoint.rowIndex+1);
+setTimeout(dojo.hitch(this,"autoSelectNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());
+}
+},autoCellScrollDrug:function(e){
+var _19=null;
+dojo.forEach(this.getHeaderNodes(),function(_1a){
+var _1b=dojo.coords(_1a);
+if(e.clientX>=_1b.x&&e.clientX<=_1b.x+_1b.w){
+_19=Number(_1a.attributes.getNamedItem("idx").value);
+}
+});
+if(_19!=this.drugCurrentPoint.colIndex||this.firstOut){
+if(!this.firstOut){
+this.colChanged=true;
+this.drugCurrentPoint.colIndex=_19;
+}
+this.firstOut=false;
+this.outRangeY=true;
+dojo.hitch(this,"autoSelectCellInNextRow")();
+}
+},autoSelectCellInNextRow:function(){
+if(this.grid.select.outRangeY){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.drugSelectCell(this.drugCurrentPoint.colIndex,this.drugCurrentPoint.rowIndex+1);
+if(this.grid.select.colChanged){
+this.grid.select.colChanged=false;
+}else{
+setTimeout(dojo.hitch(this,"autoSelectCellInNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());
+}
+}
+},getAutoScrollRate:function(){
+return this.autoScrollRate;
+},resetStartPoint:function(){
+if(this.drugSelectionStart.colIndex==-1&&this.drugSelectionStart.rowIndex==-1){
+return;
+}
+this.lastDrugSelectionStart=dojo.clone(this.drugSelectionStart);
+this.drugSelectionStart.colIndex=-1;
+this.drugSelectionStart.rowIndex=-1;
+},restorLastDragPoint:function(){
+this.drugSelectionStart=dojo.clone(this.lastDrugSelectionStart);
+},drugSelectCell:function(_1c,_1d){
+this.cleanAll();
+this.drugCurrentPoint.columnIndex=_1c;
+this.drugCurrentPoint.rowIndex=_1d;
+var _1e,_1f,_20,_21;
+if(_1d<this.drugSelectionStart.rowIndex){
+_1e=_1d;
+_1f=this.drugSelectionStart.rowIndex;
+}else{
+_1e=this.drugSelectionStart.rowIndex;
+_1f=_1d;
+}
+if(_1c<this.drugSelectionStart.colIndex){
+_20=_1c;
+_21=this.drugSelectionStart.colIndex;
+}else{
+_20=this.drugSelectionStart.colIndex;
+_21=_1c;
+}
+for(var i=_20;i<=_21;i++){
+this.addColumnRangeToSelection(i,_1e,_1f);
+}
+},selectColumn:function(_22){
+this.addColumnToSelection(_22);
+},drugSelectColumn:function(_23){
+this.selectColumnRange(this.drugSelectionStart.colIndex,_23);
+},drugSelectColumnToMax:function(dir){
+if(dir=="left"){
+this.selectColumnRange(this.drugSelectionStart.colIndex,0);
+}else{
+this.selectColumnRange(this.drugSelectionStart.colIndex,this.getHeaderNodes().length-1);
+}
+},selectColumnRange:function(_24,_25){
+if(!this.keepState){
+this.cleanAll();
+}
+this._range(_24,_25,dojo.hitch(this,"addColumnToSelection"));
+},addColumnToSelection:function(_26){
+this.selectedColumns[_26]=true;
+dojo.toggleClass(this.getHeaderNodes()[_26],"dojoxGridHeaderSelected",true);
+this._rangCellsInColumn(_26,-1,Number.POSITIVE_INFINITY,this.addCellToSelection);
+},addColumnRangeToSelection:function(_27,_28,to){
+var _29=this.grid.views;
+var _2a=[];
+var _2b=this;
+dojo.forEach(_29.views,function(_2c){
+dojo.forEach(this.getViewRowNodes(_2c.rowNodes),function(_2d,_2e){
+if(!_2d){
+return;
+}
+if(_2e>=_28&&_2e<=to){
+dojo.forEach(_2d.firstChild.rows[0].cells,function(_2f){
+if(_2f&&_2f.attributes&&(idx=_2f.attributes.getNamedItem("idx"))&&Number(idx.value)==_27){
+_2b.addCellToSelection(_2f);
+}
+});
+}
+},this);
+},this);
+},_rangCellsInColumn:function(_30,_31,to,_32){
+var _33=this.grid.views;
+var _34=[];
+var _35=this;
+dojo.forEach(_33.views,function(_36){
+dojo.forEach(this.getViewRowNodes(_36.rowNodes),function(_37,_38){
+if(!_37){
+return;
+}
+if(_38>=_31&&_38<=to){
+dojo.forEach(_37.firstChild.rows[0].cells,function(_39){
+if(_39&&_39.attributes&&(idx=_39.attributes.getNamedItem("idx"))&&Number(idx.value)==_30){
+_32(_39,_35);
+}
+});
+}
+},this);
+},this);
+},drugSelectRow:function(_3a){
+this.drugCurrentPoint.rowIndex=_3a;
+this.cleanCellSelection();
+this.clearDrugDivs();
+var _3b=this.grid.selection;
+_3b._beginUpdate();
+if(!this.keepState){
+_3b.deselectAll();
+}
+_3b.selectRange(this.drugSelectionStart.rowIndex,_3a);
+_3b._endUpdate();
+this.publishRowChange();
+},drugSelectRowToMax:function(dir){
+if(dir=="up"){
+this.drugSelectRow(0);
+}else{
+this.drugSelectRow(this.grid.rowCount);
+}
+},getCellNode:function(_3c,_3d){
+var _3e=[],_3f=null;
+var _40=this.grid.views;
+for(var i=0,v,n;(v=_40.views[i])&&(n=v.getRowNode(_3d));i++){
+_3e.push(n);
+}
+dojo.forEach(_3e,dojo.hitch(function(_41,_42){
+if(_3f){
+return;
+}
+var _43=dojo.query("[idx='"+_3c+"']",_41);
+if(_43&&_43[0]){
+_3f=_43[0];
+}
+}));
+return _3f;
+},addCellToSelection:function(_44,_45){
+if(!_45){
+_45=this;
+}
+_45.selectedCells[_45.selectedCells.length]=_44;
+dojo.toggleClass(_44,_45.selectedClass,true);
+},isColSelected:function(_46){
+return this.selectedColumns[_46];
+},isRowSelected:function(_47){
+return this.grid.selection.selected[_47];
+},isContinuousSelection:function(_48){
+var _49=-1;
+for(var i=0;i<_48.length;i++){
+if(!_48[i]){
+continue;
+}
+if(_49<0||i-_49==1){
+_49=i;
+}else{
+if(i-_49>=2){
+return false;
+}
+}
+}
+return _49>=0?true:false;
+},cleanCellSelection:function(){
+dojo.forEach(this.selectedCells,dojo.hitch(this,"removeCellSelectedState"));
+this.selectedCells=[];
+dojo.forEach(this.selectedColumns,function(_4a,_4b){
+if(_4a){
+dojo.toggleClass(this.getHeaderNodes()[_4b],"dojoxGridHeaderSelected",false);
+}
+},this);
+this.selectedColumns=[];
+this.grid.edit.isEditing()&&this.grid.edit.apply();
+},removeCellSelectedState:function(_4c){
+dojo.toggleClass(_4c,this.selectedClass,false);
+},cleanAll:function(){
+this.cleanCellSelection();
+this.grid.selection.clear();
+this.publishRowChange();
+},refreshColumnSelection:function(){
+dojo.forEach(this.selectedColumns,dojo.hitch(this,function(_4d,_4e){
+if(_4d){
+this.grid.select.addColumnToSelection(_4e);
+}
+}));
+},inSelectedArea:function(_4f,_50){
+return this.selectedColumns[_4f]||this.gird.selection.selecteded[_50];
+},publishRowChange:function(){
+dojo.publish(this.grid.rowSelectionChangedTopic,[this]);
+},getViewRowNodes:function(_51){
+var _52=[];
+for(i in _51){
+_52.push(_51[i]);
+}
+return _52;
+},getFirstSelected:function(){
+return dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();
+},getLastSelected:function(){
+var _53=this.grid.selection.selected;
+for(var i=_53.length-1;i>=0;i--){
+if(_53[i]){
+return i;
+}
+}
+return -1;
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Descending","sortingState":"${0} - ${1}","ascending":"Ascending","nestedSort":"Nested Sort","unsorted":"Do not sort this column","singleSort":"Single Sort"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Sestupně","ascending":"Vzestupně","nestedSort":"Vnořené řazení","unsorted":"Tento sloupec neřadit","singleSort":"Jednoduché řazení","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Absteigend","ascending":"Aufsteigend","nestedSort":"Verschachtelte Sortierung","unsorted":"Spalte nicht sortieren","singleSort":"Einfache Sortierung","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Descendente","ascending":"Ascendente","nestedSort":"Orden anidado","unsorted":"No ordenar esta columna","singleSort":"Orden único","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Décroissant","ascending":"Croissant","nestedSort":"Tri imbriqué","unsorted":"Ne pas trier cette colonne","singleSort":"Tri unique","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Csökkenő","ascending":"Növekvő","nestedSort":"Beágyazott rendezés","unsorted":"Az oszlop nincs rendezve","singleSort":"Egyszerű rendezés","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Decrescente","ascending":"Crescente","nestedSort":"Ordinamento nidificato","unsorted":"Non ordinare questa colonna","singleSort":"Ordinamento singolo","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"降順","ascending":"昇順","nestedSort":"ネストされたソート","unsorted":"この列はソートしないでください","singleSort":"単一ソート","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"내림차순","ascending":"오름차순","nestedSort":"중첩 정렬","unsorted":"이 열을 정렬하지 않음","singleSort":"단일 정렬","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Malejąco","ascending":"Rosnąco","nestedSort":"Sortowanie zagnieżdżone","unsorted":"Nie sortuj tej kolumny","singleSort":"Sortowanie pojedyncze","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"Descendente","ascending":"Ascendente","nestedSort":"Classificação Aninhada","unsorted":"Não classificar esta coluna","singleSort":"Classificação Única","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"По убыванию","ascending":"По возрастанию","nestedSort":"Вложенная сортировка","unsorted":"Не сортировать этот столбец","singleSort":"Однократная сортировка","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"遞減","ascending":"遞增","nestedSort":"巢狀排序","unsorted":"不排序此直欄","singleSort":"單一排序","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js b/js/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js
@@ -0,0 +1,1 @@
+({"descending":"降序","ascending":"升序","nestedSort":"嵌套排序","unsorted":"不要对此列排序","singleSort":"单一排序","sortingState":"${0} - ${1}"})
\ No newline at end of file
diff --git a/js/dojo/dojox/grid/enhanced/plugins/DnD.js b/js/dojo/dojox/grid/enhanced/plugins/DnD.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/plugins/DnD.js
@@ -0,0 +1,13 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.DnD"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.DnD"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.DnD");
+dojo.require("dojox.grid.enhanced.dnd._DndMovingManager");
+dojo.declare("dojox.grid.enhanced.plugins.DnD",dojox.grid.enhanced.dnd._DndMovingManager,{});
+}
diff --git a/js/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js b/js/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js
@@ -0,0 +1,291 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.IndirectSelection");
+dojo.require("dojox.grid.cells.dijit");
+dojo.require("dojox.grid.cells._base");
+dojo.declare("dojox.grid.enhanced.plugins.IndirectSelection",null,{constructor:function(_1){
+this.grid=_1;
+dojo.connect(_1.layout,"setStructure",dojo.hitch(_1.layout,this.addRowSelectCell));
+},addRowSelectCell:function(){
+if(!this.grid.indirectSelection||this.grid.selectionMode=="none"){
+return;
+}
+var _2=false,_3=["get","formatter","field","fields"],_4={type:dojox.grid.cells.DijitMultipleRowSelector,name:"",editable:true,width:"30px",styles:"text-align: center;"};
+dojo.forEach(this.structure,dojo.hitch(this,function(_5){
+var _6=_5.cells;
+if(_6&&_6.length>0&&!_2){
+var _7=_6[0];
+if(_7[0]&&_7[0]["isRowSelector"]){
+_2=true;
+return;
+}
+var _8,_9=this.grid.selectionMode=="single"?dojox.grid.cells.DijitSingleRowSelector:dojox.grid.cells.DijitMultipleRowSelector;
+if(!dojo.isObject(this.grid.indirectSelection)){
+_8=dojo.mixin(_4,{type:_9});
+}else{
+_8=dojo.mixin(_4,this.grid.indirectSelection,{type:_9,editable:true});
+dojo.forEach(_3,function(_a){
+if(_a in _8){
+delete _8[_a];
+}
+});
+}
+_6.length>1&&(_8["rowSpan"]=_6.length);
+dojo.forEach(this.cells,function(_b,i){
+if(_b.index>=0){
+_b.index+=1;
+}else{
+}
+});
+var _c=this.addCellDef(0,0,_8);
+_c.index=0;
+_7.unshift(_c);
+this.cells.unshift(_c);
+this.grid.rowSelectCell=_c;
+_2=true;
+}
+}));
+this.cellCount=this.cells.length;
+}});
+dojo.declare("dojox.grid.cells._SingleRowSelectorMixin",null,{alwaysEditing:true,widgetMap:{},widget:null,isRowSelector:true,defaultValue:false,formatEditing:function(_d,_e){
+this.needFormatNode(_d,_e);
+},_formatNode:function(_f,_10){
+this.formatNode(_f,_10);
+},setValue:function(_11,_12){
+return;
+},get:function(_13){
+var _14=this.widgetMap[this.view.id]?this.widgetMap[this.view.id][_13]:null;
+var _15=_14?_14.attr("checked"):"";
+return _15;
+},_fireSelectionChanged:function(){
+dojo.publish(this.grid.rowSelectionChangedTopic,[this]);
+},_selectionChanged:function(obj){
+if(obj==this){
+return;
+}
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _16=this.widgetMap[this.view.id][idx];
+var _17=!!this.grid.selection.selected[idx];
+_16.attr("checked",_17);
+}
+this.defaultValue=false;
+this.grid.edit.isEditing()&&this.grid.edit.apply();
+},_toggleSingleRow:function(idx,_18){
+var _19;
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_18?"addToSelection":"deselect"])(idx);
+if(this.widgetMap[this.view.id]&&(_19=this.widgetMap[this.view.id][idx])){
+_19.attr("checked",_18);
+}
+this._fireSelectionChanged();
+},inIndirectSelectionMode:function(){
+},toggleAllSelection:function(){
+}});
+dojo.declare("dojox.grid.cells._MultipleRowSelectorMixin",null,{swipeStartRowIndex:-1,swipeMinRowIndex:-1,swipeMaxRowIndex:-1,toSelect:false,lastClickRowIdx:-1,toggleAllTrigerred:false,_inDndSelection:false,domousedown:function(e){
+if(e.target.tagName=="INPUT"){
+this._startSelection(e.rowIndex);
+}
+dojo.stopEvent(e);
+},domousemove:function(e){
+this._updateSelection(e,0);
+},onRowMouseOver:function(e){
+this._updateSelection(e,0);
+if(this.grid.dnd){
+this._inDndSelection=this.grid.select.isInSelectingMode("row");
+}
+},domouseup:function(e){
+dojo.isIE&&this.view.content.decorateEvent(e);
+var _1a=e.cellIndex>=0&&(this.inIndirectSelectionMode()||this._inDndSelection)&&!this.grid.edit.isEditRow(e.rowIndex);
+_1a&&this._focusEndingCell(e.rowIndex,e.cellIndex);
+this._finisheSelect();
+},dokeyup:function(e){
+if(!e.shiftKey){
+this._finisheSelect();
+}
+},_startSelection:function(_1b){
+this.swipeStartRowIndex=this.swipeMinRowIndex=this.swipeMaxRowIndex=_1b;
+this.toSelect=!this.widgetMap[this.view.id][_1b].attr("checked");
+},_updateSelection:function(e,_1c){
+if(this.swipeStartRowIndex<0){
+return;
+}
+var _1d=_1c!=0;
+var _1e=e.rowIndex-this.swipeStartRowIndex+_1c;
+_1e>0&&(this.swipeMaxRowIndex<e.rowIndex+_1c)&&(this.swipeMaxRowIndex=e.rowIndex+_1c);
+_1e<0&&(this.swipeMinRowIndex>e.rowIndex+_1c)&&(this.swipeMinRowIndex=e.rowIndex+_1c);
+if(this.swipeMinRowIndex!=this.swipeMaxRowIndex){
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _1f=(idx>=(_1e>0?this.swipeStartRowIndex:e.rowIndex+_1c)&&idx<=(_1e>0?e.rowIndex+_1c:this.swipeStartRowIndex));
+var _20=(idx>=this.swipeMinRowIndex&&idx<=this.swipeMaxRowIndex);
+if(_1f&&!(_1e==0&&!this.toSelect)){
+(this.widgetMap[this.view.id][idx]).attr("checked",this.toSelect);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[this.toSelect?"addToSelection":"deselect"])(idx);
+}else{
+if(_20&&!_1d){
+(this.widgetMap[this.view.id][idx]).attr("checked",!this.toSelect);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[!this.toSelect?"addToSelection":"deselect"])(idx);
+}
+}
+}
+}
+this._fireSelectionChanged();
+},swipeSelectionByKey:function(e,_21){
+if(this.swipeStartRowIndex<0){
+this.swipeStartRowIndex=e.rowIndex;
+if(_21>0){
+this.swipeMaxRowIndex=e.rowIndex+_21;
+this.swipeMinRowIndex=e.rowIndex;
+}else{
+this.swipeMinRowIndex=e.rowIndex+_21;
+this.swipeMaxRowIndex=e.rowIndex;
+}
+this.toSelect=this.widgetMap[this.view.id][e.rowIndex].attr("checked");
+}
+this._updateSelection(e,_21);
+},_finisheSelect:function(){
+this.swipeStartRowIndex=-1;
+this.swipeMinRowIndex=-1;
+this.swipeMaxRowIndex=-1;
+this.toSelect=false;
+},inIndirectSelectionMode:function(){
+return this.swipeStartRowIndex>=0;
+},toggleAllSelection:function(_22){
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _23=this.widgetMap[this.view.id][idx];
+_23.attr("checked",_22);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_22?"addToSelection":"deselect"])(idx);
+}
+!_22&&this.grid.selection.deselectAll();
+this.defaultValue=_22;
+this.toggleAllTrigerred=true;
+this._fireSelectionChanged();
+}});
+dojo.declare("dojox.grid.cells.DijitSingleRowSelector",[dojox.grid.cells._Widget,dojox.grid.cells._SingleRowSelectorMixin],{widgetClass:dijit.form.RadioButton,constructor:function(){
+dojo.subscribe(this.grid.rowSelectionChangedTopic,this,this._selectionChanged);
+dojo.subscribe(this.grid.sortRowSelectionChangedTopic,this,this._selectionChanged);
+this.grid.indirectSelector=this;
+},formatNode:function(_24,_25){
+if(!this.widgetClass){
+return _24;
+}
+!this.widgetMap[this.view.id]&&(this.widgetMap[this.view.id]={});
+var _26=this.widgetMap[this.view.id][_25];
+var _27=this.getNode(_25);
+if(!_27){
+return;
+}
+var _28=!_27.firstChild||(_26&&_26.domNode!=_27.firstChild);
+var _29=_28&&!_27.firstChild?_27.appendChild(dojo.create("div")):_27.firstChild;
+if(!_26||dojo.isIE){
+!this.widgetProps&&(this.widgetProps={});
+this.widgetProps.name="select_"+this.view.id;
+var _2a=this.getDefaultValue(_26,_25);
+this.widget=_26=this.createWidget(_29,_24,_25);
+this.widgetMap[this.view.id][_25]=_26;
+this.widget.attr("checked",_2a);
+dojo.connect(_26,"_onClick",dojo.hitch(this,function(e){
+this._selectRow(e,_25);
+}));
+dojo.connect(_26.domNode,"onkeyup",dojo.hitch(this,function(e){
+e.keyCode==dojo.keys.SPACE&&this._selectRow(e,_25,true);
+}));
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_2a?"addToSelection":"deselect"])(_25);
+}else{
+this.widget=_26;
+dojo.addClass(this.widget.domNode,"dojoxGridWidgetHidden");
+_28&&this.attachWidget(_29,_24,_25);
+}
+this.grid.rowHeightChanged(_25);
+dojo.removeClass(this.widget.domNode,"dojoxGridWidgetHidden");
+(_25==this.grid.lastRenderingRowIdx)&&dojo.removeClass(this.grid.domNode,"dojoxGridSortInProgress");
+},getDefaultValue:function(_2b,_2c){
+var _2d=_2b?_2b.attr("checked"):this.defaultValue;
+if(!_2b){
+if(this.grid.nestedSorting){
+_2d=_2d||this.grid.getStoreSelectedValue(_2c);
+}
+_2d=this.grid.selection.isSelected(_2c)?true:_2d;
+}
+return _2d;
+},focus:function(_2e){
+var _2f=this.widgetMap[this.view.id][_2e];
+if(_2f){
+setTimeout(dojo.hitch(_2f,function(){
+dojox.grid.util.fire(this,"focus");
+}),0);
+}
+},_focusEndingCell:function(_30,_31){
+var _32=this.grid.getCell(_31);
+this.grid.focus.setFocusCell(_32,_30);
+this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();
+},_selectRow:function(e,_33,_34){
+if(dojo.isMoz&&_34){
+return;
+}
+dojo.stopEvent(e);
+this._focusEndingCell(_33,0);
+var _35=!this.grid.selection.selected[_33];
+this.grid.selection.deselectAll();
+this.grid.selection.addToSelection(_33);
+if(!dojo.isMoz){
+var _36=this.widgetMap[this.view.id][_33];
+_36.attr("checked",true);
+}
+this._fireSelectionChanged();
+},toggleRow:function(idx,_37){
+var _38=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();
+if(idx!=_38&&!_37||idx==_38&&_37){
+return;
+}
+var _39;
+if(idx!=_38&&_37&&this.widgetMap[this.view.id]&&(_39=this.widgetMap[this.view.id][_38])){
+_39.attr("checked",false);
+}
+this.grid.selection.deselectAll();
+this._toggleSingleRow(idx,_37);
+},setDisabled:function(idx,_3a){
+if(this.widgetMap[this.view.id]){
+var _3b=this.widgetMap[this.view.id][idx];
+_3b&&_3b.attr("disabled",_3a);
+}
+}});
+dojo.declare("dojox.grid.cells.DijitMultipleRowSelector",[dojox.grid.cells.DijitSingleRowSelector,dojox.grid.cells._MultipleRowSelectorMixin],{widgetClass:dijit.form.CheckBox,constructor:function(){
+dojo.connect(dojo.doc,"onmouseup",this,"domouseup");
+this.grid.indirectSelector=this;
+},_selectRow:function(e,_3c,_3d){
+dojo.stopEvent(e);
+this._focusEndingCell(_3c,0);
+var _3e=_3c-this.lastClickRowIdx;
+if(this.lastClickRowIdx>=0&&!e.ctrlKey&&!e.altKey&&e.shiftKey){
+var _3f=this.widgetMap[this.view.id][_3c].attr("checked");
+_3f=_3d?!_3f:_3f;
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _40=(idx>=(_3e>0?this.lastClickRowIdx:_3c)&&idx<=(_3e>0?_3c:this.lastClickRowIdx));
+if(_40){
+var _41=this.widgetMap[this.view.id][idx];
+_41.attr("checked",_3f);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_3f?"addToSelection":"deselect"])(idx);
+}
+}
+}else{
+var _42=!this.grid.selection.selected[_3c];
+var _41=this.widgetMap[this.view.id][_3c];
+_41.attr("checked",_42);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_42?"addToSelection":"deselect"])(_3c);
+}
+this.lastClickRowIdx=_3c;
+this._fireSelectionChanged();
+},toggleRow:function(idx,_43){
+this._toggleSingleRow(idx,_43);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/plugins/Menu.js b/js/dojo/dojox/grid/enhanced/plugins/Menu.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/plugins/Menu.js
@@ -0,0 +1,70 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.Menu"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.Menu"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.Menu");
+dojo.declare("dojox.grid.enhanced.plugins.Menu",null,{constructor:function(_1){
+_1.mixin(_1,this);
+},_initMenus:function(){
+var _2=this.menuContainer;
+!this.headerMenu&&(this.headerMenu=this._getMenuWidget(this.menus["headerMenu"]));
+!this.rowMenu&&(this.rowMenu=this._getMenuWidget(this.menus["rowMenu"]));
+!this.cellMenu&&(this.cellMenu=this._getMenuWidget(this.menus["cellMenu"]));
+!this.selectedRegionMenu&&(this.selectedRegionMenu=this._getMenuWidget(this.menus["selectedRegionMenu"]));
+this.headerMenu&&this.attr("headerMenu",this.headerMenu)&&this.setupHeaderMenu();
+this.rowMenu&&this.attr("rowMenu",this.rowMenu);
+this.cellMenu&&this.attr("cellMenu",this.cellMenu);
+this.isDndSelectEnable&&this.selectedRegionMenu&&dojo.connect(this.select,"setDrugCoverDivs",dojo.hitch(this,this._bindDnDSelectEvent));
+},_getMenuWidget:function(_3){
+if(!_3){
+return;
+}
+var _4=dijit.byId(_3);
+if(!_4){
+throw new Error("Menu '"+_3+"' not existed");
+}
+return _4;
+},_bindDnDSelectEvent:function(){
+dojo.forEach(this.select.coverDIVs,dojo.hitch(this,function(_5){
+this.selectedRegionMenu.bindDomNode(_5);
+dojo.connect(_5,"contextmenu",dojo.hitch(this,function(e){
+dojo.mixin(e,this.select.getSelectedRegionInfo());
+this.onSelectedRegionContextMenu(e);
+}));
+}));
+},_setRowMenuAttr:function(_6){
+this._setRowCellMenuAttr(_6,"rowMenu");
+},_setCellMenuAttr:function(_7){
+this._setRowCellMenuAttr(_7,"cellMenu");
+},_setRowCellMenuAttr:function(_8,_9){
+if(!_8){
+return;
+}
+if(this[_9]){
+this[_9].unBindDomNode(this.domNode);
+}
+this[_9]=_8;
+this[_9].bindDomNode(this.domNode);
+},showRowCellMenu:function(e){
+var _a=e.sourceView.declaredClass=="dojox.grid._RowSelector";
+if(this.rowMenu&&(!e.cell||this.selection.isSelected(e.rowIndex))){
+this.rowMenu._openMyself(e);
+dojo.stopEvent(e);
+return;
+}
+if(_a||e.cell&&e.cell.isRowSelector){
+dojo.stopEvent(e);
+return;
+}
+if(this.isDndSelectEnable){
+this.select.cellClick(e.cellIndex,e.rowIndex);
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}
+this.cellMenu&&this.cellMenu._openMyself(e);
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/plugins/NestedSorting.js b/js/dojo/dojox/grid/enhanced/plugins/NestedSorting.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/plugins/NestedSorting.js
@@ -0,0 +1,730 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.NestedSorting"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.NestedSorting"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.NestedSorting");
+dojo.declare("dojox.grid.enhanced.plugins.NestedSorting",null,{sortAttrs:[],_unarySortCell:{},_minColWidth:63,_widthDelta:23,_minColWidthUpdated:false,_sortTipMap:{},_overResizeWidth:3,storeItemSelected:"storeItemSelectedAttr",exceptionalSelectedItems:[],_a11yText:{"dojoxGridDescending":"&#9662;","dojoxGridAscending":"&#9652;","dojoxGridAscendingTip":"&#1784;","dojoxGridDescendingTip":"&#1783;","dojoxGridUnsortedTip":"x"},constructor:function(_1){
+_1.mixin(_1,this);
+dojo.forEach(_1.views.views,function(_2){
+dojo.connect(_2,"renderHeader",dojo.hitch(_2,_1._initSelectCols));
+dojo.connect(_2.header,"domousemove",_2.grid,"_sychronizeResize");
+});
+_1.getSortProps=_1._getDsSortAttrs;
+dojo.connect(_1,"_onFetchComplete",_1,"updateNewRowSelection");
+if(_1.indirectSelection&&_1.rowSelectCell.toggleAllSelection){
+dojo.connect(_1.rowSelectCell,"toggleAllSelection",_1,"allSelectionToggled");
+}
+dojo.subscribe(_1.rowSelectionChangedTopic,_1,_1._selectionChanged);
+_1.focus.destroy();
+_1.focus=new dojox.grid.enhanced.plugins._NestedSortingFocusManager(_1);
+dojo.connect(_1.views,"render",_1,"initAriaInfo");
+},setSortIndex:function(_3,_4,e){
+if(!this.nestedSorting){
+this.inherited(arguments);
+}else{
+if(this.dnd&&!this.dndRowConn){
+this.dndRowConn=dojo.connect(this.select,"startMoveRows",dojo.hitch(this,this.clearSort));
+}
+this.retainLastRowSelection();
+this.inSorting=true;
+this._toggleProgressTip(true,e);
+this._updateSortAttrs(e,_4);
+this.focus.addSortFocus(e);
+if(this.canSort()){
+this.sort();
+this.edit.info={};
+this.update();
+}
+this._toggleProgressTip(false,e);
+this.inSorting=false;
+}
+},_updateSortAttrs:function(e,_5){
+var _6=false;
+var _7=!!e.unarySortChoice;
+if(_7){
+var _8=this.getCellSortInfo(e.cell);
+var _9=(this.sortAttrs.length>0&&_8["sortPos"]!=1)?_8["unarySortAsc"]:this._getNewSortState(_8["unarySortAsc"]);
+if(_9&&_9!=0){
+this.sortAttrs=[{attr:e.cell.field,asc:_9,cell:e.cell,cellNode:e.cellNode}];
+this._unarySortCell={cell:e.cell,node:e.cellNode};
+}else{
+this.sortAttrs=[];
+this._unarySortCell=null;
+}
+}else{
+this.setCellSortInfo(e,_5);
+}
+},getCellSortInfo:function(_a){
+if(!_a){
+return false;
+}
+var _b=null;
+var _c=this.sortAttrs;
+dojo.forEach(_c,function(_d,_e,_f){
+if(_d&&_d["attr"]==_a.field&&_d["cell"]==_a){
+_b={unarySortAsc:_f[0]?_f[0]["asc"]:undefined,nestedSortAsc:_d["asc"],sortPos:_e+1};
+}
+});
+return _b?_b:{unarySortAsc:_c&&_c[0]?_c[0]["asc"]:undefined,nestedSortAsc:undefined,sortPos:-1};
+},setCellSortInfo:function(e,_10){
+var _11=e.cell;
+var _12=false;
+var _13=[];
+var _14=this.sortAttrs;
+dojo.forEach(_14,dojo.hitch(this,function(_15,_16){
+if(_15&&_15["attr"]==_11.field){
+var si=_10?_10:this._getNewSortState(_15["asc"]);
+if(si==1||si==-1){
+_15["asc"]=si;
+}else{
+if(si==0){
+_13.push(_16);
+}else{
+throw new Exception("Illegal nested sorting status - "+si);
+}
+}
+_12=true;
+}
+}));
+var _17=0;
+dojo.forEach(_13,function(_18){
+_14.splice((_18-_17++),1);
+});
+if(!_12){
+var si=_10?_10:1;
+if(si!=0){
+_14.push({attr:_11.field,asc:si,cell:e.cell,cellNode:e.cellNode});
+}
+}
+if(_13.length>0){
+this._unarySortCell={cell:_14[0]["cell"],node:_14[0]["cellNode"]};
+}
+},_getDsSortAttrs:function(){
+var _19=[];
+var si=null;
+dojo.forEach(this.sortAttrs,function(_1a){
+if(_1a&&(_1a["asc"]==1||_1a["asc"]==-1)){
+_19.push({attribute:_1a["attr"],descending:(_1a["asc"]==-1)});
+}
+});
+return _19.length>0?_19:null;
+},_getNewSortState:function(si){
+return si?(si==1?-1:(si==-1?0:1)):1;
+},sortStateInt2Str:function(si){
+if(!si){
+return "Unsorted";
+}
+switch(si){
+case 1:
+return "Ascending";
+case -1:
+return "Descending";
+default:
+return "Unsorted";
+}
+},clearSort:function(){
+dojo.query("[id*='Sort']",this.viewsHeaderNode).forEach(function(_1b){
+dojo.addClass(_1b,"dojoxGridUnsorted");
+});
+this.sortAttrs=[];
+this.focus.clearHeaderFocus();
+},_getNestedSortHeaderContent:function(_1c){
+var n=_1c.name||_1c.grid.getCellName(_1c);
+if(_1c.grid.pluginMgr.isFixedCell(_1c)){
+return ["<div class=\"dojoxGridCellContent\">",n,"</div>"].join("");
+}
+var _1d=_1c.grid.getCellSortInfo(_1c);
+var _1e=_1c.grid.sortAttrs;
+var _1f=(_1e&&_1e.length>1&&_1d["sortPos"]>=1);
+var _20=(_1e&&_1e.length==1&&_1d["sortPos"]==1);
+var _21=_1c.grid;
+var ret=["<div class=\"dojoxGridSortRoot\">","<div class=\"dojoxGridSortWrapper\">","<span id=\"selectSortSeparator"+_1c.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridNestedSortWrapper\" tabindex=\"-1\">","<span id=\""+_1c.view.id+"SortPos"+_1c.index+"\" class=\"dojoxGridSortPos "+(_1f?"":"dojoxGridSortPosOff")+"\">"+(_1f?_1d["sortPos"]:"")+"</span>","<span id=\"nestedSortCol"+_1c.index+"\" class=\"dojoxGridSort dojoxGridNestedSort "+(_1f?("dojoxGrid"+_21.sortStateInt2Str(_1d["nestedSortAsc"])):"dojoxGridUnsorted")+"\">",_21._a11yText["dojoxGrid"+_21.sortStateInt2Str(_1d["nestedSortAsc"])]||".","</span>","</span>","<span id=\"SortSeparator"+_1c.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridUnarySortWrapper\" tabindex=\"-1\"><span id=\"unarySortCol"+_1c.index+"\" class=\"dojoxGridSort dojoxGridUnarySort "+(_20?("dojoxGrid"+_21.sortStateInt2Str(_1d["unarySortAsc"])):"dojoxGridUnsorted")+"\">",_21._a11yText["dojoxGrid"+_21.sortStateInt2Str(_1d["unarySortAsc"])]||".","</span></span>","</div>","<div tabindex=\"-1\" id=\"selectCol"+_1c.index+"\" class=\"dojoxGridHeaderCellSelectRegion\"><span id=\"caption"+_1c.index+"\">"+n+"<span></div>","</div>"];
+return ret.join("");
+},addHoverSortTip:function(e){
+this._sortTipMap[e.cellIndex]=true;
+var _22=this.getCellSortInfo(e.cell);
+if(!_22){
+return;
+}
+var _23=this._getCellElements(e.cellNode);
+if(!_23){
+return;
+}
+var _24=this.sortAttrs;
+var _25=!_24||_24.length<1;
+var _26=(_24&&_24.length==1&&_22["sortPos"]==1);
+dojo.addClass(_23["selectSortSeparator"],"dojoxGridSortSeparatorOn");
+if(_25||_26){
+this._addHoverUnarySortTip(_23,_22,e);
+}else{
+this._addHoverNestedSortTip(_23,_22,e);
+this.updateMinColWidth(_23["nestedSortPos"]);
+}
+var _27=_23["selectRegion"];
+this._fixSelectRegion(_27);
+if(!dijit.hasWaiRole(_27)){
+dijit.setWaiState(_27,"label","Column "+(e.cellIndex+1)+" "+e.cell.field);
+}
+this._toggleHighlight(e.sourceView,e);
+this.focus._updateFocusBorder();
+},_addHoverUnarySortTip:function(_28,_29,e){
+dojo.addClass(_28["nestedSortWrapper"],"dojoxGridUnsorted");
+var _2a=this.sortStateInt2Str(this._getNewSortState(_29["unarySortAsc"]));
+dijit.setWaiState(_28["unarySortWrapper"],"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_2a.toLowerCase()+" single sort");
+var _2b="dojoxGrid"+_2a+"Tip";
+dojo.addClass(_28["unarySortChoice"],_2b);
+_28["unarySortChoice"].innerHTML=this._a11yText[_2b];
+this._addTipInfo(_28["unarySortWrapper"],this._composeSortTip(_2a,"singleSort"));
+},_addHoverNestedSortTip:function(_2c,_2d,e){
+var _2e=_2c["nestedSortPos"];
+var _2f=_2c["unarySortWrapper"];
+var _30=_2c["nestedSortWrapper"];
+var _31=this.sortAttrs;
+dojo.removeClass(_30,"dojoxGridUnsorted");
+var _32=this.sortStateInt2Str(this._getNewSortState(_2d["nestedSortAsc"]));
+dijit.setWaiState(_30,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_32.toLowerCase()+" nested sort");
+var _33="dojoxGrid"+_32+"Tip";
+this._addA11yInfo(_2c["nestedSortChoice"],_33);
+this._addTipInfo(_30,this._composeSortTip(_32,"nestedSort"));
+_32=this.sortStateInt2Str(_2d["unarySortAsc"]);
+dijit.setWaiState(_2f,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_32.toLowerCase()+" single sort");
+_33="dojoxGrid"+_32+"Tip";
+this._addA11yInfo(_2c["unarySortChoice"],_33);
+this._addTipInfo(_2f,this._composeSortTip(_32,"singleSort"));
+dojo.addClass(_2c["sortSeparator"],"dojoxGridSortSeparatorOn");
+dojo.removeClass(_2e,"dojoxGridSortPosOff");
+if(_2d["sortPos"]<1){
+_2e.innerHTML=(_31?_31.length:0)+1;
+if(!this._unarySortInFocus()&&_31&&_31.length==1){
+var _34=this._getUnaryNode();
+_34.innerHTML="1";
+dojo.removeClass(_34,"dojoxGridSortPosOff");
+dojo.removeClass(_34.parentNode,"dojoxGridUnsorted");
+this._fixSelectRegion(this._getCellElements(_34)["selectRegion"]);
+}
+}
+},_unarySortInFocus:function(){
+return this._unarySortCell.cell&&this.focus.headerCellInFocus(this._unarySortCell.cell.index);
+},_composeSortTip:function(_35,_36){
+_35=_35.toLowerCase();
+if(_35=="unsorted"){
+return this._nls[_35];
+}else{
+var tip=dojo.string.substitute(this._nls["sortingState"],[this._nls[_36],this._nls[_35]]);
+return tip;
+}
+},_addTipInfo:function(_37,_38){
+dojo.attr(_37,"title",_38);
+dojo.query("span",_37).forEach(function(n){
+dojo.attr(n,"title",_38);
+});
+},_addA11yInfo:function(_39,_3a){
+dojo.addClass(_39,_3a);
+_39.innerHTML=this._a11yText[_3a];
+},removeHoverSortTip:function(e){
+if(!this._sortTipMap[e.cellIndex]){
+return;
+}
+var _3b=this.getCellSortInfo(e.cell);
+if(!_3b){
+return;
+}
+var _3c=this._getCellElements(e.cellNode);
+if(!_3c){
+return;
+}
+var _3d=_3c.nestedSortChoice;
+var _3e=_3c.unarySortChoice;
+var _3f=_3c.unarySortWrapper;
+var _40=_3c.nestedSortWrapper;
+this._toggleHighlight(e.sourceView,e,true);
+function _41(_42){
+dojo.forEach(_42,function(_43){
+var _44=dojo.trim((" "+_43["className"]+" ").replace(/\sdojoxGrid\w+Tip\s/g," "));
+if(_43["className"]!=_44){
+_43["className"]=_44;
+}
+});
+};
+_41([_3d,_3e]);
+_3e.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3b["unarySortAsc"])]||".";
+_3d.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3b["nestedSortAsc"])]||".";
+dojo.removeClass(_3c["selectSortSeparator"],"dojoxGridSortSeparatorOn");
+dojo.removeClass(_3c["sortSeparator"],"dojoxGridSortSeparatorOn");
+if(_3b["sortPos"]==1&&this.focus.isNavHeader()&&!this.focus.headerCellInFocus(e.cellIndex)){
+dojo.removeClass(_3c["nestedSortWrapper"],"dojoxGridUnsorted");
+}
+var _45=this.sortAttrs;
+if(!isNaN(_3b["sortPos"])&&_3b["sortPos"]<1){
+_3c["nestedSortPos"].innerHTML="";
+dojo.addClass(_40,"dojoxGridUnsorted");
+if(!this.focus._focusBorderBox&&_45&&_45.length==1){
+var _46=this._getUnaryNode();
+_46.innerHTML="";
+dojo.addClass(_46,"dojoxGridSortPosOff");
+this._fixSelectRegion(this._getCellElements(_46)["selectRegion"]);
+}
+}
+this._fixSelectRegion(_3c["selectRegion"]);
+dijit.removeWaiState(_40,"label");
+dijit.removeWaiState(_3f,"label");
+if(_3b["sortPos"]>=0){
+var _47=(_45.length==1);
+var _48=_47?_3f:_40;
+this._setSortRegionWaiState(_47,e.cellIndex,e.cell.field,_3b["sortPos"],_48);
+}
+this.focus._updateFocusBorder();
+this._sortTipMap[e.cellIndex]=false;
+},_getUnaryNode:function(){
+for(var i=0;i<this.views.views.length;i++){
+var n=dojo.byId(this.views.views[i].id+"SortPos"+this._unarySortCell.cell.index);
+if(n){
+return n;
+}
+}
+},_fixSelectRegion:function(_49){
+var _4a=_49.previousSibling;
+var _4b=dojo.contentBox(_49.parentNode);
+var _4c=dojo.marginBox(_49);
+var _4d=dojo.marginBox(_4a);
+if(dojo.isIE&&!dojo._isBodyLtr()){
+var w=0;
+dojo.forEach(_4a.childNodes,function(_4e){
+w+=dojo.marginBox(_4e).w;
+});
+_4d.w=w;
+_4d.l=(_4d.t=0);
+dojo.marginBox(_4a,_4d);
+}
+if(_4c.w!=(_4b.w-_4d.w)){
+_4c.w=_4b.w-_4d.w;
+if(!dojo.isWebKit){
+dojo.marginBox(_49,_4c);
+}else{
+_4c.h=dojo.contentBox(_4b).h;
+dojo.style(_49,"width",(_4c.w-4)+"px");
+}
+}
+},updateMinColWidth:function(_4f){
+if(this._minColWidthUpdated){
+return;
+}
+var _50=_4f.innerHTML;
+_4f.innerHTML=dojo.query(".dojoxGridSortWrapper",this.viewsHeaderNode).length;
+var _51=_4f.parentNode.parentNode;
+this._minColWidth=dojo.marginBox(_51).w+this._widthDelta;
+_4f.innerHTML=_50;
+this._minColWidthUpdated=true;
+},getMinColWidth:function(){
+return this._minColWidth;
+},_initSelectCols:function(){
+var _52=dojo.query(".dojoxGridHeaderCellSelectRegion",this.headerContentNode);
+var _53=dojo.query(".dojoxGridUnarySortWrapper",this.headerContentNode);
+var _54=dojo.query(".dojoxGridNestedSortWrapper",this.headerContentNode);
+_52.concat(_53).concat(_54).forEach(function(_55){
+dojo.connect(_55,"onmousemove",dojo.hitch(this.grid,this.grid._toggleHighlight,this));
+dojo.connect(_55,"onmouseout",dojo.hitch(this.grid,this.grid._removeActiveState));
+},this);
+this.grid._fixHeaderCellStyle(_52,this);
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.grid._fixAllSelectRegion();
+}
+},_fixHeaderCellStyle:function(_56,_57){
+dojo.forEach(_56,dojo.hitch(this,function(_58){
+var _59=dojo.marginBox(_58),_5a=this._getCellElements(_58),_5b=_5a.sortWrapper;
+_5b.style.height=_59.h+"px";
+_5b.style.lineHeight=_59.h+"px";
+var _5c=_5a["selectSortSeparator"],_5d=_5a["sortSeparator"];
+_5d.style.height=_5c.style.height=_59.h*3/5+"px";
+_5d.style.marginTop=_5c.style.marginTop=_59.h*1/5+"px";
+_57.header.overResizeWidth=this._overResizeWidth;
+}));
+},_fixAllSelectRegion:function(){
+var _5e=dojo.query(".dojoxGridHeaderCellSelectRegion",this.viewsHeaderNode);
+dojo.forEach(_5e,dojo.hitch(this,function(_5f){
+this._fixSelectRegion(_5f);
+}));
+},_toggleHighlight:function(_60,e,_61){
+if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
+return;
+}
+var _62=this._getCellElements(e.target);
+if(!_62){
+return;
+}
+var _63=_62["selectRegion"];
+var _64=_62["nestedSortWrapper"];
+var _65=_62["unarySortWrapper"];
+dojo.removeClass(_63,"dojoxGridSelectRegionHover");
+dojo.removeClass(_64,"dojoxGridSortHover");
+dojo.removeClass(_65,"dojoxGridSortHover");
+if(!_61&&!_60.grid._inResize(_60)){
+var _66=this._getSortEventInfo(e);
+if(_66.selectChoice){
+dojo.addClass(_63,"dojoxGridSelectRegionHover");
+}else{
+if(_66.nestedSortChoice){
+dojo.addClass(_64,"dojoxGridSortHover");
+}else{
+if(_66.unarySortChoice){
+dojo.addClass(_65,"dojoxGridSortHover");
+}
+}
+}
+}
+},_removeActiveState:function(e){
+if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
+return;
+}
+var _67=this._getChoiceRegion(e.target,this._getSortEventInfo(e));
+_67&&dojo.removeClass(_67,this.headerCellActiveClass);
+},_toggleProgressTip:function(on,e){
+var _68=[this.domNode,e?e.cellNode:null];
+setTimeout(function(){
+dojo.forEach(_68,function(_69){
+if(_69){
+if(on&&!dojo.hasClass(_69,"dojoxGridSortInProgress")){
+dojo.addClass(_69,"dojoxGridSortInProgress");
+}else{
+if(!on&&dojo.hasClass(_69,"dojoxGridSortInProgress")){
+dojo.removeClass(_69,"dojoxGridSortInProgress");
+}
+}
+}
+});
+},0.1);
+},_getSortEventInfo:function(e){
+var _6a=function(_6b,css){
+return dojo.hasClass(_6b,css)||(_6b.parentNode&&dojo.hasClass(_6b.parentNode,css));
+};
+return {selectChoice:_6a(e.target,"dojoxGridHeaderCellSelectRegion"),unarySortChoice:_6a(e.target,"dojoxGridUnarySortWrapper"),nestedSortChoice:_6a(e.target,"dojoxGridNestedSortWrapper")};
+},ignoreEvent:function(e){
+return !(e.nestedSortChoice||e.unarySortChoice||e.selectChoice);
+},doheaderclick:function(e){
+if(this.nestedSorting){
+if(e.selectChoice){
+this.onHeaderCellSelectClick(e);
+}else{
+if((e.unarySortChoice||e.nestedSortChoice)&&!this._inResize(e.sourceView)){
+this.onHeaderCellSortClick(e);
+}
+}
+return;
+}
+this.inherited(arguments);
+},onHeaderCellSelectClick:function(e){
+},onHeaderCellSortClick:function(e){
+this.setSortIndex(e.cell.index,null,e);
+},_sychronizeResize:function(e){
+if(!e.cell||e.cell.isRowSelector||this.focus.headerCellInFocus(e.cellIndex)){
+return;
+}
+if(!this._inResize(e.sourceView)){
+this.addHoverSortTip(e);
+}else{
+var idx=e.cellIndex;
+if(!this._sortTipMap[e.cellIndex]){
+e.cellIndex=this._sortTipMap[idx+1]?(idx+1):(this._sortTipMap[idx-1]?(idx-1):idx);
+e.cellNode=e.cellNode.parentNode.childNodes[e.cellIndex];
+}
+this.removeHoverSortTip(e);
+}
+},_getCellElements:function(_6c){
+try{
+while(_6c&&_6c.nodeName.toLowerCase()!="th"){
+_6c=_6c.parentNode;
+}
+if(!_6c){
+return null;
+}
+var ns=dojo.query(".dojoxGridSortRoot",_6c);
+if(ns.length!=1){
+return null;
+}
+var n=ns[0];
+return {"selectSortSeparator":dojo.query("[id^='selectSortSeparator']",n)[0],"nestedSortPos":dojo.query(".dojoxGridSortPos",n)[0],"nestedSortChoice":dojo.query("[id^='nestedSortCol']",n)[0],"sortSeparator":dojo.query("[id^='SortSeparator']",n)[0],"unarySortChoice":dojo.query("[id^='unarySortCol']",n)[0],"selectRegion":dojo.query(".dojoxGridHeaderCellSelectRegion",n)[0],"sortWrapper":dojo.query(".dojoxGridSortWrapper",n)[0],"unarySortWrapper":dojo.query(".dojoxGridUnarySortWrapper",n)[0],"nestedSortWrapper":dojo.query(".dojoxGridNestedSortWrapper",n)[0],"sortRoot":n,"headCellNode":_6c};
+}
+catch(e){
+}
+return null;
+},_getChoiceRegion:function(_6d,_6e){
+var _6f,_70=this._getCellElements(_6d);
+if(!_70){
+return;
+}
+_6e.unarySortChoice&&(_6f=_70["unarySortWrapper"]);
+_6e.nestedSortChoice&&(_6f=_70["nestedSortWrapper"]);
+_6e.selectChoice&&(_6f=_70["selectRegion"]);
+return _6f;
+},_inResize:function(_71){
+return _71.header.moverDiv||dojo.hasClass(_71.headerNode,"dojoxGridColResize")||dojo.hasClass(_71.headerNode,"dojoxGridColNoResize");
+},retainLastRowSelection:function(){
+dojo.forEach(this._by_idx,function(o,idx){
+if(!o||!o.item){
+return;
+}
+var _72=!!this.selection.isSelected(idx);
+o.item[this.storeItemSelected]=[_72];
+if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred&&_72!=this.toggleAllValue){
+this.exceptionalSelectedItems.push(o.item);
+}
+},this);
+this.selection.clear();
+dojo.publish(this.sortRowSelectionChangedTopic,[this]);
+},updateNewRowSelection:function(_73,req){
+dojo.forEach(_73,function(_74,idx){
+if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred){
+if(dojo.indexOf(this.exceptionalSelectedItems,_74)<0){
+_74[this.storeItemSelected]=[this.toggleAllValue];
+}
+}
+_74[this.storeItemSelected]&&_74[this.storeItemSelected][0]&&this.selection.addToSelection(req.start+idx);
+},this);
+dojo.publish(this.sortRowSelectionChangedTopic,[this]);
+if(dojo.isMoz&&this._by_idx.length==0){
+this.update();
+}
+},allSelectionToggled:function(_75){
+this.exceptionalSelectedItems=[];
+this.toggleAllValue=this.rowSelectCell.defaultValue;
+},_selectionChanged:function(obj){
+obj==this.select&&(this.toggleAllValue=false);
+},getStoreSelectedValue:function(_76){
+var _77=this._by_idx[_76];
+return _77&&_77.item&&!!(_77.item[this.storeItemSelected]&&_77.item[this.storeItemSelected][0]);
+},initAriaInfo:function(){
+var _78=this.sortAttrs;
+dojo.forEach(_78,dojo.hitch(this,function(_79,_7a){
+var _7b=_79.cell.getHeaderNode();
+var _7c=this._getCellElements(_7b);
+if(!_7c){
+return;
+}
+var _7d=_7c["selectRegion"];
+dijit.setWaiState(_7d,"label","Column "+(_79.cell.index+1)+" "+_79.attr);
+var _7e=(_78.length==1);
+var _7f=this.sortStateInt2Str(_79.asc).toLowerCase();
+var _80=_7e?_7c["unarySortWrapper"]:_7c["nestedSortWrapper"];
+dijit.setWaiState(_80,"sort",_7f);
+this._setSortRegionWaiState(_7e,_79.cell.index,_79.attr,_7a+1,_80);
+}));
+},_setSortRegionWaiState:function(_81,_82,_83,_84,_85){
+if(_84<0){
+return;
+}
+var _86=_81?"single sort":"nested sort";
+var _87="Column "+(_82+1)+" "+_83+" "+_86+" "+(!_81?(" sort position "+_84):"");
+dijit.setWaiState(_85,"label",_87);
+},_inPage:function(_88){
+return _88<this._bop||_88>=this._eop;
+}});
+dojo.declare("dojox.grid.enhanced.plugins._NestedSortingFocusManager",dojox.grid._FocusManager,{lastHeaderFocus:{cellNode:null,regionIdx:-1},currentHeaderFocusEvt:null,cssMarkers:["dojoxGridHeaderCellSelectRegion","dojoxGridNestedSortWrapper","dojoxGridUnarySortWrapper"],_focusBorderBox:null,_initColumnHeaders:function(){
+var _89=this._findHeaderCells();
+dojo.forEach(_89,dojo.hitch(this,function(_8a){
+var _8b=dojo.query(".dojoxGridHeaderCellSelectRegion",_8a);
+var _8c=dojo.query("[class*='SortWrapper']",_8a);
+_8b=_8b.concat(_8c);
+_8b.length==0&&(_8b=[_8a]);
+dojo.forEach(_8b,dojo.hitch(this,function(_8d){
+this._connects.push(dojo.connect(_8d,"onfocus",this,"doColHeaderFocus"));
+this._connects.push(dojo.connect(_8d,"onblur",this,"doColHeaderBlur"));
+}));
+}));
+},focusHeader:function(_8e,_8f,_90){
+if(!this.isNavHeader()){
+this.inherited(arguments);
+}else{
+var _91=this._findHeaderCells();
+this._colHeadNode=_91[this._colHeadFocusIdx];
+_8f&&(this.lastHeaderFocus.cellNode=this._colHeadNode);
+}
+if(!this._colHeadNode){
+return;
+}
+if(this.grid.indirectSelection&&this._colHeadFocusIdx==0){
+this._colHeadNode=this._findHeaderCells()[++this._colHeadFocusIdx];
+}
+var _92=_90?0:(this.lastHeaderFocus.regionIdx>=0?this.lastHeaderFocus.regionIdx:(_8e?2:0));
+var _93=dojo.query("."+this.cssMarkers[_92],this._colHeadNode)[0]||this._colHeadNode;
+this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(_93));
+this.lastHeaderFocus.regionIdx=_92;
+_93&&dojox.grid.util.fire(_93,"focus");
+},focusSelectColEndingHeader:function(e){
+if(!e||!e.cellNode){
+return;
+}
+this._colHeadFocusIdx=e.cellIndex;
+this.focusHeader(null,false,true);
+},_delayedHeaderFocus:function(){
+this.isNavHeader()&&this.focusHeader(null,true);
+},_setActiveColHeader:function(_94,_95,_96){
+dojo.attr(this.grid.domNode,"aria-activedescendant",_94.id);
+this._colHeadNode=_94;
+this._colHeadFocusIdx=_95;
+},doColHeaderFocus:function(e){
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+if(e.target==this._colHeadNode){
+this._scrollHeader(this.getHeaderIndex());
+}else{
+var _97=this.getFocusView(e);
+if(!_97){
+return;
+}
+_97.header.baseDecorateEvent(e);
+this._addFocusBorder(e.target);
+this._colHeadFocusIdx=e.cellIndex;
+this._colHeadNode=this._findHeaderCells()[this._colHeadFocusIdx];
+this._colHeadNode&&this.getHeaderIndex()!=-1&&this._scrollHeader(this._colHeadFocusIdx);
+}
+this._focusifyCellNode(false);
+this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();
+this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(e.target));
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.grid._fixAllSelectRegion();
+}
+},doColHeaderBlur:function(e){
+this.inherited(arguments);
+this._removeFocusBorder();
+if(!this.isNavCellRegion){
+var _98=this.getFocusView(e);
+if(!_98){
+return;
+}
+_98.header.baseDecorateEvent(e);
+this.grid.removeHoverSortTip(e);
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+}
+},getFocusView:function(e){
+var _99;
+dojo.forEach(this.grid.views.views,function(_9a){
+if(!_99){
+var _9b=dojo.coords(_9a.domNode),_9c=dojo.coords(e.target);
+var _9d=_9c.x>=_9b.x&&_9c.x<=(_9b.x+_9b.w);
+_9d&&(_99=_9a);
+}
+});
+return (this.focusView=_99);
+},_mockEvt:function(_9e){
+var _9f=this.grid.getCell(this._colHeadFocusIdx);
+return {target:_9e,cellIndex:this._colHeadFocusIdx,cell:_9f,cellNode:this._colHeadNode,clientX:-1,sourceView:_9f.view};
+},navHeader:function(e){
+var _a0=e.ctrlKey?0:(e.keyCode==dojo.keys.LEFT_ARROW)?-1:1;
+!dojo._isBodyLtr()&&(_a0*=-1);
+this.focusView.header.baseDecorateEvent(e);
+dojo.forEach(this.cssMarkers,dojo.hitch(this,function(css,_a1){
+if(dojo.hasClass(e.target,css)){
+var _a2=_a1+_a0,_a3,_a4;
+do{
+_a3=dojo.query("."+this.cssMarkers[_a2],e.cellNode)[0];
+if(_a3&&dojo.style(_a3.lastChild||_a3.firstChild,"display")!="none"){
+_a4=_a3;
+break;
+}
+_a2+=_a0;
+}while(_a2>=0&&_a2<this.cssMarkers.length);
+if(_a4&&_a2>=0&&_a2<this.cssMarkers.length){
+if(e.ctrlKey){
+return;
+}
+dojo.isIE&&(this.grid._sortTipMap[e.cellIndex]=false);
+this.navCellRegion(_a4,_a2);
+return;
+}
+var _a5=_a2<0?-1:(_a2>=this.cssMarkers.length?1:0);
+this.navHeaderNode(_a5);
+}
+}));
+},navHeaderNode:function(_a6,_a7){
+var _a8=this._colHeadFocusIdx+_a6;
+var _a9=this._findHeaderCells();
+while(_a8>=0&&_a8<_a9.length&&_a9[_a8].style.display=="none"){
+_a8+=_a6;
+}
+if(this.grid.indirectSelection&&_a8==0){
+return;
+}
+if(_a6!=0&&_a8>=0&&_a8<this.grid.layout.cells.length){
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+this.lastHeaderFocus.regionIdx=-1;
+this._colHeadFocusIdx=_a8;
+this.focusHeader(_a6<0?true:false,false,_a7);
+}
+},navCellRegion:function(_aa,_ab){
+this.isNavCellRegion=true;
+dojox.grid.util.fire(_aa,"focus");
+this.currentHeaderFocusEvt.target=_aa;
+this.lastHeaderFocus.regionIdx=_ab;
+var _ac=_ab==0?_aa:_aa.parentNode.nextSibling;
+_ac&&this.grid._fixSelectRegion(_ac);
+this.isNavCellRegion=false;
+},headerCellInFocus:function(_ad){
+return (this._colHeadFocusIdx==_ad)&&this._focusBorderBox;
+},clearHeaderFocus:function(){
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.lastHeaderFocus={cellNode:null,regionIdx:-1};
+},addSortFocus:function(e){
+var _ae=this.grid.getCellSortInfo(e.cell);
+if(!_ae){
+return;
+}
+var _af=this.grid.sortAttrs;
+var _b0=!_af||_af.length<1;
+var _b1=(_af&&_af.length==1&&_ae["sortPos"]==1);
+this._colHeadFocusIdx=e.cellIndex;
+this._colHeadNode=e.cellNode;
+this.currentHeaderFocusEvt={};
+this.lastHeaderFocus.regionIdx=(_b0||_b1)?2:(e.nestedSortChoice?1:0);
+},_addFocusBorder:function(_b2){
+if(!_b2){
+return;
+}
+this._removeFocusBorder();
+this._focusBorderBox=dojo.create("div");
+this._focusBorderBox.className="dojoxGridFocusBorderBox";
+dojo.toggleClass(_b2,"dojoxGridSelectRegionFocus",true);
+dojo.toggleClass(_b2,"dojoxGridSelectRegionHover",false);
+var _b3=_b2.offsetHeight;
+if(_b2.hasChildNodes()){
+_b2.insertBefore(this._focusBorderBox,_b2.firstChild);
+}else{
+_b2.appendChild(this._focusBorderBox);
+}
+var _b4={"l":0,"t":0,"r":0,"b":0};
+for(var i in _b4){
+_b4[i]=dojo.create("div");
+}
+var pos={x:dojo.coords(_b2).x-dojo.coords(this._focusBorderBox).x,y:dojo.coords(_b2).y-dojo.coords(this._focusBorderBox).y,w:_b2.offsetWidth,h:_b3};
+for(var i in _b4){
+var n=_b4[i];
+dojo.addClass(n,"dojoxGridFocusBorder");
+dojo.style(n,"top",pos.y+"px");
+dojo.style(n,"left",pos.x+"px");
+this._focusBorderBox.appendChild(n);
+}
+var _b5=function(val){
+return val>0?val:0;
+};
+dojo.style(_b4.r,"left",_b5(pos.x+pos.w-1)+"px");
+dojo.style(_b4.b,"top",_b5(pos.y+pos.h-1)+"px");
+dojo.style(_b4.l,"height",_b5(pos.h-1)+"px");
+dojo.style(_b4.r,"height",_b5(pos.h-1)+"px");
+dojo.style(_b4.t,"width",_b5(pos.w-1)+"px");
+dojo.style(_b4.b,"width",_b5(pos.w-1)+"px");
+},_updateFocusBorder:function(){
+if(this._focusBorderBox==null){
+return;
+}
+this._addFocusBorder(this._focusBorderBox.parentNode);
+},_removeFocusBorder:function(){
+if(this._focusBorderBox&&this._focusBorderBox.parentNode){
+dojo.toggleClass(this._focusBorderBox.parentNode,"dojoxGridSelectRegionFocus",false);
+this._focusBorderBox.parentNode.removeChild(this._focusBorderBox);
+}
+this._focusBorderBox=null;
+}});
+}
diff --git a/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css b/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css
@@ -0,0 +1,156 @@
+.dojoxGridCellContent{
+ padding:3px;
+}
+.dojoxGridHeader .dojoxGridCell .dojoxGridSortNode{
+ padding:3px;
+}
+.dojoxGridCell .dojoxGridSortRoot{
+ position: relative;
+ width: 100%;
+ text-align:left;
+}
+.dojoxGridCell .dojoxGridHeaderCellSelectRegion{
+ text-align: left;
+ padding:3px;
+
+ overflow: hidden;
+ white-space:nowrap;
+}
+.dj_ie .dojoxGridCell .dojoxGridHeaderCellSelectRegion{
+ padding-left:4px;
+}
+.dojoxGridSortWrapper{
+
+ position:absolute;
+ right:0px;
+
+ z-index: 1;
+}
+.dojoxGridNestedSortWrapper{
+ float:left;
+}
+.dojoxGridSortPos{
+ float:left;
+ margin-left:3px;
+}
+.dj_ff2 .dojoxGridSortPos{
+ padding: 3px 0;
+ line-height: normal;
+}
+.dojoxGridSortPosOff{
+ display:none;
+}
+.dojoxGridNestedSort{
+ text-indent: -5000em;
+}
+.dojoxGridUnarySortWrapper{
+ float:left;
+}
+.dojoxGridSort{
+ display: block;
+ float: left;
+ background:url("images/nestedSortArrows.png") no-repeat left center;
+ width: 8px;
+ margin-right:3px;
+ margin-left:3px;
+ text-align:center;
+}
+.dojoxGridUnarySort{
+ text-indent: -5000em;
+ margin-left:4px;
+}
+.dojoxGridAscending{
+ background-position: -9px;
+}
+.dojoxGridUnsorted{
+ display:none;
+}
+.dojoxGridAscendingTip{
+ background:url("images/nestedSortArrows.png") no-repeat left center;
+ background-position: -30px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridDescendingTip{
+ background:url("images/nestedSortArrows.png") no-repeat left center;
+ background-position: -20px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridUnsortedTip{
+ background:url("images/nestedSortArrows.png") no-repeat left center;
+ background-position: -39.5px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridSortHiddenTip{
+ display:none;
+}
+.dojoxGridSortSeparatorOff{
+ width: 0px;
+ border-right-color: #999999;
+ border-right-style:solid;
+ border-right-width:1px;
+ display: none;
+}
+.dojoxGridSortSeparatorOn{
+ display: block;
+ float: left;
+}
+.dojoxGridSortInProgress{
+ cursor:progress;
+}
+.dojoxGridWidgetHidden{
+ visibility:hidden;
+}
+.dijit_a11y .dojoxGridNestedSort, .dijit_a11y .dojoxGridUnarySort {
+ text-indent: 0;
+ font-size: 14px;
+
+}
+.dojoxGridFocusBorderBox {
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 0;
+}
+.dojoxGridFocusBorder {
+ width: 0px;
+ height: 0px;
+ overflow: hidden;
+ position: absolute;
+ z-index: 999;
+ top: 0;
+ left: 0;
+}
+.dojoxGridSelectedDIV{
+ background-color: #3366CC;
+ position:absolute;
+ opacity:0.2;
+ cursor:move;
+ z-index:999;
+}
+.dj_ie .dojoxGridSelectedDIV{
+ filter: alpha(opacity = 30);
+}
+.dojoxGridBorderDIV{
+ width:3px;
+ background-color: gray;
+ font-size:0em;
+ position:absolute;
+ z-index:9999;
+}
+.dojoxGrid{
+ border:1px solid #DBDBDB;
+}
+.dijit_a11y .dojoxGridRowSelected{
+ opacity:0.4 !important;
+}
+.dijit_a11y .dojoxGridSelectedDIV{
+ opacity:0.4 !important;
+ border:3px solid #000 !important;
+}
+.dijit_a11y .dojoxGridBorderDIV{
+ border:2px solid #000 !important;
+}
diff --git a/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css b/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css
@@ -0,0 +1,23 @@
+.dj_ie .dijitRtl .dojoxGridHeader table {
+ float:none;
+}
+.dijitRtl .dojoxGridCell {
+ text-align:right;
+}
+.dijitRtl .dojoxGridNestedSort,
+.dijitRtl .dojoxGridUnarySort {
+ text-align: right;
+}
+.dijitRtl .dojoxGridSortWrapper {
+ left: 0;
+ right: auto;
+}
+.dijitRtl .dojoxGridCell .dojoxGridHeaderCellSelectRegion {
+ float: right;
+ text-align: right;
+}
+.dijitRtl .dojoxGridSortSeparatorOn,
+.dijitRtl .dojoxGridNestedSortWrapper,
+.dijitRtl .dojoxGridUnarySortWrapper {
+ float: right;
+}
diff --git a/js/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png b/js/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..96fa7e4fcaaa5b906e1f36733eb6fce7412d0bcf
GIT binary patch
literal 955
zc%17D@N?(olHy`uVBq!ia0vp^dO*y^!3-q3XT-z-DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_cg49pAxJ|V76O-&4=U=)m0kh9n54v=Cl3Gxg6|DWOdDPBh)
z*U8hxF{I*FQi77upY(*JBnH6~NjI)IYAgscXkzH#>2Xth_^L6@*kIubx1j!WO<L(r
ofq&(%`mk`8^3;hht`=1|z#w(eI(oWhR0+ruPgg&ebxsLQ0K|kl_y7O^
diff --git a/js/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css b/js/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css
@@ -0,0 +1,789 @@
+.dojoxGridCellContent{
+ padding:3px;
+}
+.dojoxGridHeader .dojoxGridCell .dojoxGridSortNode{
+ padding:3px;
+}
+.dojoxGridCell .dojoxGridSortRoot{
+ position: relative;
+ width: 100%;
+ text-align:left;
+}
+.dojoxGridCell .dojoxGridHeaderCellSelectRegion{
+ text-align: left;
+ padding:3px;
+
+ overflow: hidden;
+ white-space:nowrap;
+}
+.dj_ie .dojoxGridCell .dojoxGridHeaderCellSelectRegion{
+ padding-left:4px;
+}
+.dojoxGridSortWrapper{
+
+ position:absolute;
+ right:0px;
+
+ z-index: 1;
+}
+.dojoxGridNestedSortWrapper{
+ float:left;
+}
+.dojoxGridSortPos{
+ float:left;
+ margin-left:3px;
+}
+.dj_ff2 .dojoxGridSortPos{
+ padding: 3px 0;
+ line-height: normal;
+}
+.dojoxGridSortPosOff{
+ display:none;
+}
+.dojoxGridNestedSort{
+ text-indent: -5000em;
+}
+.dojoxGridUnarySortWrapper{
+ float:left;
+}
+.dojoxGridSort{
+ display: block;
+ float: left;
+ background:url(images/nestedSortArrows.png) no-repeat left center;
+ width: 8px;
+ margin-right:3px;
+ margin-left:3px;
+ text-align:center;
+}
+.dojoxGridUnarySort{
+ text-indent: -5000em;
+ margin-left:4px;
+}
+.dojoxGridAscending{
+ background-position: -9px;
+}
+.dojoxGridUnsorted{
+ display:none;
+}
+.dojoxGridAscendingTip{
+ background:url(images/nestedSortArrows.png) no-repeat left center;
+ background-position: -30px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridDescendingTip{
+ background:url(images/nestedSortArrows.png) no-repeat left center;
+ background-position: -20px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridUnsortedTip{
+ background:url(images/nestedSortArrows.png) no-repeat left center;
+ background-position: -39.5px;
+ display:block;
+ cursor:pointer;
+}
+.dojoxGridSortHiddenTip{
+ display:none;
+}
+.dojoxGridSortSeparatorOff{
+ width: 0px;
+ border-right-color: #999999;
+ border-right-style:solid;
+ border-right-width:1px;
+ display: none;
+}
+.dojoxGridSortSeparatorOn{
+ display: block;
+ float: left;
+}
+.dojoxGridSortInProgress{
+ cursor:progress;
+}
+.dojoxGridWidgetHidden{
+ visibility:hidden;
+}
+.dijit_a11y .dojoxGridNestedSort, .dijit_a11y .dojoxGridUnarySort {
+ text-indent: 0;
+ font-size: 14px;
+
+}
+.dojoxGridFocusBorderBox {
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 0;
+}
+.dojoxGridFocusBorder {
+ width: 0px;
+ height: 0px;
+ overflow: hidden;
+ position: absolute;
+ z-index: 999;
+ top: 0;
+ left: 0;
+}
+.dojoxGridSelectedDIV{
+ background-color: #3366CC;
+ position:absolute;
+ opacity:0.2;
+ cursor:move;
+ z-index:999;
+}
+.dj_ie .dojoxGridSelectedDIV{
+ filter: alpha(opacity = 30);
+}
+.dojoxGridBorderDIV{
+ width:3px;
+ background-color: gray;
+ font-size:0em;
+ position:absolute;
+ z-index:9999;
+}
+.dojoxGrid{
+ border:1px solid #DBDBDB;
+}
+.dijit_a11y .dojoxGridRowSelected{
+ opacity:0.4 !important;
+}
+.dijit_a11y .dojoxGridSelectedDIV{
+ opacity:0.4 !important;
+ border:3px solid #000 !important;
+}
+.dijit_a11y .dojoxGridBorderDIV{
+ border:2px solid #000 !important;
+}
+.dojoxGrid {
+ position: relative;
+ background-color: #EBEADB;
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ -moz-outline-style: none;
+ outline: none;
+ overflow: hidden;
+ height: 0;
+}
+.dojoxGrid table {
+ padding: 0;
+}
+.dojoxGrid td {
+ -moz-outline: none;
+}
+.dojoxGridMasterHeader {
+ position: relative;
+}
+.dojoxGridMasterView {
+ position: relative;
+}
+.dojoxGridMasterMessages {
+ position: relative;
+ padding: 1em;
+ text-align: center;
+ background-color: white;
+}
+.dojoxGridView {
+ position: absolute;
+ overflow: hidden;
+}
+.dojoxGridHeader {
+ position: absolute;
+ overflow: hidden;
+ cursor: default;
+}
+.dojoxGridHeader {
+ background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+ text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridArrowButtonNode {
+ display: none;
+ padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+ display:inline;
+}
+
+.dojoxGridArrowButtonNode:hover {
+ cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+ cursor: default;
+}
+.dojoxGridSortUp:hover {
+ cursor: default;
+}
+.dojoxGridSortDown:hover {
+ cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+ display:inline !important;
+}
+.dojoxGridScrollbox {
+ position: relative;
+ overflow: auto;
+ background-color: white;
+ width: 100%;
+}
+.dojoxGridContent {
+ position: relative;
+ overflow: hidden;
+ -moz-outline-style: none;
+ outline: none;
+}
+.dojoxGridRowbar {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ border-top: none;
+ background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+ border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+ background-image: none;
+ background-color: white;
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRow {
+ position: relative;
+ width: 9000em;
+}
+.dojoxGridRow {
+
+ border: 1px solid #E8E4D8;
+ border-color: #F8F7F1;
+
+ border-left: none;
+ border-right: none;
+ background-color: white;
+ border-top: none;
+}
+.dojoxGridRowOver {
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+
+
+
+}
+.dojoxGridRowOdd {
+ background-color: #FFFDF3;
+
+}
+.dojoxGridRowSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+ table-layout: fixed;
+ width: 0;
+ empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+ border-collapse: collapse;
+}
+.dojoxGridInvisible {
+ visibility: hidden;
+}
+.Xdojo-ie .dojoxGridInvisible {
+ display: none;
+}
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ height: 0;
+ overflow: hidden;
+}
+.dojoxGridCell {
+ border: 1px solid;
+ border-color: #EBEADB;
+ border-right-color: #D5CDB5;
+ padding: 3px 3px 3px 3px;
+ text-align: left;
+ overflow: hidden;
+}
+.dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+ border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ width: 100%;
+ font-size: 100%;
+ font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+ position: absolute;
+ top: -1000px;
+ height: 0;
+ width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected {
+ border-top: 1px solid white;
+ border-bottom: 1px dashed black;
+ border-top: 0;
+ background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+ border: 0;
+ border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+ border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+ font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+ border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+ border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+ border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+ border-right: double;
+}
+.dojoxGridDndAvatarItem td {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding: 0pt;
+ margin: 0pt;
+}
+.dojoxGridDndAvatarItem td.dojoxGridDndAvatarItemImage {
+ border: 0;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background-color: transparent;
+ padding: 3px;
+ padding-bottom: 2px;
+ margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../../dojo/resources/images/dndNoMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../../dojo/resources/images/dndNoCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../../dojo/resources/images/dndMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../../dojo/resources/images/dndCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+ cursor: col-resize;
+ z-index:10000;
+}
+.dojoxGridColNoResize,
+.dojoxGridColNoResize .dojoDndItemOver {
+ cursor: not-allowed !important;
+}
+.dojoxGridColResize,
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+ cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+}
+.dojoxGridExpandoCell {
+ vertical-align: top;
+}
+.dojoxGridSummarySpan {
+ visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+ visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+ visibility: hidden !important;
+ width: 0px !important;
+}
+.tundra .dojoxGrid {
+ background-color: #e9e9e9;
+ font-size: 0.85em;
+}
+.tundra .dojoxGridMasterMessages {
+ background-color: #fefefe;
+}
+.tundra .dojoxGridLoading,
+.tundra .dojoxGridError {
+ background-position:left center;
+ background-repeat: no-repeat;
+ padding-left:25px;
+}
+.dijitRtl .tundra .dojoxGridLoading,
+.dijitRtl .tundra .dojoxGridError,
+.dijitRtl .tundra .dojoxGridNoData {
+ background-position:right;
+ padding-right:25px;
+ padding-left:0px;
+}
+.tundra .dojoxGridLoading {
+ background-image: url(../../../../dijit/themes/tundra/images/loading.gif);
+}
+.tundra .dojoxGridError {
+ background-image: url(../../../../dijit/themes/tundra/images/warning.png);
+}
+.tundra .dojoxGridHeader {
+ background-color: #e9e9e9;
+}
+.tundra .dojoxGridHeader .dojoxGridCell {
+ border-width: 1px;
+ padding-bottom: 0px;
+ border-color: transparent #ACA899 #919191 transparent;
+ background: url(../../../../dijit/themes/tundra/images/tabEnabled.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellOver {
+ background: url(../../../../dijit/themes/tundra/images/tabHover.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellFocus {
+ border-color: #ACA899 #919191;
+ border-style: dashed;
+}
+.tundra .dojoxGridArrowButtonChar {
+ float: right;
+ display: none;
+}
+.tundra .dojoxGridArrowButtonNode {
+ display: block !important;
+ padding-left: 0px;
+ float: right;
+ background:url(../../../../dijit/themes/tundra/images/spriteArrows.png) no-repeat left center;
+ width: 7px;
+ height: 1em;
+ margin: 2px 4px 0px 5px;
+}
+.dj_ie6 .tundra .dojoxGridArrowButtonNode {
+ background-image:url(../../../../dijit/themes/tundra/images/spriteArrows.gif);
+ margin-left: 0px;
+}
+.tundra .dojoxGridSortUp .dojoxGridArrowButtonNode {
+ background-position: -21px;
+}
+.dijit_a11y .tundra .dojoxGridArrowButtonNode {
+ display: none !important;
+}
+.tundra .dojoxGridScrollbox {
+ background-color: #fefefe;
+}
+.tundra .dojoxGridRowbar {
+ border: none;
+ background: url(../../resources/images/tabEnabled_rotated.png) #e9e9e9 repeat-y right;
+ border-right: 1px solid #ccc;
+ padding: 0px;
+}
+.tundra .dojoxGridRowbarInner {
+ border: none;
+ border-bottom: 1px solid #ccc;
+}
+.tundra .dojoxGridRowbarOver {
+ background: url(../../resources/images/tabHover_rotated.png) #e9e9e9 repeat-y right;
+}
+.tundra .dojoxGridRowbarSelected {
+ background: url(../../../../dijit/themes/tundra/images/tabDisabled.png) #D8E8F9 no-repeat center;
+ border-right: 1px solid #ccc;
+}
+.tundra .dojoxGridRow {
+ border: none;
+ background-color: white;
+}
+.tundra .dojoxGridRowOver {
+ border-top-color: #ccc;
+ border-bottom-color: #ccc;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell {
+ background-color: #60a1ea;
+ color:#fff;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijit {
+ color: #000;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijitDisabled {
+ color: gray;
+}
+.tundra .dojoxGridRowOdd {
+ background-color: #f2f5f9;
+}
+.tundra .dojoxGridRowSelected {
+ background-color: #aec7e3 !important;
+}
+.dijit_a11y .tundra .dojoxGridRowSelected {
+ background-color: #aec7e3;
+ border-style: solid;
+}
+.tundra .dojoxGridCell {
+ border: 1px dotted #D5CDB5;
+ border-left-color: transparent;
+ border-top-color: transparent;
+}
+.dj_ff2 .tundra .dojoxGridCell {
+ border-left-width: 0px;
+ border-top-width: 0px;
+}
+.dj_ie6 .tundra .dojoxGridCell {
+ border: 1px solid white;
+ border-right: 1px solid #D5CDB5;
+}
+.tundra .dojoxGridCellFocus {
+ border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridCellOver {
+ border: 1px dotted #a6a6a6;
+}
+.tundra .dojoxGridCellFocus .dojoxGridCellOver {
+ border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridRowEditing td {
+
+ background-color: #60a1ea;
+
+}
+.tundra .dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.tundra .dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.tundra .dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.tundra .dojoxGrid .dojoDndItemBefore {
+ border-left-color: #3559ac;
+}
+.tundra .dojoxGrid .dojoDndItemAfter {
+ border-right-color: #3559ac;
+}
+.tundra .dojoxGridExpando {
+ float: left;
+ height: 18px;
+ width: 18px;
+ text-align: center;
+ margin-top: -3px;
+}
+.dijitRtl .tundra .dojoxGridExpando {
+ float: right;
+}
+.tundra .dojoxGridExpandoCell {
+ padding-top: 5px;
+}
+.tundra .dojoxGridExpandoNode {
+ height: 18px;
+ background-image: url(../../../../dijit/themes/tundra/images/treeExpand_plus.gif);
+}
+.tundra .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+ background-image: url(../../../../dijit/themes/tundra/images/treeExpand_minus.gif);
+}
+.tundra .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+ background-image: url(../../../../dijit/themes/tundra/images/treeExpand_loading.gif);
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+ visibility: visible !important;
+ width: 18px !important;
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+ background-image: url(../../../../dijit/themes/tundra/images/treeExpand_leaf.gif);
+ background-position: -3px;
+}
+.tundra .dojoxGridExpandoNodeInner {
+ visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+ visibility: visible;
+}
+
+.tundra .dojoxGridSummaryRow .dojoxGridCell {
+ border-top-color: #999;
+ border-top-style: solid;
+}
+.tundra .dojoxGridSpacerCell,
+.tundra .dojoxGridExpandoCell,
+.tundra .dojoxGridSummaryRow .dojoxGridSpacerCell {
+ border-color: transparent;
+ border-right-color: #D5CDB5;
+}
+.tundra .dojoxGridSummaryRow .dojoxGridTotalCell,
+.tundra .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.tundra .dojoxGridTreeModel .dojoxGridExpandoCell {
+ border-bottom-color: #D5CDB5;
+}
+.tundra .dojoxGridSubRowAlt {
+ background-color: #F8F8F8;
+}
+.tundra .dojoxGridRowOdd .dojoxGridSubRowAlt {
+ background-color: #EDEFF3;
+}
+.tundra .dojoxGridHeader .dojoxGridCell{
+ background: #fafafa url(../../../../dijit/themes/tundra/images/titleBar.png) repeat-x bottom left;
+ border-top: 1px solid #bfbfbf;
+
+}
+.tundra .dojoxGridHeader .dojoxGridCell,
+.tundra .dojoxGridCell{
+ padding:0px;
+
+
+
+}
+.dj_ie6 .tundra .dojoxGridMasterView .dojoxGridCellOver{
+ border: 1px dashed #e9e9e9;
+ background:none;
+}
+.dj_ie6 .tundra .dojoxGridHeader .dojoxGridCellOver{
+ border-bottom: none !important;
+ border-right: 1px solid #D5CDB5 !important;
+ border-top: 1px solid #D5CDB5 !important;
+}
+.tundra .dojoxGridRowbarInner {
+ width:20px;
+}
+.tundra .dojoxGridHeader .dojoxGridCellOver .dojoxGridSortNode{
+ cursor:pointer;
+ background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dojoxGridCell .dojoxGridSelectRegionHover{
+ border-color: #a5beda;
+ border-bottom-color:#5c7590;
+ cursor:pointer;
+ color:#243C5F;
+ background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dojoxGridCell .dojoxGridSortHover{
+ border-color: #a5beda;
+ border-bottom-color:#5c7590;
+ color:#243C5F;
+ background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+ cursor:pointer;
+}
+.tundra .dojoxGridSortWrapper{
+ background: #fafafa url(../../../../dijit/themes/tundra/images/titleBar.png) repeat-x bottom left;
+}
+.dj_webkit .tundra .dojoxGridCell,
+.dj_webkit .tundra .dojoxGridCellFocus,
+.dj_webkit .tundra .dojoxGridHeader .dojoxGridCell .dojoxGridHeaderCellSelectRegion,
+.dj_webkit .tundra .dojoxGridHeader .dojoxGridCell .dojoxGridUnarySortWrapper,
+.dj_webkit .tundra .dojoxGridHeader .dojoxGridCell .dojoxGridNestedSortWrapper,
+.dj_webkit .tundra .dojoxGridHeader .dojoxGridCell .dojoxGridSortRoot{
+ outline: none;
+}
+.tundra .dojoxGridHeader .dojoxGridRowTable .dojoxGridCellFocus
+ {
+ border-color: darkblue !important;
+ border-style: dashed !important;
+ border-width: 1px !important;
+}
+.tundra .dojoxGridFocusBorder {
+ border-top: 1px dashed darkblue;
+ border-left: 1px dashed darkblue;
+}
+.tundra .dojoxGridSelectedDIV{
+ background-color: #3366CC;
+}
+.dj_ie .tundra .dojoxGridSelectedDIV{
+ filter: alpha(opacity = 30);
+}
+.tundra .dojoxGridBorderDIV{
+ background-color: gray;
+}
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ROOT.js b/js/dojo/dojox/grid/nls/DataGrid_ROOT.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ROOT.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ROOT");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ar.js b/js/dojo/dojox/grid/nls/DataGrid_ar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ar.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ar");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ca.js b/js/dojo/dojox/grid/nls/DataGrid_ca.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ca.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ca");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_cs.js b/js/dojo/dojox/grid/nls/DataGrid_cs.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_cs.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_cs");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.cs");dijit.nls.loading.cs={"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_da.js b/js/dojo/dojox/grid/nls/DataGrid_da.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_da.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_da");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_de-de.js b/js/dojo/dojox/grid/nls/DataGrid_de-de.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_de-de.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_de-de");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de_de");dijit.nls.loading.de_de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_de.js b/js/dojo/dojox/grid/nls/DataGrid_de.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_de.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_de");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de");dijit.nls.loading.de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_el.js b/js/dojo/dojox/grid/nls/DataGrid_el.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_el.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_el");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_en-gb.js b/js/dojo/dojox/grid/nls/DataGrid_en-gb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_en-gb.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en-gb");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_en-us.js b/js/dojo/dojox/grid/nls/DataGrid_en-us.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_en-us.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en-us");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_en.js b/js/dojo/dojox/grid/nls/DataGrid_en.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_en.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_es-es.js b/js/dojo/dojox/grid/nls/DataGrid_es-es.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_es-es.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_es-es");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es_es");dijit.nls.loading.es_es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_es.js b/js/dojo/dojox/grid/nls/DataGrid_es.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_es.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_es");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es");dijit.nls.loading.es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_fi-fi.js b/js/dojo/dojox/grid/nls/DataGrid_fi-fi.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_fi-fi.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fi-fi");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_fi.js b/js/dojo/dojox/grid/nls/DataGrid_fi.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_fi.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fi");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_fr-fr.js b/js/dojo/dojox/grid/nls/DataGrid_fr-fr.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_fr-fr.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fr-fr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr_fr");dijit.nls.loading.fr_fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_fr.js b/js/dojo/dojox/grid/nls/DataGrid_fr.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_fr.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr");dijit.nls.loading.fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_he-il.js b/js/dojo/dojox/grid/nls/DataGrid_he-il.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_he-il.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_he-il");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_he.js b/js/dojo/dojox/grid/nls/DataGrid_he.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_he.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_he");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_hu.js b/js/dojo/dojox/grid/nls/DataGrid_hu.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_hu.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_hu");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.hu");dijit.nls.loading.hu={"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_it-it.js b/js/dojo/dojox/grid/nls/DataGrid_it-it.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_it-it.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_it-it");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it_it");dijit.nls.loading.it_it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_it.js b/js/dojo/dojox/grid/nls/DataGrid_it.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_it.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_it");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it");dijit.nls.loading.it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ja-jp.js b/js/dojo/dojox/grid/nls/DataGrid_ja-jp.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ja-jp.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ja-jp");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ja.js b/js/dojo/dojox/grid/nls/DataGrid_ja.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ja.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ja");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ko-kr.js b/js/dojo/dojox/grid/nls/DataGrid_ko-kr.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ko-kr.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ko-kr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ko.js b/js/dojo/dojox/grid/nls/DataGrid_ko.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ko.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ko");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_nb.js b/js/dojo/dojox/grid/nls/DataGrid_nb.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_nb.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nb");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_nl-nl.js b/js/dojo/dojox/grid/nls/DataGrid_nl-nl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_nl-nl.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nl-nl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_nl.js b/js/dojo/dojox/grid/nls/DataGrid_nl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_nl.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_pl.js b/js/dojo/dojox/grid/nls/DataGrid_pl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_pl.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pl");dijit.nls.loading.pl={"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_pt-br.js b/js/dojo/dojox/grid/nls/DataGrid_pt-br.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_pt-br.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt-br");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_br");dijit.nls.loading.pt_br={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_pt-pt.js b/js/dojo/dojox/grid/nls/DataGrid_pt-pt.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_pt-pt.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt-pt");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_pt.js b/js/dojo/dojox/grid/nls/DataGrid_pt.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_pt.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_ru.js b/js/dojo/dojox/grid/nls/DataGrid_ru.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_ru.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ru");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_sk.js b/js/dojo/dojox/grid/nls/DataGrid_sk.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_sk.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sk");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_sl.js b/js/dojo/dojox/grid/nls/DataGrid_sl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_sl.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_sv.js b/js/dojo/dojox/grid/nls/DataGrid_sv.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_sv.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sv");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_th.js b/js/dojo/dojox/grid/nls/DataGrid_th.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_th.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_th");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_tr.js b/js/dojo/dojox/grid/nls/DataGrid_tr.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_tr.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_tr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_xx.js b/js/dojo/dojox/grid/nls/DataGrid_xx.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_xx.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_xx");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_zh-cn.js b/js/dojo/dojox/grid/nls/DataGrid_zh-cn.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_zh-cn.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh-cn");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"正在加载...","errorState":"对不起,发生了错误"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_zh-tw.js b/js/dojo/dojox/grid/nls/DataGrid_zh-tw.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_zh-tw.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh-tw");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉,發生錯誤"};
diff --git a/js/dojo/dojox/grid/nls/DataGrid_zh.js b/js/dojo/dojox/grid/nls/DataGrid_zh.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/nls/DataGrid_zh.js
@@ -0,0 +1,1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState":"正在加载...","errorState":"对不起,发生了错误"};
diff --git a/js/dojo/dojox/grid/resources/Expando.html b/js/dojo/dojox/grid/resources/Expando.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/Expando.html
@@ -0,0 +1,5 @@
+<div class="dojoxGridExpando"
+ ><div class="dojoxGridExpandoNode" dojoAttachEvent="onclick:onToggle"
+ ><div class="dojoxGridExpandoNodeInner" dojoAttachPoint="expandoInner"></div
+ ></div
+></div>
diff --git a/js/dojo/dojox/grid/resources/Grid.css b/js/dojo/dojox/grid/resources/Grid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/Grid.css
@@ -0,0 +1,345 @@
+.dojoxGrid {
+ position: relative;
+ background-color: #EBEADB;
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ -moz-outline-style: none;
+ outline: none;
+ overflow: hidden;
+ height: 0;
+}
+.dojoxGrid table {
+ padding: 0;
+}
+.dojoxGrid td {
+ -moz-outline: none;
+}
+.dojoxGridMasterHeader {
+ position: relative;
+}
+.dojoxGridMasterView {
+ position: relative;
+}
+.dojoxGridMasterMessages {
+ position: relative;
+ padding: 1em;
+ text-align: center;
+ background-color: white;
+}
+.dojoxGridView {
+ position: absolute;
+ overflow: hidden;
+}
+.dojoxGridHeader {
+ position: absolute;
+ overflow: hidden;
+ cursor: default;
+}
+.dojoxGridHeader {
+ background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+ text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridArrowButtonNode {
+ display: none;
+ padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+ display:inline;
+}
+
+.dojoxGridArrowButtonNode:hover {
+ cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+ cursor: default;
+}
+.dojoxGridSortUp:hover {
+ cursor: default;
+}
+.dojoxGridSortDown:hover {
+ cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+ display:inline !important;
+}
+.dojoxGridScrollbox {
+ position: relative;
+ overflow: auto;
+ background-color: white;
+ width: 100%;
+}
+.dojoxGridContent {
+ position: relative;
+ overflow: hidden;
+ -moz-outline-style: none;
+ outline: none;
+}
+.dojoxGridRowbar {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ border-top: none;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+ border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+ background-image: none;
+ background-color: white;
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRow {
+ position: relative;
+ width: 9000em;
+}
+.dojoxGridRow {
+
+ border: 1px solid #E8E4D8;
+ border-color: #F8F7F1;
+
+ border-left: none;
+ border-right: none;
+ background-color: white;
+ border-top: none;
+}
+.dojoxGridRowOver {
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+
+
+
+}
+.dojoxGridRowOdd {
+ background-color: #FFFDF3;
+
+}
+.dojoxGridRowSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+ table-layout: fixed;
+ width: 0;
+ empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+ border-collapse: collapse;
+}
+.dojoxGridInvisible {
+ visibility: hidden;
+}
+.Xdojo-ie .dojoxGridInvisible {
+ display: none;
+}
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ height: 0;
+ overflow: hidden;
+}
+.dojoxGridCell {
+ border: 1px solid;
+ border-color: #EBEADB;
+ border-right-color: #D5CDB5;
+ padding: 3px 3px 3px 3px;
+ text-align: left;
+ overflow: hidden;
+}
+.dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+ border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ width: 100%;
+ font-size: 100%;
+ font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+ position: absolute;
+ top: -1000px;
+ height: 0;
+ width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected {
+ border-top: 1px solid white;
+ border-bottom: 1px dashed black;
+ border-top: 0;
+ background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+ border: 0;
+ border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+ border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+ font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+ border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+ border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+ border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+ border-right: double;
+}
+.dojoxGridDndAvatarItem td {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding: 0pt;
+ margin: 0pt;
+}
+.dojoxGridDndAvatarItem td.dojoxGridDndAvatarItemImage {
+ border: 0;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background-color: transparent;
+ padding: 3px;
+ padding-bottom: 2px;
+ margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+ cursor: col-resize;
+ z-index:10000;
+}
+.dojoxGridColNoResize,
+.dojoxGridColNoResize .dojoDndItemOver {
+ cursor: not-allowed !important;
+}
+.dojoxGridColResize,
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+ cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+}
+.dojoxGridExpandoCell {
+ vertical-align: top;
+}
+.dojoxGridSummarySpan {
+ visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+ visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+ visibility: hidden !important;
+ width: 0px !important;
+}
diff --git a/js/dojo/dojox/grid/resources/Grid_rtl.css b/js/dojo/dojox/grid/resources/Grid_rtl.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/Grid_rtl.css
@@ -0,0 +1,6 @@
+.dj_ie .dijitRtl .dojoxGridHeader table {
+ float:none;
+}
+.dijitRtl .dojoxGridCell {
+ text-align:right;
+}
diff --git a/js/dojo/dojox/grid/resources/View.html b/js/dojo/dojox/grid/resources/View.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/View.html
@@ -0,0 +1,12 @@
+<div class="dojoxGridView" wairole="presentation">
+ <div class="dojoxGridHeader" dojoAttachPoint="headerNode" wairole="presentation">
+ <div dojoAttachPoint="headerNodeContainer" style="width:9000em" wairole="presentation">
+ <div dojoAttachPoint="headerContentNode" wairole="row"></div>
+ </div>
+ </div>
+ <input type="checkbox" class="dojoxGridHiddenFocus" dojoAttachPoint="hiddenFocusNode" wairole="presentation" />
+ <input type="checkbox" class="dojoxGridHiddenFocus" wairole="presentation" />
+ <div class="dojoxGridScrollbox" dojoAttachPoint="scrollboxNode" wairole="presentation">
+ <div class="dojoxGridContent" dojoAttachPoint="contentNode" hidefocus="hidefocus" wairole="presentation"></div>
+ </div>
+</div>
diff --git a/js/dojo/dojox/grid/resources/_Grid.html b/js/dojo/dojox/grid/resources/_Grid.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/_Grid.html
@@ -0,0 +1,6 @@
+<div class="dojoxGrid" hidefocus="hidefocus" wairole="grid" dojoAttachEvent="onmouseout:_mouseOut">
+ <div class="dojoxGridMasterHeader" dojoAttachPoint="viewsHeaderNode" wairole="presentation"></div>
+ <div class="dojoxGridMasterView" dojoAttachPoint="viewsNode" wairole="presentation"></div>
+ <div class="dojoxGridMasterMessages" style="display: none;" dojoAttachPoint="messagesNode"></div>
+ <span dojoAttachPoint="lastFocusNode" tabindex="0"></span>
+</div>
diff --git a/js/dojo/dojox/grid/resources/images/grid_dx_gradient.gif b/js/dojo/dojox/grid/resources/images/grid_dx_gradient.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57f67baaf24b58bb0e7dc5c6aa29271fe8f3b557
GIT binary patch
literal 267
zc${<hbhEHb<YmxiIKsg2?$zB7ZyvsWdhPAYJMUiJ`SR)Yx6f}re|YiY;rUPRpS^o^
z@5{$muby0f`{MTJ56|B`zxn3bjSp`hzkmJU_0#Jg-#vZx<jTv(ml$vZ#h)x-S_edc
z>||i=NKouslA)8aYTcWvJq0}0CAs&1%zaaHKKQ_b0uLRj=7~#+PUcw6Kh;p;HP>t1
zjWuPb-zJGZ*kHk<G5dU4Q`Olx{(B!R_BgJ;{r<=A<n!-;|F08hYHn$5YZdP7>h9_7
z>+fQkG<nKo(djd0&YC@E?z}lX3l}Y3vUG{qij}KYuUWfp{e}%3o40J;qR3zk0HPC(
AlK=n!
diff --git a/js/dojo/dojox/grid/resources/images/grid_sort_down.gif b/js/dojo/dojox/grid/resources/images/grid_sort_down.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7a73f82726b6038a7575097f382fdf8fe92cd522
GIT binary patch
literal 49
xc${<hbhEHbWM^PuXkcUjg8%>jEB<5wG8q|kKzxu40~1FJf1_j;Z=?o;H30Vo2=f2{
diff --git a/js/dojo/dojox/grid/resources/images/grid_sort_up.gif b/js/dojo/dojox/grid/resources/images/grid_sort_up.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9452da05432568afaa2a657c42603c1bfd0e45d7
GIT binary patch
literal 48
wc${<hbhEHbWM^PuXkcUjg8%>jEB<5wG8q|kKzxu40~32sBIoMUeB2Dy0P*e#QUCw|
diff --git a/js/dojo/dojox/grid/resources/images/tabEnabled_rotated.png b/js/dojo/dojox/grid/resources/images/tabEnabled_rotated.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e326abd1f06398927fd139638c0c270dfd052081
GIT binary patch
literal 94
zc%17D@N?(olHy`uVBq!ia0vp^(m>42!2~4V8bAI5q*Og!978x}Cja^W-=3KVNXj4j
r+b^wfI%(CP-{19xnYS{2^<`l&%d<N;)%HjRPy>UftDnm{r-UW|-Gm;?
diff --git a/js/dojo/dojox/grid/resources/images/tabHover_rotated.png b/js/dojo/dojox/grid/resources/images/tabHover_rotated.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1a30e108e85ec69a62c60017084461a28fc92480
GIT binary patch
literal 106
zc%17D@N?(olHy`uVBq!ia0vp^(m>42!2~4V8bAI5qzpY>978x}Cja^T{r>g&|0NV2
z{0D)<87c=F4xHGep(Xk6|NrwJ-oKAmW6NTGHJgJWl+k*fmdwHHK+O!Eu6{1-oD!M<
Dd*Ueq
diff --git a/js/dojo/dojox/grid/resources/nihiloGrid.css b/js/dojo/dojox/grid/resources/nihiloGrid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/nihiloGrid.css
@@ -0,0 +1,533 @@
+.dojoxGrid {
+ position: relative;
+ background-color: #EBEADB;
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ -moz-outline-style: none;
+ outline: none;
+ overflow: hidden;
+ height: 0;
+}
+.dojoxGrid table {
+ padding: 0;
+}
+.dojoxGrid td {
+ -moz-outline: none;
+}
+.dojoxGridMasterHeader {
+ position: relative;
+}
+.dojoxGridMasterView {
+ position: relative;
+}
+.dojoxGridMasterMessages {
+ position: relative;
+ padding: 1em;
+ text-align: center;
+ background-color: white;
+}
+.dojoxGridView {
+ position: absolute;
+ overflow: hidden;
+}
+.dojoxGridHeader {
+ position: absolute;
+ overflow: hidden;
+ cursor: default;
+}
+.dojoxGridHeader {
+ background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+ text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridArrowButtonNode {
+ display: none;
+ padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+ display:inline;
+}
+
+.dojoxGridArrowButtonNode:hover {
+ cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+ cursor: default;
+}
+.dojoxGridSortUp:hover {
+ cursor: default;
+}
+.dojoxGridSortDown:hover {
+ cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+ display:inline !important;
+}
+.dojoxGridScrollbox {
+ position: relative;
+ overflow: auto;
+ background-color: white;
+ width: 100%;
+}
+.dojoxGridContent {
+ position: relative;
+ overflow: hidden;
+ -moz-outline-style: none;
+ outline: none;
+}
+.dojoxGridRowbar {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ border-top: none;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+ border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+ background-image: none;
+ background-color: white;
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRow {
+ position: relative;
+ width: 9000em;
+}
+.dojoxGridRow {
+
+ border: 1px solid #E8E4D8;
+ border-color: #F8F7F1;
+
+ border-left: none;
+ border-right: none;
+ background-color: white;
+ border-top: none;
+}
+.dojoxGridRowOver {
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+
+
+
+}
+.dojoxGridRowOdd {
+ background-color: #FFFDF3;
+
+}
+.dojoxGridRowSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+ table-layout: fixed;
+ width: 0;
+ empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+ border-collapse: collapse;
+}
+.dojoxGridInvisible {
+ visibility: hidden;
+}
+.Xdojo-ie .dojoxGridInvisible {
+ display: none;
+}
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ height: 0;
+ overflow: hidden;
+}
+.dojoxGridCell {
+ border: 1px solid;
+ border-color: #EBEADB;
+ border-right-color: #D5CDB5;
+ padding: 3px 3px 3px 3px;
+ text-align: left;
+ overflow: hidden;
+}
+.dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+ border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ width: 100%;
+ font-size: 100%;
+ font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+ position: absolute;
+ top: -1000px;
+ height: 0;
+ width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected {
+ border-top: 1px solid white;
+ border-bottom: 1px dashed black;
+ border-top: 0;
+ background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+ border: 0;
+ border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+ border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+ font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+ border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+ border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+ border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+ border-right: double;
+}
+.dojoxGridDndAvatarItem td {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding: 0pt;
+ margin: 0pt;
+}
+.dojoxGridDndAvatarItem td.dojoxGridDndAvatarItemImage {
+ border: 0;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background-color: transparent;
+ padding: 3px;
+ padding-bottom: 2px;
+ margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+ cursor: col-resize;
+ z-index:10000;
+}
+.dojoxGridColNoResize,
+.dojoxGridColNoResize .dojoDndItemOver {
+ cursor: not-allowed !important;
+}
+.dojoxGridColResize,
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+ cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+}
+.dojoxGridExpandoCell {
+ vertical-align: top;
+}
+.dojoxGridSummarySpan {
+ visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+ visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+ visibility: hidden !important;
+ width: 0px !important;
+}
+.nihilo .dojoxGrid {
+ background-color: #e9e9e9;
+ font-size: 0.85em;
+}
+.nihilo .dojoxGridMasterMessages {
+ background-color: #fefefe;
+}
+.nihilo .dojoxGridHeader {
+ background-color: #e9e9e9;
+}
+.nihilo .dojoxGridHeader .dojoxGridCell {
+ border-width: 1px;
+ padding-bottom: 0px;
+ border-color: transparent #ACA899 #919191 transparent;
+ background: url(../../../dijit/themes/nihilo/images/titleBar.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.nihilo .dojoxGridHeader .dojoxGridCellOver {
+ background: url(../../../dijit/themes/nihilo/images/titleBarActive.png) #e9e9e9 repeat-x top;
+}
+.nihilo .dojoxGridHeader .dojoxGridCellFocus {
+ border-color: #ACA899 #919191;
+ border-style: dashed;
+}
+.nihilo .dojoxGridArrowButtonChar {
+ float: right;
+ display: none;
+}
+.nihilo .dojoxGridArrowButtonNode {
+ display: block !important;
+ padding-left: 0px;
+ float: right;
+ background:url("../../../dijit/themes/nihilo/images/spriteArrows.png") left center no-repeat;
+ width: 11px;
+ height: 1em;
+ margin-top: 1px;
+}
+.dj_ie6 .nihilo .dojoxGridArrowButtonNode {
+ background-image:url("../../../dijit/themes/nihilo/images/spriteArrows.gif");
+ margin-left: 0px;
+}
+.nihilo .dojoxGridSortUp .dojoxGridArrowButtonNode {
+ background-position: -21px;
+}
+.dijit_a11y .nihilo .dojoxGridArrowButtonNode {
+ display: none !important;
+}
+.nihilo .dojoxGridScrollbox {
+ background-color: #fefefe;
+}
+.nihilo .dojoxGridRowbar {
+ border: none;
+ background: url(../../../dijit/themes/nihilo/images/titleBar.png) #e9e9e9 repeat-y right;
+ border-right: 1px solid #ccc;
+ padding: 0px;
+}
+.nihilo .dojoxGridRowbarInner {
+ border: none;
+ border-bottom: 1px solid #ccc;
+}
+.nihilo .dojoxGridRowbarOver {
+ background: url(../../../dijit/themes/nihilo/images/titleBarActive.png) #e9e9e9 repeat-y right;
+}
+.nihilo .dojoxGridRowbarSelected {
+ background: url(../../../dijit/themes/nihilo/images/titleBar.png) #D9E8F9 no-repeat center;
+ border-right: 1px solid #ccc;
+}
+.nihilo .dojoxGridRow {
+ border: none;
+ background-color: white;
+}
+.nihilo .dojoxGridRowOver {
+ border-top-color: #ccc;
+ border-bottom-color: #ccc;
+}
+.nihilo .dojoxGridRowOver .dojoxGridCell {
+ background-color: #ffe284;
+}
+.nihilo .dojoxGridRowOdd {
+ background-color: #f2f5f9;
+}
+.nihilo .dojoxGridRowSelected {
+ background-color: #aec7e3;
+}
+.dijit_a11y .nihilo .dojoxGridRowSelected {
+ background-color: #aec7e3;
+ border-style: solid;
+}
+.nihilo .dojoxGridCell {
+ border: 1px dotted #D5CDB5;
+ border-left-color: transparent;
+ border-top-color: transparent;
+}
+.dj_ff2 .nihilo .dojoxGridCell {
+ border-left-width: 0px;
+ border-top-width: 0px;
+}
+.dj_ie6 .nihilo .dojoxGridCell {
+ border: 1px solid white;
+ border-right: 1px solid #D5CDB5;
+}
+.nihilo .dojoxGridCellFocus {
+ border: 1px dashed darkblue;
+}
+.nihilo .dojoxGridCellOver {
+ border: 1px dotted #a6a6a6;
+}
+.nihilo .dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed darkblue;
+}
+.nihilo .dojoxGridRowEditing td {
+
+ background-color: #ffe284;
+
+}
+.nihilo .dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.nihilo .dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.nihilo .dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.nihilo .dojoxGrid .dojoDndItemBefore {
+ border-left-color: #ffe284;
+}
+.nihilo .dojoxGrid .dojoDndItemAfter {
+ border-right-color: #ffe284;
+}
+.nihilo .dojoxGridExpando {
+ float: left;
+ height: 18px;
+ width: 18px;
+ text-align: center;
+ margin-top: -3px;
+}
+.dijitRtl .nihilo .dojoxGridExpando {
+ float: right;
+}
+.nihilo .dojoxGridExpandoCell {
+ padding-top: 5px;
+}
+.nihilo .dojoxGridExpandoNode {
+ height: 18px;
+ background-image: url('../../../dijit/themes/nihilo/images/spriteTree.gif');
+}
+.nihilo .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/nihilo/images/spriteTree.gif') no-repeat -18px top;
+}
+.nihilo .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/nihilo/images/treeExpand_loading.gif');
+}
+.nihilo .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+ visibility: visible !important;
+ width: 18px !important;
+}
+.nihilo .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/nihilo/images/spriteTree.gif') no-repeat -36px top;
+}
+.nihilo .dojoxGridExpandoNodeInner {
+ visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+ visibility: visible;
+}
+
+.nihilo .dojoxGridSummaryRow .dojoxGridCell {
+ border-top-color: #999;
+ border-top-style: solid;
+}
+.nihilo .dojoxGridSpacerCell,
+.nihilo .dojoxGridExpandoCell,
+.nihilo .dojoxGridSummaryRow .dojoxGridSpacerCell {
+ border-color: transparent;
+ border-right-color: #D5CDB5;
+}
+.nihilo .dojoxGridSummaryRow .dojoxGridTotalCell,
+.nihilo .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.nihilo .dojoxGridTreeModel .dojoxGridExpandoCell {
+ border-bottom-color: #D5CDB5;
+}
+.nihilo .dojoxGridSubRowAlt {
+ background-color: #F8F8F8;
+}
+.nihilo .dojoxGridRowOdd .dojoxGridSubRowAlt {
+ background-color: #EDEFF3;
+}
diff --git a/js/dojo/dojox/grid/resources/soriaGrid.css b/js/dojo/dojox/grid/resources/soriaGrid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/soriaGrid.css
@@ -0,0 +1,534 @@
+.dojoxGrid {
+ position: relative;
+ background-color: #EBEADB;
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ -moz-outline-style: none;
+ outline: none;
+ overflow: hidden;
+ height: 0;
+}
+.dojoxGrid table {
+ padding: 0;
+}
+.dojoxGrid td {
+ -moz-outline: none;
+}
+.dojoxGridMasterHeader {
+ position: relative;
+}
+.dojoxGridMasterView {
+ position: relative;
+}
+.dojoxGridMasterMessages {
+ position: relative;
+ padding: 1em;
+ text-align: center;
+ background-color: white;
+}
+.dojoxGridView {
+ position: absolute;
+ overflow: hidden;
+}
+.dojoxGridHeader {
+ position: absolute;
+ overflow: hidden;
+ cursor: default;
+}
+.dojoxGridHeader {
+ background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+ text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridArrowButtonNode {
+ display: none;
+ padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+ display:inline;
+}
+
+.dojoxGridArrowButtonNode:hover {
+ cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+ cursor: default;
+}
+.dojoxGridSortUp:hover {
+ cursor: default;
+}
+.dojoxGridSortDown:hover {
+ cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+ display:inline !important;
+}
+.dojoxGridScrollbox {
+ position: relative;
+ overflow: auto;
+ background-color: white;
+ width: 100%;
+}
+.dojoxGridContent {
+ position: relative;
+ overflow: hidden;
+ -moz-outline-style: none;
+ outline: none;
+}
+.dojoxGridRowbar {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ border-top: none;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+ border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+ background-image: none;
+ background-color: white;
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRow {
+ position: relative;
+ width: 9000em;
+}
+.dojoxGridRow {
+
+ border: 1px solid #E8E4D8;
+ border-color: #F8F7F1;
+
+ border-left: none;
+ border-right: none;
+ background-color: white;
+ border-top: none;
+}
+.dojoxGridRowOver {
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+
+
+
+}
+.dojoxGridRowOdd {
+ background-color: #FFFDF3;
+
+}
+.dojoxGridRowSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+ table-layout: fixed;
+ width: 0;
+ empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+ border-collapse: collapse;
+}
+.dojoxGridInvisible {
+ visibility: hidden;
+}
+.Xdojo-ie .dojoxGridInvisible {
+ display: none;
+}
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ height: 0;
+ overflow: hidden;
+}
+.dojoxGridCell {
+ border: 1px solid;
+ border-color: #EBEADB;
+ border-right-color: #D5CDB5;
+ padding: 3px 3px 3px 3px;
+ text-align: left;
+ overflow: hidden;
+}
+.dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+ border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ width: 100%;
+ font-size: 100%;
+ font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+ position: absolute;
+ top: -1000px;
+ height: 0;
+ width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected {
+ border-top: 1px solid white;
+ border-bottom: 1px dashed black;
+ border-top: 0;
+ background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+ border: 0;
+ border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+ border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+ font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+ border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+ border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+ border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+ border-right: double;
+}
+.dojoxGridDndAvatarItem td {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding: 0pt;
+ margin: 0pt;
+}
+.dojoxGridDndAvatarItem td.dojoxGridDndAvatarItemImage {
+ border: 0;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background-color: transparent;
+ padding: 3px;
+ padding-bottom: 2px;
+ margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+ cursor: col-resize;
+ z-index:10000;
+}
+.dojoxGridColNoResize,
+.dojoxGridColNoResize .dojoDndItemOver {
+ cursor: not-allowed !important;
+}
+.dojoxGridColResize,
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+ cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+}
+.dojoxGridExpandoCell {
+ vertical-align: top;
+}
+.dojoxGridSummarySpan {
+ visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+ visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+ visibility: hidden !important;
+ width: 0px !important;
+}
+.soria .dojoxGrid {
+ background-color: #e9e9e9;
+ font-size: 0.85em;
+}
+.soria .dojoxGridMasterMessages {
+ background-color: #fefefe;
+}
+.soria .dojoxGridHeader {
+ background-color: #e9e9e9;
+}
+.soria .dojoxGridHeader .dojoxGridCell {
+ border-width: 1px;
+ padding-bottom: 0px;
+ border-color: transparent #ACA899 #919191 transparent;
+ background: url(../../../dijit/themes/soria/images/titleBar.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.soria .dojoxGridHeader .dojoxGridCellOver {
+ background: url(../../../dijit/themes/soria/images/titleBarActive.png) #e9e9e9 repeat-x top;
+}
+.soria .dojoxGridHeader .dojoxGridCellFocus {
+ border-color: #ACA899 #919191;
+ border-style: dashed;
+}
+.soria .dojoxGridArrowButtonChar {
+ float: right;
+ display: none;
+}
+.soria .dojoxGridArrowButtonNode {
+ display: block !important;
+ padding-left: 0px;
+ float: right;
+ background:url("../../../dijit/themes/soria/images/spriteArrows.png") no-repeat left center;
+ margin-top: 2px;
+ width: 11px;
+ height: 1em;
+}
+.dj_ie6 .soria .dojoxGridArrowButtonNode {
+ background-image:url("../../../dijit/themes/soria/images/spriteArrows.gif");
+ margin-left: 0px;
+}
+.soria .dojoxGridSortUp .dojoxGridArrowButtonNode {
+ background-position: -21px;
+}
+.dijit_a11y .soria .dojoxGridArrowButtonNode {
+ display: none !important;
+}
+.soria .dojoxGridScrollbox {
+ background-color: #fefefe;
+}
+.soria .dojoxGridRowbar {
+ border: none;
+ background: url(../../../dijit/themes/soria/images/titleBar.png) #e9e9e9 repeat-y right;
+ border-right: 1px solid #ccc;
+ padding: 0px;
+}
+.soria .dojoxGridRowbarInner {
+ border: none;
+ border-bottom: 1px solid #ccc;
+}
+.soria .dojoxGridRowbarOver {
+ background: url(../../../dijit/themes/soria/images/titleBarActive.png) #e9e9e9 repeat-y right;
+}
+.soria .dojoxGridRowbarSelected {
+ background: url(../../../dijit/themes/soria/images/titleBar.png) #D9E8F9 no-repeat center;
+ border-right: 1px solid #ccc;
+}
+.soria .dojoxGridRow {
+ border: none;
+ background-color: white;
+}
+.soria .dojoxGridRowOver {
+ border-top-color: #ccc;
+ border-bottom-color: #ccc;
+}
+.soria .dojoxGridRowOver .dojoxGridCell {
+ background-color: #60a1ea;
+ color:#fff;
+}
+.soria .dojoxGridRowOdd {
+ background-color: #f2f5f9;
+}
+.soria .dojoxGridRowSelected {
+ background-color: #aec7e3;
+}
+.dijit_a11y .soria .dojoxGridRowSelected {
+ background-color: #aec7e3;
+ border-style: solid;
+}
+.soria .dojoxGridCell {
+ border: 1px dotted #D5CDB5;
+ border-left-color: transparent;
+ border-top-color: transparent;
+}
+.dj_ff2 .soria .dojoxGridCell {
+ border-left-width: 0px;
+ border-top-width: 0px;
+}
+.dj_ie6 .soria .dojoxGridCell {
+ border: 1px solid white;
+ border-right: 1px solid #D5CDB5;
+}
+.soria .dojoxGridCellFocus {
+ border: 1px dashed darkblue;
+}
+.soria .dojoxGridCellOver {
+ border: 1px dotted #a6a6a6;
+}
+.soria .dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed darkblue;
+}
+.soria .dojoxGridRowEditing td {
+
+ background-color: #60a1ea;
+
+}
+.soria .dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.soria .dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.soria .dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.soria .dojoxGrid .dojoDndItemBefore {
+ border-left-color: #4B5AAA;
+}
+.soria .dojoxGrid .dojoDndItemAfter {
+ border-right-color: #4B5AAA;
+}
+.soria .dojoxGridExpando {
+ float: left;
+ height: 18px;
+ width: 18px;
+ text-align: center;
+ margin-top: -3px;
+}
+.dijitRtl .soria .dojoxGridExpando {
+ float: right;
+}
+.soria .dojoxGridExpandoCell {
+ padding-top: 5px;
+}
+.soria .dojoxGridExpandoNode {
+ height: 18px;
+ background-image: url('../../../dijit/themes/soria/images/spriteTree.gif');
+}
+.soria .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/soria/images/spriteTree.gif') no-repeat -18px top;
+}
+.soria .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/soria/images/treeExpand_loading.gif');
+}
+.soria .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+ visibility: visible !important;
+ width: 18px !important;
+}
+.soria .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+ background: url('../../../dijit/themes/soria/images/spriteTree.gif') no-repeat -36px top;
+}
+.soria .dojoxGridExpandoNodeInner {
+ visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+ visibility: visible;
+}
+
+.soria .dojoxGridSummaryRow .dojoxGridCell {
+ border-top-color: #999;
+ border-top-style: solid;
+}
+.soria .dojoxGridSpacerCell,
+.soria .dojoxGridExpandoCell,
+.soria .dojoxGridSummaryRow .dojoxGridSpacerCell {
+ border-color: transparent;
+ border-right-color: #D5CDB5;
+}
+.soria .dojoxGridSummaryRow .dojoxGridTotalCell,
+.soria .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.soria .dojoxGridTreeModel .dojoxGridExpandoCell {
+ border-bottom-color: #D5CDB5;
+}
+.soria .dojoxGridSubRowAlt {
+ background-color: #F8F8F8;
+}
+.soria .dojoxGridRowOdd .dojoxGridSubRowAlt {
+ background-color: #EDEFF3;
+}
diff --git a/js/dojo/dojox/grid/resources/tundraGrid.css b/js/dojo/dojox/grid/resources/tundraGrid.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/resources/tundraGrid.css
@@ -0,0 +1,561 @@
+.dojoxGrid {
+ position: relative;
+ background-color: #EBEADB;
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+ -moz-outline-style: none;
+ outline: none;
+ overflow: hidden;
+ height: 0;
+}
+.dojoxGrid table {
+ padding: 0;
+}
+.dojoxGrid td {
+ -moz-outline: none;
+}
+.dojoxGridMasterHeader {
+ position: relative;
+}
+.dojoxGridMasterView {
+ position: relative;
+}
+.dojoxGridMasterMessages {
+ position: relative;
+ padding: 1em;
+ text-align: center;
+ background-color: white;
+}
+.dojoxGridView {
+ position: absolute;
+ overflow: hidden;
+}
+.dojoxGridHeader {
+ position: absolute;
+ overflow: hidden;
+ cursor: default;
+}
+.dojoxGridHeader {
+ background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+ text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+ background-image: none;
+ background-color: white;
+ border-bottom-color: #FEBE47;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom-width: 3px;
+}
+.dojoxGridArrowButtonNode {
+ display: none;
+ padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+ display:inline;
+}
+
+.dojoxGridArrowButtonNode:hover {
+ cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+ cursor: default;
+}
+.dojoxGridSortUp:hover {
+ cursor: default;
+}
+.dojoxGridSortDown:hover {
+ cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+ display:inline !important;
+}
+.dojoxGridScrollbox {
+ position: relative;
+ overflow: auto;
+ background-color: white;
+ width: 100%;
+}
+.dojoxGridContent {
+ position: relative;
+ overflow: hidden;
+ -moz-outline-style: none;
+ outline: none;
+}
+.dojoxGridRowbar {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ border-top: none;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+ border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+ background-image: none;
+ background-color: white;
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRow {
+ position: relative;
+ width: 9000em;
+}
+.dojoxGridRow {
+
+ border: 1px solid #E8E4D8;
+ border-color: #F8F7F1;
+
+ border-left: none;
+ border-right: none;
+ background-color: white;
+ border-top: none;
+}
+.dojoxGridRowOver {
+ border-top-color: #FEBE47;
+ border-bottom-color: #FEBE47;
+
+
+
+}
+.dojoxGridRowOdd {
+ background-color: #FFFDF3;
+
+}
+.dojoxGridRowSelected {
+ background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+ table-layout: fixed;
+ width: 0;
+ empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+ border-collapse: collapse;
+}
+.dojoxGridInvisible {
+ visibility: hidden;
+}
+.Xdojo-ie .dojoxGridInvisible {
+ display: none;
+}
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+ border-top-width: 0;
+ border-bottom-width: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ height: 0;
+ overflow: hidden;
+}
+.dojoxGridCell {
+ border: 1px solid;
+ border-color: #EBEADB;
+ border-right-color: #D5CDB5;
+ padding: 3px 3px 3px 3px;
+ text-align: left;
+ overflow: hidden;
+}
+.dojoxGridCellFocus {
+ border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+ border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+ border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ width: 100%;
+ font-size: 100%;
+ font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+ position: absolute;
+ top: -1000px;
+ height: 0;
+ width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected {
+ border-top: 1px solid white;
+ border-bottom: 1px dashed black;
+ border-top: 0;
+ background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+ border: 0;
+ border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+ border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+ font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+ border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+ border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+ border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+ border-right: double;
+}
+.dojoxGridDndAvatarItem td {
+ border: 1px solid;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+ padding: 0pt;
+ margin: 0pt;
+}
+.dojoxGridDndAvatarItem td.dojoxGridDndAvatarItemImage {
+ border: 0;
+ border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+ background-color: transparent;
+ padding: 3px;
+ padding-bottom: 2px;
+ margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndMove.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+ background-image: url(../../../dojo/resources/images/dndCopy.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+ cursor: col-resize;
+ z-index:10000;
+}
+.dojoxGridColNoResize,
+.dojoxGridColNoResize .dojoDndItemOver {
+ cursor: not-allowed !important;
+}
+.dojoxGridColResize,
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+ cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+ background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+ background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+ font-size:1px;
+ height:6px;
+ z-index:10000;
+ top:0;
+ overflow:hidden;
+ position:absolute;
+ line-height:1px;
+ width:8px;
+}
+.dojoxGridResizeColLine {
+ width: 1px;
+ background-color: #777;
+ position: absolute;
+}
+.dojoxGridExpandoCell {
+ vertical-align: top;
+}
+.dojoxGridSummarySpan {
+ visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+ visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+ visibility: hidden !important;
+ width: 0px !important;
+}
+.tundra .dojoxGrid {
+ background-color: #e9e9e9;
+ font-size: 0.85em;
+}
+.tundra .dojoxGridMasterMessages {
+ background-color: #fefefe;
+}
+.tundra .dojoxGridLoading,
+.tundra .dojoxGridError {
+ background-position:left center;
+ background-repeat: no-repeat;
+ padding-left:25px;
+}
+.dijitRtl .tundra .dojoxGridLoading,
+.dijitRtl .tundra .dojoxGridError,
+.dijitRtl .tundra .dojoxGridNoData {
+ background-position:right;
+ padding-right:25px;
+ padding-left:0px;
+}
+.tundra .dojoxGridLoading {
+ background-image: url('../../../dijit/themes/tundra/images/loading.gif');
+}
+.tundra .dojoxGridError {
+ background-image: url('../../../dijit/themes/tundra/images/warning.png');
+}
+.tundra .dojoxGridHeader {
+ background-color: #e9e9e9;
+}
+.tundra .dojoxGridHeader .dojoxGridCell {
+ border-width: 1px;
+ padding-bottom: 0px;
+ border-color: transparent #ACA899 #919191 transparent;
+ background: url(../../../dijit/themes/tundra/images/tabEnabled.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellOver {
+ background: url(../../../dijit/themes/tundra/images/tabHover.png) #e9e9e9 repeat-x top;
+ color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellFocus {
+ border-color: #ACA899 #919191;
+ border-style: dashed;
+}
+.tundra .dojoxGridArrowButtonChar {
+ float: right;
+ display: none;
+}
+.tundra .dojoxGridArrowButtonNode {
+ display: block !important;
+ padding-left: 0px;
+ float: right;
+ background:url("../../../dijit/themes/tundra/images/spriteArrows.png") no-repeat left center;
+ width: 7px;
+ height: 1em;
+ margin: 2px 4px 0px 5px;
+}
+.dj_ie6 .tundra .dojoxGridArrowButtonNode {
+ background-image:url("../../../dijit/themes/tundra/images/spriteArrows.gif");
+ margin-left: 0px;
+}
+.tundra .dojoxGridSortUp .dojoxGridArrowButtonNode {
+ background-position: -21px;
+}
+.dijit_a11y .tundra .dojoxGridArrowButtonNode {
+ display: none !important;
+}
+.tundra .dojoxGridScrollbox {
+ background-color: #fefefe;
+}
+.tundra .dojoxGridRowbar {
+ border: none;
+ background: url(images/tabEnabled_rotated.png) #e9e9e9 repeat-y right;
+ border-right: 1px solid #ccc;
+ padding: 0px;
+}
+.tundra .dojoxGridRowbarInner {
+ border: none;
+ border-bottom: 1px solid #ccc;
+}
+.tundra .dojoxGridRowbarOver {
+ background: url(images/tabHover_rotated.png) #e9e9e9 repeat-y right;
+}
+.tundra .dojoxGridRowbarSelected {
+ background: url(../../../dijit/themes/tundra/images/tabDisabled.png) #D8E8F9 no-repeat center;
+ border-right: 1px solid #ccc;
+}
+.tundra .dojoxGridRow {
+ border: none;
+ background-color: white;
+}
+.tundra .dojoxGridRowOver {
+ border-top-color: #ccc;
+ border-bottom-color: #ccc;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell {
+ background-color: #60a1ea;
+ color:#fff;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijit {
+ color: #000;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijitDisabled {
+ color: gray;
+}
+.tundra .dojoxGridRowOdd {
+ background-color: #f2f5f9;
+}
+.tundra .dojoxGridRowSelected {
+ background-color: #aec7e3 !important;
+}
+.dijit_a11y .tundra .dojoxGridRowSelected {
+ background-color: #aec7e3;
+ border-style: solid;
+}
+.tundra .dojoxGridCell {
+ border: 1px dotted #D5CDB5;
+ border-left-color: transparent;
+ border-top-color: transparent;
+}
+.dj_ff2 .tundra .dojoxGridCell {
+ border-left-width: 0px;
+ border-top-width: 0px;
+}
+.dj_ie6 .tundra .dojoxGridCell {
+ border: 1px solid white;
+ border-right: 1px solid #D5CDB5;
+}
+.tundra .dojoxGridCellFocus {
+ border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridCellOver {
+ border: 1px dotted #a6a6a6;
+}
+.tundra .dojoxGridCellFocus .dojoxGridCellOver {
+ border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridRowEditing td {
+
+ background-color: #60a1ea;
+
+}
+.tundra .dojoxGridRow-inserting td {
+ background-color: #F4FFF4;
+}
+.tundra .dojoxGridRow-inflight td {
+ background-color: #F2F7B7;
+}
+.tundra .dojoxGridRow-error td {
+ background-color: #F8B8B6;
+}
+.tundra .dojoxGrid .dojoDndItemBefore {
+ border-left-color: #3559ac;
+}
+.tundra .dojoxGrid .dojoDndItemAfter {
+ border-right-color: #3559ac;
+}
+.tundra .dojoxGridExpando {
+ float: left;
+ height: 18px;
+ width: 18px;
+ text-align: center;
+ margin-top: -3px;
+}
+.dijitRtl .tundra .dojoxGridExpando {
+ float: right;
+}
+.tundra .dojoxGridExpandoCell {
+ padding-top: 5px;
+}
+.tundra .dojoxGridExpandoNode {
+ height: 18px;
+ background-image: url('../../../dijit/themes/tundra/images/treeExpand_plus.gif');
+}
+.tundra .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+ background-image: url('../../../dijit/themes/tundra/images/treeExpand_minus.gif');
+}
+.tundra .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+ background-image: url('../../../dijit/themes/tundra/images/treeExpand_loading.gif');
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+ visibility: visible !important;
+ width: 18px !important;
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+ background-image: url('../../../dijit/themes/tundra/images/treeExpand_leaf.gif');
+ background-position: -3px;
+}
+.tundra .dojoxGridExpandoNodeInner {
+ visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+ visibility: visible;
+}
+
+.tundra .dojoxGridSummaryRow .dojoxGridCell {
+ border-top-color: #999;
+ border-top-style: solid;
+}
+.tundra .dojoxGridSpacerCell,
+.tundra .dojoxGridExpandoCell,
+.tundra .dojoxGridSummaryRow .dojoxGridSpacerCell {
+ border-color: transparent;
+ border-right-color: #D5CDB5;
+}
+.tundra .dojoxGridSummaryRow .dojoxGridTotalCell,
+.tundra .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.tundra .dojoxGridTreeModel .dojoxGridExpandoCell {
+ border-bottom-color: #D5CDB5;
+}
+.tundra .dojoxGridSubRowAlt {
+ background-color: #F8F8F8;
+}
+.tundra .dojoxGridRowOdd .dojoxGridSubRowAlt {
+ background-color: #EDEFF3;
+}
diff --git a/js/dojo/dojox/grid/util.js b/js/dojo/dojox/grid/util.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/grid/util.js
@@ -0,0 +1,66 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.util"]){
+dojo._hasResource["dojox.grid.util"]=true;
+dojo.provide("dojox.grid.util");
+(function(){
+var _1=dojox.grid.util;
+_1.na="...";
+_1.rowIndexTag="gridRowIndex";
+_1.gridViewTag="gridView";
+_1.fire=function(ob,ev,_2){
+var fn=ob&&ev&&ob[ev];
+return fn&&(_2?fn.apply(ob,_2):ob[ev]());
+};
+_1.setStyleHeightPx=function(_3,_4){
+if(_4>=0){
+var s=_3.style;
+var v=_4+"px";
+if(_3&&s["height"]!=v){
+s["height"]=v;
+}
+}
+};
+_1.mouseEvents=["mouseover","mouseout","mousedown","mouseup","click","dblclick","contextmenu"];
+_1.keyEvents=["keyup","keydown","keypress"];
+_1.funnelEvents=function(_5,_6,_7,_8){
+var _9=(_8?_8:_1.mouseEvents.concat(_1.keyEvents));
+for(var i=0,l=_9.length;i<l;i++){
+_6.connect(_5,"on"+_9[i],_7);
+}
+};
+_1.removeNode=function(_a){
+_a=dojo.byId(_a);
+_a&&_a.parentNode&&_a.parentNode.removeChild(_a);
+return _a;
+};
+_1.arrayCompare=function(_b,_c){
+for(var i=0,l=_b.length;i<l;i++){
+if(_b[i]!=_c[i]){
+return false;
+}
+}
+return (_b.length==_c.length);
+};
+_1.arrayInsert=function(_d,_e,_f){
+if(_d.length<=_e){
+_d[_e]=_f;
+}else{
+_d.splice(_e,0,_f);
+}
+};
+_1.arrayRemove=function(_10,_11){
+_10.splice(_11,1);
+};
+_1.arraySwap=function(_12,inI,inJ){
+var _13=_12[inI];
+_12[inI]=_12[inJ];
+_12[inJ]=_13;
+};
+})();
+}
diff --git a/js/dojo/dojox/help/README b/js/dojo/dojox/help/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/help/README
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+dojox.help
+-------------------------------------------------------------------------------
+Version 0.0
+Release date: 3/13/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Neil Roberts (pottedmeat@dojotoolkit.org)
+ Wolfram Kriesing (wolfram@kriesing.de)
+-------------------------------------------------------------------------------
+Project description
+
+Provide functionality for quick access to available documentation while
+working in the browser.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo
+dojox.rpc
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/help/*
+
+Install into the following directory structure:
+/dojox/help/
+
+...which should be at the same level as your Dojo checkout.
+
+And run: dojo.require("dojox.help.console") in your console
+-------------------------------------------------------------------------------
diff --git a/js/dojo/dojox/help/_base.js b/js/dojo/dojox/help/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/help/_base.js
@@ -0,0 +1,387 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.help._base"]){
+dojo._hasResource["dojox.help._base"]=true;
+dojo.provide("dojox.help._base");
+dojo.require("dojox.rpc.Service");
+dojo.require("dojo.io.script");
+dojo.experimental("dojox.help");
+console.warn("Script causes side effects (on numbers, strings, and booleans). Call dojox.help.noConflict() if you plan on executing code.");
+dojox.help={locate:function(_1,_2,_3){
+_3=_3||20;
+var _4=[];
+var _5={};
+var _6;
+if(_2){
+if(!dojo.isArray(_2)){
+_2=[_2];
+}
+for(var i=0,_7;_7=_2[i];i++){
+_6=_7;
+if(dojo.isString(_7)){
+_7=dojo.getObject(_7);
+if(!_7){
+continue;
+}
+}else{
+if(dojo.isObject(_7)){
+_6=_7.__name__;
+}else{
+continue;
+}
+}
+_4.push(_7);
+if(_6){
+_6=_6.split(".")[0];
+if(!_5[_6]&&dojo.indexOf(dojox.help._namespaces,_6)==-1){
+dojox.help.refresh(_6);
+}
+_5[_6]=true;
+}
+}
+}
+if(!_4.length){
+_4.push({__name__:"window"});
+dojo.forEach(dojox.help._namespaces,function(_8){
+_5[_8]=true;
+});
+}
+var _9=_1.toLowerCase();
+var _a=[];
+out:
+for(var i=0,_7;_7=_4[i];i++){
+var _b=_7.__name__||"";
+var _c=dojo.some(_4,function(_d){
+_d=_d.__name__||"";
+return (_b.indexOf(_d+".")==0);
+});
+if(_b&&!_c){
+_6=_b.split(".")[0];
+var _e=[];
+if(_b=="window"){
+for(_6 in dojox.help._names){
+if(dojo.isArray(dojox.help._names[_6])){
+_e=_e.concat(dojox.help._names[_6]);
+}
+}
+}else{
+_e=dojox.help._names[_6];
+}
+for(var j=0,_f;_f=_e[j];j++){
+if((_b=="window"||_f.indexOf(_b+".")==0)&&_f.toLowerCase().indexOf(_9)!=-1){
+if(_f.slice(-10)==".prototype"){
+continue;
+}
+var obj=dojo.getObject(_f);
+if(obj){
+_a.push([_f,obj]);
+if(_a.length==_3){
+break out;
+}
+}
+}
+}
+}
+}
+dojox.help._displayLocated(_a);
+if(!dojo.isMoz){
+return "";
+}
+},refresh:function(_10,_11){
+if(arguments.length<2){
+_11=true;
+}
+dojox.help._recurse(_10,_11);
+},noConflict:function(_12){
+if(arguments.length){
+return dojox.help._noConflict(_12);
+}else{
+while(dojox.help._overrides.length){
+var _13=dojox.help._overrides.pop();
+var _14=_13[0];
+var key=_13[1];
+var _15=_14[key];
+_14[key]=dojox.help._noConflict(_15);
+}
+}
+},init:function(_16,_17){
+if(_16){
+dojox.help._namespaces.concat(_16);
+}
+dojo.addOnLoad(function(){
+dojo.require=(function(_18){
+return function(){
+dojox.help.noConflict();
+_18.apply(dojo,arguments);
+if(dojox.help._timer){
+clearTimeout(dojox.help._timer);
+}
+dojox.help._timer=setTimeout(function(){
+dojo.addOnLoad(function(){
+dojox.help.refresh();
+dojox.help._timer=false;
+});
+},500);
+};
+})(dojo.require);
+dojox.help._recurse();
+});
+},_noConflict:function(_19){
+if(_19 instanceof String){
+return _19.toString();
+}else{
+if(_19 instanceof Number){
+return +_19;
+}else{
+if(_19 instanceof Boolean){
+return (_19==true);
+}else{
+if(dojo.isObject(_19)){
+delete _19.__name__;
+delete _19.help;
+}
+}
+}
+}
+return _19;
+},_namespaces:["dojo","dojox","dijit","djConfig"],_rpc:new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc.SMDLibrary","dojo-api.smd")),_attributes:["summary","type","returns","parameters"],_clean:function(_1a){
+var obj={};
+for(var i=0,_1b;_1b=dojox.help._attributes[i];i++){
+var _1c=_1a["__"+_1b+"__"];
+if(_1c){
+obj[_1b]=_1c;
+}
+}
+return obj;
+},_displayLocated:function(_1d){
+throw new Error("_displayLocated should be overridden in one of the dojox.help packages");
+},_displayHelp:function(_1e,obj){
+throw new Error("_displayHelp should be overridden in one of the dojox.help packages");
+},_addVersion:function(obj){
+if(obj.name){
+obj.version=[dojo.version.major,dojo.version.minor,dojo.version.patch].join(".");
+var _1f=obj.name.split(".");
+if(_1f[0]=="dojo"||_1f[0]=="dijit"||_1f[0]=="dojox"){
+obj.project=_1f[0];
+}
+}
+return obj;
+},_stripPrototype:function(_20){
+var _21=_20.replace(/\.prototype(\.|$)/g,".");
+var _22=_21;
+if(_21.slice(-1)=="."){
+_22=_21=_21.slice(0,-1);
+}else{
+_21=_20;
+}
+return [_22,_21];
+},_help:function(){
+var _23=this.__name__;
+var _24=dojox.help._stripPrototype(_23)[0];
+var _25=[];
+for(var i=0,_26;_26=dojox.help._attributes[i];i++){
+if(!this["__"+_26+"__"]){
+_25.push(_26);
+}
+}
+dojox.help._displayHelp(true,{name:this.__name__});
+if(!_25.length||this.__searched__){
+dojox.help._displayHelp(false,dojox.help._clean(this));
+}else{
+this.__searched__=true;
+dojox.help._rpc.get(dojox.help._addVersion({name:_24,exact:true,attributes:_25})).addCallback(this,function(_27){
+if(this.toString===dojox.help._toString){
+this.toString(_27);
+}
+if(_27&&_27.length){
+_27=_27[0];
+for(var i=0,_26;_26=dojox.help._attributes[i];i++){
+if(_27[_26]){
+this["__"+_26+"__"]=_27[_26];
+}
+}
+dojox.help._displayHelp(false,dojox.help._clean(this));
+}else{
+dojox.help._displayHelp(false,false);
+}
+});
+}
+if(!dojo.isMoz){
+return "";
+}
+},_parse:function(_28){
+delete this.__searching__;
+if(_28&&_28.length){
+var _29=_28[0].parameters;
+if(_29){
+var _2a=["function ",this.__name__,"("];
+this.__parameters__=_29;
+for(var i=0,_2b;_2b=_29[i];i++){
+if(i){
+_2a.push(", ");
+}
+_2a.push(_2b.name);
+if(_2b.types){
+var _2c=[];
+for(var j=0,_2d;_2d=_2b.types[j];j++){
+_2c.push(_2d.title);
+}
+if(_2c.length){
+_2a.push(": ");
+_2a.push(_2c.join("|"));
+}
+}
+if(_2b.repeating){
+_2a.push("...");
+}
+if(_2b.optional){
+_2a.push("?");
+}
+}
+_2a.push(")");
+this.__source__=this.__source__.replace(/function[^\(]*\([^\)]*\)/,_2a.join(""));
+}
+if(this.__output__){
+delete this.__output__;
+}
+}else{
+dojox.help._displayHelp(false,false);
+}
+},_toStrings:{},_toString:function(_2e){
+if(!this.__source__){
+return this.__name__;
+}
+var _2f=(!this.__parameters__);
+this.__parameters__=[];
+if(_2e){
+dojox.help._parse.call(this,_2e);
+}else{
+if(_2f){
+this.__searching__=true;
+dojox.help._toStrings[dojox.help._stripPrototype(this.__name__)[0]]=this;
+if(dojox.help._toStringTimer){
+clearTimeout(dojox.help._toStringTimer);
+}
+dojox.help._toStringTimer=setTimeout(function(){
+dojox.help.__toString();
+},50);
+}
+}
+if(!_2f||!this.__searching__){
+return this.__source__;
+}
+var _30="function Loading info for "+this.__name__+"... (watch console for result) {}";
+if(!dojo.isMoz){
+this.__output__=true;
+return _30;
+}
+return {toString:dojo.hitch(this,function(){
+this.__output__=true;
+return _30;
+})};
+},__toString:function(){
+if(dojox.help._toStringTimer){
+clearTimeout(dojox.help._toStringTimer);
+}
+var _31=[];
+dojox.help.noConflict(dojox.help._toStrings);
+for(var _32 in dojox.help._toStrings){
+_31.push(_32);
+}
+while(_31.length){
+dojox.help._rpc.batch(dojox.help._addVersion({names:_31.splice(-50,50),exact:true,attributes:["parameters"]})).addCallback(this,function(_33){
+for(var i=0,_34;_34=_33[i];i++){
+var fn=dojox.help._toStrings[_34.name];
+if(fn){
+dojox.help._parse.call(fn,[_34]);
+delete dojox.help._toStrings[_34.name];
+}
+}
+});
+}
+},_overrides:[],_recursions:[],_names:{},_recurse:function(_35,_36){
+if(arguments.length<2){
+_36=true;
+}
+var _37=[];
+if(_35&&dojo.isString(_35)){
+dojox.help.__recurse(dojo.getObject(_35),_35,_35,_37,_36);
+}else{
+for(var i=0,ns;ns=dojox.help._namespaces[i];i++){
+if(window[ns]){
+dojox.help._recursions.push([window[ns],ns,ns]);
+window[ns].__name__=ns;
+if(!window[ns].help){
+window[ns].help=dojox.help._help;
+}
+}
+}
+}
+while(dojox.help._recursions.length){
+var _38=dojox.help._recursions.shift();
+dojox.help.__recurse(_38[0],_38[1],_38[2],_37,_36);
+}
+for(var i=0,_39;_39=_37[i];i++){
+delete _39.__seen__;
+}
+},__recurse:function(_3a,_3b,_3c,_3d,_3e){
+for(var key in _3a){
+if(key.match(/([^\w_.$]|__[\w_.$]+__)/)){
+continue;
+}
+var _3f=_3a[key];
+if(typeof _3f=="undefined"||_3f===document||_3f===window||_3f===dojox.help._toString||_3f===dojox.help._help||_3f===null||(+dojo.isIE&&_3f.tagName)||_3f.__seen__){
+continue;
+}
+var _40=dojo.isFunction(_3f);
+var _41=dojo.isObject(_3f)&&!dojo.isArray(_3f)&&!_3f.nodeType;
+var _42=(_3c)?(_3c+"."+key):key;
+if(_42=="dojo._blockAsync"){
+continue;
+}
+if(!_3f.__name__){
+var _43=null;
+if(dojo.isString(_3f)){
+_43=String;
+}else{
+if(typeof _3f=="number"){
+_43=Number;
+}else{
+if(typeof _3f=="boolean"){
+_43=Boolean;
+}
+}
+}
+if(_43){
+_3f=_3a[key]=new _43(_3f);
+}
+}
+_3f.__seen__=true;
+_3f.__name__=_42;
+(dojox.help._names[_3b]=dojox.help._names[_3b]||[]).push(_42);
+_3d.push(_3f);
+if(!_40){
+dojox.help._overrides.push([_3a,key]);
+}
+if((_40||_41)&&_3e){
+dojox.help._recursions.push([_3f,_3b,_42]);
+}
+if(_40){
+if(!_3f.__source__){
+_3f.__source__=_3f.toString().replace(/^function\b ?/,"function "+_42);
+}
+if(_3f.toString===Function.prototype.toString){
+_3f.toString=dojox.help._toString;
+}
+}
+if(!_3f.help){
+_3f.help=dojox.help._help;
+}
+}
+}};
+}
diff --git a/js/dojo/dojox/help/console.js b/js/dojo/dojox/help/console.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/help/console.js
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.help.console"]){
+dojo._hasResource["dojox.help.console"]=true;
+dojo.provide("dojox.help.console");
+dojo.require("dojox.help._base");
+dojo.mixin(dojox.help,{_plainText:function(_1){
+return _1.replace(/(<[^>]*>|&[^;]{2,6};)/g,"");
+},_displayLocated:function(_2){
+var _3={};
+dojo.forEach(_2,function(_4){
+_3[_4[0]]=dojo.isMoz?{toString:function(){
+return "Click to view";
+},item:_4[1]}:_4[1];
+});
+},_displayHelp:function(_5,_6){
+if(_5){
+var _7="Help for: "+_6.name;
+var _8="";
+for(var i=0;i<_7.length;i++){
+_8+="=";
+}
+}else{
+if(!_6){
+}else{
+var _9=false;
+for(var _a in _6){
+var _b=_6[_a];
+if(_a=="returns"&&_6.type!="Function"&&_6.type!="Constructor"){
+continue;
+}
+if(_b&&(!dojo.isArray(_b)||_b.length)){
+_9=true;
+_b=dojo.isString(_b)?dojox.help._plainText(_b):_b;
+if(_a=="returns"){
+var _c=dojo.map(_b.types||[],"return item.title;").join("|");
+if(_b.summary){
+if(_c){
+_c+=": ";
+}
+_c+=dojox.help._plainText(_b.summary);
+}
+}else{
+if(_a=="parameters"){
+for(var j=0,_d;_d=_b[j];j++){
+var _e=dojo.map(_d.types,"return item.title").join("|");
+var _f="";
+if(_d.optional){
+_f+="Optional. ";
+}
+if(_d.repating){
+_f+="Repeating. ";
+}
+_f+=dojox.help._plainText(_d.summary);
+if(_f){
+_f=" - "+_f;
+for(var k=0;k<_d.name.length;k++){
+_f=" "+_f;
+}
+}
+}
+}else{
+}
+}
+}
+}
+if(!_9){
+}
+}
+}
+}});
+dojox.help.init();
+}
diff --git a/js/dojo/dojox/highlight.js b/js/dojo/dojox/highlight.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight"]){
+dojo._hasResource["dojox.highlight"]=true;
+dojo.provide("dojox.highlight");
+dojo.require("dojox.highlight._base");
+}
diff --git a/js/dojo/dojox/highlight/README b/js/dojo/dojox/highlight/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/README
@@ -0,0 +1,31 @@
+-------------------------------------------------------------------------------
+dojox.highlight
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/25/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+ Ivan Sagalaev (softwaremaniacs.org) Author
+ Peter Higgins (dante) Dojo port
+-------------------------------------------------------------------------------
+Project description
+
+A syntax highlighting engine for the Dojo Toolkit
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo base only.
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+simply get the dojox/highlight folder (and dojox/highlight.js) from the
+dojox SVN repository, and include in your page via
+
+dojo.require("dojox.highlight");
+
diff --git a/js/dojo/dojox/highlight/_base.js b/js/dojo/dojox/highlight/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/_base.js
@@ -0,0 +1,327 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight._base"]){
+dojo._hasResource["dojox.highlight._base"]=true;
+dojo.provide("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1="\\b(0x[A-Za-z0-9]+|\\d+(\\.\\d+)?)";
+dh.constants={IDENT_RE:"[a-zA-Z][a-zA-Z0-9_]*",UNDERSCORE_IDENT_RE:"[a-zA-Z_][a-zA-Z0-9_]*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:_1,APOS_STRING_MODE:{className:"string",begin:"'",end:"'",illegal:"\\n",contains:["escape"],relevance:0},QUOTE_STRING_MODE:{className:"string",begin:"\"",end:"\"",illegal:"\\n",contains:["escape"],relevance:0},BACKSLASH_ESCAPE:{className:"escape",begin:"\\\\.",end:"^",relevance:0},C_LINE_COMMENT_MODE:{className:"comment",begin:"//",end:"$",relevance:0},C_BLOCK_COMMENT_MODE:{className:"comment",begin:"/\\*",end:"\\*/"},HASH_COMMENT_MODE:{className:"comment",begin:"#",end:"$"},C_NUMBER_MODE:{className:"number",begin:_1,end:"^",relevance:0}};
+function _2(_3){
+return _3.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;");
+};
+function _4(_5){
+return dojo.every(_5.childNodes,function(_6){
+return _6.nodeType==3||String(_6.nodeName).toLowerCase()=="br";
+});
+};
+function _7(_8){
+var _9=[];
+dojo.forEach(_8.childNodes,function(_a){
+if(_a.nodeType==3){
+_9.push(_a.nodeValue);
+}else{
+if(String(_a.nodeName).toLowerCase()=="br"){
+_9.push("\n");
+}else{
+throw "Complex markup";
+}
+}
+});
+return _9.join("");
+};
+function _b(_c){
+if(!_c.keywordGroups){
+for(var _d in _c.keywords){
+var kw=_c.keywords[_d];
+if(kw instanceof Object){
+_c.keywordGroups=_c.keywords;
+}else{
+_c.keywordGroups={keyword:_c.keywords};
+}
+break;
+}
+}
+};
+function _e(_f){
+if(_f.defaultMode&&_f.modes){
+_b(_f.defaultMode);
+dojo.forEach(_f.modes,_b);
+}
+};
+var _10=function(_11,_12){
+this.langName=_11;
+this.lang=dh.languages[_11];
+this.modes=[this.lang.defaultMode];
+this.relevance=0;
+this.keywordCount=0;
+this.result=[];
+if(!this.lang.defaultMode.illegalRe){
+this.buildRes();
+_e(this.lang);
+}
+try{
+this.highlight(_12);
+this.result=this.result.join("");
+}
+catch(e){
+if(e=="Illegal"){
+this.relevance=0;
+this.keywordCount=0;
+this.partialResult=this.result.join("");
+this.result=_2(_12);
+}else{
+throw e;
+}
+}
+};
+dojo.extend(_10,{buildRes:function(){
+dojo.forEach(this.lang.modes,function(_13){
+if(_13.begin){
+_13.beginRe=this.langRe("^"+_13.begin);
+}
+if(_13.end){
+_13.endRe=this.langRe("^"+_13.end);
+}
+if(_13.illegal){
+_13.illegalRe=this.langRe("^(?:"+_13.illegal+")");
+}
+},this);
+this.lang.defaultMode.illegalRe=this.langRe("^(?:"+this.lang.defaultMode.illegal+")");
+},subMode:function(_14){
+var _15=this.modes[this.modes.length-1].contains;
+if(_15){
+var _16=this.lang.modes;
+for(var i=0;i<_15.length;++i){
+var _17=_15[i];
+for(var j=0;j<_16.length;++j){
+var _18=_16[j];
+if(_18.className==_17&&_18.beginRe.test(_14)){
+return _18;
+}
+}
+}
+}
+return null;
+},endOfMode:function(_19){
+for(var i=this.modes.length-1;i>=0;--i){
+var _1a=this.modes[i];
+if(_1a.end&&_1a.endRe.test(_19)){
+return this.modes.length-i;
+}
+if(!_1a.endsWithParent){
+break;
+}
+}
+return 0;
+},isIllegal:function(_1b){
+var _1c=this.modes[this.modes.length-1].illegalRe;
+return _1c&&_1c.test(_1b);
+},langRe:function(_1d,_1e){
+var _1f="m"+(this.lang.case_insensitive?"i":"")+(_1e?"g":"");
+return new RegExp(_1d,_1f);
+},buildTerminators:function(){
+var _20=this.modes[this.modes.length-1],_21={};
+if(_20.contains){
+dojo.forEach(this.lang.modes,function(_22){
+if(dojo.indexOf(_20.contains,_22.className)>=0){
+_21[_22.begin]=1;
+}
+});
+}
+for(var i=this.modes.length-1;i>=0;--i){
+var m=this.modes[i];
+if(m.end){
+_21[m.end]=1;
+}
+if(!m.endsWithParent){
+break;
+}
+}
+if(_20.illegal){
+_21[_20.illegal]=1;
+}
+var t=[];
+for(i in _21){
+t.push(i);
+}
+_20.terminatorsRe=this.langRe("("+t.join("|")+")");
+},eatModeChunk:function(_23,_24){
+var _25=this.modes[this.modes.length-1];
+if(!_25.terminatorsRe){
+this.buildTerminators();
+}
+_23=_23.substr(_24);
+var _26=_25.terminatorsRe.exec(_23);
+if(!_26){
+return {buffer:_23,lexeme:"",end:true};
+}
+return {buffer:_26.index?_23.substr(0,_26.index):"",lexeme:_26[0],end:false};
+},keywordMatch:function(_27,_28){
+var _29=_28[0];
+if(this.lang.case_insensitive){
+_29=_29.toLowerCase();
+}
+for(var _2a in _27.keywordGroups){
+if(_29 in _27.keywordGroups[_2a]){
+return _2a;
+}
+}
+return "";
+},buildLexemes:function(_2b){
+var _2c={};
+dojo.forEach(_2b.lexems,function(_2d){
+_2c[_2d]=1;
+});
+var t=[];
+for(var i in _2c){
+t.push(i);
+}
+_2b.lexemsRe=this.langRe("("+t.join("|")+")",true);
+},processKeywords:function(_2e){
+var _2f=this.modes[this.modes.length-1];
+if(!_2f.keywords||!_2f.lexems){
+return _2(_2e);
+}
+if(!_2f.lexemsRe){
+this.buildLexemes(_2f);
+}
+_2f.lexemsRe.lastIndex=0;
+var _30=[],_31=0,_32=_2f.lexemsRe.exec(_2e);
+while(_32){
+_30.push(_2(_2e.substr(_31,_32.index-_31)));
+var _33=this.keywordMatch(_2f,_32);
+if(_33){
+++this.keywordCount;
+_30.push("<span class=\""+_33+"\">"+_2(_32[0])+"</span>");
+}else{
+_30.push(_2(_32[0]));
+}
+_31=_2f.lexemsRe.lastIndex;
+_32=_2f.lexemsRe.exec(_2e);
+}
+_30.push(_2(_2e.substr(_31,_2e.length-_31)));
+return _30.join("");
+},processModeInfo:function(_34,_35,end){
+var _36=this.modes[this.modes.length-1];
+if(end){
+this.result.push(this.processKeywords(_36.buffer+_34));
+return;
+}
+if(this.isIllegal(_35)){
+throw "Illegal";
+}
+var _37=this.subMode(_35);
+if(_37){
+_36.buffer+=_34;
+this.result.push(this.processKeywords(_36.buffer));
+if(_37.excludeBegin){
+this.result.push(_35+"<span class=\""+_37.className+"\">");
+_37.buffer="";
+}else{
+this.result.push("<span class=\""+_37.className+"\">");
+_37.buffer=_35;
+}
+this.modes.push(_37);
+this.relevance+=typeof _37.relevance=="number"?_37.relevance:1;
+return;
+}
+var _38=this.endOfMode(_35);
+if(_38){
+_36.buffer+=_34;
+if(_36.excludeEnd){
+this.result.push(this.processKeywords(_36.buffer)+"</span>"+_35);
+}else{
+this.result.push(this.processKeywords(_36.buffer+_35)+"</span>");
+}
+while(_38>1){
+this.result.push("</span>");
+--_38;
+this.modes.pop();
+}
+this.modes.pop();
+this.modes[this.modes.length-1].buffer="";
+return;
+}
+},highlight:function(_39){
+var _3a=0;
+this.lang.defaultMode.buffer="";
+do{
+var _3b=this.eatModeChunk(_39,_3a);
+this.processModeInfo(_3b.buffer,_3b.lexeme,_3b.end);
+_3a+=_3b.buffer.length+_3b.lexeme.length;
+}while(!_3b.end);
+if(this.modes.length>1){
+throw "Illegal";
+}
+}});
+function _3c(_3d,_3e,_3f){
+if(String(_3d.tagName).toLowerCase()=="code"&&String(_3d.parentNode.tagName).toLowerCase()=="pre"){
+var _40=document.createElement("div"),_41=_3d.parentNode.parentNode;
+_40.innerHTML="<pre><code class=\""+_3e+"\">"+_3f+"</code></pre>";
+_41.replaceChild(_40.firstChild,_3d.parentNode);
+}else{
+_3d.className=_3e;
+_3d.innerHTML=_3f;
+}
+};
+function _42(_43,str){
+var _44=new _10(_43,str);
+return {result:_44.result,langName:_43,partialResult:_44.partialResult};
+};
+function _45(_46,_47){
+var _48=_42(_47,_7(_46));
+_3c(_46,_46.className,_48.result);
+};
+function _49(str){
+var _4a="",_4b="",_4c=2,_4d=str;
+for(var key in dh.languages){
+if(!dh.languages[key].defaultMode){
+continue;
+}
+var _4e=new _10(key,_4d),_4f=_4e.keywordCount+_4e.relevance,_50=0;
+if(!_4a||_4f>_50){
+_50=_4f;
+_4a=_4e.result;
+_4b=_4e.langName;
+}
+}
+return {result:_4a,langName:_4b};
+};
+function _51(_52){
+var _53=_49(_7(_52));
+if(_53.result){
+_3c(_52,_53.langName,_53.result);
+}
+};
+dojox.highlight.processString=function(str,_54){
+return _54?_42(_54,str):_49(str);
+};
+dojox.highlight.init=function(_55){
+_55=dojo.byId(_55);
+if(dojo.hasClass(_55,"no-highlight")){
+return;
+}
+if(!_4(_55)){
+return;
+}
+var _56=_55.className.split(/\s+/),_57=dojo.some(_56,function(_58){
+if(_58.charAt(0)!="_"&&dh.languages[_58]){
+_45(_55,_58);
+return true;
+}
+return false;
+});
+if(!_57){
+_51(_55);
+}
+};
+dh.Code=function(p,n){
+dh.init(n);
+};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/_all.js b/js/dojo/dojox/highlight/languages/_all.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/_all.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._all"]){
+dojo._hasResource["dojox.highlight.languages._all"]=true;
+dojo.provide("dojox.highlight.languages._all");
+dojo.require("dojox.highlight.languages._static");
+dojo.require("dojox.highlight.languages._dynamic");
+dojo.require("dojox.highlight.languages._www");
+}
diff --git a/js/dojo/dojox/highlight/languages/_dynamic.js b/js/dojo/dojox/highlight/languages/_dynamic.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/_dynamic.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._dynamic"]){
+dojo._hasResource["dojox.highlight.languages._dynamic"]=true;
+dojo.provide("dojox.highlight.languages._dynamic");
+dojo.require("dojox.highlight.languages.python");
+}
diff --git a/js/dojo/dojox/highlight/languages/_static.js b/js/dojo/dojox/highlight/languages/_static.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/_static.js
@@ -0,0 +1,13 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._static"]){
+dojo._hasResource["dojox.highlight.languages._static"]=true;
+dojo.provide("dojox.highlight.languages._static");
+dojo.require("dojox.highlight.languages.cpp");
+dojo.require("dojox.highlight.languages.delphi");
+}
diff --git a/js/dojo/dojox/highlight/languages/_www.js b/js/dojo/dojox/highlight/languages/_www.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/_www.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._www"]){
+dojo._hasResource["dojox.highlight.languages._www"]=true;
+dojo.provide("dojox.highlight.languages._www");
+dojo.require("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight.languages.html");
+dojo.require("dojox.highlight.languages.css");
+dojo.require("dojox.highlight.languages.django");
+dojo.require("dojox.highlight.languages.javascript");
+}
diff --git a/js/dojo/dojox/highlight/languages/cpp.js b/js/dojo/dojox/highlight/languages/cpp.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/cpp.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.cpp"]){
+dojo._hasResource["dojox.highlight.languages.cpp"]=true;
+dojo.provide("dojox.highlight.languages.cpp");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.cpp={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"</",contains:["comment","string","number","preprocessor"],keywords:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,"virtual":1,"operator":2,"sizeof":2,"dynamic_cast":2,"typedef":2,"const_cast":2,"const":1,"struct":1,"for":1,"static_cast":2,"union":1,"namespace":1,"unsigned":1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,"bool":1,"template":1,"mutable":1,"if":1,"public":1,"friend":2,"do":1,"return":1,"goto":1,"auto":1,"void":2,"enum":1,"else":1,"break":1,"new":1,"extern":1,"using":1,"true":1,"class":1,"asm":1,"case":1,"typeid":1,"short":1,"reinterpret_cast":2,"default":1,"double":1,"register":1,"explicit":1,"signed":1,"typename":1,"try":1,"this":1,"switch":1,"continue":1,"wchar_t":1,"inline":1,"delete":1}},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"preprocessor",begin:"#",end:"$"}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/css.js b/js/dojo/dojox/highlight/languages/css.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/css.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.css"]){
+dojo._hasResource["dojox.highlight.languages.css"]=true;
+dojo.provide("dojox.highlight.languages.css");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.html");
+(function(){
+var dh=dojox.highlight,_1=dh.constants,_2=dh.languages;
+_2.css={defaultMode:{contains:["id","class","attr_selector","rules","comment"],keywords:_2.html.HTML_TAGS,lexems:[_1.IDENT_RE],illegal:"="},case_insensitive:true,modes:[{className:"id",begin:"\\#[A-Za-z0-9_-]+",end:"^"},{className:"class",begin:"\\.[A-Za-z0-9_-]+",end:"^",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"rules",begin:"{",end:"}",lexems:["[A-Za-z-]+"],keywords:{"play-during":1,"counter-reset":1,"counter-increment":1,"min-height":1,"quotes":1,"border-top":1,"pitch":1,"font":1,"pause":1,"list-style-image":1,"border-width":1,"cue":1,"outline-width":1,"border-left":1,"elevation":1,"richness":1,"speech-rate":1,"border-bottom":1,"border-spacing":1,"background":1,"list-style-type":1,"text-align":1,"page-break-inside":1,"orphans":1,"page-break-before":1,"text-transform":1,"line-height":1,"padding-left":1,"font-size":1,"right":1,"word-spacing":1,"padding-top":1,"outline-style":1,"bottom":1,"content":1,"border-right-style":1,"padding-right":1,"border-left-style":1,"voice-family":1,"background-color":1,"border-bottom-color":1,"outline-color":1,"unicode-bidi":1,"max-width":1,"font-family":1,"caption-side":1,"border-right-width":1,"pause-before":1,"border-top-style":1,"color":1,"border-collapse":1,"border-bottom-width":1,"float":1,"height":1,"max-height":1,"margin-right":1,"border-top-width":1,"speak":1,"speak-header":1,"top":1,"cue-before":1,"min-width":1,"width":1,"font-variant":1,"border-top-color":1,"background-position":1,"empty-cells":1,"direction":1,"border-right":1,"visibility":1,"padding":1,"border-style":1,"background-attachment":1,"overflow":1,"border-bottom-style":1,"cursor":1,"margin":1,"display":1,"border-left-width":1,"letter-spacing":1,"vertical-align":1,"clip":1,"border-color":1,"list-style":1,"padding-bottom":1,"pause-after":1,"speak-numeral":1,"margin-left":1,"widows":1,"border":1,"font-style":1,"border-left-color":1,"pitch-range":1,"background-repeat":1,"table-layout":1,"margin-bottom":1,"speak-punctuation":1,"font-weight":1,"border-right-color":1,"page-break-after":1,"position":1,"white-space":1,"text-indent":1,"background-image":1,"volume":1,"stress":1,"outline":1,"clear":1,"z-index":1,"text-decoration":1,"margin-top":1,"azimuth":1,"cue-after":1,"left":1,"list-style-position":1},contains:["comment","value"]},_1.C_BLOCK_COMMENT_MODE,{className:"value",begin:":",end:";",endsWithParent:true,excludeBegin:true,excludeEnd:true}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/delphi.js b/js/dojo/dojox/highlight/languages/delphi.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/delphi.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.delphi"]){
+dojo._hasResource["dojox.highlight.languages.delphi"]=true;
+dojo.provide("dojox.highlight.languages.delphi");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={"and":1,"safecall":1,"cdecl":1,"then":1,"string":1,"exports":1,"library":1,"not":1,"pascal":1,"set":1,"virtual":1,"file":1,"in":1,"array":1,"label":1,"packed":1,"end.":1,"index":1,"while":1,"const":1,"raise":1,"for":1,"to":1,"implementation":1,"with":1,"except":1,"overload":1,"destructor":1,"downto":1,"finally":1,"program":1,"exit":1,"unit":1,"inherited":1,"override":1,"if":1,"type":1,"until":1,"function":1,"do":1,"begin":1,"repeat":1,"goto":1,"nil":1,"far":1,"initialization":1,"object":1,"else":1,"var":1,"uses":1,"external":1,"resourcestring":1,"interface":1,"end":1,"finalization":1,"class":1,"asm":1,"mod":1,"case":1,"on":1,"shr":1,"shl":1,"of":1,"register":1,"xorwrite":1,"threadvar":1,"try":1,"record":1,"near":1,"stored":1,"constructor":1,"stdcall":1,"inline":1,"div":1,"out":1,"or":1,"procedure":1};
+var _2={"safecall":1,"stdcall":1,"pascal":1,"stored":1,"const":1,"implementation":1,"finalization":1,"except":1,"to":1,"finally":1,"program":1,"inherited":1,"override":1,"then":1,"exports":1,"string":1,"read":1,"not":1,"mod":1,"shr":1,"try":1,"div":1,"shl":1,"set":1,"library":1,"message":1,"packed":1,"index":1,"for":1,"near":1,"overload":1,"label":1,"downto":1,"exit":1,"public":1,"goto":1,"interface":1,"asm":1,"on":1,"of":1,"constructor":1,"or":1,"private":1,"array":1,"unit":1,"raise":1,"destructor":1,"var":1,"type":1,"until":1,"function":1,"else":1,"external":1,"with":1,"case":1,"default":1,"record":1,"while":1,"protected":1,"property":1,"procedure":1,"published":1,"and":1,"cdecl":1,"do":1,"threadvar":1,"file":1,"in":1,"if":1,"end":1,"virtual":1,"write":1,"far":1,"out":1,"begin":1,"repeat":1,"nil":1,"initialization":1,"object":1,"uses":1,"resourcestring":1,"class":1,"register":1,"xorwrite":1,"inline":1};
+var dh=dojox.highlight,_3=dh.constants;
+dh.languages.delphi={defaultMode:{lexems:[_3.IDENT_RE],illegal:"(\"|\\$[G-Zg-z]|\\/\\*|</)",contains:["comment","string","number","function","class"],keywords:_1},case_insensitive:true,modes:[{className:"comment",begin:"{",end:"}"},{className:"comment",begin:"\\(\\*",end:"\\*\\)",relevance:10},_3.C_LINE_COMMENT_MODE,{className:"number",begin:_3.NUMBER_RE,end:"^",relevance:0},{className:"string",begin:"'",end:"'",contains:["quote"],relevance:0},{className:"string",begin:"(#\\d+)+",end:"^"},{className:"quote",begin:"''",end:"^"},{className:"function",begin:"function",end:"[:;]",lexems:[_3.IDENT_RE],keywords:{"function":1},contains:["title","params","comment"],relevance:0},{className:"function",begin:"(procedure|constructor|destructor)",end:";",lexems:[_3.IDENT_RE],keywords:{"constructor":1,"destructor":1,"procedure":1},contains:["title","params","comment"],relevance:10},{className:"title",begin:_3.IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",lexems:[_3.IDENT_RE],keywords:_1,contains:["string"]},{className:"class",begin:"=\\s*class",end:"end;",lexems:[_3.IDENT_RE],keywords:_2,contains:["string","comment","function"]}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/django.js b/js/dojo/dojox/highlight/languages/django.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/django.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.django"]){
+dojo._hasResource["dojox.highlight.languages.django"]=true;
+dojo.provide("dojox.highlight.languages.django");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight.languages.html");
+(function(){
+var dh=dojox.highlight,_1=dh.constants,_2=dh.languages,x=_2.xml,h=_2.html;
+_2.django={defaultMode:{contains:["tag","comment","doctype","template_comment","template_tag","variable"]},case_insensitive:true,modes:[x.XML_COMMENT,h.HTML_DOCTYPE,{className:"tag",lexems:[_1.IDENT_RE],keywords:h.HTML_TAGS,begin:"<[A-Za-z/]",end:">",contains:["attribute","template_comment","template_tag","variable"]},x.XML_ATTR,h.HTML_ATTR,{className:"value",begin:"\"",end:"\"",contains:["template_comment","template_tag","variable"]},h.HTML_VALUE,{className:"template_comment",begin:"\\{\\%\\s*comment\\s*\\%\\}",end:"\\{\\%\\s*endcomment\\s*\\%\\}"},{className:"template_comment",begin:"\\{#",end:"#\\}"},{className:"template_tag",begin:"\\{\\%",end:"\\%\\}",lexems:[_1.IDENT_RE],keywords:{"comment":1,"endcomment":1,"load":1,"templatetag":1,"ifchanged":1,"endifchanged":1,"if":1,"endif":1,"firstof":1,"for":1,"endfor":1,"in":1,"ifnotequal":1,"endifnotequal":1,"widthratio":1,"extends":1,"include":1,"spaceless":1,"endspaceless":1,"regroup":1,"by":1,"as":1,"ifequal":1,"endifequal":1,"ssi":1,"now":1,"with":1,"cycle":1,"url":1,"filter":1,"endfilter":1,"debug":1,"block":1,"endblock":1,"else":1},contains:["filter"]},{className:"variable",begin:"\\{\\{",end:"\\}\\}",contains:["filter"]},{className:"filter",begin:"\\|[A-Za-z]+\\:?",end:"^",excludeEnd:true,lexems:[_1.IDENT_RE],keywords:{"truncatewords":1,"removetags":1,"linebreaksbr":1,"yesno":1,"get_digit":1,"timesince":1,"random":1,"striptags":1,"filesizeformat":1,"escape":1,"linebreaks":1,"length_is":1,"ljust":1,"rjust":1,"cut":1,"urlize":1,"fix_ampersands":1,"title":1,"floatformat":1,"capfirst":1,"pprint":1,"divisibleby":1,"add":1,"make_list":1,"unordered_list":1,"urlencode":1,"timeuntil":1,"urlizetrunc":1,"wordcount":1,"stringformat":1,"linenumbers":1,"slice":1,"date":1,"dictsort":1,"dictsortreversed":1,"default_if_none":1,"pluralize":1,"lower":1,"join":1,"center":1,"default":1,"truncatewords_html":1,"upper":1,"length":1,"phone2numeric":1,"wordwrap":1,"time":1,"addslashes":1,"slugify":1,"first":1},contains:["argument"]},{className:"argument",begin:"\"",end:"\""}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/html.js b/js/dojo/dojox/highlight/languages/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/html.js
@@ -0,0 +1,21 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.html"]){
+dojo._hasResource["dojox.highlight.languages.html"]=true;
+dojo.provide("dojox.highlight.languages.html");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.xml");
+(function(){
+var _1={"code":1,"kbd":1,"font":1,"noscript":1,"style":1,"img":1,"title":1,"menu":1,"tt":1,"tr":1,"param":1,"li":1,"tfoot":1,"th":1,"input":1,"td":1,"dl":1,"blockquote":1,"fieldset":1,"big":1,"dd":1,"abbr":1,"optgroup":1,"dt":1,"button":1,"isindex":1,"p":1,"small":1,"div":1,"dir":1,"em":1,"frame":1,"meta":1,"sub":1,"bdo":1,"label":1,"acronym":1,"sup":1,"body":1,"xml":1,"basefont":1,"base":1,"br":1,"address":1,"strong":1,"legend":1,"ol":1,"script":1,"caption":1,"s":1,"col":1,"h2":1,"h3":1,"h1":1,"h6":1,"h4":1,"h5":1,"table":1,"select":1,"noframes":1,"span":1,"area":1,"dfn":1,"strike":1,"cite":1,"thead":1,"head":1,"option":1,"form":1,"hr":1,"var":1,"link":1,"b":1,"colgroup":1,"ul":1,"applet":1,"del":1,"iframe":1,"pre":1,"frameset":1,"ins":1,"tbody":1,"html":1,"samp":1,"map":1,"object":1,"a":1,"xmlns":1,"center":1,"textarea":1,"i":1,"q":1,"u":1};
+var _2={className:"doctype",begin:"<!DOCTYPE",end:">",relevance:10};
+var _3={className:"attribute",begin:" [a-zA-Z]+",end:"^"};
+var _4={className:"value",begin:"[a-zA-Z0-9]+",end:"^"};
+var dh=dojox.highlight,_5=dh.constants,_6=dh.languages,x=_6.xml;
+_6.html={defaultMode:{contains:["tag","comment","doctype"]},case_insensitive:true,modes:[x.XML_COMMENT,_2,{className:"tag",lexems:[_5.IDENT_RE],keywords:_1,begin:"<[A-Za-z/]",end:">",contains:["attribute"],illegal:"[\\+\\.]"},x.XML_ATTR,_3,x.XML_VALUE,_4],HTML_TAGS:_1,HTML_DOCTYPE:_2,HTML_ATTR:_3,HTML_VALUE:_4};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/javascript.js b/js/dojo/dojox/highlight/languages/javascript.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/javascript.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.javascript"]){
+dojo._hasResource["dojox.highlight.languages.javascript"]=true;
+dojo.provide("dojox.highlight.languages.javascript");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.javascript={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],contains:["string","comment","number","regexp","function"],keywords:{"keyword":{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},"literal":{"true":1,"false":1,"null":1}}},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,_1.APOS_STRING_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"regexp",begin:"/.*?[^\\\\/]/[gim]*",end:"^"},{className:"function",begin:"function\\b",end:"{",lexems:[_1.UNDERSCORE_IDENT_RE],keywords:{"function":1},contains:["title","params"]},{className:"title",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",contains:["string","comment"]}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/_html.js b/js/dojo/dojox/highlight/languages/pygments/_html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/_html.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments._html"]){
+dojo._hasResource["dojox.highlight.languages.pygments._html"]=true;
+dojo.provide("dojox.highlight.languages.pygments._html");
+dojox.highlight.languages.pygments._html.tags={"code":1,"kbd":1,"font":1,"noscript":1,"style":1,"img":1,"title":1,"menu":1,"tt":1,"tr":1,"param":1,"li":1,"tfoot":1,"th":1,"input":1,"td":1,"dl":1,"blockquote":1,"fieldset":1,"big":1,"dd":1,"abbr":1,"optgroup":1,"dt":1,"button":1,"isindex":1,"p":1,"small":1,"div":1,"dir":1,"em":1,"frame":1,"meta":1,"sub":1,"bdo":1,"label":1,"acronym":1,"sup":1,"body":1,"xml":1,"basefont":1,"base":1,"br":1,"address":1,"strong":1,"legend":1,"ol":1,"script":1,"caption":1,"s":1,"col":1,"h2":1,"h3":1,"h1":1,"h6":1,"h4":1,"h5":1,"table":1,"select":1,"noframes":1,"span":1,"area":1,"dfn":1,"strike":1,"cite":1,"thead":1,"head":1,"option":1,"form":1,"hr":1,"var":1,"link":1,"b":1,"colgroup":1,"ul":1,"applet":1,"del":1,"iframe":1,"pre":1,"frameset":1,"ins":1,"tbody":1,"html":1,"samp":1,"map":1,"object":1,"a":1,"xmlns":1,"center":1,"textarea":1,"i":1,"q":1,"u":1};
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/_www.js b/js/dojo/dojox/highlight/languages/pygments/_www.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/_www.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments._www"]){
+dojo._hasResource["dojox.highlight.languages.pygments._www"]=true;
+dojo.provide("dojox.highlight.languages.pygments._www");
+dojo.require("dojox.highlight.languages.pygments.xml");
+dojo.require("dojox.highlight.languages.pygments.html");
+dojo.require("dojox.highlight.languages.pygments.css");
+dojo.require("dojox.highlight.languages.pygments.javascript");
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/css.js b/js/dojo/dojox/highlight/languages/pygments/css.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/css.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.css"]){
+dojo._hasResource["dojox.highlight.languages.pygments.css"]=true;
+dojo.provide("dojox.highlight.languages.pygments.css");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.pygments._html");
+(function(){
+var dh=dojox.highlight,_1=dh.languages;
+_1.css={defaultMode:{lexems:["\\b[a-zA-Z0-9]+\\b","\\b@media\b"],keywords:{"keyword":{"@media":1},"name tag":_1.pygments._html.tags},contains:["comment","string single","string double","punctuation","name decorator","name class","name function","_content"]},modes:[{className:"comment",begin:"/\\*",end:"\\*/",relevance:0},{className:"comment preproc",begin:"@[a-z][a-zA-Z]*",end:"^"},{className:"comment preproc",begin:"\\!important\\b",end:"^"},{className:"number",begin:"\\#[a-fA-F0-9]{3}\\b",end:"^",relevance:0},{className:"number",begin:"\\#[a-fA-F0-9]{6}\\b",end:"^",relevance:0},{className:"number",begin:"[\\.\\-]?[0-9]*[\\.]?[0-9]+(em|px|\\%|pt|pc|in|mm|cm|ex)",end:"^",relevance:0},{className:"number",begin:"\\-?[0-9]+",end:"^",relevance:0},{className:"string single",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string double",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"operator",begin:"[~\\^\\*!%&\\[\\]\\(\\)<>\\|+=@:;,./?-]",end:"^",relevance:0},{className:"punctuation",begin:"[\\[\\]();]+",end:"^",relevance:0},{className:"name decorator",begin:"\\:[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"name class",begin:"\\.[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"name function",begin:"\\#[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"_content",begin:"\\{",end:"\\}",lexems:["\\b[a-zA-Z\\-]+\\b"],keywords:{"keyword":{"azimuth":1,"background-attachment":1,"background-color":1,"background-image":1,"background-position":1,"background-repeat":1,"background":1,"border-bottom-color":1,"border-bottom-style":1,"border-bottom-width":1,"border-left-color":1,"border-left-style":1,"border-left-width":1,"border-right":1,"border-right-color":1,"border-right-style":1,"border-right-width":1,"border-top-color":1,"border-top-style":1,"border-top-width":1,"border-bottom":1,"border-collapse":1,"border-left":1,"border-width":1,"border-color":1,"border-spacing":1,"border-style":1,"border-top":1,"border":1,"caption-side":1,"clear":1,"clip":1,"color":1,"content":1,"counter-increment":1,"counter-reset":1,"cue-after":1,"cue-before":1,"cue":1,"cursor":1,"direction":1,"display":1,"elevation":1,"empty-cells":1,"float":1,"font-family":1,"font-size":1,"font-size-adjust":1,"font-stretch":1,"font-style":1,"font-variant":1,"font-weight":1,"font":1,"height":1,"letter-spacing":1,"line-height":1,"list-style-type":1,"list-style-image":1,"list-style-position":1,"list-style":1,"margin-bottom":1,"margin-left":1,"margin-right":1,"margin-top":1,"margin":1,"marker-offset":1,"marks":1,"max-height":1,"max-width":1,"min-height":1,"min-width":1,"opacity":1,"orphans":1,"outline":1,"outline-color":1,"outline-style":1,"outline-width":1,"overflow":1,"padding-bottom":1,"padding-left":1,"padding-right":1,"padding-top":1,"padding":1,"page":1,"page-break-after":1,"page-break-before":1,"page-break-inside":1,"pause-after":1,"pause-before":1,"pause":1,"pitch":1,"pitch-range":1,"play-during":1,"position":1,"quotes":1,"richness":1,"right":1,"size":1,"speak-header":1,"speak-numeral":1,"speak-punctuation":1,"speak":1,"speech-rate":1,"stress":1,"table-layout":1,"text-align":1,"text-decoration":1,"text-indent":1,"text-shadow":1,"text-transform":1,"top":1,"unicode-bidi":1,"vertical-align":1,"visibility":1,"voice-family":1,"volume":1,"white-space":1,"widows":1,"width":1,"word-spacing":1,"z-index":1,"bottom":1,"left":1,"above":1,"absolute":1,"always":1,"armenian":1,"aural":1,"auto":1,"avoid":1,"baseline":1,"behind":1,"below":1,"bidi-override":1,"blink":1,"block":1,"bold":1,"bolder":1,"both":1,"capitalize":1,"center-left":1,"center-right":1,"center":1,"circle":1,"cjk-ideographic":1,"close-quote":1,"collapse":1,"condensed":1,"continuous":1,"crop":1,"crosshair":1,"cross":1,"cursive":1,"dashed":1,"decimal-leading-zero":1,"decimal":1,"default":1,"digits":1,"disc":1,"dotted":1,"double":1,"e-resize":1,"embed":1,"extra-condensed":1,"extra-expanded":1,"expanded":1,"fantasy":1,"far-left":1,"far-right":1,"faster":1,"fast":1,"fixed":1,"georgian":1,"groove":1,"hebrew":1,"help":1,"hidden":1,"hide":1,"higher":1,"high":1,"hiragana-iroha":1,"hiragana":1,"icon":1,"inherit":1,"inline-table":1,"inline":1,"inset":1,"inside":1,"invert":1,"italic":1,"justify":1,"katakana-iroha":1,"katakana":1,"landscape":1,"larger":1,"large":1,"left-side":1,"leftwards":1,"level":1,"lighter":1,"line-through":1,"list-item":1,"loud":1,"lower-alpha":1,"lower-greek":1,"lower-roman":1,"lowercase":1,"ltr":1,"lower":1,"low":1,"medium":1,"message-box":1,"middle":1,"mix":1,"monospace":1,"n-resize":1,"narrower":1,"ne-resize":1,"no-close-quote":1,"no-open-quote":1,"no-repeat":1,"none":1,"normal":1,"nowrap":1,"nw-resize":1,"oblique":1,"once":1,"open-quote":1,"outset":1,"outside":1,"overline":1,"pointer":1,"portrait":1,"px":1,"relative":1,"repeat-x":1,"repeat-y":1,"repeat":1,"rgb":1,"ridge":1,"right-side":1,"rightwards":1,"s-resize":1,"sans-serif":1,"scroll":1,"se-resize":1,"semi-condensed":1,"semi-expanded":1,"separate":1,"serif":1,"show":1,"silent":1,"slow":1,"slower":1,"small-caps":1,"small-caption":1,"smaller":1,"soft":1,"solid":1,"spell-out":1,"square":1,"static":1,"status-bar":1,"super":1,"sw-resize":1,"table-caption":1,"table-cell":1,"table-column":1,"table-column-group":1,"table-footer-group":1,"table-header-group":1,"table-row":1,"table-row-group":1,"text":1,"text-bottom":1,"text-top":1,"thick":1,"thin":1,"transparent":1,"ultra-condensed":1,"ultra-expanded":1,"underline":1,"upper-alpha":1,"upper-latin":1,"upper-roman":1,"uppercase":1,"url":1,"visible":1,"w-resize":1,"wait":1,"wider":1,"x-fast":1,"x-high":1,"x-large":1,"x-loud":1,"x-low":1,"x-small":1,"x-soft":1,"xx-large":1,"xx-small":1,"yes":1},"name builtin":{"indigo":1,"gold":1,"firebrick":1,"indianred":1,"yellow":1,"darkolivegreen":1,"darkseagreen":1,"mediumvioletred":1,"mediumorchid":1,"chartreuse":1,"mediumslateblue":1,"black":1,"springgreen":1,"crimson":1,"lightsalmon":1,"brown":1,"turquoise":1,"olivedrab":1,"cyan":1,"silver":1,"skyblue":1,"gray":1,"darkturquoise":1,"goldenrod":1,"darkgreen":1,"darkviolet":1,"darkgray":1,"lightpink":1,"teal":1,"darkmagenta":1,"lightgoldenrodyellow":1,"lavender":1,"yellowgreen":1,"thistle":1,"violet":1,"navy":1,"orchid":1,"blue":1,"ghostwhite":1,"honeydew":1,"cornflowerblue":1,"darkblue":1,"darkkhaki":1,"mediumpurple":1,"cornsilk":1,"red":1,"bisque":1,"slategray":1,"darkcyan":1,"khaki":1,"wheat":1,"deepskyblue":1,"darkred":1,"steelblue":1,"aliceblue":1,"gainsboro":1,"mediumturquoise":1,"floralwhite":1,"coral":1,"purple":1,"lightgrey":1,"lightcyan":1,"darksalmon":1,"beige":1,"azure":1,"lightsteelblue":1,"oldlace":1,"greenyellow":1,"royalblue":1,"lightseagreen":1,"mistyrose":1,"sienna":1,"lightcoral":1,"orangered":1,"navajowhite":1,"lime":1,"palegreen":1,"burlywood":1,"seashell":1,"mediumspringgreen":1,"fuchsia":1,"papayawhip":1,"blanchedalmond":1,"peru":1,"aquamarine":1,"white":1,"darkslategray":1,"ivory":1,"dodgerblue":1,"lemonchiffon":1,"chocolate":1,"orange":1,"forestgreen":1,"slateblue":1,"olive":1,"mintcream":1,"antiquewhite":1,"darkorange":1,"cadetblue":1,"moccasin":1,"limegreen":1,"saddlebrown":1,"darkslateblue":1,"lightskyblue":1,"deeppink":1,"plum":1,"aqua":1,"darkgoldenrod":1,"maroon":1,"sandybrown":1,"magenta":1,"tan":1,"rosybrown":1,"pink":1,"lightblue":1,"palevioletred":1,"mediumseagreen":1,"dimgray":1,"powderblue":1,"seagreen":1,"snow":1,"mediumblue":1,"midnightblue":1,"paleturquoise":1,"palegoldenrod":1,"whitesmoke":1,"darkorchid":1,"salmon":1,"lightslategray":1,"lawngreen":1,"lightgreen":1,"tomato":1,"hotpink":1,"lightyellow":1,"lavenderblush":1,"linen":1,"mediumaquamarine":1,"green":1,"blueviolet":1,"peachpuff":1}},contains:["comment","comment preproc","number","string single","string double","punctuation","name decorator","name class","name function"]}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/html.js b/js/dojo/dojox/highlight/languages/pygments/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/html.js
@@ -0,0 +1,21 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.html"]){
+dojo._hasResource["dojox.highlight.languages.pygments.html"]=true;
+dojo.provide("dojox.highlight.languages.pygments.html");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.pygments._html");
+(function(){
+var dh=dojox.highlight,_1=dh.languages,_2=[],ht=_1.pygments._html.tags;
+for(var _3 in ht){
+_2.push(_3);
+}
+_2="\\b("+_2.join("|")+")\\b";
+_1.html={case_insensitive:true,defaultMode:{contains:["name entity","comment","comment preproc","_script","_style","_tag"]},modes:[{className:"comment",begin:"<!--",end:"-->"},{className:"comment preproc",begin:"\\<\\!\\[CDATA\\[",end:"\\]\\]\\>"},{className:"comment preproc",begin:"\\<\\!",end:"\\>"},{className:"string",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"name entity",begin:"\\&[a-z]+;",end:"^"},{className:"name tag",begin:_2,end:"^",relevance:5},{className:"name attribute",begin:"\\b[a-z0-9_\\:\\-]+\\s*=",end:"^",relevance:0},{className:"_script",begin:"\\<script\\b",end:"\\</script\\>",relevance:5},{className:"_style",begin:"\\<style\\b",end:"\\</style\\>",relevance:5},{className:"_tag",begin:"\\<(?!/)",end:"\\>",contains:["name tag","name attribute","string","_value"]},{className:"_tag",begin:"\\</",end:"\\>",contains:["name tag"]},{className:"_value",begin:"[^\\s\\>]+",end:"^"}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/javascript.js b/js/dojo/dojox/highlight/languages/pygments/javascript.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/javascript.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.javascript"]){
+dojo._hasResource["dojox.highlight.languages.pygments.javascript"]=true;
+dojo.provide("dojox.highlight.languages.pygments.javascript");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.javascript={defaultMode:{lexems:["\\b[a-zA-Z]+"],keywords:{"keyword":{"for":1,"in":1,"while":1,"do":1,"break":1,"return":1,"continue":1,"if":1,"else":1,"throw":1,"try":1,"catch":1,"var":1,"with":1,"const":1,"label":1,"function":1,"new":1,"typeof":1,"instanceof":1},"keyword constant":{"true":1,"false":1,"null":1,"NaN":1,"Infinity":1,"undefined":1},"name builtin":{"Array":1,"Boolean":1,"Date":1,"Error":1,"Function":1,"Math":1,"netscape":1,"Number":1,"Object":1,"Packages":1,"RegExp":1,"String":1,"sun":1,"decodeURI":1,"decodeURIComponent":1,"encodeURI":1,"encodeURIComponent":1,"Error":1,"eval":1,"isFinite":1,"isNaN":1,"parseFloat":1,"parseInt":1,"document":1,"window":1},"name builtin pseudo":{"this":1}},contains:["comment single","comment multiline","number integer","number oct","number hex","number float","string single","string double","string regex","operator","punctuation","_function"]},modes:[{className:"comment single",begin:"//",end:"$",relevance:0},{className:"comment multiline",begin:"/\\*",end:"\\*/"},{className:"number integer",begin:"0|([1-9][0-9]*)",end:"^",relevance:0},{className:"number oct",begin:"0[0-9]+",end:"^",relevance:0},{className:"number hex",begin:"0x[0-9a-fA-F]+",end:"^",relevance:0},{className:"number float",begin:"([1-9][0-9]*\\.[0-9]*([eE][\\+-]?[0-9]+)?)|(\\.[0-9]+([eE][\\+-]?[0-9]+)?)|([0-9]+[eE][\\+-]?[0-9]+)",end:"^",relevance:0},{className:"string single",begin:"'",end:"'",illegal:"\\n",contains:["string escape"],relevance:0},{className:"string double",begin:"\"",end:"\"",illegal:"\\n",contains:["string escape"],relevance:0},{className:"string escape",begin:"\\\\.",end:"^",relevance:0},{className:"string regex",begin:"/.*?[^\\\\/]/[gim]*",end:"^"},{className:"operator",begin:"\\|\\||&&|\\+\\+|--|-=|\\+=|/=|\\*=|==|[-\\+\\*/=\\?:~\\^]",end:"^",relevance:0},{className:"punctuation",begin:"[{}\\(\\)\\[\\]\\.;]",end:"^",relevance:0},{className:"_function",begin:"function\\b",end:"{",lexems:[_1.UNDERSCORE_IDENT_RE],keywords:{keyword:{"function":1}},contains:["name function","_params"],relevance:5},{className:"name function",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"_params",begin:"\\(",end:"\\)",contains:["comment single","comment multiline"]}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/pygments/xml.js b/js/dojo/dojox/highlight/languages/pygments/xml.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/pygments/xml.js
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.xml"]){
+dojo._hasResource["dojox.highlight.languages.pygments.xml"]=true;
+dojo.provide("dojox.highlight.languages.pygments.xml");
+dojo.require("dojox.highlight._base");
+dojox.highlight.languages.pygments.xml={a:1};
+dojox.highlight.languages.xml={defaultMode:{contains:["name entity","comment","comment preproc","_tag"]},modes:[{className:"comment",begin:"<!--",end:"-->"},{className:"comment preproc",begin:"\\<\\!\\[CDATA\\[",end:"\\]\\]\\>"},{className:"comment preproc",begin:"\\<\\!",end:"\\>"},{className:"comment preproc",begin:"\\<\\?",end:"\\?\\>",relevance:5},{className:"string",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"name entity",begin:"\\&[a-z]+;",end:"^"},{className:"name tag",begin:"\\b[a-z0-9_\\:\\-]+\\b",end:"^"},{className:"name attribute",begin:"\\b[a-z0-9_\\:\\-]+=",end:"^",relevance:0},{className:"_tag",begin:"\\<",end:"\\>",contains:["name tag","name attribute","string"]},{className:"_tag",begin:"\\</",end:"\\>",contains:["name tag"]}]};
+}
diff --git a/js/dojo/dojox/highlight/languages/python.js b/js/dojo/dojox/highlight/languages/python.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/python.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.python"]){
+dojo._hasResource["dojox.highlight.languages.python"]=true;
+dojo.provide("dojox.highlight.languages.python");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.python={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"(</|->)",contains:["comment","string","function","class","number","decorator"],keywords:{"and":1,"elif":1,"is":1,"global":1,"as":1,"in":1,"if":1,"from":1,"raise":1,"for":1,"except":1,"finally":1,"print":1,"import":1,"pass":1,"None":1,"return":1,"exec":1,"else":1,"break":1,"not":1,"with":1,"class":1,"assert":1,"yield":1,"try":1,"while":1,"continue":1,"del":1,"or":1,"def":1,"lambda":1}},modes:[{className:"function",lexems:[_1.UNDERSCORE_IDENT_RE],begin:"\\bdef ",end:":",illegal:"$",keywords:{"def":1},contains:["title","params"],relevance:10},{className:"class",lexems:[_1.UNDERSCORE_IDENT_RE],begin:"\\bclass ",end:":",illegal:"[${]",keywords:{"class":1},contains:["title","params"],relevance:10},{className:"title",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",contains:["string"]},_1.HASH_COMMENT_MODE,_1.C_NUMBER_MODE,{className:"string",begin:"'''",end:"'''",relevance:10},{className:"string",begin:"\"\"\"",end:"\"\"\"",relevance:10},_1.APOS_STRING_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"r'",end:"'",relevance:10},{className:"string",begin:"r\"",end:"\"",relevance:10},{className:"string",begin:"u'",end:"(^|[^\\\\])'",relevance:10},{className:"string",begin:"u\"",end:"(^|[^\\\\])\"",relevance:10},{className:"string",begin:"ur'",end:"'",relevance:10},{className:"string",begin:"ur\"",end:"\"",relevance:10},{className:"decorator",begin:"@",end:"$"}]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/sql.js b/js/dojo/dojox/highlight/languages/sql.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/sql.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.sql"]){
+dojo._hasResource["dojox.highlight.languages.sql"]=true;
+dojo.provide("dojox.highlight.languages.sql");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={"all":1,"partial":1,"global":1,"month":1,"current_timestamp":1,"using":1,"go":1,"revoke":1,"smallint":1,"indicator":1,"end-exec":1,"disconnect":1,"zone":1,"with":1,"character":1,"assertion":1,"to":1,"add":1,"current_user":1,"usage":1,"input":1,"local":1,"alter":1,"match":1,"collate":1,"real":1,"then":1,"rollback":1,"get":1,"read":1,"timestamp":1,"session_user":1,"not":1,"integer":1,"bit":1,"unique":1,"day":1,"minute":1,"desc":1,"insert":1,"execute":1,"like":1,"level":1,"decimal":1,"drop":1,"continue":1,"isolation":1,"found":1,"where":1,"constraints":1,"domain":1,"right":1,"national":1,"some":1,"module":1,"transaction":1,"relative":1,"second":1,"connect":1,"escape":1,"close":1,"system_user":1,"for":1,"deferred":1,"section":1,"cast":1,"current":1,"sqlstate":1,"allocate":1,"intersect":1,"deallocate":1,"numeric":1,"public":1,"preserve":1,"full":1,"goto":1,"initially":1,"asc":1,"no":1,"key":1,"output":1,"collation":1,"group":1,"by":1,"union":1,"session":1,"both":1,"last":1,"language":1,"constraint":1,"column":1,"of":1,"space":1,"foreign":1,"deferrable":1,"prior":1,"connection":1,"unknown":1,"action":1,"commit":1,"view":1,"or":1,"first":1,"into":1,"float":1,"year":1,"primary":1,"cascaded":1,"except":1,"restrict":1,"set":1,"references":1,"names":1,"table":1,"outer":1,"open":1,"select":1,"size":1,"are":1,"rows":1,"from":1,"prepare":1,"distinct":1,"leading":1,"create":1,"only":1,"next":1,"inner":1,"authorization":1,"schema":1,"corresponding":1,"option":1,"declare":1,"precision":1,"immediate":1,"else":1,"timezone_minute":1,"external":1,"varying":1,"translation":1,"true":1,"case":1,"exception":1,"join":1,"hour":1,"default":1,"double":1,"scroll":1,"value":1,"cursor":1,"descriptor":1,"values":1,"dec":1,"fetch":1,"procedure":1,"delete":1,"and":1,"false":1,"int":1,"is":1,"describe":1,"char":1,"as":1,"at":1,"in":1,"varchar":1,"null":1,"trailing":1,"any":1,"absolute":1,"current_time":1,"end":1,"grant":1,"privileges":1,"when":1,"cross":1,"check":1,"write":1,"current_date":1,"pad":1,"begin":1,"temporary":1,"exec":1,"time":1,"update":1,"catalog":1,"user":1,"sql":1,"date":1,"on":1,"identity":1,"timezone_hour":1,"natural":1,"whenever":1,"interval":1,"work":1,"order":1,"cascade":1,"diagnostics":1,"nchar":1,"having":1,"left":1};
+var dh=dojox.highlight,_2=dh.constants;
+dh.languages.sql={case_insensitive:true,defaultMode:{lexems:[_2.IDENT_RE],contains:["string","number","comment"],keywords:{"keyword":_1,"aggregate":{"count":1,"sum":1,"min":1,"max":1,"avg":1}}},modes:[_2.C_NUMBER_MODE,_2.C_BLOCK_COMMENT_MODE,{className:"comment",begin:"--",end:"$"},{className:"string",begin:"'",end:"'",contains:["escape","squote"],relevance:0},{className:"squote",begin:"''",end:"^"},{className:"string",begin:"\"",end:"\"",contains:["escape","dquote"],relevance:0},{className:"dquote",begin:"\"\"",end:"^"},{className:"string",begin:"`",end:"`",contains:["escape"]},_2.BACKSLASH_ESCAPE]};
+})();
+}
diff --git a/js/dojo/dojox/highlight/languages/xml.js b/js/dojo/dojox/highlight/languages/xml.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/languages/xml.js
@@ -0,0 +1,19 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.xml"]){
+dojo._hasResource["dojox.highlight.languages.xml"]=true;
+dojo.provide("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={className:"comment",begin:"<!--",end:"-->"};
+var _2={className:"attribute",begin:" [a-zA-Z-]+=",end:"^",contains:["value"]};
+var _3={className:"value",begin:"\"",end:"\""};
+var dh=dojox.highlight,_4=dh.constants;
+dh.languages.xml={defaultMode:{contains:["pi","comment","cdata","tag"]},case_insensitive:true,modes:[{className:"pi",begin:"<\\?",end:"\\?>",relevance:10},_1,{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>"},{className:"tag",begin:"</?",end:">",contains:["title","tag_internal"],relevance:1.5},{className:"title",begin:"[A-Za-z:_][A-Za-z0-9\\._:-]+",end:"^",relevance:0},{className:"tag_internal",begin:"^",endsWithParent:true,contains:["attribute"],relevance:0,illegal:"[\\+\\.]"},_2,_3],XML_COMMENT:_1,XML_ATTR:_2,XML_VALUE:_3};
+})();
+}
diff --git a/js/dojo/dojox/highlight/resources/highlight.css b/js/dojo/dojox/highlight/resources/highlight.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/highlight.css
@@ -0,0 +1,51 @@
+
+.string,
+.function .title,
+.class .title,
+.tag .attribute .value,
+.css .rules .value,
+.preprocessor,
+.ruby .symbol,
+.ruby .instancevar,
+.ruby .class .parent,
+.built_in,
+.sql .aggregate,
+.django .template_tag,
+.django .variable,
+.smalltalk .class {
+ color: #800;
+}
+.comment,
+.java .annotation,
+.template_comment {
+ color: #888;
+}
+.number,
+.regexp,
+.javascript .literal,
+.smalltalk .symbol,
+.smalltalk .char {
+ color: #080;
+}
+.javadoc,
+.ruby .string,
+.python .decorator,
+.django .filter .argument,
+.smalltalk .localvars,
+.smalltalk .array,
+.css .attr_selector,
+.xml .pi {
+ color: #88F;
+}
+.keyword,
+.css .id,
+.phpdoc,
+.function .title,
+.class .title,
+.vbscript .built_in,
+.sql .aggregate,
+.rsl .built_in,
+.smalltalk .class,
+.xml .tag .title {
+ font-weight: bold;
+}
diff --git a/js/dojo/dojox/highlight/resources/pygments/autumn.css b/js/dojo/dojox/highlight/resources/pygments/autumn.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/autumn.css
@@ -0,0 +1,22 @@
+
+code .comment {color: #aaa; font-style: italic}
+code .comment.preproc {color: #4c8317; font-style: normal}
+code .comment.special {color: #00a}
+code .keyword {color: #00a}
+code .keyword.type {color: #0aa}
+code .operator.word {color: #00a}
+code .name.builtin {color: #0aa}
+code .name.function {color: #0a0}
+code .name.class {color: #0a0; text-decoration: underline}
+code .name.namespace {color: #0aa; text-decoration: underline}
+code .name.exception {color: #D2413A; font-weight: bold}
+code .name.variable {color: #a00}
+code .name.constant {color: #a00}
+code .name.entity {color: #800; font-weight: bold}
+code .name.attribute {color: #1e90ff}
+code .name.tag {color: #1e90ff; font-weight: bold}
+code .name.decorator {color: #888}
+code .string {color: #a50}
+code .string.regex {color: #099}
+code .string.symbol {color: #00a}
+code .number {color: #099}
diff --git a/js/dojo/dojox/highlight/resources/pygments/borland.css b/js/dojo/dojox/highlight/resources/pygments/borland.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/borland.css
@@ -0,0 +1,11 @@
+
+code .comment {color: #080; font-style: italic}
+code .comment.preproc {color: #008080; font-style: normal}
+code .comment.special {font-weight: bold; font-style: normal}
+code .keyword {color: #000080; font-weight: bold}
+code .operator.word {font-weight: bold}
+code .name.attribute {color: #f00}
+code .name.tag {color: #000080; font-weight: bold}
+code .string {color: #00f}
+code .string.char {color: #800080}
+code .number {color: #00f}
diff --git a/js/dojo/dojox/highlight/resources/pygments/colorful.css b/js/dojo/dojox/highlight/resources/pygments/colorful.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/colorful.css
@@ -0,0 +1,37 @@
+
+code .comment {color: #888}
+code .comment.preproc {color: #579}
+code .comment.special {color: #c00; font-weight: bold}
+code .keyword {color: #080; font-weight: bold}
+code .keyword.pseudo {color: #038}
+code .keyword.type {color: #339}
+code .operator {color: #333}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #007020}
+code .name.function {color: #06b; font-weight: bold}
+code .name.class {color: #b06; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #f00; font-weight: bold}
+code .name.variable {color: #963}
+code .name.variable.instance {color: #33b}
+code .name.variable.class {color: #369}
+code .name.variable.global {color: #d70; font-weight: bold}
+code .name.constant {color: #036; font-weight: bold}
+code .name.label {color: #970; font-weight: bold}
+code .name.entity {color: #800; font-weight: bold}
+code .name.attribute {color: #00c}
+code .name.tag {color: #070}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {background-color: #fff0f0}
+code .string.char {color: #04d; background-color: transparent}
+code .string.doc {color: #d42; background-color: transparent}
+code .string.interpol {background-color: #eee}
+code .string.escape {color: #666; font-weight: bold}
+code .string.regex {color: #000; background-color: #fff0f0}
+code .string.symbol {color: #a60; background-color: transparent}
+code .string.other {color: #d20}
+code .number {color: #60e}
+code .number.integer {color: #00d}
+code .number.float {color: #60e}
+code .number.hex {color: #058}
+code .number.oct {color: #40e}
diff --git a/js/dojo/dojox/highlight/resources/pygments/default.css b/js/dojo/dojox/highlight/resources/pygments/default.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/default.css
@@ -0,0 +1,28 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #408080; font-style: italic}
+code .comment.preproc {color: #bc7a00; font-style: normal}
+code .keyword {color: #008000; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #a2f}
+code .name.builtin {color: #008000}
+code .name.function {color: #00f}
+code .name.class {color: #00f; font-weight: bold}
+code .name.namespace {color: #00f; font-weight: bold}
+code .name.exception {color: #d2413a; font-weight: bold}
+code .name.variable {color: #19177c}
+code .name.constant {color: #800}
+code .name.label {color: #a0a000}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #7d9029}
+code .name.tag {color: #008000; font-weight: bold}
+code .name.decorator {color: #a2f}
+code .string {color: #ba2121}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #b68; font-weight: bold}
+code .string.escape {color: #b62; font-weight: bold}
+code .string.regex {color: #b68}
+code .string.symbol {color: #19177c}
+code .string.other {color: #008000}
+code .number {color: #666}
diff --git a/js/dojo/dojox/highlight/resources/pygments/emacs.css b/js/dojo/dojox/highlight/resources/pygments/emacs.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/emacs.css
@@ -0,0 +1,29 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #080; font-style: italic}
+code .comment.preproc {font-style: normal}
+code .comment.special {font-style: normal; font-weight: bold}
+code .keyword {color: #a2f; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #a2f; font-weight: bold}
+code .name.builtin {color: #a2f}
+code .name.function {color: #00a000}
+code .name.class {color: #00f}
+code .name.namespace {color: #00f; font-weight: bold}
+code .name.exception {color: #d2413a; font-weight: bold}
+code .name.variable {color: #b8860b}
+code .name.constant {color: #800}
+code .name.label {color: #a0a000}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #b44}
+code .name.tag {color: #008000; font-weight: bold}
+code .name.decorator {color: #a2f}
+code .string {color: #b44}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #b68; font-weight: bold}
+code .string.escape {color: #b62; font-weight: bold}
+code .string.regex {color: #b68}
+code .string.symbol {color: #b8860b}
+code .string.other {color: #008000}
+code .number {color: #666}
diff --git a/js/dojo/dojox/highlight/resources/pygments/friendly.css b/js/dojo/dojox/highlight/resources/pygments/friendly.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/friendly.css
@@ -0,0 +1,29 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #60a0b0; font-style: italic}
+code .comment.preproc {color: #007020; font-style: normal}
+code .comment.special {background-color: #fff0f0; font-style: normal}
+code .keyword {color: #007020; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #007020; font-weight: bold}
+code .name.builtin {color: #007020}
+code .name.function {color: #06287e}
+code .name.class {color: #0e84b5; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #007020}
+code .name.variable {color: #bb60d5}
+code .name.constant {color: #60add5}
+code .name.label {color: #002070; font-weight: bold}
+code .name.entity {color: #d55537; font-weight: bold}
+code .name.attribute {color: #4070a0}
+code .name.tag {color: #062873; font-weight: bold}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {color: #4070a0}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #70a0d0; font-style: italic}
+code .string.escape {color: #4070a0; font-weight: bold}
+code .string.regex {color: #235388}
+code .string.symbol {color: #517918}
+code .string.other {color: #c65d09}
+code .number {color: #40a070}
diff --git a/js/dojo/dojox/highlight/resources/pygments/fruity.css b/js/dojo/dojox/highlight/resources/pygments/fruity.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/fruity.css
@@ -0,0 +1,14 @@
+
+code {background-color: #111; color: #fff}
+code .comment {color: #080; background-color: #0f140f; font-style: italic}
+code .comment.preproc {color: #ff0007; font-weight: bold}
+code .keyword {color: #fb660a; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #cdcaa9; font-weight: bold}
+code .name.function {color: #ff0086; font-weight: bold}
+code .name.variable {color: #fb660a}
+code .name.constant {color: #0086d2}
+code .name.attribute {color: #ff0086; font-weight: bold}
+code .name.tag {color: #fb660a; font-weight: bold}
+code .string {color: #0086d2}
+code .number {color: #0086f7; font-weight: bold}
diff --git a/js/dojo/dojox/highlight/resources/pygments/manni.css b/js/dojo/dojox/highlight/resources/pygments/manni.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/manni.css
@@ -0,0 +1,30 @@
+
+code {background-color: #f0f3f3}
+code .comment {color: #09f; font-style: italic}
+code .comment.preproc {color: #099; font-style: normal}
+code .comment.special {font-weight: bold}
+code .keyword {color: #069; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #078}
+code .operator {color: #555}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #366}
+code .name.function {color: #c0f}
+code .name.class {color: #0a8; font-weight: bold}
+code .name.namespace {color: #0cf; font-weight: bold}
+code .name.exception {color: #c00; font-weight: bold}
+code .name.variable {color: #033}
+code .name.constant {color: #360}
+code .name.label {color: #99f}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #309}
+code .name.tag {color: #309; font-weight: bold}
+code .name.decorator {color: #99f}
+code .string {color: #c30}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #a00}
+code .string.escape {color: #c30; font-weight: bold}
+code .string.regex {color: #3aa}
+code .string.symbol {color: #fc3}
+code .string.other {color: #c30}
+code .number {color: #f60}
diff --git a/js/dojo/dojox/highlight/resources/pygments/murphy.css b/js/dojo/dojox/highlight/resources/pygments/murphy.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/murphy.css
@@ -0,0 +1,37 @@
+
+code .comment {color: #666; font-style: italic}
+code .comment.preproc {color: #579; font-style: normal}
+code .comment.special {color: #c00; font-weight: bold}
+code .keyword {color: #289; font-weight: bold}
+code .keyword.pseudo {color: #08f}
+code .keyword.type {color: #66f}
+code .operator {color: #333}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #072}
+code .name.function {color: #5ed; font-weight: bold}
+code .name.class {color: #e9e; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #f00; font-weight: bold}
+code .name.variable {color: #036}
+code .name.variable.instance {color: #aaf}
+code .name.variable.class {color: #ccf}
+code .name.variable.global {color: #f84}
+code .name.constant {color: #5ed; font-weight: bold}
+code .name.label {color: #970; font-weight: bold}
+code .name.entity {color: #800}
+code .name.attribute {color: #007}
+code .name.tag {color: #070}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {background-color: #e0e0ff}
+code .string.char {color: #88f; background-color: transparent}
+code .string.doc {color: #d42; background-color: transparent}
+code .string.interpol {background-color: #eee}
+code .string.escape {color: #666; font-weight: bold}
+code .string.regex {color: #000; background-color: #e0e0ff}
+code .string.symbol {color: #fc8; background-color: transparent}
+code .string.other {color: #f88}
+code .number {color: #60e; font-weight: bold}
+code .number.integer {color: #66f; font-weight: bold}
+code .number.float {color: #60e; font-weight: bold}
+code .number.hex {color: #058; font-weight: bold}
+code .number.oct {color: #40e; font-weight: bold}
diff --git a/js/dojo/dojox/highlight/resources/pygments/native.css b/js/dojo/dojox/highlight/resources/pygments/native.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/native.css
@@ -0,0 +1,21 @@
+
+code {background-color: #202020; color: #d0d0d0}
+code .comment {color: #999; font-style: italic}
+code .comment.preproc {color: #cd2828; font-style: normal; font-weight: bold}
+code .comment.special {color: #e50808; font-style: normal; font-weight: bold; background-color: #520000}
+code .keyword {color: #6ab825; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator.word {color: #6ab825; font-weight: bold}
+code .name.builtin {color: #24909d}
+code .name.function {color: #40ffff}
+code .name.class {color: #447fcf; text-decoration: underline}
+code .name.namespace {color: #447fcf; text-decoration: underline}
+code .name.exception {color: #bbb}
+code .name.variable {color: #40ffff}
+code .name.constant {color: #40ffff}
+code .name.attribute {color: #bbb}
+code .name.tag {color: #6ab825; font-weight: bold}
+code .name.decorator {color: #ffa500}
+code .string {color: #ed9d13}
+code .string.other {color: #ffa500}
+code .number {color: #3677a9}
diff --git a/js/dojo/dojox/highlight/resources/pygments/pastie.css b/js/dojo/dojox/highlight/resources/pygments/pastie.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/pastie.css
@@ -0,0 +1,30 @@
+
+code .comment {color: #888}
+code .comment.preproc {color: #c00; font-weight: bold}
+code .comment.special {color: #c00; font-weight: bold; background-color: #fff0f0}
+code .keyword {color: #008800; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #888}
+code .operator.word {color: #080}
+code .name.builtin {color: #038}
+code .name.function {color: #06b; font-weight: bold}
+code .name.class {color: #b06; font-weight: bold}
+code .name.namespace {color: #b06; font-weight: bold}
+code .name.exception {color: #b06; font-weight: bold}
+code .name.variable {color: #369}
+code .name.variable.class {color: #369}
+code .name.variable.instance {color: #33b}
+code .name.variable.global {color: #d70}
+code .name.constant {color: #036; font-weight: bold}
+code .name.label {color: #369; font-style: italic}
+code .name.attribute {color: #369}
+code .name.tag {color: #b06; font-weight: bold}
+code .name.decorator {color: #555}
+code .name.property {color: #369; font-weight: bold}
+code .string {color: #d20; background-color: #fff0f0}
+code .string.interpol {color: #33b}
+code .string.escape {color: #04d}
+code .string.regex {color: #080; background-color: #fff0f0}
+code .string.symbol {color: #a60}
+code .string.other {color: #2b2; background-color: #f0fff0}
+code .number {color: #00d; font-weight: bold}
diff --git a/js/dojo/dojox/highlight/resources/pygments/perldoc.css b/js/dojo/dojox/highlight/resources/pygments/perldoc.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/perldoc.css
@@ -0,0 +1,23 @@
+
+code {background-color: #eed}
+code .comment {color: #228b22}
+code .comment.preproc {color: #1e889b}
+code .comment.special {color: #8b008b; font-weight: bold}
+code .keyword {color: #8b008b; font-weight: bold}
+code .keyword.type {color: #a7a7a7}
+code .operator.word {color: #8b008b}
+code .name.builtin {color: #658b00}
+code .name.function {color: #008b45}
+code .name.class {color: #008b45; font-weight: bold}
+code .name.namespace {color: #008b45; text-decoration: underline}
+code .name.exception {color: #008b45; font-weight: bold}
+code .name.variable {color: #00688b}
+code .name.constant {color: #00688b}
+code .name.attribute {color: #658b00}
+code .name.tag {color: #8b008b; font-weight: bold}
+code .name.decorator {color: #707a7c}
+code .string {color: #cd5555}
+code .string.regex {color: #1c7e71}
+code .string.other {color: #cb6c20}
+code .string.heredoc {color: #1c7e71; font-style: italic}
+code .number {color: #b452cd}
diff --git a/js/dojo/dojox/highlight/resources/pygments/trac.css b/js/dojo/dojox/highlight/resources/pygments/trac.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/highlight/resources/pygments/trac.css
@@ -0,0 +1,20 @@
+
+code .comment {color: #998; font-style: italic}
+code .comment.preproc {color: #999; font-style: normal; font-weight: bold}
+code .comment.special {color: #999; font-weight: bold}
+code .keyword {font-weight: bold}
+code .keyword.type {color: #458}
+code .operator {font-weight: bold}
+code .name.builtin {color: #999}
+code .name.function {color: #900; font-weight: bold}
+code .name.class {color: #458; font-weight: bold}
+code .name.namespace {color: #555}
+code .name.exception {color: #900; font-weight: bold}
+code .name.variable {color: #008080}
+code .name.constant {color: #008080}
+code .name.entity {color: #800080}
+code .name.attribute {color: #008080}
+code .name.tag {color: #000080}
+code .string {color: #b84}
+code .string.regex {color: #808000}
+code .number {color: #099}
diff --git a/js/dojo/dojox/html.js b/js/dojo/dojox/html.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html"]){
+dojo._hasResource["dojox.html"]=true;
+dojo.provide("dojox.html");
+dojo.require("dojox.html._base");
+}
diff --git a/js/dojo/dojox/html/README b/js/dojo/dojox/html/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/README
@@ -0,0 +1,50 @@
+-------------------------------------------------------------------------------
+dojox.html
+-------------------------------------------------------------------------------
+Version 0.2
+Release date: 04/24/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+ Eugene Lazutkin (eugene.lazutkin AT gmail.com)
+ Scott J. Miles (sjmiles AT activegrid.com)
+ Steve Orvell (sorvell AT activegrid.com)
+ Tom Trenka (ttrenka AT gmail.com)
+ Bryan Forbes (bryan AT reigndropsfall.net)
+ Mike Wilcox - dojox.html.styles (anm8tr AT yahoo.com)
+ Nathan Toone - dojox.html.ellipsis (toonetown AT dojotoolkit.org)
+ Jared Jurkiewicz - dojox.html.entites, dojox.html.format (jared.jurkiewicz AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+This project aims to add html functions that aren't used often enough to
+warrant going into Dojo Core but should not be duplicated. For instance, font
+measurement routines aren't used by the majority of developers, but are complex
+enough to not be duplicated.
+Styles adds the ability to create and remove dynamic cssRules, as well as
+manipulate document style sheets.
+Ellipsis adds some css definitions and dojo.behavior rules (for FF) to support
+text-overflow: ellipsis
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.html nor dojox.html.styles have dependencies, outside of Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+To automatically initialize the font resize callback, add "fontSizeWatch: true"
+to your djConfig.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html/*
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html/styles.js
+Install into the following directory structure:
+/dojox/html/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
diff --git a/js/dojo/dojox/html/_base.js b/js/dojo/dojox/html/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/_base.js
@@ -0,0 +1,192 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html._base"]){
+dojo._hasResource["dojox.html._base"]=true;
+dojo.provide("dojox.html._base");
+dojo.require("dojo.html");
+(function(){
+if(dojo.isIE){
+var _1=/(AlphaImageLoader\([^)]*?src=(['"]))(?![a-z]+:|\/)([^\r\n;}]+?)(\2[^)]*\)\s*[;}]?)/g;
+}
+var _2=/(?:(?:@import\s*(['"])(?![a-z]+:|\/)([^\r\n;{]+?)\1)|url\(\s*(['"]?)(?![a-z]+:|\/)([^\r\n;]+?)\3\s*\))([a-z, \s]*[;}]?)/g;
+var _3=dojox.html._adjustCssPaths=function(_4,_5){
+if(!_5||!_4){
+return;
+}
+if(_1){
+_5=_5.replace(_1,function(_6,_7,_8,_9,_a){
+return _7+(new dojo._Url(_4,"./"+_9).toString())+_a;
+});
+}
+return _5.replace(_2,function(_b,_c,_d,_e,_f,_10){
+if(_d){
+return "@import \""+(new dojo._Url(_4,"./"+_d).toString())+"\""+_10;
+}else{
+return "url("+(new dojo._Url(_4,"./"+_f).toString())+")"+_10;
+}
+});
+};
+var _11=/(<[a-z][a-z0-9]*\s[^>]*)(?:(href|src)=(['"]?)([^>]*?)\3|style=(['"]?)([^>]*?)\5)([^>]*>)/gi;
+var _12=dojox.html._adjustHtmlPaths=function(_13,_14){
+var url=_13||"./";
+return _14.replace(_11,function(tag,_15,_16,_17,_18,_19,_1a,end){
+return _15+(_16?(_16+"="+_17+(new dojo._Url(url,_18).toString())+_17):("style="+_19+_3(url,_1a)+_19))+end;
+});
+};
+var _1b=dojox.html._snarfStyles=function(_1c,_1d,_1e){
+_1e.attributes=[];
+return _1d.replace(/(?:<style([^>]*)>([\s\S]*?)<\/style>|<link\s+(?=[^>]*rel=['"]?stylesheet)([^>]*?href=(['"])([^>]*?)\4[^>\/]*)\/?>)/gi,function(_1f,_20,_21,_22,_23,_24){
+var i,_25=(_20||_22||"").replace(/^\s*([\s\S]*?)\s*$/i,"$1");
+if(_21){
+i=_1e.push(_1c?_3(_1c,_21):_21);
+}else{
+i=_1e.push("@import \""+_24+"\";");
+_25=_25.replace(/\s*(?:rel|href)=(['"])?[^\s]*\1\s*/gi,"");
+}
+if(_25){
+_25=_25.split(/\s+/);
+var _26={},tmp;
+for(var j=0,e=_25.length;j<e;j++){
+tmp=_25[j].split("=");
+_26[tmp[0]]=tmp[1].replace(/^\s*['"]?([\s\S]*?)['"]?\s*$/,"$1");
+}
+_1e.attributes[i-1]=_26;
+}
+return "";
+});
+};
+var _27=dojox.html._snarfScripts=function(_28,_29){
+_29.code="";
+_28=_28.replace(/<[!][-][-](.|\s){5,}?[-][-]>/g,function(_2a){
+return _2a.replace(/<(\/?)script\b/ig,"&lt;$1Script");
+});
+function _2b(src){
+if(_29.downloadRemote){
+src=src.replace(/&([a-z0-9#]+);/g,function(m,_2c){
+switch(_2c){
+case "amp":
+return "&";
+case "gt":
+return ">";
+case "lt":
+return "<";
+default:
+return _2c.charAt(0)=="#"?String.fromCharCode(_2c.substring(1)):"&"+_2c+";";
+}
+});
+dojo.xhrGet({url:src,sync:true,load:function(_2d){
+_29.code+=_2d+";";
+},error:_29.errBack});
+}
+};
+return _28.replace(/<script\s*(?![^>]*type=['"]?(?:dojo\/|text\/html\b))(?:[^>]*?(?:src=(['"]?)([^>]*?)\1[^>]*)?)*>([\s\S]*?)<\/script>/gi,function(_2e,_2f,src,_30){
+if(src){
+_2b(src);
+}else{
+_29.code+=_30;
+}
+return "";
+});
+};
+var _31=dojox.html.evalInGlobal=function(_32,_33){
+_33=_33||dojo.doc.body;
+var n=_33.ownerDocument.createElement("script");
+n.type="text/javascript";
+_33.appendChild(n);
+n.text=_32;
+};
+dojo.declare("dojox.html._ContentSetter",[dojo.html._ContentSetter],{adjustPaths:false,referencePath:".",renderStyles:false,executeScripts:false,scriptHasHooks:false,scriptHookReplacement:null,_renderStyles:function(_34){
+this._styleNodes=[];
+var st,att,_35,doc=this.node.ownerDocument;
+var _36=doc.getElementsByTagName("head")[0];
+for(var i=0,e=_34.length;i<e;i++){
+_35=_34[i];
+att=_34.attributes[i];
+st=doc.createElement("style");
+st.setAttribute("type","text/css");
+for(var x in att){
+st.setAttribute(x,att[x]);
+}
+this._styleNodes.push(st);
+_36.appendChild(st);
+if(st.styleSheet){
+st.styleSheet.cssText=_35;
+}else{
+st.appendChild(doc.createTextNode(_35));
+}
+}
+},empty:function(){
+this.inherited("empty",arguments);
+this._styles=[];
+},onBegin:function(){
+this.inherited("onBegin",arguments);
+var _37=this.content,_38=this.node;
+var _39=this._styles;
+if(dojo.isString(_37)){
+if(this.adjustPaths&&this.referencePath){
+_37=_12(this.referencePath,_37);
+}
+if(this.renderStyles||this.cleanContent){
+_37=_1b(this.referencePath,_37,_39);
+}
+if(this.executeScripts){
+var _3a=this;
+var _3b={downloadRemote:true,errBack:function(e){
+_3a._onError.call(_3a,"Exec","Error downloading remote script in \""+_3a.id+"\"",e);
+}};
+_37=_27(_37,_3b);
+this._code=_3b.code;
+}
+}
+this.content=_37;
+},onEnd:function(){
+var _3c=this._code,_3d=this._styles;
+if(this._styleNodes&&this._styleNodes.length){
+while(this._styleNodes.length){
+dojo.destroy(this._styleNodes.pop());
+}
+}
+if(this.renderStyles&&_3d&&_3d.length){
+this._renderStyles(_3d);
+}
+if(this.executeScripts&&_3c){
+if(this.cleanContent){
+_3c=_3c.replace(/(<!--|(?:\/\/)?-->|<!\[CDATA\[|\]\]>)/g,"");
+}
+if(this.scriptHasHooks){
+_3c=_3c.replace(/_container_(?!\s*=[^=])/g,this.scriptHookReplacement);
+}
+try{
+_31(_3c,this.node);
+}
+catch(e){
+this._onError("Exec","Error eval script in "+this.id+", "+e.message,e);
+}
+}
+this.inherited("onEnd",arguments);
+},tearDown:function(){
+this.inherited(arguments);
+delete this._styles;
+if(this._styleNodes&&this._styleNodes.length){
+while(this._styleNodes.length){
+dojo.destroy(this._styleNodes.pop());
+}
+}
+delete this._styleNodes;
+dojo.mixin(this,dojo.getObject(this.declaredClass).prototype);
+}});
+dojox.html.set=function(_3e,_3f,_40){
+if(!_40){
+return dojo.html._setNodeContent(_3e,_3f,true);
+}else{
+var op=new dojox.html._ContentSetter(dojo.mixin(_40,{content:_3f,node:_3e}));
+return op.set();
+}
+};
+})();
+}
diff --git a/js/dojo/dojox/html/ellipsis.js b/js/dojo/dojox/html/ellipsis.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/ellipsis.js
@@ -0,0 +1,168 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.ellipsis"]){
+dojo._hasResource["dojox.html.ellipsis"]=true;
+dojo.provide("dojox.html.ellipsis");
+(function(d){
+if(d.isMoz){
+var _1=1;
+if("dojoxFFEllipsisDelay" in d.config){
+_1=Number(d.config.dojoxFFEllipsisDelay);
+if(isNaN(_1)){
+_1=1;
+}
+}
+var _2="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+var _3=document.createElementNS(_2,"window");
+var _4=document.createElementNS(_2,"description");
+_4.setAttribute("crop","end");
+_3.appendChild(_4);
+var _5=function(n){
+var x=_3.cloneNode(true);
+x.firstChild.setAttribute("value",n.textContent);
+n.innerHTML="";
+n.appendChild(x);
+};
+var _6=d.create;
+var dd=d.doc;
+var dp=d.place;
+var _7=_6("iframe",{className:"dojoxEllipsisIFrame",src:"javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'"});
+var _8=function(r,_9){
+if(r.collapsed){
+return;
+}
+if(_9>0){
+do{
+_8(r);
+_9--;
+}while(_9);
+return;
+}
+if(r.endContainer.nodeType==3&&r.endOffset>0){
+r.setEnd(r.endContainer,r.endOffset-1);
+}else{
+if(r.endContainer.nodeType==3){
+r.setEndBefore(r.endContainer);
+_8(r);
+return;
+}else{
+if(r.endOffset&&r.endContainer.childNodes.length>=r.endOffset){
+var _a=r.endContainer.childNodes[r.endOffset-1];
+if(_a.nodeType==3){
+r.setEnd(_a,_a.length-1);
+}else{
+if(_a.childNodes.length){
+r.setEnd(_a,_a.childNodes.length);
+_8(r);
+return;
+}else{
+r.setEndBefore(_a);
+_8(r);
+return;
+}
+}
+}else{
+r.setEndBefore(r.endContainer);
+_8(r);
+return;
+}
+}
+}
+};
+var _b=function(n){
+var c=_6("div",{className:"dojoxEllipsisContainer"});
+var e=_6("div",{className:"dojoxEllipsisShown",style:{display:"none"}});
+n.parentNode.replaceChild(c,n);
+c.appendChild(n);
+c.appendChild(e);
+var i=_7.cloneNode(true);
+var ns=n.style;
+var es=e.style;
+var _c;
+var _d=function(){
+ns.display="";
+es.display="none";
+if(n.scrollWidth<=n.offsetWidth){
+return;
+}
+var r=dd.createRange();
+r.selectNodeContents(n);
+ns.display="none";
+es.display="";
+var _e=false;
+do{
+var _f=1;
+dp(r.cloneContents(),e,"only");
+var sw=e.scrollWidth,ow=e.offsetWidth;
+_e=(sw<=ow);
+var pct=(1-((ow*1)/sw));
+if(pct>0){
+_f=Math.max(Math.round(e.textContent.length*pct)-1,1);
+}
+_8(r,_f);
+}while(!r.collapsed&&!_e);
+};
+i.onload=function(){
+i.contentWindow.onresize=_d;
+_d();
+};
+c.appendChild(i);
+};
+var hc=d.hasClass;
+var doc=d.doc;
+var s,fn,opt;
+if(doc.querySelectorAll){
+s=doc;
+fn="querySelectorAll";
+opt=".dojoxEllipsis";
+}else{
+if(doc.getElementsByClassName){
+s=doc;
+fn="getElementsByClassName";
+opt="dojoxEllipsis";
+}else{
+s=d;
+fn="query";
+opt=".dojoxEllipsis";
+}
+}
+fx=function(){
+d.forEach(s[fn].apply(s,[opt]),function(n){
+if(!n||n._djx_ellipsis_done){
+return;
+}
+n._djx_ellipsis_done=true;
+if(n.textContent==n.innerHTML&&!hc(n,"dojoxEllipsisSelectable")){
+_5(n);
+}else{
+_b(n);
+}
+});
+};
+d.addOnLoad(function(){
+var t=null;
+var c=null;
+var _10=function(){
+if(c){
+d.disconnect(c);
+c=null;
+}
+if(t){
+clearTimeout(t);
+}
+t=setTimeout(function(){
+t=null;
+fx();
+c=d.connect(d.body(),"DOMSubtreeModified",_10);
+},_1);
+};
+_10();
+});
+}
+})(dojo);
+}
diff --git a/js/dojo/dojox/html/entities.js b/js/dojo/dojox/html/entities.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/entities.js
@@ -0,0 +1,85 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.entities"]){
+dojo._hasResource["dojox.html.entities"]=true;
+dojo.provide("dojox.html.entities");
+(function(){
+var _1=function(_2,_3){
+var _4,_5;
+if(_3._encCache&&_3._encCache.regexp&&_3._encCache.mapper&&_3.length==_3._encCache.length){
+_4=_3._encCache.mapper;
+_5=_3._encCache.regexp;
+}else{
+_4={};
+_5=["["];
+var i;
+for(i=0;i<_3.length;i++){
+_4[_3[i][0]]="&"+_3[i][1]+";";
+_5.push(_3[i][0]);
+}
+_5.push("]");
+_5=new RegExp(_5.join(""),"g");
+_3._encCache={mapper:_4,regexp:_5,length:_3.length};
+}
+_2=_2.replace(_5,function(c){
+return _4[c];
+});
+return _2;
+};
+var _6=function(_7,_8){
+var _9,_a;
+if(_8._decCache&&_8._decCache.regexp&&_8._decCache.mapper&&_8.length==_8._decCache.length){
+_9=_8._decCache.mapper;
+_a=_8._decCache.regexp;
+}else{
+_9={};
+_a=["("];
+var i;
+for(i=0;i<_8.length;i++){
+var e="&"+_8[i][1]+";";
+if(i){
+_a.push("|");
+}
+_9[e]=_8[i][0];
+_a.push(e);
+}
+_a.push(")");
+_a=new RegExp(_a.join(""),"g");
+_8._decCache={mapper:_9,regexp:_a,length:_8.length};
+}
+_7=_7.replace(_a,function(c){
+return _9[c];
+});
+return _7;
+};
+dojox.html.entities.html=[["&","amp"],["\"","quot"],["<","lt"],[">","gt"],[" ","nbsp"]];
+dojox.html.entities.latin=[["¡","iexcl"],["¢","cent"],["£","pound"],["€","euro"],["¤","curren"],["¥","yen"],["¦","brvbar"],["§","sect"],["¨","uml"],["©","copy"],["ª","ordf"],["«","laquo"],["¬","not"],["­","shy"],["®","reg"],["¯","macr"],["°","deg"],["±","plusmn"],["²","sup2"],["³","sup3"],["´","acute"],["µ","micro"],["¶","para"],["·","middot"],["¸","cedil"],["¹","sup1"],["º","ordm"],["»","raquo"],["¼","frac14"],["½","frac12"],["¾","frac34"],["¿","iquest"],["À","Agrave"],["Á","Aacute"],["Â","Acirc"],["Ã","Atilde"],["Ä","Auml"],["Å","Aring"],["Æ","AElig"],["Ç","Ccedil"],["È","Egrave"],["É","Eacute"],["Ê","Ecirc"],["Ë","Euml"],["Ì","Igrave"],["Í","Iacute"],["Î","Icirc"],["Ï","Iuml"],["Ð","ETH"],["Ñ","Ntilde"],["Ò","Ograve"],["Ó","Oacute"],["Ô","Ocirc"],["Õ","Otilde"],["Ö","Ouml"],["×","times"],["Ø","Oslash"],["Ù","Ugrave"],["Ú","Uacute"],["Û","Ucirc"],["Ü","Uuml"],["Ý","Yacute"],["Þ","THORN"],["ß","szlig"],["à","agrave"],["á","aacute"],["â","acirc"],["ã","atilde"],["ä","auml"],["å","aring"],["æ","aelig"],["ç","ccedil"],["è","egrave"],["é","eacute"],["ê","ecirc"],["ë","euml"],["ì","igrave"],["í","iacute"],["î","icirc"],["ï","iuml"],["ð","eth"],["ñ","ntilde"],["ò","ograve"],["ó","oacute"],["ô","ocirc"],["õ","otilde"],["ö","ouml"],["÷","divide"],["ø","oslash"],["ù","ugrave"],["ú","uacute"],["û","ucirc"],["ü","uuml"],["ý","yacute"],["þ","thorn"],["ÿ","yuml"],["ƒ","fnof"],["Α","Alpha"],["Β","Beta"],["Γ","Gamma"],["Δ","Delta"],["Ε","Epsilon"],["Ζ","Zeta"],["Η","Eta"],["Θ","Theta"],["Ι","Iota"],["Κ","Kappa"],["Λ","Lambda"],["Μ","Mu"],["Ν","Nu"],["Ξ","Xi"],["Ο","Omicron"],["Π","Pi"],["Ρ","Rho"],["Σ","Sigma"],["Τ","Tau"],["Υ","Upsilon"],["Φ","Phi"],["Χ","Chi"],["Ψ","Psi"],["Ω","Omega"],["α","alpha"],["β","beta"],["γ","gamma"],["δ","delta"],["ε","epsilon"],["ζ","zeta"],["η","eta"],["θ","theta"],["ι","iota"],["κ","kappa"],["λ","lambda"],["μ","mu"],["ν","nu"],["ξ","xi"],["ο","omicron"],["π","pi"],["ρ","rho"],["ς","sigmaf"],["σ","sigma"],["τ","tau"],["υ","upsilon"],["φ","phi"],["χ","chi"],["ψ","psi"],["ω","omega"],["ϑ","thetasym"],["ϒ","upsih"],["ϖ","piv"],["•","bull"],["…","hellip"],["′","prime"],["″","Prime"],["‾","oline"],["⁄","frasl"],["℘","weierp"],["ℑ","image"],["ℜ","real"],["™","trade"],["ℵ","alefsym"],["←","larr"],["↑","uarr"],["→","rarr"],["↓","darr"],["↔","harr"],["↵","crarr"],["⇐","lArr"],["⇑","uArr"],["⇒","rArr"],["⇓","dArr"],["⇔","hArr"],["∀","forall"],["∂","part"],["∃","exist"],["∅","empty"],["∇","nabla"],["∈","isin"],["∉","notin"],["∋","ni"],["∏","prod"],["∑","sum"],["−","minus"],["∗","lowast"],["√","radic"],["∝","prop"],["∞","infin"],["∠","ang"],["∧","and"],["∨","or"],["∩","cap"],["∪","cup"],["∫","int"],["∴","there4"],["∼","sim"],["≅","cong"],["≈","asymp"],["≠","ne"],["≡","equiv"],["≤","le"],["≥","ge"],["⊂","sub"],["⊃","sup"],["⊄","nsub"],["⊆","sube"],["⊇","supe"],["⊕","oplus"],["⊗","otimes"],["⊥","perp"],["⋅","sdot"],["⌈","lceil"],["⌉","rceil"],["⌊","lfloor"],["⌋","rfloor"],["〈","lang"],["〉","rang"],["◊","loz"],["♠","spades"],["♣","clubs"],["♥","hearts"],["♦","diams"],["Œ","Elig"],["œ","oelig"],["Š","Scaron"],["š","scaron"],["Ÿ","Yuml"],["ˆ","circ"],["˜","tilde"],[" ","ensp"],[" ","emsp"],[" ","thinsp"],["‌","zwnj"],["‍","zwj"],["‎","lrm"],["‏","rlm"],["–","ndash"],["—","mdash"],["‘","lsquo"],["’","rsquo"],["‚","sbquo"],["“","ldquo"],["”","rdquo"],["„","bdquo"],["†","dagger"],["‡","Dagger"],["‰","permil"],["‹","lsaquo"],["›","rsaquo"]];
+dojox.html.entities.encode=function(_b,m){
+if(_b){
+if(!m){
+_b=_1(_b,dojox.html.entities.html);
+_b=_1(_b,dojox.html.entities.latin);
+}else{
+_b=_1(_b,m);
+}
+}
+return _b;
+};
+dojox.html.entities.decode=function(_c,m){
+if(_c){
+if(!m){
+_c=_6(_c,dojox.html.entities.html);
+_c=_6(_c,dojox.html.entities.latin);
+}else{
+_c=_6(_c,m);
+}
+}
+return _c;
+};
+})();
+}
diff --git a/js/dojo/dojox/html/format.js b/js/dojo/dojox/html/format.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/format.js
@@ -0,0 +1,340 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.format"]){
+dojo._hasResource["dojox.html.format"]=true;
+dojo.provide("dojox.html.format");
+dojo.require("dojox.html.entities");
+(function(){
+dojox.html.format.prettyPrint=function(_1,_2,_3,_4,_5){
+var _6=[];
+var _7=0;
+var _8=[];
+var _9="\t";
+var _a="";
+var _b=[];
+var i;
+var _c=/[=]([^"']+?)(\s|>)/g;
+var _d=/style=("[^"]*"|'[^']*'|\S*)/gi;
+var _e=/\s\w+=("[^"]*"|'[^']*'|\S*)/gi;
+if(_2&&_2>0&&_2<10){
+_9="";
+for(i=0;i<_2;i++){
+_9+=" ";
+}
+}
+var _f=dojo.doc.createElement("div");
+_f.innerHTML=_1;
+var _10=dojox.html.entities.encode;
+var _11=dojox.html.entities.decode;
+var _12=function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "small":
+return true;
+default:
+return false;
+}
+};
+var div=_f.ownerDocument.createElement("div");
+var _13=function(_14){
+var _15=_14.cloneNode(false);
+div.appendChild(_15);
+var _16=div.innerHTML;
+div.innerHTML="";
+return _16;
+};
+var _17=function(){
+var i,txt="";
+for(i=0;i<_7;i++){
+txt+=_9;
+}
+return txt.length;
+};
+var _18=function(){
+var i;
+for(i=0;i<_7;i++){
+_6.push(_9);
+}
+};
+var _19=function(){
+_6.push("\n");
+};
+var _1a=function(n){
+_a+=_10(n.nodeValue,_4);
+};
+var _1b=function(txt){
+var i;
+var _1c;
+var _1d=txt.split("\n");
+for(i=0;i<_1d.length;i++){
+_1d[i]=dojo.trim(_1d[i]);
+}
+txt=_1d.join(" ");
+txt=dojo.trim(txt);
+if(txt!==""){
+var _1e=[];
+if(_3&&_3>0){
+var _1f=_17();
+var _20=_3;
+if(_3>_1f){
+_20-=_1f;
+}
+while(txt){
+if(txt.length>_3){
+for(i=_20;(i>0&&txt.charAt(i)!==" ");i--){
+}
+if(!i){
+for(i=_20;(i<txt.length&&txt.charAt(i)!==" ");i++){
+}
+}
+var _21=txt.substring(0,i);
+_21=dojo.trim(_21);
+txt=dojo.trim(txt.substring((i==txt.length)?txt.length:i+1,txt.length));
+if(_21){
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+_21=_1c+_21+"\n";
+}
+_1e.push(_21);
+}else{
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+txt=_1c+txt+"\n";
+_1e.push(txt);
+txt=null;
+}
+}
+return _1e.join("");
+}else{
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+txt=_1c+txt+"\n";
+return txt;
+}
+}else{
+return "";
+}
+};
+var _22=function(txt){
+if(txt){
+txt=txt.replace(/&quot;/gi,"\"");
+txt=txt.replace(/&gt;/gi,">");
+txt=txt.replace(/&lt;/gi,"<");
+txt=txt.replace(/&amp;/gi,"&");
+}
+return txt;
+};
+var _23=function(txt){
+if(txt){
+txt=_22(txt);
+var i,t,c,_24;
+var _25=0;
+var _26=txt.split("\n");
+var _27=[];
+for(i=0;i<_26.length;i++){
+var _28=_26[i];
+var _29=(_28.indexOf("\n")>-1);
+_28=dojo.trim(_28);
+if(_28){
+var _2a=_25;
+for(c=0;c<_28.length;c++){
+var ch=_28.charAt(c);
+if(ch==="{"){
+_25++;
+}else{
+if(ch==="}"){
+_25--;
+_2a=_25;
+}
+}
+}
+_24="";
+for(t=0;t<_7+_2a;t++){
+_24+=_9;
+}
+_27.push(_24+_28+"\n");
+}else{
+if(_29&&i===0){
+_27.push("\n");
+}
+}
+}
+txt=_27.join("");
+}
+return txt;
+};
+var _2b=function(_2c){
+var _2d=_2c.nodeName.toLowerCase();
+var _2e=dojo.trim(_13(_2c));
+var tag=_2e.substring(0,_2e.indexOf(">")+1);
+tag=tag.replace(_c,"=\"$1\"$2");
+tag=tag.replace(_d,function(_2f){
+var sL=_2f.substring(0,6);
+var _30=_2f.substring(6,_2f.length);
+var _31=_30.charAt(0);
+_30=dojo.trim(_30.substring(1,_30.length-1));
+_30=_30.split(";");
+var _32=[];
+dojo.forEach(_30,function(s){
+s=dojo.trim(s);
+if(s){
+s=s.substring(0,s.indexOf(":")).toLowerCase()+s.substring(s.indexOf(":"),s.length);
+_32.push(s);
+}
+});
+_32=_32.sort();
+_30=_32.join("; ");
+var ts=dojo.trim(_30);
+if(!ts||ts===";"){
+return "";
+}else{
+_30+=";";
+return sL+_31+_30+_31;
+}
+});
+var _33=[];
+tag=tag.replace(_e,function(_34){
+_33.push(dojo.trim(_34));
+return "";
+});
+_33=_33.sort();
+tag="<"+_2d;
+if(_33.length){
+tag+=" "+_33.join(" ");
+}
+if(_2e.indexOf("</")!=-1){
+_8.push(_2d);
+tag+=">";
+}else{
+if(_5){
+tag+=" />";
+}else{
+tag+=">";
+}
+_8.push(false);
+}
+var _35=_12(_2d);
+_b.push(_35);
+if(_a&&!_35){
+_6.push(_1b(_a));
+_a="";
+}
+if(!_35){
+_18();
+_6.push(tag);
+_19();
+_7++;
+}else{
+_a+=tag;
+}
+};
+var _36=function(){
+var _37=_b.pop();
+if(_a&&!_37){
+_6.push(_1b(_a));
+_a="";
+}
+var ct=_8.pop();
+if(ct){
+ct="</"+ct+">";
+if(!_37){
+_7--;
+_18();
+_6.push(ct);
+_19();
+}else{
+_a+=ct;
+}
+}else{
+_7--;
+}
+};
+var _38=function(n){
+var _39=_11(n.nodeValue,_4);
+_18();
+_6.push("<!--");
+_19();
+_7++;
+_6.push(_1b(_39));
+_7--;
+_18();
+_6.push("-->");
+_19();
+};
+var _3a=function(_3b){
+var _3c=_3b.childNodes;
+if(_3c){
+var i;
+for(i=0;i<_3c.length;i++){
+var n=_3c[i];
+if(n.nodeType===1){
+var tg=dojo.trim(n.tagName.toLowerCase());
+if(dojo.isIE&&n.parentNode!=_3b){
+continue;
+}
+if(tg&&tg.charAt(0)==="/"){
+continue;
+}else{
+_2b(n);
+if(tg==="script"){
+_6.push(_23(n.innerHTML));
+}else{
+if(tg==="pre"){
+var _3d=n.innerHTML;
+if(dojo.isMoz){
+_3d=_3d.replace("<br>","\n");
+_3d=_3d.replace("<pre>","");
+_3d=_3d.replace("</pre>","");
+}
+if(_3d.charAt(_3d.length-1)!=="\n"){
+_3d+="\n";
+}
+_6.push(_3d);
+}else{
+_3a(n);
+}
+}
+_36();
+}
+}else{
+if(n.nodeType===3||n.nodeType===4){
+_1a(n);
+}else{
+if(n.nodeType===8){
+_38(n);
+}
+}
+}
+}
+}
+};
+_3a(_f);
+return _6.join("");
+};
+})();
+}
diff --git a/js/dojo/dojox/html/metrics.js b/js/dojo/dojox/html/metrics.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/metrics.js
@@ -0,0 +1,141 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.metrics"]){
+dojo._hasResource["dojox.html.metrics"]=true;
+dojo.provide("dojox.html.metrics");
+(function(){
+var _1=dojox.html.metrics;
+_1.getFontMeasurements=function(){
+var _2={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};
+if(dojo.isIE){
+dojo.doc.documentElement.style.fontSize="100%";
+}
+var _3=dojo.doc.createElement("div");
+var ds=_3.style;
+ds.position="absolute";
+ds.left="-100px";
+ds.top="0";
+ds.width="30px";
+ds.height="1000em";
+ds.border="0";
+ds.margin="0";
+ds.padding="0";
+ds.outline="0";
+ds.lineHeight="1";
+ds.overflow="hidden";
+dojo.body().appendChild(_3);
+for(var p in _2){
+ds.fontSize=p;
+_2[p]=Math.round(_3.offsetHeight*12/16)*16/12/1000;
+}
+dojo.body().removeChild(_3);
+_3=null;
+return _2;
+};
+var _4=null;
+_1.getCachedFontMeasurements=function(_5){
+if(_5||!_4){
+_4=_1.getFontMeasurements();
+}
+return _4;
+};
+var _6=null,_7={};
+_1.getTextBox=function(_8,_9,_a){
+var m;
+if(!_6){
+m=_6=dojo.doc.createElement("div");
+m.style.position="absolute";
+m.style.left="0px";
+m.style.top="-10000px";
+dojo.body().appendChild(m);
+}else{
+m=_6;
+}
+m.className="";
+m.style.border="0";
+m.style.margin="0";
+m.style.padding="0";
+m.style.outline="0";
+if(arguments.length>1&&_9){
+for(var i in _9){
+if(i in _7){
+continue;
+}
+m.style[i]=_9[i];
+}
+}
+if(arguments.length>2&&_a){
+m.className=_a;
+}
+m.innerHTML=_8;
+return dojo.marginBox(m);
+};
+var _b={w:16,h:16};
+_1.getScrollbar=function(){
+return {w:_b.w,h:_b.h};
+};
+_1._fontResizeNode=null;
+_1.initOnFontResize=function(_c){
+var f=_1._fontResizeNode=dojo.doc.createElement("iframe");
+var fs=f.style;
+fs.position="absolute";
+fs.width="5em";
+fs.height="10em";
+fs.top="-10000px";
+if(dojo.isIE){
+f.onreadystatechange=function(){
+if(f.contentWindow.document.readyState=="complete"){
+f.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+}
+};
+}else{
+f.onload=function(){
+f.contentWindow.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+};
+}
+f.setAttribute("src","javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");
+dojo.body().appendChild(f);
+_1.initOnFontResize=function(){
+};
+};
+_1.onFontResize=function(){
+};
+_1._fontresize=function(){
+_1.onFontResize();
+};
+dojo.addOnUnload(function(){
+var f=_1._fontResizeNode;
+if(f){
+if(dojo.isIE&&f.onresize){
+f.onresize=null;
+}else{
+if(f.contentWindow&&f.contentWindow.onresize){
+f.contentWindow.onresize=null;
+}
+}
+_1._fontResizeNode=null;
+}
+});
+dojo.addOnLoad(function(){
+try{
+var n=dojo.doc.createElement("div");
+n.style.cssText="top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
+dojo.body().appendChild(n);
+_b.w=n.offsetWidth-n.clientWidth;
+_b.h=n.offsetHeight-n.clientHeight;
+dojo.body().removeChild(n);
+delete n;
+}
+catch(e){
+}
+if("fontSizeWatch" in dojo.config&&!!dojo.config.fontSizeWatch){
+_1.initOnFontResize();
+}
+});
+})();
+}
diff --git a/js/dojo/dojox/html/resources/ellipsis.css b/js/dojo/dojox/html/resources/ellipsis.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/resources/ellipsis.css
@@ -0,0 +1,33 @@
+.dojoxEllipsis,
+.dojoxEllipsisShown {
+ white-space: nowrap;
+ width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ -webkit-text-overflow: ellipsis;
+}
+.dojoxEllipsis window {
+ width:100%;
+ -moz-user-focus:normal;
+ -moz-user-select:text;
+}
+.dojoxEllipsis description{
+ -moz-user-focus:normal;
+ -moz-user-select:text;
+}
+.dojoxEllipsisIFrame{
+ white-space: normal;
+ border: none;
+ width: 100%;
+ display: block;
+ height: 1px;
+ margin-top: -1px;
+ clear: both;
+}
+.dojoxEllipsisContainer{
+ width: 100%;
+}
+.dojoxEllipsisShown:after{
+ content: "\2026"
+}
diff --git a/js/dojo/dojox/html/styles.js b/js/dojo/dojox/html/styles.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/html/styles.js
@@ -0,0 +1,188 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.styles"]){
+dojo._hasResource["dojox.html.styles"]=true;
+dojo.provide("dojox.html.styles");
+(function(){
+var _1={};
+var _2={};
+var _3=[];
+var _4=[];
+dojox.html.insertCssRule=function(_5,_6,_7){
+var ss=dojox.html.getDynamicStyleSheet(_7);
+var _8=_5+" {"+_6+"}";
+if(dojo.isIE){
+ss.cssText+=_8;
+}else{
+if(ss.sheet){
+ss.sheet.insertRule(_8,ss._indicies.length);
+}else{
+ss.appendChild(dojo.doc.createTextNode(_8));
+}
+}
+ss._indicies.push(_5+" "+_6);
+return _5;
+};
+dojox.html.removeCssRule=function(_9,_a,_b){
+var ss;
+var _c=-1;
+for(var nm in _1){
+if(_b&&_b!=nm){
+continue;
+}
+ss=_1[nm];
+for(var i=0;i<ss._indicies.length;i++){
+if(_9+" "+_a==ss._indicies[i]){
+_c=i;
+break;
+}
+}
+if(_c>-1){
+break;
+}
+}
+if(!ss){
+return false;
+}
+if(_c==-1){
+return false;
+}
+ss._indicies.splice(_c,1);
+if(dojo.isIE){
+ss.removeRule(_c);
+}else{
+if(ss.sheet){
+ss.sheet.deleteRule(_c);
+}else{
+if(document.styleSheets[0]){
+}
+}
+}
+return true;
+};
+dojox.html.getStyleSheet=function(_d){
+if(_1[_d||"default"]){
+return _1[_d||"default"];
+}
+if(!_d){
+return false;
+}
+var _e=dojox.html.getStyleSheets();
+if(_e[_d]){
+return dojox.html.getStyleSheets()[_d];
+}
+for(var nm in _e){
+if(_e[nm].href&&_e[nm].href.indexOf(_d)>-1){
+return _e[nm];
+}
+}
+return false;
+};
+dojox.html.getDynamicStyleSheet=function(_f){
+if(!_f){
+_f="default";
+}
+if(!_1[_f]){
+if(dojo.doc.createStyleSheet){
+_1[_f]=dojo.doc.createStyleSheet();
+_1[_f].title=_f;
+}else{
+_1[_f]=dojo.doc.createElement("style");
+_1[_f].setAttribute("type","text/css");
+dojo.doc.getElementsByTagName("head")[0].appendChild(_1[_f]);
+}
+_1[_f]._indicies=[];
+}
+return _1[_f];
+};
+dojox.html.enableStyleSheet=function(_10){
+var ss=dojox.html.getStyleSheet(_10);
+if(ss){
+if(ss.sheet){
+ss.sheet.disabled=false;
+}else{
+ss.disabled=false;
+}
+}
+};
+dojox.html.disableStyleSheet=function(_11){
+var ss=dojox.html.getStyleSheet(_11);
+if(ss){
+if(ss.sheet){
+ss.sheet.disabled=true;
+}else{
+ss.disabled=true;
+}
+}
+};
+dojox.html.activeStyleSheet=function(_12){
+var _13=dojox.html.getToggledStyleSheets();
+if(arguments.length==1){
+dojo.forEach(_13,function(s){
+s.disabled=(s.title==_12)?false:true;
+});
+}else{
+for(var i=0;i<_13.length;i++){
+if(_13[i].disabled==false){
+return _13[i];
+}
+}
+}
+return true;
+};
+dojox.html.getPreferredStyleSheet=function(){
+};
+dojox.html.getToggledStyleSheets=function(){
+if(!_3.length){
+var _14=dojox.html.getStyleSheets();
+for(var nm in _14){
+if(_14[nm].title){
+_3.push(_14[nm]);
+}
+}
+}
+return _3;
+};
+dojox.html.getStyleSheets=function(){
+if(_2.collected){
+return _2;
+}
+var _15=dojo.doc.styleSheets;
+dojo.forEach(_15,function(n){
+var s=(n.sheet)?n.sheet:n;
+var _16=s.title||s.href;
+if(dojo.isIE){
+if(s.cssText.indexOf("#default#VML")==-1){
+if(s.href){
+_2[_16]=s;
+}else{
+if(s.imports.length){
+dojo.forEach(s.imports,function(si){
+_2[si.title||si.href]=si;
+});
+}else{
+_2[_16]=s;
+}
+}
+}
+}else{
+_2[_16]=s;
+_2[_16].id=s.ownerNode.id;
+dojo.forEach(s.cssRules,function(r){
+if(r.href){
+_2[r.href]=r.styleSheet;
+_2[r.href].id=s.ownerNode.id;
+}
+});
+}
+});
+_2.collected=true;
+return _2;
+};
+})();
+}
diff --git a/js/dojo/dojox/image.js b/js/dojo/dojox/image.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image"]){
+dojo._hasResource["dojox.image"]=true;
+dojo.provide("dojox.image");
+dojo.require("dojox.image._base");
+}
diff --git a/js/dojo/dojox/image/Badge.js b/js/dojo/dojox/image/Badge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/Badge.js
@@ -0,0 +1,102 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Badge"]){
+dojo._hasResource["dojox.image.Badge"]=true;
+dojo.provide("dojox.image.Badge");
+dojo.experimental("dojox.image.Badge");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.image.Badge",[dijit._Widget,dijit._Templated],{baseClass:"dojoxBadge",templateString:"<div class=\"dojoxBadge\" dojoAttachPoint=\"containerNode\"></div>",children:"div.dojoxBadgeImage",rows:4,cols:5,cellSize:50,cellMargin:1,delay:2000,threads:1,easing:"dojo.fx.easing.backOut",startup:function(){
+if(this._started){
+return;
+}
+if(dojo.isString(this.easing)){
+this.easing=dojo.getObject(this.easing);
+}
+this.inherited(arguments);
+this._init();
+},_init:function(){
+var _1=0,_2=this.cellSize;
+dojo.style(this.domNode,{width:_2*this.cols+"px",height:_2*this.rows+"px"});
+this._nl=dojo.query(this.children,this.containerNode).forEach(function(n,_3){
+var _4=_3%this.cols,t=_1*_2,l=_4*_2,m=this.cellMargin*2;
+dojo.style(n,{top:t+"px",left:l+"px",width:_2-m+"px",height:_2-m+"px"});
+if(_4==this.cols-1){
+_1++;
+}
+dojo.addClass(n,this.baseClass+"Image");
+},this);
+var l=this._nl.length;
+while(this.threads--){
+var s=Math.floor(Math.random()*l);
+setTimeout(dojo.hitch(this,"_enbiggen",{target:this._nl[s]}),this.delay*this.threads);
+}
+},_getCell:function(n){
+var _5=this._nl.indexOf(n);
+if(_5>=0){
+var _6=_5%this.cols;
+var _7=Math.floor(_5/this.cols);
+return {x:_6,y:_7,n:this._nl[_5],io:_5};
+}else{
+return undefined;
+}
+},_getImage:function(){
+return "url('')";
+},_enbiggen:function(e){
+var _8=this._getCell(e.target||e);
+if(_8){
+var m=this.cellMargin,_9=(this.cellSize*2)-(m*2),_a={height:_9,width:_9};
+var _b=function(){
+return Math.round(Math.random());
+};
+if(_8.x==this.cols-1||(_8.x>0&&_b())){
+_a.left=this.cellSize*(_8.x-m);
+}
+if(_8.y==this.rows-1||(_8.y>0&&_b())){
+_a.top=this.cellSize*(_8.y-m);
+}
+var bc=this.baseClass;
+dojo.addClass(_8.n,bc+"Top");
+dojo.addClass(_8.n,bc+"Seen");
+dojo.animateProperty({node:_8.n,properties:_a,onEnd:dojo.hitch(this,"_loadUnder",_8,_a),easing:this.easing}).play();
+}
+},_loadUnder:function(_c,_d){
+var _e=_c.io;
+var _f=[];
+var _10=(_d.left>=0);
+var _11=(_d.top>=0);
+var c=this.cols,e=_e+(_10?-1:1),f=_e+(_11?-c:c),g=(_11?(_10?e-c:f+1):(_10?f-1:e+c)),bc=this.baseClass;
+dojo.forEach([e,f,g],function(x){
+var n=this._nl[x];
+if(n){
+if(dojo.hasClass(n,bc+"Seen")){
+dojo.removeClass(n,bc+"Seen");
+}
+}
+},this);
+setTimeout(dojo.hitch(this,"_disenbiggen",_c,_d),this.delay*1.25);
+},_disenbiggen:function(_12,_13){
+if(_13.top>=0){
+_13.top+=this.cellSize;
+}
+if(_13.left>=0){
+_13.left+=this.cellSize;
+}
+var _14=this.cellSize-(this.cellMargin*2);
+dojo.animateProperty({node:_12.n,properties:dojo.mixin(_13,{width:_14,height:_14}),onEnd:dojo.hitch(this,"_cycle",_12,_13)}).play(5);
+},_cycle:function(_15,_16){
+var bc=this.baseClass;
+dojo.removeClass(_15.n,bc+"Top");
+var ns=this._nl.filter(function(n){
+return !dojo.hasClass(n,bc+"Seen");
+});
+var c=ns[Math.floor(Math.random()*ns.length)];
+setTimeout(dojo.hitch(this,"_enbiggen",{target:c}),this.delay/2);
+}});
+}
diff --git a/js/dojo/dojox/image/FlickrBadge.js b/js/dojo/dojox/image/FlickrBadge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/FlickrBadge.js
@@ -0,0 +1,60 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.FlickrBadge"]){
+dojo._hasResource["dojox.image.FlickrBadge"]=true;
+dojo.provide("dojox.image.FlickrBadge");
+dojo.require("dojox.image.Badge");
+dojo.require("dojox.data.FlickrRestStore");
+dojo.declare("dojox.image.FlickrBadge",dojox.image.Badge,{children:"a.flickrImage",userid:"",username:"",setid:"",tags:"",searchText:"",target:"",apikey:"8c6803164dbc395fb7131c9d54843627",_store:null,postCreate:function(){
+if(this.username&&!this.userid){
+var _1=dojo.io.script.get({url:"http://www.flickr.com/services/rest/",preventCache:true,content:{format:"json",method:"flickr.people.findByUsername",api_key:this.apikey,username:this.username},callbackParamName:"jsoncallback"});
+_1.addCallback(this,function(_2){
+if(_2.user&&_2.user.nsid){
+this.userid=_2.user.nsid;
+if(!this._started){
+this.startup();
+}
+}
+});
+}
+},startup:function(){
+if(this._started){
+return;
+}
+if(this.userid){
+var _3={userid:this.userid};
+if(this.setid){
+_3["setid"]=this.setid;
+}
+if(this.tags){
+_3.tags=this.tags;
+}
+if(this.searchText){
+_3.text=this.searchText;
+}
+var _4=arguments;
+this._store=new dojox.data.FlickrRestStore({apikey:this.apikey});
+this._store.fetch({count:this.cols*this.rows,query:_3,onComplete:dojo.hitch(this,function(_5){
+dojo.forEach(_5,function(_6){
+var a=dojo.doc.createElement("a");
+dojo.addClass(a,"flickrImage");
+a.href=this._store.getValue(_6,"link");
+if(this.target){
+a.target=this.target;
+}
+var _7=dojo.doc.createElement("img");
+_7.src=this._store.getValue(_6,"imageUrlThumb");
+dojo.style(_7,{width:"100%",height:"100%"});
+a.appendChild(_7);
+this.domNode.appendChild(a);
+},this);
+dojox.image.Badge.prototype.startup.call(this,_4);
+})});
+}
+}});
+}
diff --git a/js/dojo/dojox/image/LightboxNano.js b/js/dojo/dojox/image/LightboxNano.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/LightboxNano.js
@@ -0,0 +1,122 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.LightboxNano"]){
+dojo._hasResource["dojox.image.LightboxNano"]=true;
+dojo.provide("dojox.image.LightboxNano");
+dojo.require("dojo.fx");
+(function(d){
+var _1="absolute",_2="visibility",_3=function(){
+var _4=(d.doc.compatMode=="BackCompat")?d.body():d.doc.documentElement,_5=dojo._docScroll();
+return {w:_4.clientWidth,h:_4.clientHeight,l:_5.x,t:_5.y};
+};
+d.declare("dojox.image.LightboxNano",null,{href:"",duration:500,preloadDelay:5000,constructor:function(p,n){
+var _6=this;
+d.mixin(_6,p);
+n=_6._node=dojo.byId(n);
+if(n){
+if(!/a/i.test(n.tagName)){
+var a=d.create("a",{href:_6.href,"class":n.className},n,"after");
+n.className="";
+a.appendChild(n);
+n=a;
+}
+d.style(n,"position","relative");
+_6._createDiv("dojoxEnlarge",n);
+d.setSelectable(n,false);
+_6._onClickEvt=d.connect(n,"onclick",_6,"_load");
+}
+if(_6.href){
+setTimeout(function(){
+(new Image()).src=_6.href;
+_6._hideLoading();
+},_6.preloadDelay);
+}
+},destroy:function(){
+var a=this._connects||[];
+a.push(this._onClickEvt);
+d.forEach(a,d.disconnect);
+d.destroy(this._node);
+},_createDiv:function(_7,_8,_9){
+return d.create("div",{"class":_7,style:{position:_1,display:_9?"":"none"}},_8);
+},_load:function(e){
+var _a=this;
+e&&d.stopEvent(e);
+if(!_a._loading){
+_a._loading=true;
+_a._reset();
+var i=_a._img=d.create("img",{style:{visibility:"hidden",cursor:"pointer",position:_1,top:0,left:0,zIndex:9999999}},d.body()),ln=_a._loadingNode,n=d.query("img",_a._node)[0]||_a._node,a=d.position(n,true),c=d.contentBox(n),b=d._getBorderExtents(n);
+if(ln==null){
+_a._loadingNode=ln=_a._createDiv("dojoxLoading",_a._node,true);
+var l=d.marginBox(ln);
+d.style(ln,{left:parseInt((c.w-l.w)/2)+"px",top:parseInt((c.h-l.h)/2)+"px"});
+}
+c.x=a.x-10+b.l;
+c.y=a.y-10+b.t;
+_a._start=c;
+_a._connects=[d.connect(i,"onload",_a,"_show")];
+i.src=_a.href;
+}
+},_hideLoading:function(){
+if(this._loadingNode){
+d.style(this._loadingNode,"display","none");
+}
+this._loadingNode=false;
+},_show:function(){
+var _b=this,vp=_3(),w=_b._img.width,h=_b._img.height,_c=parseInt((vp.w-20)*0.9),_d=parseInt((vp.h-20)*0.9),dd=d.doc,bg=_b._bg=d.create("div",{style:{backgroundColor:"#000",opacity:0,position:_1,zIndex:9999998}},d.body()),ln=_b._loadingNode;
+if(_b._loadingNode){
+_b._hideLoading();
+}
+d.style(_b._img,{border:"10px solid #fff",visibility:"visible"});
+d.style(_b._node,_2,"hidden");
+_b._loading=false;
+_b._connects=_b._connects.concat([d.connect(dd,"onmousedown",_b,"_hide"),d.connect(dd,"onkeypress",_b,"_key"),d.connect(window,"onresize",_b,"_sizeBg")]);
+if(w>_c){
+h=h*_c/w;
+w=_c;
+}
+if(h>_d){
+w=w*_d/h;
+h=_d;
+}
+_b._end={x:(vp.w-20-w)/2+vp.l,y:(vp.h-20-h)/2+vp.t,w:w,h:h};
+_b._sizeBg();
+d.fx.combine([_b._anim(_b._img,_b._coords(_b._start,_b._end)),_b._anim(bg,{opacity:0.5})]).play();
+},_sizeBg:function(){
+var dd=d.doc.documentElement;
+d.style(this._bg,{top:0,left:0,width:dd.scrollWidth+"px",height:dd.scrollHeight+"px"});
+},_key:function(e){
+d.stopEvent(e);
+this._hide();
+},_coords:function(s,e){
+return {left:{start:s.x,end:e.x},top:{start:s.y,end:e.y},width:{start:s.w,end:e.w},height:{start:s.h,end:e.h}};
+},_hide:function(){
+var _e=this;
+d.forEach(_e._connects,d.disconnect);
+_e._connects=[];
+d.fx.combine([_e._anim(_e._img,_e._coords(_e._end,_e._start),"_reset"),_e._anim(_e._bg,{opacity:0})]).play();
+},_reset:function(){
+d.style(this._node,_2,"visible");
+d.forEach([this._img,this._bg],function(n){
+d.destroy(n);
+n=null;
+});
+this._node.focus();
+},_anim:function(_f,_10,_11){
+return d.animateProperty({node:_f,duration:this.duration,properties:_10,onEnd:_11?d.hitch(this,_11):null});
+},show:function(_12){
+_12=_12||{};
+this.href=_12.href||this.href;
+var n=d.byId(_12.origin),vp=_3();
+this._node=n||d.create("div",{style:{position:_1,width:0,hieght:0,left:(vp.l+(vp.w/2))+"px",top:(vp.t+(vp.h/2))+"px"}},d.body());
+this._load();
+if(!n){
+d.destroy(this._node);
+}
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/image/Magnifier.js b/js/dojo/dojox/image/Magnifier.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/Magnifier.js
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Magnifier"]){
+dojo._hasResource["dojox.image.Magnifier"]=true;
+dojo.provide("dojox.image.Magnifier");
+dojo.require("dojox.gfx");
+dojo.require("dojox.image.MagnifierLite");
+dojo.declare("dojox.image.Magnifier",dojox.image.MagnifierLite,{_createGlass:function(){
+this.glassNode=dojo.create("div",{style:{height:this.glassSize+"px",width:this.glassSize+"px"},"className":"glassNode"},dojo.body());
+this.surfaceNode=dojo.create("div",null,this.glassNode);
+this.surface=dojox.gfx.createSurface(this.surfaceNode,this.glassSize,this.glassSize);
+this.img=this.surface.createImage({src:this.domNode.src,width:this._zoomSize.w,height:this._zoomSize.h});
+},_placeGlass:function(e){
+var x=e.pageX-2,y=e.pageY-2,_1=this.offset.x+this.offset.w+2,_2=this.offset.y+this.offset.h+2;
+if(x<this.offset.x||y<this.offset.y||x>_1||y>_2){
+this._hideGlass();
+}else{
+this.inherited(arguments);
+}
+},_setImage:function(e){
+var _3=(e.pageX-this.offset.l)/this.offset.w,_4=(e.pageY-this.offset.t)/this.offset.h,x=(this._zoomSize.w*_3*-1)+(this.glassSize*_3),y=(this._zoomSize.h*_4*-1)+(this.glassSize*_4);
+this.img.setShape({x:x,y:y});
+}});
+}
diff --git a/js/dojo/dojox/image/MagnifierLite.js b/js/dojo/dojox/image/MagnifierLite.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/MagnifierLite.js
@@ -0,0 +1,46 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.MagnifierLite"]){
+dojo._hasResource["dojox.image.MagnifierLite"]=true;
+dojo.provide("dojox.image.MagnifierLite");
+dojo.experimental("dojox.image.MagnifierLite");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.image.MagnifierLite",dijit._Widget,{glassSize:125,scale:6,postCreate:function(){
+this.inherited(arguments);
+this._adjustScale();
+this._createGlass();
+this.connect(this.domNode,"onmouseenter","_showGlass");
+this.connect(this.glassNode,"onmousemove","_placeGlass");
+this.connect(this.img,"onmouseout","_hideGlass");
+this.connect(window,"onresize","_adjustScale");
+},_createGlass:function(){
+var _1=this.glassNode=dojo.create("div",{style:{height:this.glassSize+"px",width:this.glassSize+"px"},className:"glassNode"},dojo.body());
+this.surfaceNode=_1.appendChild(dojo.create("div"));
+this.img=dojo.place(dojo.clone(this.domNode),_1);
+dojo.style(this.img,{position:"relative",top:0,left:0,width:this._zoomSize.w+"px",height:this._zoomSize.h+"px"});
+},_adjustScale:function(){
+this.offset=dojo.coords(this.domNode,true);
+this._imageSize={w:this.offset.w,h:this.offset.h};
+this._zoomSize={w:this._imageSize.w*this.scale,h:this._imageSize.h*this.scale};
+},_showGlass:function(e){
+this._placeGlass(e);
+dojo.style(this.glassNode,{visibility:"visible",display:""});
+},_hideGlass:function(e){
+dojo.style(this.glassNode,{visibility:"hidden",display:"none"});
+},_placeGlass:function(e){
+this._setImage(e);
+var _2=Math.floor(this.glassSize/2);
+dojo.style(this.glassNode,{top:Math.floor(e.pageY-_2)+"px",left:Math.floor(e.pageX-_2)+"px"});
+},_setImage:function(e){
+var _3=(e.pageX-this.offset.l)/this.offset.w,_4=(e.pageY-this.offset.t)/this.offset.h,x=(this._zoomSize.w*_3*-1)+(this.glassSize*_3),y=(this._zoomSize.h*_4*-1)+(this.glassSize*_4);
+dojo.style(this.img,{top:y+"px",left:x+"px"});
+},destroy:function(_5){
+dojo.destroy(this.glassNode);
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/image/_base.js b/js/dojo/dojox/image/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/_base.js
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image._base"]){
+dojo._hasResource["dojox.image._base"]=true;
+dojo.provide("dojox.image._base");
+(function(d){
+var _1;
+dojox.image.preload=function(_2){
+if(!_1){
+_1=d.create("div",{style:{position:"absolute",top:"-9999px",height:"1px",overflow:"hidden"}},d.body());
+}
+return d.map(_2,function(_3){
+return d.create("img",{src:_3},_1);
+});
+};
+if(d.config.preloadImages){
+d.addOnLoad(function(){
+dojox.image.preload(d.config.preloadImages);
+});
+}
+})(dojo);
+}
diff --git a/js/dojo/dojox/image/resources/Badge.css b/js/dojo/dojox/image/resources/Badge.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/Badge.css
@@ -0,0 +1,30 @@
+
+.dojoxBadge {
+ position:relative;
+}
+.dojoxBadge .dojoxBadgeImage {
+ position:absolute;
+ top:0; left:0;
+ margin:0;
+ padding:0;
+}
+.dojoxBadge {
+ margin:0; padding:0;
+ border:1px solid #eee;
+}
+.dojoxBadge .dojoxBadgeImage {
+ overflow:hidden;
+ margin-left:1px;
+ margin-top:1px;
+ background:#ededed;
+ z-index:90;
+}
+.dojoxBadge .dojoxBadgeSeen {
+ background-color:#dedede;
+}
+.dojoxBadge .dojoxBadgeOver {
+ background-color:green !important;
+}
+.dojoxBadge .dojoxBadgeTop {
+ z-index:99;
+}
diff --git a/js/dojo/dojox/image/resources/Gallery.css b/js/dojo/dojox/image/resources/Gallery.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/Gallery.css
@@ -0,0 +1,5 @@
+
+.imageGalleryWrapper {
+ padding-bottom: 20px;
+ text-align: center;
+}
diff --git a/js/dojo/dojox/image/resources/Lightbox.css b/js/dojo/dojox/image/resources/Lightbox.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/Lightbox.css
@@ -0,0 +1,82 @@
+
+.dijitDialogUnderlay {
+ background-color:#000;
+}
+.dojoxLightbox {
+ position:absolute;
+ z-index:999;
+ overflow:hidden;
+ width:100px;
+ height:100px;
+ border:11px solid #fff;
+ background:#fff url('images/loading.gif') no-repeat center center;
+
+ -webkit-box-shadow: 0px 6px 10px #636363;
+ -webkit-border-radius: 3px;
+ -moz-border-radius:4px;
+ border-radius: 4px;
+}
+.dojoxLightboxContainer {
+ position:absolute;
+ top:0; left:0;
+}
+.dojoxLightboxFooter {
+ padding-bottom:5px;
+ position:relative;
+ bottom:0;
+ left:0;
+ margin-top:8px;
+ color:#333;
+ z-index:1000;
+ font-size:10pt;
+}
+.dojoxLightboxGroupText {
+ color:#666;
+ font-size:8pt;
+}
+.LightboxNext,
+.LightboxPrev,
+.LightboxClose {
+ float:right;
+ width:16px;
+ height:16px;
+ cursor:pointer;
+}
+.nihilo .LightboxClose,
+.tundra .LightboxClose {
+ background:url('images/close.png') no-repeat center center;
+}
+.di_ie6 .nihilo .LightboxClose,
+.dj_ie6 .tundra .LightboxClose {
+ background:url('images/close.gif') no-repeat center center;
+}
+.nihilo .LightboxNext,
+.tundra .LightboxNext {
+ background:url('images/right.png') no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxNext,
+.dj_ie6 .tundra .LightboxNext {
+ background:url('images/right.gif') no-repeat center center;
+}
+.nihilo .LightboxPrev,
+.tundra .LightboxPrev {
+ background:url('images/left.png') no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxPrev,
+.dj_ie6 .tundra .LightboxPrev {
+ background:url('images/left.gif') no-repeat center center;
+}
+.soria .LightboxClose,
+.soria .LightboxNext,
+.soria .LightboxPrev {
+ width:15px;
+ height:15px;
+ background:url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat center center;
+ background-position:-60px;
+}
+.soria .LightboxNext {
+ background-position:-30px 0;
+}
+.soria .LightboxPrev {
+ background-position:0 0;
+}
diff --git a/js/dojo/dojox/image/resources/Magnifier.css b/js/dojo/dojox/image/resources/Magnifier.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/Magnifier.css
@@ -0,0 +1,5 @@
+.glassNode {
+ overflow:hidden;
+ position:absolute;
+ visibility:hidden;
+}
diff --git a/js/dojo/dojox/image/resources/SlideShow.css b/js/dojo/dojox/image/resources/SlideShow.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/SlideShow.css
@@ -0,0 +1,103 @@
+
+.slideShowWrapper {
+ position:relative;
+ background:#fff;
+ padding:8px;
+ border:1px solid #333;
+ padding-bottom:20px;
+ overflow:hidden;
+ -moz-border-radius:3pt;
+ -webkit-border-radius:4pt;
+ -webkit-drop-shadow:#ccc 4pt;
+}
+.slideShowNav {
+ position:absolute;
+ bottom:-18px;
+ left:0px;
+ padding:0px 3px 2px 0px;
+ background-color:#fff;
+ width:100%;
+}
+.slideShowNavWrapper { float:right; }
+.slideShowTitle {
+ float:left;
+ color:#333;
+ font-size:10pt;
+}
+.slideShowTitle .slideShowCounterText {
+ font-size:6pt; color:#666;
+}
+.slideShowHidden {
+ position:absolute;
+ display: none;
+ height: 1px;
+ width: 1px;
+}
+.slideShowImageWrapper {
+ position:relative;
+ text-align: center;
+ margin-top: -42px;
+ float: left;
+ width: 100%;
+}
+.slideShowImageWrapper img {
+ border: 0px none;
+}
+.slideShowNotifier {
+ background-color: red;
+ width: 100px;
+ height: 5px;
+ font-size: 1%;
+}
+.slideShowSlideShow {
+ position:absolute;
+ top:30px;
+ padding: 0 5px;
+ border: 0px;
+ text-decoration: none;
+ color: #2e6ab1;
+}
+.slideShowLoading { background-color: #fad66a; }
+.slideShowLoaded { background-color: transparent; }
+.slideShowCtrlPrev {
+ background-position: -96px 0px;
+ float: left;
+}
+.slideShowCtrlNext {
+ background-position: -144px 0px;
+ float: right;
+}
+.slideShowCtrlPlay {
+ background-position: -190px 0px;
+ position: absolute;
+}
+.slideShowPaused .slideShowCtrlPlay {
+ background-position: -236px 0px;
+ position: absolute;
+}
+.slideShowCtrl span.slideShowCtrlHide {
+ background-image: url("../../../dojo/resources/blank.gif");
+ cursor: auto;
+}
+.slideShowCtrl {
+ height: 50px;
+ width: 100%;
+ position: relative;
+ z-index:999;
+ float: left;
+}
+.slideShowCtrl span {
+ width: 50px;
+ height: 100%;
+ background-image: url("images/buttons.png");
+ cursor: pointer;
+}
+.dj_ie .slideShowCtrl span {
+ background-image: url("images/buttons.gif");
+}
+.dj_ie6 .slideShowPager li.currentpage,
+.dj_ie6 .pagination li.disablepage{
+
+ margin-right: 5px;
+ padding-right: 0;
+}
diff --git a/js/dojo/dojox/image/resources/ThumbnailPicker.css b/js/dojo/dojox/image/resources/ThumbnailPicker.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/image/resources/ThumbnailPicker.css
@@ -0,0 +1,107 @@
+
+.thumbWrapper .thumbNav {
+ background-repeat: no-repeat;
+ background-position: center;
+ padding-top: 1px;
+ width: 30px;
+ height: 100%;
+}
+.thumbOuter {
+ padding-bottom: 2px;
+}
+.thumbOuter.thumbHoriz {
+ width: 500px;
+ height: 85px;
+}
+.thumbOuter.thumbVert {
+ width: 100px;
+ height: 400px;
+}
+.thumbOuter .enabled {
+ background: transparent url("images/buttons.png") no-repeat center center;
+}
+.dj_ie6 .thumbOuter .enabled { background-image: url("images/buttons.gif"); }
+.thumbOuter .thumbNav img {
+ width: 48px;
+ height: 75px;
+}
+.thumbOuter .thumbClickable div {
+ cursor: pointer;
+}
+.thumbOuter .prevHoriz {
+ background-position: -96px 12px;
+ position: relative;
+ float: left;
+ height: 100%;
+}
+.thumbOuter .nextHoriz {
+ background-position: -144px 12px;
+ position: relative;
+ float: right;
+ height: 100%;
+}
+.thumbOuter .prevVert {
+ background-position: 0px 0px;
+ height: 48px;
+ width:48px;
+ margin-left:24px;
+}
+.thumbOuter .nextVert {
+ background-position: -48px 0px;
+ height: 48px;
+ width:48px;
+ margin-left:24px;
+}
+.thumbWrapper img {
+ height: 75px;
+ max-width: 100px;
+ width: expression(this.width > 100 ? 100: true);
+}
+.thumbWrapper .thumbNav .imageGalleryThumb {
+ height: 50px;
+}
+.thumbWrapper .thumbNotifier {
+ background-color: red;
+ width: 0px;
+ margin-left: 2px;
+ height: 5px;
+ font-size: 1%;
+}
+.thumbWrapper .thumbLoaded {
+ background-color: transparent;
+}
+.thumbScroller {
+ overflow-x: hidden;
+ overflow-y: hidden;
+ text-align: center;
+}
+.thumbHoriz .thumbScroller {
+ width: 500px;
+ height: 85px;
+ float: left;
+}
+.thumbVert .thumbScroller {
+ height: 500px;
+ width: 100px;
+}
+.thumbWrapper {
+ float: left;
+}
+.thumbVert .thumbWrapper {
+ width: 100px;
+ height: 10px;
+}
+.thumbHoriz .thumbWapper {
+ height:85px;
+ width: 10px;
+}
+.thumbWrapper.thumbHoriz div {
+ float: left;
+ padding-right: 2px;
+}
+.thumbWrapper.thumbVert {
+ width: 100px;
+}
+.thumbWrapper.thumbVert div {
+ padding-bottom: 2px;
+}
diff --git a/js/dojo/dojox/image/resources/images/close.gif b/js/dojo/dojox/image/resources/images/close.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ca972656cc471dd69e5dfd1a767ce1266bacb6c7
GIT binary patch
literal 936
zc${<hbhEHb6krfw_|5<V5)u-cnwo}&hL)C=US3{NQBlRk#nsi-EiElQJv~#VOqnxh
z&eEkz*REZ=b?er>d-onYcI@1_bJwn2yLa#2^XJdszkmPz`}hB&U=$2Np!k!85tIpZ
zKm;gHFmSXoFmlLvY*=uxnS<3YVuygDGmn6w&jy2o4_Z1T3<Fdu1esg=L=-}HI5a9B
z;pA2c@wkxi#En5%&t=L2heqa^;&EjyJA@orc*KjsS~3}xT3Ps%bUG3iz6@XxP;kmn
uFm7t@)K5IMCV)}nD3_R=$Q%iij9_k|d3<vm9<I6EVj#Jywc0>|!5RR8(+$`F
diff --git a/js/dojo/dojox/image/resources/images/close.png b/js/dojo/dojox/image/resources/images/close.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ac9d10ee4881464b9cb9735a43a0f6a0ee97d68
GIT binary patch
literal 675
zc$@*F0$lxxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!MM*?KRCwB?Q%$Q<Q54-i_2t(yFbhmc
zK}1DDL?x%qM06VHe`qY!L}+Z}z<=OCXX#KRQEcGE2BD_pN017p&qT~`PkZ0)l~>uD
zv|(}Yxo59^*I9cXfd359nQs!rU4#a4g%Bgwh#6wazq5Z8R3aRSMB;U`*{rYE>lMQo
zkH@2YKL5_`cKdPv0soV~$xf&9DG}M3I3AB|I-P!x#bU28*T5_LO}3-aXnbV1#D2eL
zi^XCejYePaM?A&7WHR|iNbL1`43(US{eGVni$yjXjo50nVx3OsD{`EqLXcsI$Kx-x
zTJ3#W3<d)zl}aFy{5onXmExWzlL-_G1<2)cH7>tYDwPj{87iaE_(+iBa5!MI*+98m
zhV6C>7K;Uf!5~*~x7z`VqHm8eRUs4*%VaXe%`@qAI#@23fSmw?!2p++mvA^70L|p~
zrBbPk#y}{roy}&~8jVIvi*C0I>2w<Gc01_xdZ<>b9NA{GafL_$c4R=j3%<atR;x8=
zg91$iv)K%RKmfd6FL*p2&X>t#!jZAqA(P4EG4;o32123GGnBlhR*~Do;gD+^o|&OK
z)@rqApxAsqXSrOih#VswLFmH1-ELp2)oO{$<$8inU!c>RY=TH60+mXIJrk3<RyZ7f
zj`PqV-py%R7Yc<s5@uGb)s6+O$S{&jKsCE;Hv87^_Y?UO=C96OCNY1J9!4S&ug~Z6
zD3wYT4$fyJzpvNpE!_J?=G}H1DahPA2s!`0;cwyY&%~bs3;>_gU-iKn>?r^M002ov
JPDHLkV1k#LHyHo`
diff --git a/js/dojo/dojox/image/resources/images/close_dark.png b/js/dojo/dojox/image/resources/images/close_dark.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..105fe552f7e9dc7a5b0b524f1dec780e27487a67
GIT binary patch
literal 711
zc$@*p0yzDNP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!X-PyuRCwB?Q%kE-Q50TBk57C<S1}@A
z7^DbSr6w0el1P$f>7Ysf;Zn0Z?GMzb(H%5uP&jZVMA}4(CYOr1II$aDrQ_o!*Y~k+
zZS)}FtOJ|1&))0%*0&y8N~hEGKcD>X!C)}3OOh1R>-GDv*KuT8tyT)w7gbe1V*PTv
z-OF7B(r`Eo%Ch`0lgT^@hr=Gf-!B=BMp6`oTCJAaY&PF^I-M8&e*Y6lMhw!!NuU7^
zdA;7Fa=Cn%OeU=^mrH^Qac8w!$>;M)fk5EqVzIajlJAqrq-{2v=YoJ`Bl6=?sdN|&
z2BlrOA{{aq4CL{6?9=J=R=3-&n@pyky7gr&o6SDmfDaB1D4);MMnNi-qC%lSI-QO<
zrD!x7#Qr{1TLl4r_CukNdlL=PI1=S@If}(%ggdg?Y?=~>!$I+Q{1JYyZV0X+e@%L=
zRuhF|5++zKmsGFU37rsowib)UuMu#oIO_Iyc6O%i$Kx@faD)Pi#RLedhZ<QB;9!VC
zY5>kTkw^&V(P%_=yPb-~BBAm$pU(vW?nbbEL4e`-dU|@QZshIl?FrjxG^kpw(&go)
zs0&*rWxsa2-2kpFuN8bgIXQV3iA3%oH>y-Bv_2Pr<Ktrip3P<)jKM0}_!=%fF$a+K
z2Pt%5?_t8MEEByJAYNPpCSov(yTU|12iYqO+l3&&K&Wu)oS&b61MoKfUED5?$Ycy;
z*+_GSw4R|BFP%>357E}`*T{nbU>p_BW2hcL%?(Vb0V;l@EAM-~-Ww2oz`3GL=&t9C
t$6^G@6>PcJMl5Ch3NN@c+rEDV7yyuMRhp_X@4Wy3002ovPDHLkV1lm)LPr1q
diff --git a/js/dojo/dojox/image/resources/images/left.gif b/js/dojo/dojox/image/resources/images/left.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8db89c457ef4ba65188d902f007725b967a8e98f
GIT binary patch
literal 921
zc${<hbhEHb6krfw_|5<V5)u-cnwo}&hL)C=US3{NQBlRk#nsi-EiElQJv~#VOqnxh
z&eEkz*REZ=b?er>d-t9@ckbG?YxnNmd;k9Z_wV2TkAhJ!WP##O7DiAe&;b#kJi)+G
z#=yuS<FR3ZBZH8TnvI1)A}hCun3PY(!bL|rgmtr8G#VGQ^oq)atT9;l@OU?mP|uN$
z4~a)PxrA11321!kIm=MkU_s<&WhX8%Rh<NdP0M^aq%<8W0uHV?Kh0BFqBbCasdbsJ
ZW=8LaEe~1NChYbL(U_)qxPgJe8UU3n4xj)4
diff --git a/js/dojo/dojox/image/resources/images/left.png b/js/dojo/dojox/image/resources/images/left.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0848dba9d9448d4f5f14a9a913c3c5d55b36c7e1
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwB?Q%#E+K@e@nmFT!@VAc;z
zLIgo13_-*!>osD)96SjD{SP^dISILkc<?U>f`_O#k=@fC^%6$25)mOGU~ngX&X^tT
zR1MRU?8fXR1rMsb>s7z1t|sI^&9Z0j0B|250FD4wfC`WSQ^TkKO6UZLrBdl#zu%Ws
zRaGe1WHR~IYPHT{u~-Vuy~ZVflOvJHb0pF|w%hIKbUOV}EEeBF>?1?j4cTI^*ZWBC
zFiq3wVzJQj`TQHBMAMGT<?{P|r1g4DYqgs0Z?{{jC<+}8hhKmbK^2^lKu9DKFK*Wa
zl1ZgfA)xGc*DV&}^?Dx`3Wb-jbg*U|1_FV{EC_BQ<MEg@n@uvG&rLFjFcAucp28N-
z6j<$cJI?|)o6QZf&*w9V&`f>LX0zE*5KHh=mgOs!faiIVOeTrj?IwP|pLjeTos7yb
z0s2thSLCq-a<|*<;Q=#I6iFtNA;DmfI2;ZFFQCInw5?XFEeKniGmuWFU#(Uv6`u;b
zjX-}ko6%0ELzl}Xg_87jqtQ4AP5?__!=McYgDaQIbr6k4PvI60<svwaBZ459Js6Ef
zm)UIgHO#{hd4Eom+HSWcAj#oy_zB29V)Y_G&2_zA|By<hko*bam3^PdYJ8*zxm@lf
z9*;kBI-Q3wIG=%hAxY9DoPEdU-Sr#Mu(|hePz--#{KD(ofxiS80PJ*YN_~w{DF6Tf
M07*qoM6N<$f&@GhQ2+n{
diff --git a/js/dojo/dojox/image/resources/images/right.gif b/js/dojo/dojox/image/resources/images/right.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..adfc44373be71e4ddaa1ae09b9a654dd9fc73dbc
GIT binary patch
literal 920
zc${<hbhEHb6krfw_|5<V5)u-cnwo}&hL)C=US3{NQBlRk#nsi-EiElQJv~#VOqnxh
z&eEkz*REZ=b?er>d-onYcI?`<YxnNmd;a|S`}gm^fB*h}6pVtQ2^4>_FoH6H4u}Bd
z2?mZ*21X7Uj|~eP8-;}ARAyW_#L6Y0BI8rBaM4jNA#Se?Cq6Q{waLg@tjS1Z^62K2
z2vLYkT+lL6R9Gdz;9yg0KZ9A(l${G2edh>;ElOc%Jmfpa(o(M>;9<J=bc2~zXJ2eu
cd3LeH%3X5;7G{U9WfSg-^_Z66z`$S)0FCMoTmS$7
diff --git a/js/dojo/dojox/image/resources/images/right.png b/js/dojo/dojox/image/resources/images/right.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7cab686ec47e9a7695056874016e55895aff2207
GIT binary patch
literal 621
zc$@)k0+RiSP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!4@pEpRCwB?Q%!3cQ53z#(P~Vrq~Ic!
z3Zh5}MZ`!2R}l(!;kKavp=+@#q5D!7{sR#N7uBUmU3De638Rfv-J}LAX6olmJEO1n
z4l_2j(`<U-z<ck0ymQaH58yw|WN^kI9wJT<#|Se*LI{Ydwr2k-=s=tm3WayQUXPa~
zNn~h~$>gTdXnc%BB1!bSwM+g^4uwJ&l*kNhyWO(sboxD?&%edk#~QOgXrFbv-Ai_l
zDT=}ti-nTSX5VNn?(9*qSbV>qP_0(kdcEH5H=7L;MUf2#gKNwQ5sL$@z)2#Jc(LCT
zGJ<ls3`qUA>LwGo-EL1VmwSm@yI$bP>-9b{5@tLeL#b4P;cy7p0w56;fk5CHx)1dN
zW}D4+X!y=}qt$AKcDoI-ECY(Eo?9#y8@crYKLtU!H7eloc);)XLp&Y_j^oq<!~om+
zN_lz#q0{Mf$#K_QE*JQGK8Qx6)c39h6mwIlR2mqv-pxQNm3p;Wtt5IXQk&3fwb*<<
zXE;!7xm>F2*=)w@^?D0)ywrj|3`)P>zjZpDTsRzlj<+0O0hK;!Kx<vR(P(s)PN!ev
zJPauB?leiwW|PNYAs7rkwcG8-dcOo@Cf91U56NVbl0Rd-X!M!P+DAIgWHQlMEOzd2
zIF4{|zF_hvp69R7_l?B6?>CZ>xDRMhwDk||7s~sAzXTWnkPuaW|GuFO00000NkvXX
Hu0mjf&D9ve
diff --git a/js/dojo/dojox/image/resources/images/warning.png b/js/dojo/dojox/image/resources/images/warning.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a52a55f43f57307ace3ed79c6e3e723e57767733
GIT binary patch
literal 995
zc%17D@N?(olHy`uVBq!ia0y~yVAKI&4kn<;H+e}VASGGi8c`CQpH@<ySd_}(n3A8A
zs^FQMn4TJxnwU~qcrw+7fq}Wz)5S5Q;?|p+hWgBj5(f&~=hZR4%}`UDe2_iEzUkzV
z3oQ{kb_~(kn<RbGE}qSr<k2EITVi6!s*k%~$69q9QMmqW(tZ82OTYK^|FL~*%BAST
zI9a$;z=cDJWgxL&*C2Mn5*EE%r%!I(S)47Rlw!o1_Oth1fZJs^1~bL~QO*1BB?%j?
zt6vm2XU~~~YAH$C2HFNK`%)v~HoFCcH81~AIe#zj-n@`V6Crtb$=6ao+&$0S+ZE@S
zMnAu)FLt9vL~qYqxAozQaVOs2_h0<axg+1_m|BWV_J)n6lf)y|K3{&ds%Un}jT<%_
zcygV(%!_9N1^3##<5ym@?6slg%)Q3*E`2Q7l5?Le`uW1^l5OGM_9u^2pZvPIe#X2S
zo8{L}Rei5GoE$WJ!l8Y<Y5p$ltpBFS$IY7L>yemU@Y{;#R&euD`+qBnSBtx6Ph05g
q!6;i6#&b|@WJNEDIQ6UU0fuD{PTz53a+d|>S_V&7KbLh*2~7ZKa`o{5
diff --git a/js/dojo/dojox/io/OAuth.js b/js/dojo/dojox/io/OAuth.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/OAuth.js
@@ -0,0 +1,174 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.OAuth"]){
+dojo._hasResource["dojox.io.OAuth"]=true;
+dojo.provide("dojox.io.OAuth");
+dojo.require("dojox.encoding.digests.SHA1");
+dojox.io.OAuth=new (function(){
+var _1=this.encode=function(s){
+if(!s){
+return "";
+}
+return encodeURIComponent(s).replace(/\!/g,"%21").replace(/\*/g,"%2A").replace(/\'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29");
+};
+var _2=this.decode=function(_3){
+var a=[],_4=_3.split("&");
+for(var i=0,l=_4.length;i<l;i++){
+var _5=_4[i];
+if(_4[i]==""){
+continue;
+}
+if(_4[i].indexOf("=")>-1){
+var _6=_4[i].split("=");
+a.push([decodeURIComponent(_6[0]),decodeURIComponent(_6[1])]);
+}else{
+a.push([decodeURIComponent(_4[i]),null]);
+}
+}
+return a;
+};
+function _7(_8){
+var _9=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],_a=/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,_b=_a.exec(_8),_c={},i=_9.length;
+while(i--){
+_c[_9[i]]=_b[i]||"";
+}
+var p=_c.protocol.toLowerCase(),a=_c.authority.toLowerCase(),b=(p=="http"&&_c.port==80)||(p=="https"&&_c.port==443);
+if(b){
+if(a.lastIndexOf(":")>-1){
+a=a.substring(0,a.lastIndexOf(":"));
+}
+}
+var _d=_c.path||"/";
+_c.url=p+"://"+a+_d;
+return _c;
+};
+var _e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+function _f(_10){
+var s="",tl=_e.length;
+for(var i=0;i<_10;i++){
+s+=_e.charAt(Math.floor(Math.random()*tl));
+}
+return s;
+};
+function _11(){
+return Math.floor(new Date().valueOf()/1000)-2;
+};
+function _12(_13,key,_14){
+if(_14&&_14!="PLAINTEXT"&&_14!="HMAC-SHA1"){
+throw new Error("dojox.io.OAuth: the only supported signature encodings are PLAINTEXT and HMAC-SHA1.");
+}
+if(_14=="PLAINTEXT"){
+return key;
+}else{
+return dojox.encoding.digests.SHA1._hmac(_13,key);
+}
+};
+function key(_15){
+return _1(_15.consumer.secret)+"&"+(_15.token&&_15.token.secret?_1(_15.token.secret):"");
+};
+function _16(_17,oaa){
+var o={oauth_consumer_key:oaa.consumer.key,oauth_nonce:_f(16),oauth_signature_method:oaa.sig_method||"HMAC-SHA1",oauth_timestamp:_11(),oauth_version:"1.0"};
+if(oaa.token){
+o.oauth_token=oaa.token.key;
+}
+_17.content=dojo.mixin(_17.content||{},o);
+};
+function _18(_19){
+var _1a=[{}],_1b;
+if(_19.form){
+if(!_19.content){
+_19.content={};
+}
+var _1c=dojo.byId(_19.form);
+var _1d=_1c.getAttributeNode("action");
+_19.url=_19.url||(_1d?_1d.value:null);
+_1b=dojo.formToObject(_1c);
+delete _19.form;
+}
+if(_1b){
+_1a.push(_1b);
+}
+if(_19.content){
+_1a.push(_19.content);
+}
+var map=_7(_19.url);
+if(map.query){
+var tmp=dojo.queryToObject(map.query);
+for(var p in tmp){
+tmp[p]=encodeURIComponent(tmp[p]);
+}
+_1a.push(tmp);
+}
+_19._url=map.url;
+var a=[];
+for(var i=0,l=_1a.length;i<l;i++){
+var _1e=_1a[i];
+for(var p in _1e){
+if(dojo.isArray(_1e[p])){
+for(var j=0,jl=_1e.length;j<jl;j++){
+a.push([p,_1e[j]]);
+}
+}else{
+a.push([p,_1e[p]]);
+}
+}
+}
+_19._parameters=a;
+return _19;
+};
+function _1f(_20,_21,oaa){
+_16(_21,oaa);
+_18(_21);
+var a=_21._parameters;
+a.sort(function(a,b){
+if(a[0]>b[0]){
+return 1;
+}
+if(a[0]<b[0]){
+return -1;
+}
+if(a[1]>b[1]){
+return 1;
+}
+if(a[1]<b[1]){
+return -1;
+}
+return 0;
+});
+var s=dojo.map(a,function(_22){
+return _1(_22[0])+"="+_1(_22[1]||"");
+}).join("&");
+var _23=_20.toUpperCase()+"&"+_1(_21._url)+"&"+_1(s);
+return _23;
+};
+function _24(_25,_26,oaa){
+var k=key(oaa),_27=_1f(_25,_26,oaa),s=_12(_27,k,oaa.sig_method||"HMAC-SHA1");
+_26.content["oauth_signature"]=s;
+return _26;
+};
+this.sign=function(_28,_29,oaa){
+return _24(_28,_29,oaa);
+};
+this.xhr=function(_2a,_2b,oaa,_2c){
+_24(_2a,_2b,oaa);
+return dojo.xhr(_2a,_2b,_2c);
+};
+this.xhrGet=function(_2d,oaa){
+return this.xhr("GET",_2d,oaa);
+};
+this.xhrPost=this.xhrRawPost=function(_2e,oaa){
+return this.xhr("POST",_2e,oaa,true);
+};
+this.xhrPut=this.xhrRawPut=function(_2f,oaa){
+return this.xhr("PUT",_2f,oaa,true);
+};
+this.xhrDelete=function(_30,oaa){
+return this.xhr("DELETE",_30,oaa);
+};
+})();
+}
diff --git a/js/dojo/dojox/io/httpParse.js b/js/dojo/dojox/io/httpParse.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/httpParse.js
@@ -0,0 +1,66 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.httpParse"]){
+dojo._hasResource["dojox.io.httpParse"]=true;
+dojo.provide("dojox.io.httpParse");
+dojox.io.httpParse=function(_1,_2,_3){
+var _4=[];
+var _5=_1.length;
+do{
+var _6={};
+var _7=_1.match(/(\n*[^\n]+)/);
+if(!_7){
+return null;
+}
+_1=_1.substring(_7[0].length+1);
+_7=_7[1];
+var _8=_1.match(/([^\n]+\n)*/)[0];
+_1=_1.substring(_8.length);
+var _9=_1.substring(0,1);
+_1=_1.substring(1);
+_8=(_2||"")+_8;
+var _a=_8;
+_8=_8.match(/[^:\n]+:[^\n]+\n/g);
+for(var j=0;j<_8.length;j++){
+var _b=_8[j].indexOf(":");
+_6[_8[j].substring(0,_b)]=_8[j].substring(_b+1).replace(/(^[ \r\n]*)|([ \r\n]*)$/g,"");
+}
+_7=_7.split(" ");
+var _c={status:parseInt(_7[1],10),statusText:_7[2],readyState:3,getAllResponseHeaders:function(){
+return _a;
+},getResponseHeader:function(_d){
+return _6[_d];
+}};
+var _e=_6["Content-Length"];
+var _f;
+if(_e){
+if(_e<=_1.length){
+_f=_1.substring(0,_e);
+}else{
+return _4;
+}
+}else{
+if((_f=_1.match(/(.*)HTTP\/\d\.\d \d\d\d[\w\s]*\n/))){
+_f=_f[0];
+}else{
+if(!_3||_9=="\n"){
+_f=_1;
+}else{
+return _4;
+}
+}
+}
+_4.push(_c);
+_1=_1.substring(_f.length);
+_c.responseText=_f;
+_c.readyState=4;
+_c._lastIndex=_5-_1.length;
+}while(_1);
+return _4;
+};
+}
diff --git a/js/dojo/dojox/io/scriptFrame.js b/js/dojo/dojox/io/scriptFrame.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/scriptFrame.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.scriptFrame"]){
+dojo._hasResource["dojox.io.scriptFrame"]=true;
+dojo.provide("dojox.io.scriptFrame");
+dojo.require("dojo.io.script");
+dojo.require("dojo.io.iframe");
+(function(){
+var _1=dojo.io.script;
+dojox.io.scriptFrame={_waiters:{},_loadedIds:{},_getWaiters:function(_2){
+return this._waiters[_2]||(this._waiters[_2]=[]);
+},_fixAttachUrl:function(_3){
+},_loaded:function(_4){
+var _5=this._getWaiters(_4);
+this._loadedIds[_4]=true;
+this._waiters[_4]=null;
+for(var i=0;i<_5.length;i++){
+var _6=_5[i];
+_6.frameDoc=dojo.io.iframe.doc(dojo.byId(_4));
+_1.attach(_6.id,_6.url,_6.frameDoc);
+}
+}};
+var _7=_1._canAttach;
+var _8=dojox.io.scriptFrame;
+_1._canAttach=function(_9){
+var _a=_9.args.frameDoc;
+if(_a&&dojo.isString(_a)){
+var _b=dojo.byId(_a);
+var _c=_8._getWaiters(_a);
+if(!_b){
+_c.push(_9);
+dojo.io.iframe.create(_a,dojox._scopeName+".io.scriptFrame._loaded('"+_a+"');");
+}else{
+if(_8._loadedIds[_a]){
+_9.frameDoc=dojo.io.iframe.doc(_b);
+this.attach(_9.id,_9.url,_9.frameDoc);
+}else{
+_c.push(_9);
+}
+}
+return false;
+}else{
+return _7.apply(this,arguments);
+}
+};
+})();
+}
diff --git a/js/dojo/dojox/io/windowName.js b/js/dojo/dojox/io/windowName.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/windowName.js
@@ -0,0 +1,156 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.windowName"]){
+dojo._hasResource["dojox.io.windowName"]=true;
+dojo.provide("dojox.io.windowName");
+dojox.io.windowName={send:function(_1,_2){
+_2.url+=(_2.url.match(/\?/)?"&":"?")+"windowname="+(_2.authElement?"auth":true);
+var _3=_2.authElement;
+var _4=function(_5){
+try{
+var _6=_7.ioArgs.frame.contentWindow.document;
+_6.write(" ");
+_6.close();
+}
+catch(e){
+}
+(_3||dojo.body()).removeChild(_7.ioArgs.outerFrame);
+return _5;
+};
+var _7=dojo._ioSetArgs(_2,_4,_4,_4);
+if(_2.timeout){
+setTimeout(function(){
+if(_7.fired==-1){
+_7.callback(new Error("Timeout"));
+}
+},_2.timeout);
+}
+var _8=dojox.io.windowName;
+if(dojo.body()){
+_8._send(_7,_1,_3,_2.onAuthLoad);
+}else{
+dojo.addOnLoad(function(){
+_8._send(_7,_1,_3,_2.onAuthLoad);
+});
+}
+return _7;
+},_send:function(_9,_a,_b,_c){
+var _d=_9.ioArgs;
+var _e=dojox.io.windowName._frameNum++;
+var _f=(dojo.config.dojoBlankHtmlUrl||dojo.config.dojoCallbackUrl||dojo.moduleUrl("dojo","resources/blank.html"))+"#"+_e;
+var _10=new dojo._Url(window.location,_f);
+var doc=dojo.doc;
+var _11=_b||dojo.body();
+function _12(_13){
+_13.style.width="100%";
+_13.style.height="100%";
+_13.style.border="0px";
+};
+if(dojo.isMoz&&![].reduce){
+var _14=doc.createElement("iframe");
+_12(_14);
+if(!_b){
+_14.style.display="none";
+}
+_11.appendChild(_14);
+var _15=_14.contentWindow;
+doc=_15.document;
+doc.write("<html><body margin='0px'><iframe style='width:100%;height:100%;border:0px' name='protectedFrame'></iframe></body></html>");
+doc.close();
+var _16=_15[0];
+_15.__defineGetter__(0,function(){
+});
+_15.__defineGetter__("protectedFrame",function(){
+});
+doc=_16.document;
+doc.write("<html><body margin='0px'></body></html>");
+doc.close();
+_11=doc.body;
+}
+var _17=_d.frame=_17=doc.createElement(dojo.isIE?"<iframe name=\""+_10+"\" onload=\"dojox.io.windowName["+_e+"]()\">":"iframe");
+_12(_17);
+_d.outerFrame=_14=_14||_17;
+if(!_b){
+_14.style.display="none";
+}
+var _18=0;
+function _19(){
+var _1a=_17.contentWindow.name;
+if(typeof _1a=="string"){
+if(_1a!=_10){
+_18=2;
+_9.ioArgs.hash=_17.contentWindow.location.hash;
+_9.callback(_1a);
+}
+}
+};
+dojox.io.windowName[_e]=_17.onload=function(){
+try{
+if(!dojo.isMoz&&_17.contentWindow.location=="about:blank"){
+return;
+}
+}
+catch(e){
+}
+if(!_18){
+_18=1;
+if(_b){
+if(_c){
+_c();
+}
+}else{
+_17.contentWindow.location=_f;
+}
+}
+try{
+if(_18<2){
+_19();
+}
+}
+catch(e){
+}
+};
+_17.name=_10;
+if(_a.match(/GET/i)){
+dojo._ioAddQueryToUrl(_d);
+_17.src=_d.url;
+_11.appendChild(_17);
+if(_17.contentWindow){
+_17.contentWindow.location.replace(_d.url);
+}
+}else{
+if(_a.match(/POST/i)){
+_11.appendChild(_17);
+var _1b=dojo.doc.createElement("form");
+dojo.body().appendChild(_1b);
+var _1c=dojo.queryToObject(_d.query);
+for(var i in _1c){
+var _1d=_1c[i];
+_1d=_1d instanceof Array?_1d:[_1d];
+for(var j=0;j<_1d.length;j++){
+var _1e=doc.createElement("input");
+_1e.type="hidden";
+_1e.name=i;
+_1e.value=_1d[j];
+_1b.appendChild(_1e);
+}
+}
+_1b.method="POST";
+_1b.action=_d.url;
+_1b.target=_10;
+_1b.submit();
+_1b.parentNode.removeChild(_1b);
+}else{
+throw new Error("Method "+_a+" not supported with the windowName transport");
+}
+}
+if(_17.contentWindow){
+_17.contentWindow.name=_10;
+}
+},_frameNum:0};
+}
diff --git a/js/dojo/dojox/io/xhrPlugins.js b/js/dojo/dojox/io/xhrPlugins.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/xhrPlugins.js
@@ -0,0 +1,116 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrPlugins"]){
+dojo._hasResource["dojox.io.xhrPlugins"]=true;
+dojo.provide("dojox.io.xhrPlugins");
+dojo.require("dojo.AdapterRegistry");
+dojo.require("dojo._base.xhr");
+(function(){
+var _1;
+var _2;
+function _3(){
+return _2=dojox.io.xhrPlugins.plainXhr=_2||dojo._defaultXhr||dojo.xhr;
+};
+dojox.io.xhrPlugins.register=function(){
+var _4=_3();
+if(!_1){
+_1=new dojo.AdapterRegistry();
+dojo[dojo._defaultXhr?"_defaultXhr":"xhr"]=function(_5,_6,_7){
+return _1.match.apply(_1,arguments);
+};
+_1.register("xhr",function(_8,_9){
+if(!_9.url.match(/^\w*:\/\//)){
+return true;
+}
+var _a=window.location.href.match(/^.*?\/\/.*?\//)[0];
+return _9.url.substring(0,_a.length)==_a;
+},_4);
+}
+return _1.register.apply(_1,arguments);
+};
+dojox.io.xhrPlugins.addProxy=function(_b){
+var _c=_3();
+dojox.io.xhrPlugins.register("proxy",function(_d,_e){
+return true;
+},function(_f,_10,_11){
+_10.url=_b+encodeURIComponent(_10.url);
+return _c.call(dojo,_f,_10,_11);
+});
+};
+var _12;
+dojox.io.xhrPlugins.addCrossSiteXhr=function(url,_13){
+var _14=_3();
+if(_12===undefined&&window.XMLHttpRequest){
+try{
+var xhr=new XMLHttpRequest();
+xhr.open("GET","http://testing-cross-domain-capability.com",true);
+_12=true;
+dojo.config.noRequestedWithHeaders=true;
+}
+catch(e){
+_12=false;
+}
+}
+dojox.io.xhrPlugins.register("cs-xhr",function(_15,_16){
+return (_12||(window.XDomainRequest&&_16.sync!==true&&(_15=="GET"||_15=="POST"||_13)))&&(_16.url.substring(0,url.length)==url);
+},_12?_14:function(){
+var _17=dojo._xhrObj;
+dojo._xhrObj=function(){
+var xdr=new XDomainRequest();
+xdr.readyState=1;
+xdr.setRequestHeader=function(){
+};
+xdr.getResponseHeader=function(_18){
+return _18=="Content-Type"?xdr.contentType:null;
+};
+function _19(_1a,_1b){
+return function(){
+xdr.readyState=_1b;
+xdr.status=_1a;
+};
+};
+xdr.onload=_19(200,4);
+xdr.onprogress=_19(200,3);
+xdr.onerror=_19(404,4);
+return xdr;
+};
+var dfd=(_13?_13(_3()):_3()).apply(dojo,arguments);
+dojo._xhrObj=_17;
+return dfd;
+});
+};
+dojox.io.xhrPlugins.fullHttpAdapter=function(_1c,_1d){
+return function(_1e,_1f,_20){
+var _21={};
+var _22={};
+if(_1e!="GET"){
+_22["http-method"]=_1e;
+if(_1f.putData&&_1d){
+_21["http-content"]=_1f.putData;
+delete _1f.putData;
+_20=false;
+}
+if(_1f.postData&&_1d){
+_21["http-content"]=_1f.postData;
+delete _1f.postData;
+_20=false;
+}
+_1e="POST";
+}
+for(var i in _1f.headers){
+var _23=i.match(/^X-/)?i.substring(2).replace(/-/g,"_").toLowerCase():("http-"+i);
+_22[_23]=_1f.headers[i];
+}
+_1f.query=dojo.objectToQuery(_22);
+dojo._ioAddQueryToUrl(_1f);
+_1f.content=dojo.mixin(_1f.content||{},_21);
+return _1c.call(dojo,_1e,_1f,_20);
+};
+};
+})();
+}
diff --git a/js/dojo/dojox/io/xhrScriptPlugin.js b/js/dojo/dojox/io/xhrScriptPlugin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/xhrScriptPlugin.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrScriptPlugin"]){
+dojo._hasResource["dojox.io.xhrScriptPlugin"]=true;
+dojo.provide("dojox.io.xhrScriptPlugin");
+dojo.require("dojox.io.xhrPlugins");
+dojo.require("dojo.io.script");
+dojo.require("dojox.io.scriptFrame");
+dojox.io.xhrScriptPlugin=function(_1,_2,_3){
+dojox.io.xhrPlugins.register("script",function(_4,_5){
+return _5.sync!==true&&(_4=="GET"||_3)&&(_5.url.substring(0,_1.length)==_1);
+},function(_6,_7,_8){
+var _9=function(){
+_7.callbackParamName=_2;
+if(dojo.body()){
+_7.frameDoc="frame"+Math.random();
+}
+return dojo.io.script.get(_7);
+};
+return (_3?_3(_9,true):_9)(_6,_7,_8);
+});
+};
+}
diff --git a/js/dojo/dojox/io/xhrWindowNamePlugin.js b/js/dojo/dojox/io/xhrWindowNamePlugin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/io/xhrWindowNamePlugin.js
@@ -0,0 +1,43 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrWindowNamePlugin"]){
+dojo._hasResource["dojox.io.xhrWindowNamePlugin"]=true;
+dojo.provide("dojox.io.xhrWindowNamePlugin");
+dojo.require("dojox.io.xhrPlugins");
+dojo.require("dojox.io.windowName");
+dojo.require("dojox.io.httpParse");
+dojo.require("dojox.secure.capability");
+dojox.io.xhrWindowNamePlugin=function(_1,_2,_3){
+dojox.io.xhrPlugins.register("windowName",function(_4,_5){
+return _5.sync!==true&&(_4=="GET"||_4=="POST"||_2)&&(_5.url.substring(0,_1.length)==_1);
+},function(_6,_7,_8){
+var _9=dojox.io.windowName.send;
+var _a=_7.load;
+_7.load=undefined;
+var _b=(_2?_2(_9,true):_9)(_6,_7,_8);
+_b.addCallback(function(_c){
+var _d=_b.ioArgs;
+_d.xhr={getResponseHeader:function(_e){
+return dojo.queryToObject(_d.hash.match(/[^#]*$/)[0])[_e];
+}};
+if(_d.handleAs=="json"){
+if(!_3){
+dojox.secure.capability.validate(_c,["Date"],{});
+}
+return dojo.fromJson(_c);
+}
+return dojo._contentHandlers[_d.handleAs||"text"]({responseText:_c});
+});
+_7.load=_a;
+if(_a){
+_b.addCallback(_a);
+}
+return _b;
+});
+};
+}
diff --git a/js/dojo/dojox/jq.js b/js/dojo/dojox/jq.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/jq.js
@@ -0,0 +1,1296 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jq"]){
+dojo._hasResource["dojox.jq"]=true;
+dojo.provide("dojox.jq");
+dojo.require("dojo.NodeList-traverse");
+dojo.require("dojo.NodeList-manipulate");
+dojo.require("dojo.io.script");
+(function(){
+dojo.config.ioPublish=true;
+var _1="|img|meta|hr|br|input|";
+function _2(_3,_4){
+_3+="";
+_3=_3.replace(/<\s*(\w+)([^\/\>]*)\/\s*>/g,function(_5,_6,_7){
+if(_1.indexOf("|"+_6+"|")==-1){
+return "<"+_6+_7+"></"+_6+">";
+}else{
+return _5;
+}
+});
+return dojo._toDom(_3,_4);
+};
+function _8(_9){
+var _a=_9.indexOf("-");
+if(_a!=-1){
+if(_a==0){
+_9=_9.substring(1);
+}
+_9=_9.replace(/-(\w)/g,function(_b,_c){
+return _c.toUpperCase();
+});
+}
+return _9;
+};
+var _d=dojo.global.$;
+var _e=dojo.global.jQuery;
+var $=dojo.global.$=dojo.global.jQuery=function(){
+var _f=arguments[0];
+if(!_f){
+return $._wrap([],null,$);
+}else{
+if(dojo.isString(_f)){
+if(_f.charAt(0)=="<"){
+_f=_2(_f);
+if(_f.nodeType==11){
+_f=_f.childNodes;
+}else{
+return $._wrap([_f],null,$);
+}
+}else{
+var _10=dojo._NodeListCtor;
+dojo._NodeListCtor=$;
+var _11=arguments[1];
+if(_11&&_11._is$){
+_11=_11[0];
+}else{
+if(dojo.isString(_11)){
+_11=dojo.query(_11)[0];
+}
+}
+var nl=dojo.query.call(this,_f,_11);
+dojo._NodeListCtor=_10;
+return nl;
+}
+}else{
+if(dojo.isFunction(_f)){
+$.ready(_f);
+return $;
+}else{
+if(_f==document||_f==window){
+return $._wrap([_f],null,$);
+}else{
+if(dojo.isArray(_f)){
+var ary=[];
+for(var i=0;i<_f.length;i++){
+if(dojo.indexOf(ary,_f[i])==-1){
+ary.push(_f[i]);
+}
+}
+return $._wrap(_f,null,$);
+}else{
+if("nodeType" in _f){
+return $._wrap([_f],null,$);
+}
+}
+}
+}
+}
+}
+return $._wrap(dojo._toArray(_f),null,$);
+};
+var _12=dojo.NodeList.prototype;
+var f=$.fn=$.prototype=dojo.delegate(_12);
+$._wrap=dojo.NodeList._wrap;
+var _13=/^H\d/i;
+var _14=dojo.query.pseudos;
+dojo.mixin(_14,{has:function(_15,_16){
+return function(_17){
+return $(_16,_17).length;
+};
+},visible:function(_18,_19){
+return function(_1a){
+return dojo.style(_1a,"visible")!="hidden"&&dojo.style(_1a,"display")!="none";
+};
+},hidden:function(_1b,_1c){
+return function(_1d){
+return _1d.type=="hidden"||dojo.style(_1d,"visible")=="hidden"||dojo.style(_1d,"display")=="none";
+};
+},selected:function(_1e,_1f){
+return function(_20){
+return _20.selected;
+};
+},checked:function(_21,_22){
+return function(_23){
+return _23.nodeName.toUpperCase()=="INPUT"&&_23.checked;
+};
+},disabled:function(_24,_25){
+return function(_26){
+return _26.getAttribute("disabled");
+};
+},enabled:function(_27,_28){
+return function(_29){
+return !_29.getAttribute("disabled");
+};
+},input:function(_2a,_2b){
+return function(_2c){
+var n=_2c.nodeName.toUpperCase();
+return n=="INPUT"||n=="SELECT"||n=="TEXTAREA"||n=="BUTTON";
+};
+},button:function(_2d,_2e){
+return function(_2f){
+return (_2f.nodeName.toUpperCase()=="INPUT"&&_2f.type=="button")||_2f.nodeName.toUpperCase()=="BUTTON";
+};
+},header:function(_30,_31){
+return function(_32){
+return _32.nodeName.match(_13);
+};
+}});
+var _33={};
+dojo.forEach(["text","password","radio","checkbox","submit","image","reset","file"],function(_34){
+_33[_34]=function(_35,_36){
+return function(_37){
+return _37.nodeName.toUpperCase()=="INPUT"&&_37.type==_34;
+};
+};
+});
+dojo.mixin(_14,_33);
+$.browser={mozilla:dojo.isMoz,msie:dojo.isIE,opera:dojo.isOpera,safari:dojo.isSafari};
+$.browser.version=dojo.isIE||dojo.isMoz||dojo.isOpera||dojo.isSafari||dojo.isWebKit;
+$.ready=$.fn.ready=function(_38){
+dojo.addOnLoad(dojo.hitch(null,_38,$));
+return this;
+};
+f._is$=true;
+f.size=function(){
+return this.length;
+};
+$.prop=function(_39,_3a){
+if(dojo.isFunction(_3a)){
+return _3a.call(_39);
+}else{
+return _3a;
+}
+};
+$.className={add:dojo.addClass,remove:dojo.removeClass,has:dojo.hasClass};
+$.makeArray=function(_3b){
+if(typeof _3b=="undefined"){
+return [];
+}else{
+if(_3b.length&&!dojo.isString(_3b)&&!("location" in _3b)){
+return dojo._toArray(_3b);
+}else{
+return [_3b];
+}
+}
+};
+$.merge=function(_3c,_3d){
+var _3e=[_3c.length,0];
+_3e=_3e.concat(_3d);
+_3c.splice.apply(_3c,_3e);
+return _3c;
+};
+$.each=function(_3f,cb){
+if(dojo.isArrayLike(_3f)){
+for(var i=0;i<_3f.length;i++){
+if(cb.call(_3f[i],i,_3f[i])===false){
+break;
+}
+}
+}else{
+if(dojo.isObject(_3f)){
+for(var _40 in _3f){
+if(cb.call(_3f[_40],_40,_3f[_40])===false){
+break;
+}
+}
+}
+}
+return this;
+};
+f.each=function(cb){
+return $.each.call(this,this,cb);
+};
+f.eq=function(){
+var nl=$();
+dojo.forEach(arguments,function(i){
+if(this[i]){
+nl.push(this[i]);
+}
+},this);
+return nl;
+};
+f.get=function(_41){
+if(_41||_41==0){
+return this[_41];
+}
+return this;
+};
+f.index=function(arg){
+if(arg._is$){
+arg=arg[0];
+}
+return this.indexOf(arg);
+};
+var _42=[];
+var _43=0;
+var _44=dojo._scopeName+"DataId";
+var _45=function(_46){
+var id=_46.getAttribute(_44);
+if(!id){
+id=_43++;
+_46.setAttribute(_44,id);
+}
+};
+var _47=function(_48){
+var _49={};
+if(_48.nodeType==1){
+var id=_45(_48);
+_49=_42[id];
+if(!_49){
+_49=_42[id]={};
+}
+}
+return _49;
+};
+$.data=function(_4a,_4b,_4c){
+var _4d=null;
+if(_4b=="events"){
+_4d=_4e[_4a.getAttribute(_4f)];
+var _50=true;
+if(_4d){
+for(var _51 in _4d){
+_50=false;
+break;
+}
+}
+return _50?null:_4d;
+}
+var _52=_47(_4a);
+if(typeof _4c!="undefined"){
+_52[_4b]=_4c;
+}else{
+_4d=_52[_4b];
+}
+return _4c?this:_4d;
+};
+$.removeData=function(_53,_54){
+var _55=_47(_53);
+delete _55[_54];
+if(_53.nodeType==1){
+var _56=true;
+for(var _57 in _55){
+_56=false;
+break;
+}
+if(_56){
+_53.removeAttribute(_44);
+}
+}
+return this;
+};
+f.data=function(_58,_59){
+var _5a=null;
+this.forEach(function(_5b){
+_5a=$.data(_5b,_58,_59);
+});
+return _59?this:_5a;
+};
+f.removeData=function(_5c){
+this.forEach(function(_5d){
+$.removeData(_5d,_5c);
+});
+return this;
+};
+function _5e(obj,_5f){
+if(obj==_5f){
+return obj;
+}
+var _60={};
+for(var x in _5f){
+if((_60[x]===undefined||_60[x]!=_5f[x])&&_5f[x]!==undefined&&obj!=_5f[x]){
+if(dojo.isObject(obj[x])&&dojo.isObject(_5f[x])){
+if(dojo.isArray(_5f[x])){
+obj[x]=_5f[x];
+}else{
+obj[x]=_5e(obj[x],_5f[x]);
+}
+}else{
+obj[x]=_5f[x];
+}
+}
+}
+if(dojo.isIE&&_5f){
+var p=_5f.toString;
+if(typeof p=="function"&&p!=obj.toString&&p!=_60.toString&&p!="\nfunction toString() {\n [native code]\n}\n"){
+obj.toString=_5f.toString;
+}
+}
+return obj;
+};
+f.extend=function(){
+var _61=[this];
+_61=_61.concat(arguments);
+return $.extend.apply($,_61);
+};
+$.extend=function(){
+var _62=arguments,_63;
+for(var i=0;i<_62.length;i++){
+var obj=_62[i];
+if(obj&&dojo.isObject(obj)){
+if(!_63){
+_63=obj;
+}else{
+_5e(_63,obj);
+}
+}
+}
+return _63;
+};
+$.noConflict=function(_64){
+var me=$;
+dojo.global.$=_d;
+if(_64){
+dojo.global.jQuery=_e;
+}
+return me;
+};
+f.attr=function(_65,_66){
+if(arguments.length==1&&dojo.isString(arguments[0])){
+var _67=this[0];
+if(!_67){
+return null;
+}
+var arg=arguments[0];
+var _68=dojo.attr(_67,arg);
+var _69=_67[arg];
+if((arg in _67)&&!dojo.isObject(_69)&&_65!="href"){
+return _69;
+}else{
+return _68||_69;
+}
+}else{
+if(dojo.isObject(_65)){
+for(var _6a in _65){
+this.attr(_6a,_65[_6a]);
+}
+return this;
+}else{
+var _6b=dojo.isFunction(_66);
+this.forEach(function(_6c,_6d){
+var _6e=_6c[_65];
+if((_65 in _6c)&&!dojo.isObject(_6e)&&_65!="href"){
+_6c[_65]=(_6b?_66.call(_6c,_6d):_66);
+}else{
+if(_6c.nodeType==1){
+dojo.attr(_6c,_65,(_6b?_66.call(_6c,_6d):_66));
+}
+}
+});
+return this;
+}
+}
+};
+f.removeAttr=function(_6f){
+this.forEach(function(_70,_71){
+var _72=_70[_6f];
+if((_6f in _70)&&!dojo.isObject(_72)&&_6f!="href"){
+delete _70[_6f];
+}else{
+if(_70.nodeType==1){
+if(_6f=="class"){
+_70.removeAttribute(_6f);
+}else{
+dojo.removeAttr(_70,_6f);
+}
+}
+}
+});
+return this;
+};
+f.toggleClass=function(_73,_74){
+var _75=arguments.length>1;
+this.forEach(function(_76){
+dojo.toggleClass(_76,_73,_75?_74:!dojo.hasClass(_76,_73));
+});
+return this;
+};
+f.toggle=function(){
+var _77=arguments;
+if(arguments.length>1&&dojo.isFunction(arguments[0])){
+var _78=0;
+var _79=function(){
+var _7a=_77[_78].apply(this,arguments);
+_78+=1;
+if(_78>_77.length-1){
+_78=0;
+}
+};
+return this.bind("click",_79);
+}else{
+var _7b=arguments.length==1?arguments[0]:undefined;
+this.forEach(function(_7c){
+var _7d=typeof _7b=="undefined"?dojo.style(_7c,"display")=="none":_7b;
+var _7e=(_7d?"show":"hide");
+var nl=$(_7c);
+nl[_7e].apply(nl,_77);
+});
+return this;
+}
+};
+f.hasClass=function(_7f){
+return this.some(function(_80){
+return dojo.hasClass(_80,_7f);
+});
+};
+f.html=f.innerHTML;
+dojo.forEach(["filter","slice"],function(_81){
+f[_81]=function(){
+var nl;
+if(dojo.isFunction(arguments[0])){
+var _82=arguments[0];
+arguments[0]=function(_83,_84){
+return _82.call(_83,_83,_84);
+};
+}
+if(_81=="filter"&&dojo.isString(arguments[0])){
+var nl=this._filterQueryResult(this,arguments[0]);
+}else{
+var _85=dojo._NodeListCtor;
+dojo._NodeListCtor=f;
+nl=$(_12[_81].apply(this,arguments));
+dojo._NodeListCtor=_85;
+}
+return nl._stash(this);
+};
+});
+f.map=function(_86){
+return this._buildArrayFromCallback(_86);
+};
+$.map=function(ary,_87){
+return f._buildArrayFromCallback.call(ary,_87);
+};
+$.inArray=function(_88,ary){
+return dojo.indexOf(ary,_88);
+};
+f.is=function(_89){
+return (_89?!!this.filter(_89).length:false);
+};
+f.not=function(){
+var _8a=$.apply($,arguments);
+var nl=$(_12.filter.call(this,function(_8b){
+return _8a.indexOf(_8b)==-1;
+}));
+return nl._stash(this);
+};
+f.add=function(){
+return this.concat.apply(this,arguments);
+};
+function _8c(_8d){
+var doc=_8d.contentDocument||(((_8d.name)&&(_8d.document)&&(document.getElementsByTagName("iframe")[_8d.name].contentWindow)&&(document.getElementsByTagName("iframe")[_8d.name].contentWindow.document)))||((_8d.name)&&(document.frames[_8d.name])&&(document.frames[_8d.name].document))||null;
+return doc;
+};
+f.contents=function(){
+var ary=[];
+this.forEach(function(_8e){
+if(_8e.nodeName.toUpperCase()=="IFRAME"){
+var doc=_8c(_8e);
+if(doc){
+ary.push(doc);
+}
+}else{
+var _8f=_8e.childNodes;
+for(var i=0;i<_8f.length;i++){
+ary.push(_8f[i]);
+}
+}
+});
+return this._wrap(ary)._stash(this);
+};
+f.find=function(_90){
+var ary=[];
+this.forEach(function(_91){
+if(_91.nodeType==1){
+ary=ary.concat(dojo._toArray($(_90,_91)));
+}
+});
+return this._getUniqueAsNodeList(ary)._stash(this);
+};
+f.andSelf=function(){
+return this.add(this._parent);
+};
+f.remove=function(_92){
+var nl=(_92?this._filterQueryResult(this,_92):this);
+nl.removeData();
+nl.forEach(function(_93){
+_93.parentNode.removeChild(_93);
+});
+return this;
+};
+$.css=function(_94,_95,_96){
+_95=_8(_95);
+var _97=(_96?dojo.style(_94,_95,_96):dojo.style(_94,_95));
+return _97;
+};
+f.css=function(_98,_99){
+if(dojo.isString(_98)){
+_98=_8(_98);
+if(arguments.length==2){
+if(!dojo.isString(_99)&&_98!="zIndex"){
+_99=_99+"px";
+}
+this.forEach(function(_9a){
+if(_9a.nodeType==1){
+dojo.style(_9a,_98,_99);
+}
+});
+return this;
+}else{
+_99=dojo.style(this[0],_98);
+if(!dojo.isString(_99)&&_98!="zIndex"){
+_99=_99+"px";
+}
+return _99;
+}
+}else{
+for(var _9b in _98){
+this.css(_9b,_98[_9b]);
+}
+return this;
+}
+};
+function _9c(nl,_9d,_9e,_9f){
+if(_9f){
+var mod={};
+mod[_9e]=_9f;
+nl.forEach(function(_a0){
+dojo[_9d](_a0,mod);
+});
+return nl;
+}else{
+return Math.abs(Math.round(dojo[_9d](nl[0])[_9e]));
+}
+};
+f.height=function(_a1){
+return _9c(this,"contentBox","h",_a1);
+};
+f.width=function(_a2){
+return _9c(this,"contentBox","w",_a2);
+};
+function _a3(_a4,_a5,_a6,_a7,_a8){
+var _a9=false;
+if((_a9=_a4.style.display=="none")){
+_a4.style.display="block";
+}
+var cs=dojo.getComputedStyle(_a4);
+var _aa=Math.abs(Math.round(dojo._getContentBox(_a4,cs)[_a5]));
+var pad=_a6?Math.abs(Math.round(dojo._getPadExtents(_a4,cs)[_a5])):0;
+var _ab=_a7?Math.abs(Math.round(dojo._getBorderExtents(_a4,cs)[_a5])):0;
+var _ac=_a8?Math.abs(Math.round(dojo._getMarginExtents(_a4,cs)[_a5])):0;
+if(_a9){
+_a4.style.display="none";
+}
+return pad+_aa+_ab+_ac;
+};
+f.innerHeight=function(){
+return _a3(this[0],"h",true);
+};
+f.innerWidth=function(){
+return _a3(this[0],"w",true);
+};
+f.outerHeight=function(_ad){
+return _a3(this[0],"h",true,true,_ad);
+};
+f.outerWidth=function(_ae){
+return _a3(this[0],"w",true,true,_ae);
+};
+var _4e=[];
+var _af=1;
+var _4f=dojo._scopeName+"eventid";
+var _b0;
+function _b1(_b2){
+_b2=_b2.split("$$")[0];
+var _b3=_b2.indexOf(".");
+if(_b3!=-1){
+_b2=_b2.substring(0,_b3);
+}
+return _b2;
+};
+function _b4(_b5,_b6){
+if(_b6.indexOf("ajax")==0){
+return dojo.subscribe(_b7[_b6],function(dfd,res){
+var _b8=new $.Event(_b6);
+if("ajaxComplete|ajaxSend|ajaxSuccess".indexOf(_b6)!=-1){
+_b9(_b5,[_b8,dfd.ioArgs.xhr,dfd.ioArgs.args]);
+}else{
+if(_b6=="ajaxError"){
+_b9(_b5,[_b8,dfd.ioArgs.xhr,dfd.ioArgs.args,res]);
+}else{
+_b9(_b5,[_b8]);
+}
+}
+});
+}else{
+return dojo.connect(_b5,"on"+_b6,function(e){
+_b9(_b5,arguments);
+});
+}
+};
+$.Event=function(_ba){
+if(this==$){
+return new $.Event(_ba);
+}
+if(typeof _ba=="string"){
+this.type=_ba.replace(/!/,"");
+}else{
+dojo.mixin(this,_ba);
+}
+this.timeStamp=(new Date()).getTime();
+this._isFake=true;
+this._isStrict=(this.type.indexOf("!")!=-1);
+};
+var ep=$.Event.prototype={preventDefault:function(){
+this.isDefaultPrevented=this._true;
+},stopPropagation:function(){
+this.isPropagationStopped=this._true;
+},stopImmediatePropagation:function(){
+this.isPropagationStopped=this._true;
+this.isImmediatePropagationStopped=this._true;
+},_true:function(){
+return true;
+},_false:function(){
+return false;
+}};
+dojo.mixin(ep,{isPropagationStopped:ep._false,isImmediatePropagationStopped:ep._false,isDefaultPrevented:ep._false});
+function _bb(_bc,_bd){
+_bc=_bc||[];
+_bc=[].concat(_bc);
+var evt=_bc[0];
+if(!evt||!evt.preventDefault){
+evt=_bd&&_bd.preventDefault?_bd:new $.Event(_bd);
+_bc.unshift(evt);
+}
+return _bc;
+};
+var _be=false;
+function _b9(_bf,_c0,_c1){
+_be=true;
+_c0=_c0||_b0;
+_c1=_c1;
+if(_bf.nodeType==9){
+_bf=_bf.documentElement;
+}
+var _c2=_bf.getAttribute(_4f);
+if(!_c2){
+return;
+}
+var evt=_c0[0];
+var _c3=evt.type;
+var _c4=_b1(_c3);
+var cbs=_4e[_c2][_c4];
+var _c5;
+if(_c1){
+_c5=_c1.apply(_bf,_c0);
+}
+if(_c5!==false){
+for(var _c6 in cbs){
+if(_c6!="_connectId"&&(!evt._isStrict&&(_c6.indexOf(_c3)==0)||(evt._isStrict&&_c6==_c3))){
+evt[dojo._scopeName+"callbackId"]=_c6;
+var cb=cbs[_c6];
+if(typeof cb.data!="undefined"){
+evt.data=cb.data;
+}else{
+evt.data=null;
+}
+if((_c5=cb.fn.apply(evt.target,_c0))===false&&!evt._isFake){
+dojo.stopEvent(evt);
+}
+evt.result=_c5;
+}
+}
+}
+return _c5;
+};
+f.triggerHandler=function(_c7,_c8,_c9){
+var _ca=this[0];
+if(_ca&&_ca.nodeType!=3&&_ca.nodeType!=8){
+_c8=_bb(_c8,_c7);
+return _b9(_ca,_c8,_c9);
+}else{
+return undefined;
+}
+};
+f.trigger=function(_cb,_cc,_cd){
+_cc=_bb(_cc,_cb);
+var evt=_cc[0];
+var _cb=_b1(evt.type);
+_b0=_cc;
+currentExtraFunc=_cd;
+var _ce=null;
+var _cf=!evt.target;
+this.forEach(function(_d0){
+if(_d0.nodeType!=3&&_d0.nodeType!=8){
+if(_d0.nodeType==9){
+_d0=_d0.documentElement;
+}
+if(evt._isFake){
+evt.currentTarget=_d0;
+if(_cf){
+evt.target=_d0;
+}
+}
+if(_cd){
+var _d1=_cc.slice(1);
+_ce=_cd.apply(_d0,(_ce=null?_d1:_d1.concat(_ce)));
+}
+if(_ce!==false){
+_be=false;
+if(_d0[_cb]){
+try{
+_ce=_d0[_cb]();
+}
+catch(e){
+}
+}else{
+if(_d0["on"+_cb]){
+try{
+_ce=_d0["on"+_cb]();
+}
+catch(e){
+}
+}
+}
+if(!_be){
+_ce=_b9(_d0,_cc);
+}
+var _d2=_d0.parentNode;
+if(_ce!==false&&!evt.isImmediatePropagationStopped()&&!evt.isPropagationStopped()&&_d2&&_d2.nodeType==1){
+$(_d2).trigger(_cb,_cc,_cd);
+}
+}
+}
+});
+_b0=null;
+currentExtraFunc=null;
+return this;
+};
+var _d3=0;
+f.bind=function(_d4,_d5,fn){
+_d4=_d4.split(" ");
+if(!fn){
+fn=_d5;
+_d5=null;
+}
+this.forEach(function(_d6){
+if(_d6.nodeType!=3&&_d6.nodeType!=8){
+if(_d6.nodeType==9){
+_d6=_d6.documentElement;
+}
+var _d7=_d6.getAttribute(_4f);
+if(!_d7){
+_d7=_af++;
+_d6.setAttribute(_4f,_d7);
+_4e[_d7]={};
+}
+for(var i=0;i<_d4.length;i++){
+var _d8=_d4[i];
+var _d9=_b1(_d8);
+if(_d9==_d8){
+_d8=_d9+"$$"+(_d3++);
+}
+var lls=_4e[_d7];
+if(!lls[_d9]){
+lls[_d9]={_connectId:_b4(_d6,_d9)};
+}
+lls[_d9][_d8]={fn:fn,data:_d5};
+}
+}
+});
+return this;
+};
+function _da(src,_db){
+var _dc=_db.getAttribute(_4f);
+var sls=_4e[_dc];
+if(!sls){
+return;
+}
+var _dd=_dd=_af++;
+_db.setAttribute(_4f,_dd);
+var tls=_4e[_dd]={};
+var _de={};
+for(var _df in sls){
+var _e0=tls[_df]={_connectId:_b4(_db,_df)};
+var _e1=sls[_df];
+for(var _e2 in _e1){
+_e0[_e2]={fn:_e1[_e2].fn,data:_e1[_e2].data,};
+}
+}
+};
+function _e3(lls,_e4,_e5,_e6,fn){
+var _e7=lls[_e4];
+if(_e7){
+var _e8=_e5.indexOf(".")!=-1;
+var _e9=false;
+if(_e6){
+delete _e7[_e6];
+}else{
+if(!_e8&&!fn){
+_e9=true;
+}else{
+if(_e8){
+if(_e5.charAt(0)=="."){
+for(var _ea in _e7){
+if(_ea.indexOf(_e5)==_ea.length-_e5.length){
+delete _e7[_ea];
+}
+}
+}else{
+delete _e7[_e5];
+}
+}else{
+for(var _ea in _e7){
+if(_ea.indexOf("$$")!=-1&&_e7[_ea].fn==fn){
+delete _e7[_ea];
+break;
+}
+}
+}
+}
+}
+var _eb=true;
+for(var _ea in _e7){
+if(_ea!="_connectId"){
+_eb=false;
+break;
+}
+}
+if(_e9||_eb){
+if(_e4.indexOf("ajax")!=-1){
+dojo.unsubscribe(_e7._connectId);
+}else{
+dojo.disconnect(_e7._connectId);
+}
+delete lls[_e4];
+}
+}
+};
+f.unbind=function(_ec,fn){
+var _ed=_ec?_ec[dojo._scopeName+"callbackId"]:null;
+_ec=_ec&&_ec.type?_ec.type:_ec;
+_ec=_ec?_ec.split(" "):_ec;
+this.forEach(function(_ee){
+if(_ee.nodeType!=3&&_ee.nodeType!=8){
+if(_ee.nodeType==9){
+_ee=_ee.documentElement;
+}
+var _ef=_ee.getAttribute(_4f);
+if(_ef){
+var lls=_4e[_ef];
+if(lls){
+var _f0=_ec;
+if(!_f0){
+_f0=[];
+for(var _f1 in lls){
+_f0.push(_f1);
+}
+}
+for(var i=0;i<_f0.length;i++){
+var _f2=_f0[i];
+var _f3=_b1(_f2);
+if(_f2.charAt(0)=="."){
+for(var _f1 in lls){
+_e3(lls,_f1,_f2,_ed,fn);
+}
+}else{
+_e3(lls,_f3,_f2,_ed,fn);
+}
+}
+}
+}
+}
+});
+return this;
+};
+f.one=function(_f4,_f5){
+var _f6=function(){
+$(this).unbind(_f4,arguments.callee);
+return _f5.apply(this,arguments);
+};
+return this.bind(_f4,_f6);
+};
+f._cloneNode=function(src){
+var _f7=src.cloneNode(true);
+if(src.nodeType==1){
+var _f8=dojo.query("["+_4f+"]",_f7);
+for(var i=0,_f9;_f9=_f8[i];i++){
+var _fa=dojo.query("["+_4f+"=\""+_f9.getAttribute(_4f)+"\"]",src)[0];
+if(_fa){
+_da(_fa,_f9);
+}
+}
+}
+return _f7;
+};
+dojo.getObject("$.event.global",true);
+dojo.forEach(["blur","focus","dblclick","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit","ajaxStart","ajaxSend","ajaxSuccess","ajaxError","ajaxComplete","ajaxStop"],function(evt){
+f[evt]=function(_fb){
+if(_fb){
+this.bind(evt,_fb);
+}else{
+this.trigger(evt);
+}
+return this;
+};
+});
+function _fc(_fd){
+if(dojo.isString(_fd)){
+if(_fd=="slow"){
+_fd=700;
+}else{
+if(_fd="fast"){
+_fd=300;
+}else{
+_fd=500;
+}
+}
+}
+return _fd;
+};
+f.hide=function(_fe,_ff){
+_fe=_fc(_fe);
+this.forEach(function(node){
+var _100=node.style;
+var cs=dojo.getComputedStyle(node);
+if(cs.display=="none"){
+return;
+}
+_100.overflow="hidden";
+_100.display="block";
+if(_fe){
+dojo.anim(node,{width:0,height:0,opacity:0},_fe,null,function(){
+_100.width="";
+_100.height="";
+_100.display="none";
+return _ff&&_ff.call(node);
+});
+}else{
+dojo.style(node,"display","none");
+if(_ff){
+_ff.call(node);
+}
+}
+});
+return this;
+};
+f.show=function(_101,_102){
+_101=_fc(_101);
+this.forEach(function(node){
+var _103=node.style;
+var cs=dojo.getComputedStyle(node);
+if(cs.display!="none"){
+return;
+}
+if(_101){
+var _104=parseFloat(_103.width);
+var _105=parseFloat(_103.height);
+if(!_104||!_105){
+_103.display="block";
+var box=dojo.marginBox(node);
+_104=box.w;
+_105=box.h;
+}
+_103.width=0;
+_103.height=0;
+_103.overflow="hidden";
+dojo.attr(node,"opacity",0);
+_103.display="block";
+dojo.anim(node,{width:_104,height:_105,opacity:1},_101,null,_102?dojo.hitch(node,_102):undefined);
+}else{
+dojo.style(node,"display","block");
+if(_102){
+_102.call(node);
+}
+}
+});
+return this;
+};
+$.ajaxSettings={};
+$.ajaxSetup=function(args){
+dojo.mixin($.ajaxSettings,args);
+};
+var _b7={"ajaxStart":"/dojo/io/start","ajaxSend":"/dojo/io/send","ajaxSuccess":"/dojo/io/load","ajaxError":"/dojo/io/error","ajaxComplete":"/dojo/io/done","ajaxStop":"/dojo/io/stop"};
+for(var _106 in _b7){
+if(_106.indexOf("ajax")==0){
+(function(_107){
+f[_107]=function(_108){
+this.forEach(function(node){
+dojo.subscribe(_b7[_107],function(){
+var _109=new $.Event(_107);
+var _10a=arguments[0]&&arguments[0].ioArgs;
+var xhr=_10a&&_10a.xhr;
+var args=_10a&&_10a.args;
+var res=arguments[1];
+if("ajaxComplete|ajaxSend|ajaxSuccess".indexOf(_107)!=-1){
+return _108.call(node,_109,xhr,args);
+}else{
+if(_107=="ajaxError"){
+return _108.call(node,_109,xhr,args,res);
+}else{
+return _108.call(node,_109);
+}
+}
+});
+});
+return this;
+};
+})(_106);
+}
+}
+var _10b=dojo._xhrObj;
+dojo._xhrObj=function(args){
+var xhr=_10b.apply(dojo,arguments);
+if(args&&args.beforeSend){
+if(args.beforeSend(xhr)===false){
+return false;
+}
+}
+return xhr;
+};
+$.ajax=function(args){
+var temp=dojo.delegate($.ajaxSettings);
+for(var _10c in args){
+if(_10c=="data"&&dojo.isObject(args[_10c])&&dojo.isObject(temp.data)){
+for(var prop in args[_10c]){
+temp.data[prop]=args[_10c][prop];
+}
+}else{
+temp[_10c]=args[_10c];
+}
+}
+args=temp;
+var url=args.url;
+if("async" in args){
+args.sync=!args.async;
+}
+if(args.global===false){
+args.ioPublish=false;
+}
+if(args.data){
+var data=args.data;
+if(dojo.isString(data)){
+args.content=dojo.queryToObject(data);
+}else{
+for(var _10c in data){
+if(dojo.isFunction(data[_10c])){
+data[_10c]=data[_10c]();
+}
+}
+args.content=data;
+}
+}
+var _10d=args.dataType;
+if("dataType" in args){
+if(_10d=="script"){
+_10d="javascript";
+}else{
+if(_10d=="html"){
+_10d="text";
+}
+}
+args.handleAs=_10d;
+}else{
+_10d=args.handleAs="text";
+args.guessedType=true;
+}
+if("cache" in args){
+args.preventCache=!args.cache;
+}else{
+if(args.dataType=="script"||args.dataType=="jsonp"){
+args.preventCache=true;
+}
+}
+if(args.error){
+args._jqueryError=args.error;
+delete args.error;
+}
+args.handle=function(_10e,_10f){
+var _110="success";
+if(_10e instanceof Error){
+_110=(_10e.dojoType=="timeout"?"timeout":"error");
+if(args._jqueryError){
+args._jqueryError(_10f.xhr,_110,_10e);
+}
+}else{
+var xml=(_10f.args.guessedType&&_10f.xhr&&_10f.xhr.responseXML);
+if(xml){
+_10e=xml;
+}
+if(args.success){
+args.success(_10e,_110,_10f.xhr);
+}
+}
+if(args.complete){
+args.complete(_10e,_110,_10f.xhr);
+}
+return _10e;
+};
+var _111=(_10d=="jsonp");
+if(_10d=="javascript"){
+var _112=url.indexOf(":");
+var _113=url.indexOf("/");
+if(_112>0&&_112<_113){
+var _114=url.indexOf("/",_113+2);
+if(_114==-1){
+_114=url.length;
+}
+if(location.protocol!=url.substring(0,_112+1)||location.hostname!=url.substring(_113+2,_114)){
+_111=true;
+}
+}
+}
+if(_111){
+if(_10d=="jsonp"){
+var cb=args.jsonp;
+if(!cb){
+var _115=args.url.split("?")[1];
+if(_115&&(_115=dojo.queryToObject(_115))){
+cb=_116(_115);
+if(cb){
+var _117=new RegExp("([&\\?])?"+cb+"=?");
+args.url=args.url.replace(_117+"=?");
+}
+}
+if(!cb){
+cb=_116(args.content);
+if(cb){
+delete args.content[cb];
+}
+}
+}
+args.jsonp=cb||"callback";
+}
+var dfd=dojo.io.script.get(args);
+return dfd;
+}else{
+var dfd=dojo.xhr(args.type||"GET",args);
+return dfd.ioArgs.xhr===false?false:dfd.ioArgs.xhr;
+}
+};
+function _116(obj){
+for(var prop in obj){
+if(prop.indexOf("callback")==prop.length-8){
+return prop;
+}
+}
+return null;
+};
+$.getpost=function(_118,url,data,_119,_11a){
+var args={url:url,type:_118};
+if(data){
+if(dojo.isFunction(data)&&!_119){
+args.complete=data;
+}else{
+args.data=data;
+}
+}
+if(_119){
+if(dojo.isString(_119)&&!_11a){
+_11a=_119;
+}else{
+args.complete=_119;
+}
+}
+if(_11a){
+args.dataType=_11a;
+}
+return $.ajax(args);
+};
+$.get=dojo.hitch($,"getpost","GET");
+$.post=dojo.hitch($,"getpost","POST");
+$.getJSON=function(url,data,_11b){
+return $.getpost("GET",url,data,_11b,"json");
+};
+$.getScript=function(url,_11c){
+return $.ajax({url:url,success:_11c,dataType:"script"});
+};
+f.load=function(url,data,_11d){
+var node=this[0];
+if(!node||!node.nodeType||node.nodeType==9){
+dojo.addOnLoad(url);
+return this;
+}
+var _11e=url.split(/\s+/);
+url=_11e[0];
+var _11f=_11e[1];
+var _120=_11d||data;
+var cb=dojo.hitch(this,function(_121,_122,xhr){
+var _123=_121.match(/\<\s*body[^>]+>.*<\/body\s*>/i);
+if(_123){
+_121=_123;
+}
+var _124=dojo._toDom(_121);
+if(_11f){
+var temp=$(dojo.create("div"));
+temp.append(_124);
+_124=temp.find(_11f);
+}else{
+_124=$(_124.nodeType==11?_124.childNodes:_124);
+}
+this.html(_124);
+if(_120){
+setTimeout(dojo.hitch(this,function(){
+this.forEach(function(node){
+_120.call(node,_121,_122,xhr);
+});
+}),10);
+}
+});
+if(!_11d){
+data=cb;
+}else{
+_11d=cb;
+}
+var _125="GET";
+if(data&&dojo.isObject(data)){
+_125="POST";
+}
+$.getpost(_125,url,data,_11d,"html");
+return this;
+};
+var _126="file|submit|image|reset|button|";
+f.serialize=function(){
+var ret="";
+var strs=this.map(function(node){
+if(node.nodeName.toUpperCase()=="FORM"){
+return dojo.formToQuery(node);
+}else{
+var type=(node.type||"").toLowerCase();
+if(_126.indexOf(type)==-1){
+var val=dojo.fieldToObject(node);
+if(node.name&&val!=null){
+var q={};
+q[node.name]=val;
+return dojo.objectToQuery(q);
+}
+}
+}
+});
+return ret+strs.join("&");
+};
+$.param=function(obj){
+if(obj._is$&&obj.serialize){
+return obj.serialize();
+}else{
+if(dojo.isArray(obj)){
+return dojo.map(obj,function(item){
+return $.param(item);
+}).join("&");
+}else{
+return dojo.objectToQuery(obj);
+}
+}
+};
+$.isFunction=function(){
+var _127=dojo.isFunction.apply(dojo,arguments);
+if(_127){
+_127=(typeof (arguments[0])!="object");
+}
+return _127;
+};
+})();
+}
diff --git a/js/dojo/dojox/jq/README b/js/dojo/dojox/jq/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/jq/README
@@ -0,0 +1,103 @@
+-------------------------------------------------------------------------------
+DojoX jq
+-------------------------------------------------------------------------------
+Version 0.0.1
+Release date: 8/9/2009
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ James Burke
+-------------------------------------------------------------------------------
+Project description
+
+DojoX jq is a compatibility layer that tries to match the jquery 1.3.2 API.
+-------------------------------------------------------------------------------
+Dependencies:
+
+- Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+IF YOU WISH TO WORK ON THIS MODULE, PLEASE DO NOT LOOK AT THE JQUERY SOURCE.
+
+We want CLA-clean code to be put in the Dojo repos. Just refer to the jquery API
+documentation and unit tests. As we get bug reports, we can build up our own test
+suite, and then hopefully contribute those tests back to jquery if their tests
+do not adequately cover an API call.
+
+This module needs a lot of work, it is in the very initial, rough stages. Some
+(all?) of the code is ugly. It is missing some APIs, notably queue/dequeue,
+the FX methods and live/die.
+
+There are also some incompatibilities with how acme and sizzle operate at the moment,
+mentioned in the comments in jq.js
+
+The tests for this module so far have been the jquery 1.3.2 tests. Since those
+tests are not CLA-clean, you will need to download them from here:
+
+http://www.tagneto.org/dojo/jquery132.zip
+
+Place the zip file in the dojox/jq/tests directory and unzip it. Then you can
+run the jquery132/test/index.html file inside there to start the tests.
+
+The tests were changed in a couple ways. For the tests I modified,
+you can look for //JRB changed: to find the original test construction.
+Things that were changed:
+
+1) acme requires spaces between CSS3 selectors, where sizzle does
+not ("div>span" fails in acme, but works in sizzle). There is a
+dtk.org bug on it, and it is allowed by the CSS3 spec to not have
+spaces so hopefully that incompatibility can go away after a while.
+
+2) sizzle supports some psuedos like :last, :first: :odd, :even that
+work on the list of matched elements, not just individual elements or
+their children. This is a more fundamental change to acme, but it is probably
+doable.
+
+3) The XML tests and ajax tests that call out to files fail because of
+some weird timing interaction between the jquery unit test thing and
+our XHR code. I believe since our code has a timer where we check the
+status of the XHR calls instead of using load callbacks directly on
+the XHR callbacks, something is confused in jquery -- the failure case
+is fired before our callbacks work. If only they used deferreds. ;)
+To get those tests to sort of work, I modified qunit/testrunner.js's process()
+method to be like so:
+
+function process() {
+ if(config.queue.length && !config.blocking){
+ setTimeout(function(){
+ if(config.queue.length && !config.blocking){
+ config.queue.shift()();
+ process();
+ }
+ }, 100);
+ }
+}
+
+Change 100 above to tune it depending on your patience and how much
+you want to make sure the tests have enough time to run. With 100, you
+can see some of the ajax tests passing.
+
+From some previous notes (I have not checked more recently), it looks
+like the compat layer fires "ajaxStop" more than jquery, I think due
+to how we do our async in-flight testing, so that messes up some of
+the testing in the ajax calls, but I think that is a detail that is
+fine to go with. I just have to make sure that is really the cause of
+a test failure and not something else. So I will probably need to
+modify the tests more.
+
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/jq.js
+http://svn.dojotoolkit.org/src/dojox/trunk/jq/*
+
+Install into the following directory structure:
+/dojox/jq.js
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
diff --git a/js/dojo/dojox/json/README b/js/dojo/dojox/json/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/json/README
@@ -0,0 +1,42 @@
+-------------------------------------------------------------------------------
+DojoX JSON Modules
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 07/06/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+ Kris Zyp (kris@sitepen.com)
+-------------------------------------------------------------------------------
+Project description
+JSONQuery (dojox.json.query) - A comprehensive object data query tool
+JSON Schema (dojox.json.schema) - An object validation tool based on JSON Schema
+JSON Referencing (dojox.json.ref) - JSON Referencing capable serializer and
+deserializer.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.json.ref uses dojo.date.stamp
+-------------------------------------------------------------------------------
+Documentation
+See the Dojo API tool (http://dojotoolkit.org/api)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/json/*
+
+Install into the following directory structure:
+/dojox/json/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/json/*
+
+Require in the dojox.data stores you wish to use.
+-------------------------------------------------------------------------------
+Additional Notes
+
diff --git a/js/dojo/dojox/json/query.js b/js/dojo/dojox/json/query.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/json/query.js
@@ -0,0 +1,142 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.query"]){
+dojo._hasResource["dojox.json.query"]=true;
+dojo.provide("dojox.json.query");
+(function(){
+function s(_1,_2,_3,_4){
+var _5=_1.length,_6=[];
+_3=_3||_5;
+_2=(_2<0)?Math.max(0,_2+_5):Math.min(_5,_2);
+_3=(_3<0)?Math.max(0,_3+_5):Math.min(_5,_3);
+for(var i=_2;i<_3;i+=_4){
+_6.push(_1[i]);
+}
+return _6;
+};
+function e(_7,_8){
+var _9=[];
+function _a(_b){
+if(_8){
+if(_8===true&&!(_b instanceof Array)){
+_9.push(_b);
+}else{
+if(_b[_8]){
+_9.push(_b[_8]);
+}
+}
+}
+for(var i in _b){
+var _c=_b[i];
+if(!_8){
+_9.push(_c);
+}else{
+if(_c&&typeof _c=="object"){
+_a(_c);
+}
+}
+}
+};
+if(_8 instanceof Array){
+if(_8.length==1){
+return _7[_8[0]];
+}
+for(var i=0;i<_8.length;i++){
+_9.push(_7[_8[i]]);
+}
+}else{
+_a(_7);
+}
+return _9;
+};
+function _d(_e,_f){
+var _10=[];
+var _11={};
+for(var i=0,l=_e.length;i<l;++i){
+var _12=_e[i];
+if(_f(_12,i,_e)){
+if((typeof _12=="object")&&_12){
+if(!_12.__included){
+_12.__included=true;
+_10.push(_12);
+}
+}else{
+if(!_11[_12+typeof _12]){
+_11[_12+typeof _12]=true;
+_10.push(_12);
+}
+}
+}
+}
+for(i=0,l=_10.length;i<l;++i){
+if(_10[i]){
+delete _10[i].__included;
+}
+}
+return _10;
+};
+dojox.json.query=function(_13,obj){
+var _14=0;
+var str=[];
+_13=_13.replace(/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'|[\[\]]/g,function(t){
+_14+=t=="["?1:t=="]"?-1:0;
+return (t=="]"&&_14>0)?"`]":(t.charAt(0)=="\""||t.charAt(0)=="'")?"`"+(str.push(t)-1):t;
+});
+var _15="";
+function _16(_17){
+_15=_17+"("+_15;
+};
+function _18(t,a,b,c,d,e,f,g){
+return str[g].match(/[\*\?]/)||f=="~"?"/^"+str[g].substring(1,str[g].length-1).replace(/\\([btnfr\\"'])|([^\w\*\?])/g,"\\$1$2").replace(/([\*\?])/g,"[\\w\\W]$1")+(f=="~"?"$/i":"$/")+".test("+a+")":t;
+};
+_13.replace(/(\]|\)|push|pop|shift|splice|sort|reverse)\s*\(/,function(){
+throw new Error("Unsafe function call");
+});
+_13=_13.replace(/([^=]=)([^=])/g,"$1=$2").replace(/@|(\.\s*)?[a-zA-Z\$_]+(\s*:)?/g,function(t){
+return t.charAt(0)=="."?t:t=="@"?"$obj":(t.match(/:|^(\$|Math|true|false|null)$/)?"":"$obj.")+t;
+}).replace(/\.?\.?\[(`\]|[^\]])*\]|\?.*|\.\.([\w\$_]+)|\.\*/g,function(t,a,b){
+var _19=t.match(/^\.?\.?(\[\s*\^?\?|\^?\?|\[\s*==)(.*?)\]?$/);
+if(_19){
+var _1a="";
+if(t.match(/^\./)){
+_16("e");
+_1a=",true)";
+}
+_16(_19[1].match(/\=/)?"dojo.map":_19[1].match(/\^/)?"distinctFilter":"dojo.filter");
+return _1a+",function($obj){return "+_19[2]+"})";
+}
+_19=t.match(/^\[\s*([\/\\].*)\]/);
+if(_19){
+return ".concat().sort(function(a,b){"+_19[1].replace(/\s*,?\s*([\/\\])\s*([^,\\\/]+)/g,function(t,a,b){
+return "var av= "+b.replace(/\$obj/,"a")+",bv= "+b.replace(/\$obj/,"b")+";if(av>bv||bv==null){return "+(a=="/"?1:-1)+";}\n"+"if(bv>av||av==null){return "+(a=="/"?-1:1)+";}\n";
+})+"return 0;})";
+}
+_19=t.match(/^\[(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)\]/);
+if(_19){
+_16("s");
+return ","+(_19[1]||0)+","+(_19[2]||0)+","+(_19[3]||1)+")";
+}
+if(t.match(/^\.\.|\.\*|\[\s*\*\s*\]|,/)){
+_16("e");
+return (t.charAt(1)=="."?",'"+b+"'":t.match(/,/)?","+t:"")+")";
+}
+return t;
+}).replace(/(\$obj\s*((\.\s*[\w_$]+\s*)|(\[\s*`([0-9]+)\s*`\]))*)(==|~)\s*`([0-9]+)/g,_18).replace(/`([0-9]+)\s*(==|~)\s*(\$obj\s*((\.\s*[\w_$]+)|(\[\s*`([0-9]+)\s*`\]))*)/g,function(t,a,b,c,d,e,f,g){
+return _18(t,c,d,e,f,g,b,a);
+});
+_13=_15+(_13.charAt(0)=="$"?"":"$")+_13.replace(/`([0-9]+|\])/g,function(t,a){
+return a=="]"?"]":str[a];
+});
+var _1b=eval("1&&function($,$1,$2,$3,$4,$5,$6,$7,$8,$9){var $obj=$;return "+_13+"}");
+for(var i=0;i<arguments.length-1;i++){
+arguments[i]=arguments[i+1];
+}
+return obj?_1b.apply(this,arguments):_1b;
+};
+})();
+}
diff --git a/js/dojo/dojox/json/ref.js b/js/dojo/dojox/json/ref.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/json/ref.js
@@ -0,0 +1,249 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.ref"]){
+dojo._hasResource["dojox.json.ref"]=true;
+dojo.provide("dojox.json.ref");
+dojo.require("dojo.date.stamp");
+dojox.json.ref={resolveJson:function(_1,_2){
+_2=_2||{};
+var _3=_2.idAttribute||"id";
+var _4=this.refAttribute;
+var _5=_2.idAsRef;
+var _6=_2.idPrefix||"";
+var _7=_2.assignAbsoluteIds;
+var _8=_2.index||{};
+var _9=_2.timeStamps;
+var _a,_b=[];
+var _c=/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/;
+var _d=this._addProp;
+var F=function(){
+};
+function _e(it,_f,_10,_11,_12,_13){
+var i,_14,val,id=_3 in it?it[_3]:_10;
+if(_3 in it||((id!==undefined)&&_11)){
+id=(_6+id).replace(_c,"$2$3");
+}
+var _15=_13||it;
+if(id!==undefined){
+if(_7){
+it.__id=id;
+}
+if(_2.schemas&&(!(it instanceof Array))&&(val=id.match(/^(.+\/)[^\.\[]*$/))){
+_12=_2.schemas[val[1]];
+}
+if(_8[id]&&((it instanceof Array)==(_8[id] instanceof Array))){
+_15=_8[id];
+delete _15.$ref;
+delete _15._loadObject;
+_14=true;
+}else{
+var _16=_12&&_12.prototype;
+if(_16){
+F.prototype=_16;
+_15=new F();
+}
+}
+_8[id]=_15;
+if(_9){
+_9[id]=_2.time;
+}
+}
+while(_12){
+var _17=_12.properties;
+if(_17){
+for(i in it){
+var _18=_17[i];
+if(_18&&_18.format=="date-time"&&typeof it[i]=="string"){
+it[i]=dojo.date.stamp.fromISOString(it[i]);
+}
+}
+}
+_12=_12["extends"];
+}
+var _19=it.length;
+for(i in it){
+if(i==_19){
+break;
+}
+if(it.hasOwnProperty(i)){
+val=it[i];
+if((typeof val=="object")&&val&&!(val instanceof Date)&&i!="__parent"){
+_a=val[_4]||(_5&&val[_3]);
+if(!_a||!val.__parent){
+val.__parent=it;
+}
+if(_a){
+delete it[i];
+var _1a=_a.toString().replace(/(#)([^\.\[])/,"$1.$2").match(/(^([^\[]*\/)?[^#\.\[]*)#?([\.\[].*)?/);
+if((_a=(_1a[1]=="$"||_1a[1]=="this"||_1a[1]=="")?_1:_8[(_6+_1a[1]).replace(_c,"$2$3")])){
+if(_1a[3]){
+_1a[3].replace(/(\[([^\]]+)\])|(\.?([^\.\[]+))/g,function(t,a,b,c,d){
+_a=_a&&_a[b?b.replace(/[\"\'\\]/,""):d];
+});
+}
+}
+if(_a){
+val=_a;
+}else{
+if(!_f){
+var _1b;
+if(!_1b){
+_b.push(_15);
+}
+_1b=true;
+val=_e(val,false,val[_4],true,_18);
+val._loadObject=_2.loader;
+}
+}
+}else{
+if(!_f){
+val=_e(val,_b==it,id===undefined?undefined:_d(id,i),false,_18,_15!=it&&typeof _15[i]=="object"&&_15[i]);
+}
+}
+}
+it[i]=val;
+if(_15!=it&&!_15.__isDirty){
+var old=_15[i];
+_15[i]=val;
+if(_14&&val!==old&&!_15._loadObject&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&i!="$ref"&&!(val instanceof Date&&old instanceof Date&&val.getTime()==old.getTime())&&!(typeof val=="function"&&typeof old=="function"&&val.toString()==old.toString())&&_8.onUpdate){
+_8.onUpdate(_15,i,old,val);
+}
+}
+}
+}
+if(_14&&(_3 in it)){
+for(i in _15){
+if(!_15.__isDirty&&_15.hasOwnProperty(i)&&!it.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&!(_15 instanceof Array&&isNaN(i))){
+if(_8.onUpdate&&i!="_loadObject"&&i!="_idAttr"){
+_8.onUpdate(_15,i,_15[i],undefined);
+}
+delete _15[i];
+while(_15 instanceof Array&&_15.length&&_15[_15.length-1]===undefined){
+_15.length--;
+}
+}
+}
+}else{
+if(_8.onLoad){
+_8.onLoad(_15);
+}
+}
+return _15;
+};
+if(_1&&typeof _1=="object"){
+_1=_e(_1,false,_2.defaultId,true);
+_e(_b,false);
+}
+return _1;
+},fromJson:function(str,_1c){
+function ref(_1d){
+var _1e={};
+_1e[this.refAttribute]=_1d;
+return _1e;
+};
+try{
+var _1f=eval("("+str+")");
+}
+catch(e){
+throw new SyntaxError("Invalid JSON string: "+e.message+" parsing: "+str);
+}
+if(_1f){
+return this.resolveJson(_1f,_1c);
+}
+return _1f;
+},toJson:function(it,_20,_21,_22){
+var _23=this._useRefs;
+var _24=this._addProp;
+var _25=this.refAttribute;
+_21=_21||"";
+var _26={};
+var _27={};
+function _28(it,_29,_2a){
+if(typeof it=="object"&&it){
+var _2b;
+if(it instanceof Date){
+return "\""+dojo.date.stamp.toISOString(it,{zulu:true})+"\"";
+}
+var id=it.__id;
+if(id){
+if(_29!="#"&&((_23&&!id.match(/#/))||_26[id])){
+var ref=id;
+if(id.charAt(0)!="#"){
+if(it.__clientId==id){
+ref="cid:"+id;
+}else{
+if(id.substring(0,_21.length)==_21){
+ref=id.substring(_21.length);
+}else{
+ref=id;
+}
+}
+}
+var _2c={};
+_2c[_25]=ref;
+return _28(_2c,"#");
+}
+_29=id;
+}else{
+it.__id=_29;
+_27[_29]=it;
+}
+_26[_29]=it;
+_2a=_2a||"";
+var _2d=_20?_2a+dojo.toJsonIndentStr:"";
+var _2e=_20?"\n":"";
+var sep=_20?" ":"";
+if(it instanceof Array){
+var res=dojo.map(it,function(obj,i){
+var val=_28(obj,_24(_29,i),_2d);
+if(typeof val!="string"){
+val="undefined";
+}
+return _2e+_2d+val;
+});
+return "["+res.join(","+sep)+_2e+_2a+"]";
+}
+var _2f=[];
+for(var i in it){
+if(it.hasOwnProperty(i)){
+var _30;
+if(typeof i=="number"){
+_30="\""+i+"\"";
+}else{
+if(typeof i=="string"&&(i.charAt(0)!="_"||i.charAt(1)!="_")){
+_30=dojo._escapeString(i);
+}else{
+continue;
+}
+}
+var val=_28(it[i],_24(_29,i),_2d);
+if(typeof val!="string"){
+continue;
+}
+_2f.push(_2e+_2d+_30+":"+sep+val);
+}
+}
+return "{"+_2f.join(","+sep)+_2e+_2a+"}";
+}else{
+if(typeof it=="function"&&dojox.json.ref.serializeFunctions){
+return it.toString();
+}
+}
+return dojo.toJson(it);
+};
+var _31=_28(it,"#","");
+if(!_22){
+for(var i in _27){
+delete _27[i].__id;
+}
+}
+return _31;
+},_addProp:function(id,_32){
+return id+(id.match(/#/)?id.length==1?"":".":"#")+_32;
+},refAttribute:"$ref",_useRefs:false,serializeFunctions:false};
+}
diff --git a/js/dojo/dojox/json/schema.js b/js/dojo/dojox/json/schema.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/json/schema.js
@@ -0,0 +1,186 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.schema"]){
+dojo._hasResource["dojox.json.schema"]=true;
+dojo.provide("dojox.json.schema");
+dojox.json.schema.validate=function(_1,_2){
+return this._validate(_1,_2,false);
+};
+dojox.json.schema.checkPropertyChange=function(_3,_4,_5){
+return this._validate(_3,_4,_5||"property");
+};
+dojox.json.schema.mustBeValid=function(_6){
+if(!_6.valid){
+throw new TypeError(dojo.map(_6.errors,function(_7){
+return "for property "+_7.property+": "+_7.message;
+}).join(", "));
+}
+};
+dojox.json.schema._validate=function(_8,_9,_a){
+var _b=[];
+function _c(_d,_e,_f,i){
+var l;
+_f+=_f?typeof i=="number"?"["+i+"]":typeof i=="undefined"?"":"."+i:i;
+function _10(_11){
+_b.push({property:_f,message:_11});
+};
+if((typeof _e!="object"||_e instanceof Array)&&(_f||typeof _e!="function")){
+if(typeof _e=="function"){
+if(!(Object(_d) instanceof _e)){
+_10("is not an instance of the class/constructor "+_e.name);
+}
+}else{
+if(_e){
+_10("Invalid schema/property definition "+_e);
+}
+}
+return null;
+}
+if(_a&&_e.readonly){
+_10("is a readonly field, it can not be changed");
+}
+if(_e["extends"]){
+_c(_d,_e["extends"],_f,i);
+}
+function _12(_13,_14){
+if(_13){
+if(typeof _13=="string"&&_13!="any"&&(_13=="null"?_14!==null:typeof _14!=_13)&&!(_14 instanceof Array&&_13=="array")&&!(_13=="integer"&&_14%1===0)){
+return [{property:_f,message:(typeof _14)+" value found, but a "+_13+" is required"}];
+}
+if(_13 instanceof Array){
+var _15=[];
+for(var j=0;j<_13.length;j++){
+if(!(_15=_12(_13[j],_14)).length){
+break;
+}
+}
+if(_15.length){
+return _15;
+}
+}else{
+if(typeof _13=="object"){
+var _16=_b;
+_b=[];
+_c(_14,_13,_f);
+var _17=_b;
+_b=_16;
+return _17;
+}
+}
+}
+return [];
+};
+if(_d===undefined){
+if(!_e.optional){
+_10("is missing and it is not optional");
+}
+}else{
+_b=_b.concat(_12(_e.type,_d));
+if(_e.disallow&&!_12(_e.disallow,_d).length){
+_10(" disallowed value was matched");
+}
+if(_d!==null){
+if(_d instanceof Array){
+if(_e.items){
+if(_e.items instanceof Array){
+for(i=0,l=_d.length;i<l;i++){
+_b.concat(_c(_d[i],_e.items[i],_f,i));
+}
+}else{
+for(i=0,l=_d.length;i<l;i++){
+_b.concat(_c(_d[i],_e.items,_f,i));
+}
+}
+}
+if(_e.minItems&&_d.length<_e.minItems){
+_10("There must be a minimum of "+_e.minItems+" in the array");
+}
+if(_e.maxItems&&_d.length>_e.maxItems){
+_10("There must be a maximum of "+_e.maxItems+" in the array");
+}
+}else{
+if(_e.properties){
+_b.concat(_18(_d,_e.properties,_f,_e.additionalProperties));
+}
+}
+if(_e.pattern&&typeof _d=="string"&&!_d.match(_e.pattern)){
+_10("does not match the regex pattern "+_e.pattern);
+}
+if(_e.maxLength&&typeof _d=="string"&&_d.length>_e.maxLength){
+_10("may only be "+_e.maxLength+" characters long");
+}
+if(_e.minLength&&typeof _d=="string"&&_d.length<_e.minLength){
+_10("must be at least "+_e.minLength+" characters long");
+}
+if(typeof _e.minimum!==undefined&&typeof _d==typeof _e.minimum&&_e.minimum>_d){
+_10("must have a minimum value of "+_e.minimum);
+}
+if(typeof _e.maximum!==undefined&&typeof _d==typeof _e.maximum&&_e.maximum<_d){
+_10("must have a maximum value of "+_e.maximum);
+}
+if(_e["enum"]){
+var _19=_e["enum"];
+l=_19.length;
+var _1a;
+for(var j=0;j<l;j++){
+if(_19[j]===_d){
+_1a=1;
+break;
+}
+}
+if(!_1a){
+_10("does not have a value in the enumeration "+_19.join(", "));
+}
+}
+if(typeof _e.maxDecimal=="number"&&(_d.toString().match(new RegExp("\\.[0-9]{"+(_e.maxDecimal+1)+",}")))){
+_10("may only have "+_e.maxDecimal+" digits of decimal places");
+}
+}
+}
+return null;
+};
+function _18(_1b,_1c,_1d,_1e){
+if(typeof _1c=="object"){
+if(typeof _1b!="object"||_1b instanceof Array){
+_b.push({property:_1d,message:"an object is required"});
+}
+for(var i in _1c){
+if(_1c.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")){
+var _1f=_1b[i];
+var _20=_1c[i];
+_c(_1f,_20,_1d,i);
+}
+}
+}
+for(i in _1b){
+if(_1b.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&_1c&&!_1c[i]&&_1e===false){
+_b.push({property:_1d,message:(typeof _1f)+"The property "+i+" is not defined in the schema and the schema does not allow additional properties"});
+}
+var _21=_1c&&_1c[i]&&_1c[i].requires;
+if(_21&&!(_21 in _1b)){
+_b.push({property:_1d,message:"the presence of the property "+i+" requires that "+_21+" also be present"});
+}
+_1f=_1b[i];
+if(_1c&&typeof _1c=="object"&&!(i in _1c)){
+_c(_1f,_1e,_1d,i);
+}
+if(!_a&&_1f&&_1f.$schema){
+_b=_b.concat(_c(_1f,_1f.$schema,_1d,i));
+}
+}
+return _b;
+};
+if(_9){
+_c(_8,_9,"",_a||"");
+}
+if(!_a&&_8&&_8.$schema){
+_c(_8,_8.$schema,"","");
+}
+return {valid:!_b.length,errors:_b};
+};
+}
diff --git a/js/dojo/dojox/jsonPath.js b/js/dojo/dojox/jsonPath.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/jsonPath.js
@@ -0,0 +1,12 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jsonPath"]){
+dojo._hasResource["dojox.jsonPath"]=true;
+dojo.provide("dojox.jsonPath");
+dojo.require("dojox.jsonPath.query");
+}
diff --git a/js/dojo/dojox/jsonPath/README b/js/dojo/dojox/jsonPath/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/jsonPath/README
@@ -0,0 +1,126 @@
+-------------------------------------------------------------------------------
+dojox.jsonPath
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/14/2007
+-------------------------------------------------------------------------------
+Project state: beta
+-------------------------------------------------------------------------------
+Project authors
+ Dustin Machi
+ Kris Zyp
+-------------------------------------------------------------------------------
+Project description
+
+jsonPath is a query system similar in idea to xpath, but for use against
+javascript objects. This code is a port of the jsonPath code at
+http://code.google.com/p/jsonpath/. It was contributed under CLA by Stefan
+Goessner. Thanks Stefan!
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+Usage:
+
+var matches = dojox.jsonPath.query(objectToQuery, jsonPathExpresson)
+
+Expressions:
+
+ $ The Root Object
+ @ The current object/element
+ . or [] The child operator
+ .. Recursive descent
+ * all objects
+ [] subscript operator
+ [,] Union operator
+ [start:end:step] array slice operator
+ ?() applies a filter/script expression
+ () script expresions
+
+ some examples:
+
+ Given the following test data set:
+
+ var json =
+ { "store": {
+ "book": [
+ { "category": "reference",
+ "author": "Nigel Rees",
+ "title": "Sayings of the Century",
+ "price": 8.95
+ },
+ { "category": "fiction",
+ "author": "Evelyn Waugh",
+ "title": "Sword of Honour",
+ "price": 12.99
+ },
+ { "category": "fiction",
+ "author": "Herman Melville",
+ "title": "Moby Dick",
+ "isbn": "0-553-21311-3",
+ "price": 8.99
+ },
+ { "category": "fiction",
+ "author": "J. R. R. Tolkien",
+ "title": "The Lord of the Rings",
+ "isbn": "0-395-19395-8",
+ "price": 22.99
+ }
+ ],
+ "bicycle": {
+ "color": "red",
+ "price": 19.95
+ }
+ }
+ };
+
+ Here are some example queries and their output:
+
+ $.store.book[*].author
+ ["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
+
+ $..author
+ ["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
+
+ $.store.*
+ [[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"color":"red","price":19.95}]
+
+ $.store..price
+ [8.95,12.99,8.99,22.99,19.95]
+
+ $..book[(@.length-1)]
+ [{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+ $..book[-1]
+ [{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+ $..book[0,1]
+ [{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
+
+ $..book[:2]
+ [{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
+
+ $..book[?(@.isbn)]
+ [{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+ $..book[?(@.price<10)]
+ [{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
+
+ $..*
+ [{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}},[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"color":"red","price":19.95},{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},"reference","Nigel Rees","Sayings of the Century",8.95,"fiction","Evelyn Waugh","Sword of Honour",12.99,"fiction","Herman Melville","Moby Dick","0-553-21311-3",8.99,"fiction","J. R. R. Tolkien","The Lord of the Rings","0-395-19395-8",22.99,"red",19.95]
+
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/jsonPath
+
+Install into the following directory structure:
+/dojox/jsonPath/
+
+...which should be at the same level as your Dojo checkout.
diff --git a/js/dojo/dojox/jsonPath/query.js b/js/dojo/dojox/jsonPath/query.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/jsonPath/query.js
@@ -0,0 +1,204 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jsonPath.query"]){
+dojo._hasResource["dojox.jsonPath.query"]=true;
+dojo.provide("dojox.jsonPath.query");
+dojox.jsonPath.query=function(_1,_2,_3){
+var re=dojox.jsonPath._regularExpressions;
+if(!_3){
+_3={};
+}
+var _4=[];
+function _5(i){
+return _4[i];
+};
+var _6;
+if(_3.resultType=="PATH"&&_3.evalType=="RESULT"){
+throw Error("RESULT based evaluation not supported with PATH based results");
+}
+var P={resultType:_3.resultType||"VALUE",normalize:function(_7){
+var _8=[];
+_7=_7.replace(/'([^']|'')*'/g,function(t){
+return "_str("+(_4.push(eval(t))-1)+")";
+});
+var ll=-1;
+while(ll!=_8.length){
+ll=_8.length;
+_7=_7.replace(/(\??\([^\(\)]*\))/g,function($0){
+return "#"+(_8.push($0)-1);
+});
+}
+_7=_7.replace(/[\['](#[0-9]+)[\]']/g,"[$1]").replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,"");
+ll=-1;
+while(ll!=_7){
+ll=_7;
+_7=_7.replace(/#([0-9]+)/g,function($0,$1){
+return _8[$1];
+});
+}
+return _7.split(";");
+},asPaths:function(_9){
+for(var j=0;j<_9.length;j++){
+var p="$";
+var x=_9[j];
+for(var i=1,n=x.length;i<n;i++){
+p+=/^[0-9*]+$/.test(x[i])?("["+x[i]+"]"):("['"+x[i]+"']");
+}
+_9[j]=p;
+}
+return _9;
+},exec:function(_a,_b,rb){
+var _c=["$"];
+var _d=rb?_b:[_b];
+var _e=[_c];
+function _f(v,p,def){
+if(v&&v.hasOwnProperty(p)&&P.resultType!="VALUE"){
+_e.push(_c.concat([p]));
+}
+if(def){
+_d=v[p];
+}else{
+if(v&&v.hasOwnProperty(p)){
+_d.push(v[p]);
+}
+}
+};
+function _10(v){
+_d.push(v);
+_e.push(_c);
+P.walk(v,function(i){
+if(typeof v[i]==="object"){
+var _11=_c;
+_c=_c.concat(i);
+_10(v[i]);
+_c=_11;
+}
+});
+};
+function _12(loc,val){
+if(val instanceof Array){
+var len=val.length,_13=0,end=len,_14=1;
+loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function($0,$1,$2,$3){
+_13=parseInt($1||_13);
+end=parseInt($2||end);
+_14=parseInt($3||_14);
+});
+_13=(_13<0)?Math.max(0,_13+len):Math.min(len,_13);
+end=(end<0)?Math.max(0,end+len):Math.min(len,end);
+for(var i=_13;i<end;i+=_14){
+_f(val,i);
+}
+}
+};
+function _15(str){
+var i=loc.match(/^_str\(([0-9]+)\)$/);
+return i?_4[i[1]]:str;
+};
+function _16(val){
+if(/^\(.*?\)$/.test(loc)){
+_f(val,P.eval(loc,val),rb);
+}else{
+if(loc==="*"){
+P.walk(val,rb&&val instanceof Array?function(i){
+P.walk(val[i],function(j){
+_f(val[i],j);
+});
+}:function(i){
+_f(val,i);
+});
+}else{
+if(loc===".."){
+_10(val);
+}else{
+if(/,/.test(loc)){
+for(var s=loc.split(/'?,'?/),i=0,n=s.length;i<n;i++){
+_f(val,_15(s[i]));
+}
+}else{
+if(/^\?\(.*?\)$/.test(loc)){
+P.walk(val,function(i){
+if(P.eval(loc.replace(/^\?\((.*?)\)$/,"$1"),val[i])){
+_f(val,i);
+}
+});
+}else{
+if(/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)){
+_12(loc,val);
+}else{
+loc=_15(loc);
+if(rb&&val instanceof Array&&!/^[0-9*]+$/.test(loc)){
+P.walk(val,function(i){
+_f(val[i],loc);
+});
+}else{
+_f(val,loc,rb);
+}
+}
+}
+}
+}
+}
+}
+};
+while(_a.length){
+var loc=_a.shift();
+if((_b=_d)===null||_b===undefined){
+return _b;
+}
+_d=[];
+var _17=_e;
+_e=[];
+if(rb){
+_16(_b);
+}else{
+P.walk(_b,function(i){
+_c=_17[i]||_c;
+_16(_b[i]);
+});
+}
+}
+if(P.resultType=="BOTH"){
+_e=P.asPaths(_e);
+var _18=[];
+for(var i=0;i<_e.length;i++){
+_18.push({path:_e[i],value:_d[i]});
+}
+return _18;
+}
+return P.resultType=="PATH"?P.asPaths(_e):_d;
+},walk:function(val,f){
+if(val instanceof Array){
+for(var i=0,n=val.length;i<n;i++){
+if(i in val){
+f(i);
+}
+}
+}else{
+if(typeof val==="object"){
+for(var m in val){
+if(val.hasOwnProperty(m)){
+f(m);
+}
+}
+}
+}
+},eval:function(x,_19){
+try{
+return $&&_19&&eval(x.replace(/@/g,"_v"));
+}
+catch(e){
+throw new SyntaxError("jsonPath: "+e.message+": "+x.replace(/@/g,"_v").replace(/\^/g,"_a"));
+}
+}};
+var $=_1;
+if(_2&&_1){
+return P.exec(P.normalize(_2).slice(1),_1,_3.evalType=="RESULT");
+}
+return false;
+};
+}
diff --git a/js/dojo/dojox/lang/aspect.js b/js/dojo/dojox/lang/aspect.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect.js
@@ -0,0 +1,212 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect"]){
+dojo._hasResource["dojox.lang.aspect"]=true;
+dojo.provide("dojox.lang.aspect");
+(function(){
+var d=dojo,_1=dojox.lang.aspect,ap=Array.prototype,_2=[],_3;
+var _4=function(){
+this.next_before=this.prev_before=this.next_around=this.prev_around=this.next_afterReturning=this.prev_afterReturning=this.next_afterThrowing=this.prev_afterThrowing=this;
+this.counter=0;
+};
+d.extend(_4,{add:function(_5){
+var _6=d.isFunction(_5),_7={advice:_5,dynamic:_6};
+this._add(_7,"before","",_6,_5);
+this._add(_7,"around","",_6,_5);
+this._add(_7,"after","Returning",_6,_5);
+this._add(_7,"after","Throwing",_6,_5);
+++this.counter;
+return _7;
+},_add:function(_8,_9,_a,_b,_c){
+var _d=_9+_a;
+if(_b||_c[_9]||(_a&&_c[_d])){
+var _e="next_"+_d,_f="prev_"+_d;
+(_8[_f]=this[_f])[_e]=_8;
+(_8[_e]=this)[_f]=_8;
+}
+},remove:function(_10){
+this._remove(_10,"before");
+this._remove(_10,"around");
+this._remove(_10,"afterReturning");
+this._remove(_10,"afterThrowing");
+--this.counter;
+},_remove:function(_11,_12){
+var _13="next_"+_12,_14="prev_"+_12;
+if(_11[_13]){
+_11[_13][_14]=_11[_14];
+_11[_14][_13]=_11[_13];
+}
+},isEmpty:function(){
+return !this.counter;
+}});
+var _15=function(){
+return function(){
+var _16=arguments.callee,_17=_16.advices,ret,i,a,e,t;
+if(_3){
+_2.push(_3);
+}
+_3={instance:this,joinPoint:_16,depth:_2.length,around:_17.prev_around,dynAdvices:[],dynIndex:0};
+try{
+for(i=_17.prev_before;i!=_17;i=i.prev_before){
+if(i.dynamic){
+_3.dynAdvices.push(a=new i.advice(_3));
+if(t=a.before){
+t.apply(a,arguments);
+}
+}else{
+t=i.advice;
+t.before.apply(t,arguments);
+}
+}
+try{
+ret=(_17.prev_around==_17?_16.target:_1.proceed).apply(this,arguments);
+}
+catch(e){
+_3.dynIndex=_3.dynAdvices.length;
+for(i=_17.next_afterThrowing;i!=_17;i=i.next_afterThrowing){
+a=i.dynamic?_3.dynAdvices[--_3.dynIndex]:i.advice;
+if(t=a.afterThrowing){
+t.call(a,e);
+}
+if(t=a.after){
+t.call(a);
+}
+}
+throw e;
+}
+_3.dynIndex=_3.dynAdvices.length;
+for(i=_17.next_afterReturning;i!=_17;i=i.next_afterReturning){
+a=i.dynamic?_3.dynAdvices[--_3.dynIndex]:i.advice;
+if(t=a.afterReturning){
+t.call(a,ret);
+}
+if(t=a.after){
+t.call(a);
+}
+}
+var ls=_16._listeners;
+for(i in ls){
+if(!(i in ap)){
+ls[i].apply(this,arguments);
+}
+}
+}
+finally{
+for(i=0;i<_3.dynAdvices.length;++i){
+a=_3.dynAdvices[i];
+if(a.destroy){
+a.destroy();
+}
+}
+_3=_2.length?_2.pop():null;
+}
+return ret;
+};
+};
+_1.advise=function(obj,_18,_19){
+if(typeof obj!="object"){
+obj=obj.prototype;
+}
+var _1a=[];
+if(!(_18 instanceof Array)){
+_18=[_18];
+}
+for(var j=0;j<_18.length;++j){
+var t=_18[j];
+if(t instanceof RegExp){
+for(var i in obj){
+if(d.isFunction(obj[i])&&t.test(i)){
+_1a.push(i);
+}
+}
+}else{
+if(d.isFunction(obj[t])){
+_1a.push(t);
+}
+}
+}
+if(!d.isArray(_19)){
+_19=[_19];
+}
+return _1.adviseRaw(obj,_1a,_19);
+};
+_1.adviseRaw=function(obj,_1b,_1c){
+if(!_1b.length||!_1c.length){
+return null;
+}
+var m={},al=_1c.length;
+for(var i=_1b.length-1;i>=0;--i){
+var _1d=_1b[i],o=obj[_1d],ao=new Array(al),t=o.advices;
+if(!t){
+var x=obj[_1d]=_15();
+x.target=o.target||o;
+x.targetName=_1d;
+x._listeners=o._listeners||[];
+x.advices=new _4;
+t=x.advices;
+}
+for(var j=0;j<al;++j){
+ao[j]=t.add(_1c[j]);
+}
+m[_1d]=ao;
+}
+return [obj,m];
+};
+_1.unadvise=function(_1e){
+if(!_1e){
+return;
+}
+var obj=_1e[0],_1f=_1e[1];
+for(var _20 in _1f){
+var o=obj[_20],t=o.advices,ao=_1f[_20];
+for(var i=ao.length-1;i>=0;--i){
+t.remove(ao[i]);
+}
+if(t.isEmpty()){
+var _21=true,ls=o._listeners;
+if(ls.length){
+for(i in ls){
+if(!(i in ap)){
+_21=false;
+break;
+}
+}
+}
+if(_21){
+obj[_20]=o.target;
+}else{
+var x=obj[_20]=d._listener.getDispatcher();
+x.target=o.target;
+x._listeners=ls;
+}
+}
+}
+};
+_1.getContext=function(){
+return _3;
+};
+_1.getContextStack=function(){
+return _2;
+};
+_1.proceed=function(){
+var _22=_3.joinPoint,_23=_22.advices;
+for(var c=_3.around;c!=_23;c=_3.around){
+_3.around=c.prev_around;
+if(c.dynamic){
+var a=_3.dynAdvices[_3.dynIndex++],t=a.around;
+if(t){
+return t.apply(a,arguments);
+}
+}else{
+return c.advice.around.apply(c.advice,arguments);
+}
+}
+return _22.target.apply(_3.instance,arguments);
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/cflow.js b/js/dojo/dojox/lang/aspect/cflow.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/cflow.js
@@ -0,0 +1,43 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.cflow"]){
+dojo._hasResource["dojox.lang.aspect.cflow"]=true;
+dojo.provide("dojox.lang.aspect.cflow");
+(function(){
+var _1=dojox.lang.aspect;
+_1.cflow=function(_2,_3){
+if(arguments.length>1&&!(_3 instanceof Array)){
+_3=[_3];
+}
+var _4=_1.getContextStack();
+for(var i=_4.length-1;i>=0;--i){
+var c=_4[i];
+if(_2&&c.instance!=_2){
+continue;
+}
+if(!_3){
+return true;
+}
+var n=c.joinPoint.targetName;
+for(var j=_3.length-1;j>=0;--j){
+var m=_3[j];
+if(m instanceof RegExp){
+if(m.test(n)){
+return true;
+}
+}else{
+if(n==m){
+return true;
+}
+}
+}
+}
+return false;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/counter.js b/js/dojo/dojox/lang/aspect/counter.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/counter.js
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.counter"]){
+dojo._hasResource["dojox.lang.aspect.counter"]=true;
+dojo.provide("dojox.lang.aspect.counter");
+(function(){
+var _1=dojox.lang.aspect;
+var _2=function(){
+this.reset();
+};
+dojo.extend(_2,{before:function(){
+++this.calls;
+},afterThrowing:function(){
+++this.errors;
+},reset:function(){
+this.calls=this.errors=0;
+}});
+_1.counter=function(){
+return new _2;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/memoizer.js b/js/dojo/dojox/lang/aspect/memoizer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/memoizer.js
@@ -0,0 +1,47 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.memoizer"]){
+dojo._hasResource["dojox.lang.aspect.memoizer"]=true;
+dojo.provide("dojox.lang.aspect.memoizer");
+(function(){
+var _1=dojox.lang.aspect;
+var _2={around:function(_3){
+var _4=_1.getContext(),_5=_4.joinPoint,_6=_4.instance,t,u,_7;
+if((t=_6.__memoizerCache)&&(t=t[_5.targetName])&&(_3 in t)){
+return t[_3];
+}
+var _7=_1.proceed.apply(null,arguments);
+if(!(t=_6.__memoizerCache)){
+t=_6.__memoizerCache={};
+}
+if(!(u=t[_5.targetName])){
+u=t[_5.targetName]={};
+}
+return u[_3]=_7;
+}};
+var _8=function(_9){
+return {around:function(){
+var _a=_1.getContext(),_b=_a.joinPoint,_c=_a.instance,t,u,_d,_e=_9.apply(_c,arguments);
+if((t=_c.__memoizerCache)&&(t=t[_b.targetName])&&(_e in t)){
+return t[_e];
+}
+var _d=_1.proceed.apply(null,arguments);
+if(!(t=_c.__memoizerCache)){
+t=_c.__memoizerCache={};
+}
+if(!(u=t[_b.targetName])){
+u=t[_b.targetName]={};
+}
+return u[_e]=_d;
+}};
+};
+_1.memoizer=function(_f){
+return arguments.length==0?_2:_8(_f);
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/memoizerGuard.js b/js/dojo/dojox/lang/aspect/memoizerGuard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/memoizerGuard.js
@@ -0,0 +1,35 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.memoizerGuard"]){
+dojo._hasResource["dojox.lang.aspect.memoizerGuard"]=true;
+dojo.provide("dojox.lang.aspect.memoizerGuard");
+(function(){
+var _1=dojox.lang.aspect,_2=function(_3){
+var _4=_1.getContext().instance,t;
+if(!(t=_4.__memoizerCache)){
+return;
+}
+if(arguments.length==0){
+delete _4.__memoizerCache;
+}else{
+if(dojo.isArray(_3)){
+dojo.forEach(_3,function(m){
+delete t[m];
+});
+}else{
+delete t[_3];
+}
+}
+};
+_1.memoizerGuard=function(_5){
+return {after:function(){
+_2(_5);
+}};
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/profiler.js b/js/dojo/dojox/lang/aspect/profiler.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/profiler.js
@@ -0,0 +1,29 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.profiler"]){
+dojo._hasResource["dojox.lang.aspect.profiler"]=true;
+dojo.provide("dojox.lang.aspect.profiler");
+(function(){
+var _1=dojox.lang.aspect,_2=0;
+var _3=function(_4){
+this.args=_4?[_4]:[];
+this.inCall=0;
+};
+dojo.extend(_3,{before:function(){
+if(!(this.inCall++)){
+console.profile.apply(console,this.args);
+}
+},after:function(){
+if(!--this.inCall){
+}
+}});
+_1.profiler=function(_5){
+return new _3(_5);
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/timer.js b/js/dojo/dojox/lang/aspect/timer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/timer.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.timer"]){
+dojo._hasResource["dojox.lang.aspect.timer"]=true;
+dojo.provide("dojox.lang.aspect.timer");
+(function(){
+var _1=dojox.lang.aspect,_2=0;
+var _3=function(_4){
+this.name=_4||("DojoAopTimer #"+ ++_2);
+this.inCall=0;
+};
+dojo.extend(_3,{before:function(){
+if(!(this.inCall++)){
+}
+},after:function(){
+if(!--this.inCall){
+}
+}});
+_1.timer=function(_5){
+return new _3(_5);
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/aspect/tracer.js b/js/dojo/dojox/lang/aspect/tracer.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/aspect/tracer.js
@@ -0,0 +1,34 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.tracer"]){
+dojo._hasResource["dojox.lang.aspect.tracer"]=true;
+dojo.provide("dojox.lang.aspect.tracer");
+(function(){
+var _1=dojox.lang.aspect;
+var _2=function(_3){
+this.method=_3?"group":"log";
+if(_3){
+this.after=this._after;
+}
+};
+dojo.extend(_2,{before:function(){
+var _4=_1.getContext(),_5=_4.joinPoint,_6=Array.prototype.join.call(arguments,", ");
+console[this.method](_4.instance,"=>",_5.targetName+"("+_6+")");
+},afterReturning:function(_7){
+var _8=_1.getContext().joinPoint;
+if(typeof _7!="undefined"){
+}else{
+}
+},afterThrowing:function(_9){
+},_after:function(_a){
+}});
+_1.tracer=function(_b){
+return new _2(_b);
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/docs.js b/js/dojo/dojox/lang/docs.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/docs.js
@@ -0,0 +1,192 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.docs"]){
+dojo._hasResource["dojox.lang.docs"]=true;
+dojo.provide("dojox.lang.docs");
+(function(){
+function _1(_2){
+};
+var _3={};
+var _4=[];
+var _5=dojox.lang.docs._loadedDocs={};
+var _6=function(_7,_8){
+_3[_8]=_7;
+};
+var _9=function(_a){
+var _b=_a.type||"";
+var _c,_d=false,_e=false,_f;
+_b=_b.replace(/\?/,function(){
+_d=true;
+return "";
+});
+_b=_b.replace(/\[\]/,function(){
+_e=true;
+return "";
+});
+if(_b.match(/HTML/)){
+_b="string";
+}else{
+if(_b=="String"||_b=="Number"||_b=="Boolean"||_b=="Object"||_b=="Array"||_b=="Integer"||_b=="Function"){
+_b=_b.toLowerCase();
+}else{
+if(_b=="bool"){
+_b="boolean";
+}else{
+if(_b){
+_c=dojo.getObject(_b)||{};
+_f=true;
+}else{
+_c={};
+}
+}
+}
+}
+_c=_c||{type:_b};
+if(_e){
+_c={items:_c,type:"array"};
+_f=false;
+}
+if(!_f){
+if(_d){
+_c.optional=true;
+}
+if(/const/.test(_a.tags)){
+_c.readonly=true;
+}
+}
+return _c;
+};
+var _10=function(_11,_12){
+var _13=_5[_12];
+if(_13){
+_11.description=_13.description;
+_11.properties={};
+_11.methods={};
+if(_13.properties){
+var _14=_13.properties;
+for(var i=0,l=_14.length;i<l;i++){
+if(_14[i].scope=="prototype"){
+var _15=_11.properties[_14[i].name]=_9(_14[i]);
+_15.description=_14[i].summary;
+}
+}
+}
+if(_13.methods){
+var _16=_13.methods;
+for(i=0,l=_16.length;i<l;i++){
+_12=_16[i].name;
+if(_12&&_16[i].scope=="prototype"){
+var _17=_11.methods[_12]={};
+_17.description=_16[i].summary;
+var _18=_16[i].parameters;
+if(_18){
+_17.parameters=[];
+for(var j=0,k=_18.length;j<k;j++){
+var _19=_18[j];
+var _1a=_17.parameters[j]=_9(_19);
+_1a.name=_19.name;
+_1a.optional="optional"==_19.usage;
+}
+}
+var ret=_16[i]["return-types"];
+if(ret&&ret[0]){
+var _1b=_9(ret[0]);
+if(_1b.type){
+_17.returns=_1b;
+}
+}
+}
+}
+}
+var _1c=_13.superclass;
+if(_1c){
+_11["extends"]=dojo.getObject(_1c);
+}
+}
+};
+var _1d=function(_1e){
+_4.push(_1e);
+};
+var _1f=dojo.declare;
+dojo.declare=function(_20){
+var _21=_1f.apply(this,arguments);
+_6(_21,_20);
+return _21;
+};
+dojo.mixin(dojo.declare,_1f);
+var _22;
+var _23=dojo.require;
+dojo.require=function(_24){
+_1d(_24);
+var _25=_23.apply(this,arguments);
+return _25;
+};
+dojox.lang.docs.init=function(_26){
+function _27(){
+dojo.require=_23;
+_4=null;
+try{
+dojo.xhrGet({sync:!_26,url:dojo.baseUrl+"../util/docscripts/api.json",handleAs:"text"}).addCallbacks(function(obj){
+_5=(new Function("return "+obj))();
+obj=null;
+_6=_10;
+for(var i in _3){
+_6(_3[i],i);
+}
+_3=null;
+},_1);
+}
+catch(e){
+_1(e);
+}
+};
+if(_22){
+return null;
+}
+_22=true;
+var _28=function(_29,_2a){
+return dojo.xhrGet({sync:_2a||!_26,url:dojo.baseUrl+"../util/docscripts/api/"+_29+".json",handleAs:"text"}).addCallback(function(obj){
+obj=(new Function("return "+obj))();
+for(var _2b in obj){
+if(!_5[_2b]){
+_5[_2b]=obj[_2b];
+}
+}
+});
+};
+try{
+var _2c=_4.shift();
+_28(_2c,true).addCallbacks(function(){
+_1d=function(_2d){
+if(!_5[_2d]){
+try{
+_28(_2d);
+}
+catch(e){
+_5[_2d]={};
+}
+}
+};
+dojo.forEach(_4,function(mod){
+_1d(mod);
+});
+_4=null;
+_6=_10;
+for(i in _3){
+_6(_3[i],i);
+}
+_3=null;
+},_27);
+}
+catch(e){
+_27();
+}
+return null;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/array.js b/js/dojo/dojox/lang/functional/array.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/array.js
@@ -0,0 +1,161 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.array"]){
+dojo._hasResource["dojox.lang.functional.array"]=true;
+dojo.provide("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{filter:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t=[],v,i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+v=a.next();
+if(f.call(o,v,i++,a)){
+t.push(v);
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+}
+}
+}
+return t;
+},forEach:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;f.call(o,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();f.call(o,a.next(),i++,a)){
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+f.call(o,a[i],i,a);
+}
+}
+}
+}
+return o;
+},map:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,i;
+if(d.isArray(a)){
+t=new Array(n=a.length);
+for(i=0;i<n;t[i]=f.call(o,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+t=[];
+for(i=0;a.hasNext();t.push(f.call(o,a.next(),i++,a))){
+}
+}else{
+t=[];
+for(i in a){
+if(!(i in _1)){
+t.push(f.call(o,a[i],i,a));
+}
+}
+}
+}
+return t;
+},every:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+if(!f.call(o,a.next(),i++,a)){
+return false;
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+}
+}
+}
+return true;
+},some:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+if(f.call(o,a.next(),i++,a)){
+return true;
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+}
+}
+}
+return false;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/binrec.js b/js/dojo/dojox/lang/functional/binrec.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/binrec.js
@@ -0,0 +1,62 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.binrec"]){
+dojo._hasResource["dojox.lang.functional.binrec"]=true;
+dojo.provide("dojox.lang.functional.binrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_z.r","_r","_z.a"];
+df.binrec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _z.r, _r, _z.a)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _x=arguments,_y,_z,_r".concat(_b.length?","+_b.join(","):"",_c.length?",_t=_x.callee,"+_c.join(","):"",t?(_c.length?",_t=_t.t":"_t=_x.callee.t"):"",";while(!",cs,"){_r=",bs,";_y={p:_y,a:_r[1]};_z={p:_z,a:_x};_x=_r[0]}for(;;){do{_r=",ts,";if(!_z)return _r;while(\"r\" in _z){_r=",as,";if(!(_z=_z.p))return _r}_z.r=_r;_x=_y.a;_y=_y.p}while(",cs,");do{_r=",bs,";_y={p:_y,a:_r[1]};_z={p:_z,a:_x};_x=_r[0]}while(!",cs,")}"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/curry.js b/js/dojo/dojox/lang/functional/curry.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/curry.js
@@ -0,0 +1,64 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.curry"]){
+dojo._hasResource["dojox.lang.functional.curry"]=true;
+dojo.provide("dojox.lang.functional.curry");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional,ap=Array.prototype;
+var _1=function(_2){
+return function(){
+var _3=_2.args.concat(ap.slice.call(arguments,0));
+if(arguments.length+_2.args.length<_2.arity){
+return _1({func:_2.func,arity:_2.arity,args:_3});
+}
+return _2.func.apply(this,_3);
+};
+};
+dojo.mixin(df,{curry:function(f,_4){
+f=df.lambda(f);
+_4=typeof _4=="number"?_4:f.length;
+return _1({func:f,arity:_4,args:[]});
+},arg:{},partial:function(f){
+var a=arguments,l=a.length,_5=new Array(l-1),p=[],i=1,t;
+f=df.lambda(f);
+for(;i<l;++i){
+t=a[i];
+_5[i-1]=t;
+if(t===df.arg){
+p.push(i-1);
+}
+}
+return function(){
+var t=ap.slice.call(_5,0),i=0,l=p.length;
+for(;i<l;++i){
+t[p[i]]=arguments[i];
+}
+return f.apply(this,t);
+};
+},mixer:function(f,_6){
+f=df.lambda(f);
+return function(){
+var t=new Array(_6.length),i=0,l=_6.length;
+for(;i<l;++i){
+t[i]=arguments[_6[i]];
+}
+return f.apply(this,t);
+};
+},flip:function(f){
+f=df.lambda(f);
+return function(){
+var a=arguments,l=a.length-1,t=new Array(l+1),i=0;
+for(;i<=l;++i){
+t[l-i]=a[i];
+}
+return f.apply(this,t);
+};
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/fold.js b/js/dojo/dojox/lang/functional/fold.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/fold.js
@@ -0,0 +1,104 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.fold"]){
+dojo._hasResource["dojox.lang.functional.fold"]=true;
+dojo.provide("dojox.lang.functional.fold");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{foldl:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();z=f.call(o,z,a.next(),i++,a)){
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+z=f.call(o,z,a[i],i,a);
+}
+}
+}
+}
+return z;
+},foldl1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var z,i,n;
+if(d.isArray(a)){
+z=a[0];
+for(i=1,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+if(a.hasNext()){
+z=a.next();
+for(i=1;a.hasNext();z=f.call(o,z,a.next(),i++,a)){
+}
+}
+}else{
+var _2=true;
+for(i in a){
+if(!(i in _1)){
+if(_2){
+z=a[i];
+_2=false;
+}else{
+z=f.call(o,z,a[i],i,a);
+}
+}
+}
+}
+}
+return z;
+},foldr:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length;i>0;--i,z=f.call(o,z,a[i],i,a)){
+}
+return z;
+},foldr1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,z=a[n-1],i=n-1;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a)){
+}
+return z;
+},reduce:function(a,f,z){
+return arguments.length<3?df.foldl1(a,f):df.foldl(a,f,z);
+},reduceRight:function(a,f,z){
+return arguments.length<3?df.foldr1(a,f):df.foldr(a,f,z);
+},unfold:function(pr,f,g,z,o){
+o=o||d.global;
+f=df.lambda(f);
+g=df.lambda(g);
+pr=df.lambda(pr);
+var t=[];
+for(;!pr.call(o,z);t.push(f.call(o,z)),z=g.call(o,z)){
+}
+return t;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/lambda.js b/js/dojo/dojox/lang/functional/lambda.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/lambda.js
@@ -0,0 +1,89 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.lambda"]){
+dojo._hasResource["dojox.lang.functional.lambda"]=true;
+dojo.provide("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional,_1={};
+var _2="ab".split(/a*/).length>1?String.prototype.split:function(_3){
+var r=this.split.call(this,_3),m=_3.exec(this);
+if(m&&m.index==0){
+r.unshift("");
+}
+return r;
+};
+var _4=function(s){
+var _5=[],_6=_2.call(s,/\s*->\s*/m);
+if(_6.length>1){
+while(_6.length){
+s=_6.pop();
+_5=_6.pop().split(/\s*,\s*|\s+/m);
+if(_6.length){
+_6.push("(function("+_5+"){return ("+s+")})");
+}
+}
+}else{
+if(s.match(/\b_\b/)){
+_5=["_"];
+}else{
+var l=s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),r=s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);
+if(l||r){
+if(l){
+_5.push("$1");
+s="$1"+s;
+}
+if(r){
+_5.push("$2");
+s=s+"$2";
+}
+}else{
+var _7=s.replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g,"").match(/([a-z_$][a-z_$\d]*)/gi)||[],t={};
+dojo.forEach(_7,function(v){
+if(!(v in t)){
+_5.push(v);
+t[v]=1;
+}
+});
+}
+}
+}
+return {args:_5,body:s};
+};
+var _8=function(a){
+return a.length?function(){
+var i=a.length-1,x=df.lambda(a[i]).apply(this,arguments);
+for(--i;i>=0;--i){
+x=df.lambda(a[i]).call(this,x);
+}
+return x;
+}:function(x){
+return x;
+};
+};
+dojo.mixin(df,{rawLambda:function(s){
+return _4(s);
+},buildLambda:function(s){
+s=_4(s);
+return "function("+s.args.join(",")+"){return ("+s.body+");}";
+},lambda:function(s){
+if(typeof s=="function"){
+return s;
+}
+if(s instanceof Array){
+return _8(s);
+}
+if(s in _1){
+return _1[s];
+}
+s=_4(s);
+return _1[s]=new Function(s.args,"return ("+s.body+");");
+},clearLambdaCache:function(){
+_1={};
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/linrec.js b/js/dojo/dojox/lang/functional/linrec.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/linrec.js
@@ -0,0 +1,62 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.linrec"]){
+dojo._hasResource["dojox.lang.functional.linrec"]=true;
+dojo.provide("dojox.lang.functional.linrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_r","_y.a"];
+df.linrec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _r, _y.a)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _x=arguments,_y,_r".concat(_b.length?","+_b.join(","):"",_c.length?",_t=_x.callee,"+_c.join(","):t?",_t=_x.callee":"",";for(;!",cs,";_x=",bs,"){_y={p:_y,a:_x}}_r=",ts,";for(;_y;_y=_y.p){_r=",as,"}return _r"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/listcomp.js b/js/dojo/dojox/lang/functional/listcomp.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/listcomp.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.listcomp"]){
+dojo._hasResource["dojox.lang.functional.listcomp"]=true;
+dojo.provide("dojox.lang.functional.listcomp");
+(function(){
+var _1=/\bfor\b|\bif\b/gm;
+var _2=function(s){
+var _3=s.split(_1),_4=s.match(_1),_5=["var r = [];"],_6=[],i=0,l=_4.length;
+while(i<l){
+var a=_4[i],f=_3[++i];
+if(a=="for"&&!/^\s*\(\s*(;|var)/.test(f)){
+f=f.replace(/^\s*\(/,"(var ");
+}
+_5.push(a,f,"{");
+_6.push("}");
+}
+return _5.join("")+"r.push("+_3[0]+");"+_6.join("")+"return r;";
+};
+dojo.mixin(dojox.lang.functional,{buildListcomp:function(s){
+return "function(){"+_2(s)+"}";
+},compileListcomp:function(s){
+return new Function([],_2(s));
+},listcomp:function(s){
+return (new Function([],_2(s)))();
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/multirec.js b/js/dojo/dojox/lang/functional/multirec.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/multirec.js
@@ -0,0 +1,62 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.multirec"]){
+dojo._hasResource["dojox.lang.functional.multirec"]=true;
+dojo.provide("dojox.lang.functional.multirec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_y.r","_y.o"];
+df.multirec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _y.r, _y.o)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _y={a:arguments},_x,_r,_z,_i".concat(_b.length?","+_b.join(","):"",_c.length?",_t=arguments.callee,"+_c.join(","):"",t?(_c.length?",_t=_t.t":"_t=arguments.callee.t"):"",";for(;;){for(;;){if(_y.o){_r=",as,";break}_x=_y.a;if(",cs,"){_r=",ts,";break}_y.o=_x;_x=",bs,";_y.r=[];_z=_y;for(_i=_x.length-1;_i>=0;--_i){_y={p:_y,a:_x[_i],z:_z}}}if(!(_z=_y.z)){return _r}_z.r.push(_r);_y=_y.p}"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/numrec.js b/js/dojo/dojox/lang/functional/numrec.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/numrec.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.numrec"]){
+dojo._hasResource["dojox.lang.functional.numrec"]=true;
+dojo.provide("dojox.lang.functional.numrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2=["_r","_i"];
+df.numrec=function(_3,_4){
+var a,as,_5={},_6=function(x){
+_5[x]=1;
+};
+if(typeof _4=="string"){
+as=_1(_4,_2,_6);
+}else{
+a=df.lambda(_4);
+as="_a.call(this, _r, _i)";
+}
+var _7=df.keys(_5),f=new Function(["_x"],"var _t=arguments.callee,_r=_t.t,_i".concat(_7.length?","+_7.join(","):"",a?",_a=_t.a":"",";for(_i=1;_i<=_x;++_i){_r=",as,"}return _r"));
+f.t=_3;
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/object.js b/js/dojo/dojox/lang/functional/object.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/object.js
@@ -0,0 +1,64 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.object"]){
+dojo._hasResource["dojox.lang.functional.object"]=true;
+dojo.provide("dojox.lang.functional.object");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{keys:function(_2){
+var t=[];
+for(var i in _2){
+if(!(i in _1)){
+t.push(i);
+}
+}
+return t;
+},values:function(_3){
+var t=[];
+for(var i in _3){
+if(!(i in _1)){
+t.push(_3[i]);
+}
+}
+return t;
+},filterIn:function(_4,f,o){
+o=o||d.global;
+f=df.lambda(f);
+var t={},v,i;
+for(i in _4){
+if(!(i in _1)){
+v=_4[i];
+if(f.call(o,v,i,_4)){
+t[i]=v;
+}
+}
+}
+return t;
+},forIn:function(_5,f,o){
+o=o||d.global;
+f=df.lambda(f);
+for(var i in _5){
+if(!(i in _1)){
+f.call(o,_5[i],i,_5);
+}
+}
+return o;
+},mapIn:function(_6,f,o){
+o=o||d.global;
+f=df.lambda(f);
+var t={},i;
+for(i in _6){
+if(!(i in _1)){
+t[i]=f.call(o,_6[i],i,_6);
+}
+}
+return t;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/reversed.js b/js/dojo/dojox/lang/functional/reversed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/reversed.js
@@ -0,0 +1,72 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.reversed"]){
+dojo._hasResource["dojox.lang.functional.reversed"]=true;
+dojo.provide("dojox.lang.functional.reversed");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional;
+d.mixin(df,{filterRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t=[],v,i=a.length-1;
+for(;i>=0;--i){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+return t;
+},forEachRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;f.call(o,a[i],i,a),--i){
+}
+},mapRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n),i=n-1,j=0;
+for(;i>=0;t[j++]=f.call(o,a[i],i,a),--i){
+}
+return t;
+},everyRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;--i){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+return true;
+},someRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;--i){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+return false;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/scan.js b/js/dojo/dojox/lang/functional/scan.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/scan.js
@@ -0,0 +1,98 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.scan"]){
+dojo._hasResource["dojox.lang.functional.scan"]=true;
+dojo.provide("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{scanl:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,i;
+if(d.isArray(a)){
+t=new Array((n=a.length)+1);
+t[0]=z;
+for(i=0;i<n;z=f.call(o,z,a[i],i,a),t[++i]=z){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+t=[z];
+for(i=0;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){
+}
+}else{
+t=[z];
+for(i in a){
+if(!(i in _1)){
+t.push(z=f.call(o,z,a[i],i,a));
+}
+}
+}
+}
+return t;
+},scanl1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,z,_2=true;
+if(d.isArray(a)){
+t=new Array(n=a.length);
+t[0]=z=a[0];
+for(var i=1;i<n;t[i]=z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+if(a.hasNext()){
+t=[z=a.next()];
+for(var i=1;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){
+}
+}
+}else{
+for(var i in a){
+if(!(i in _1)){
+if(_2){
+t=[z=a[i]];
+_2=false;
+}else{
+t.push(z=f.call(o,z,a[i],i,a));
+}
+}
+}
+}
+}
+return t;
+},scanr:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n+1),i=n;
+t[n]=z;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){
+}
+return t;
+},scanr1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n),z=a[n-1],i=n-1;
+t[i]=z;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){
+}
+return t;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/sequence.js b/js/dojo/dojox/lang/functional/sequence.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/sequence.js
@@ -0,0 +1,32 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.sequence"]){
+dojo._hasResource["dojox.lang.functional.sequence"]=true;
+dojo.provide("dojox.lang.functional.sequence");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional;
+d.mixin(df,{repeat:function(n,f,z,o){
+o=o||d.global;
+f=df.lambda(f);
+var t=new Array(n),i=1;
+t[0]=z;
+for(;i<n;t[i]=z=f.call(o,z),++i){
+}
+return t;
+},until:function(pr,f,z,o){
+o=o||d.global;
+f=df.lambda(f);
+pr=df.lambda(pr);
+var t=[];
+for(;!pr.call(o,z);t.push(z),z=f.call(o,z)){
+}
+return t;
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/tailrec.js b/js/dojo/dojox/lang/functional/tailrec.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/tailrec.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.tailrec"]){
+dojo._hasResource["dojox.lang.functional.tailrec"]=true;
+dojo.provide("dojox.lang.functional.tailrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x";
+df.tailrec=function(_3,_4,_5){
+var c,t,b,cs,ts,bs,_6={},_7={},_8=function(x){
+_6[x]=1;
+};
+if(typeof _3=="string"){
+cs=_1(_3,_2,_8);
+}else{
+c=df.lambda(_3);
+cs="_c.apply(this, _x)";
+_7["_c=_t.c"]=1;
+}
+if(typeof _4=="string"){
+ts=_1(_4,_2,_8);
+}else{
+t=df.lambda(_4);
+ts="_t.t.apply(this, _x)";
+}
+if(typeof _5=="string"){
+bs=_1(_5,_2,_8);
+}else{
+b=df.lambda(_5);
+bs="_b.apply(this, _x)";
+_7["_b=_t.b"]=1;
+}
+var _9=df.keys(_6),_a=df.keys(_7),f=new Function([],"var _x=arguments,_t=_x.callee,_c=_t.c,_b=_t.b".concat(_9.length?","+_9.join(","):"",_a.length?",_t=_x.callee,"+_a.join(","):t?",_t=_x.callee":"",";for(;!",cs,";_x=",bs,");return ",ts));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+return f;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/util.js b/js/dojo/dojox/lang/functional/util.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/util.js
@@ -0,0 +1,33 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.util"]){
+dojo._hasResource["dojox.lang.functional.util"]=true;
+dojo.provide("dojox.lang.functional.util");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional;
+dojo.mixin(df,{inlineLambda:function(_1,_2,_3){
+var s=df.rawLambda(_1);
+if(_3){
+df.forEach(s.args,_3);
+}
+var ap=typeof _2=="string",n=ap?s.args.length:Math.min(s.args.length,_2.length),a=new Array(4*n+4),i,j=1;
+for(i=0;i<n;++i){
+a[j++]=s.args[i];
+a[j++]="=";
+a[j++]=ap?_2+"["+i+"]":_2[i];
+a[j++]=",";
+}
+a[0]="(";
+a[j++]="(";
+a[j++]=s.body;
+a[j]="))";
+return a.join("");
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/functional/zip.js b/js/dojo/dojox/lang/functional/zip.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/functional/zip.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.zip"]){
+dojo._hasResource["dojox.lang.functional.zip"]=true;
+dojo.provide("dojox.lang.functional.zip");
+(function(){
+var df=dojox.lang.functional;
+dojo.mixin(df,{zip:function(){
+var n=arguments[0].length,m=arguments.length,i=1,t=new Array(n),j,p;
+for(;i<m;n=Math.min(n,arguments[i++].length)){
+}
+for(i=0;i<n;++i){
+p=new Array(m);
+for(j=0;j<m;p[j]=arguments[j][i],++j){
+}
+t[i]=p;
+}
+return t;
+},unzip:function(a){
+return df.zip.apply(null,a);
+}});
+})();
+}
diff --git a/js/dojo/dojox/lang/observable.js b/js/dojo/dojox/lang/observable.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/observable.js
@@ -0,0 +1,150 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.observable"]){
+dojo._hasResource["dojox.lang.observable"]=true;
+dojo.provide("dojox.lang.observable");
+dojo.experimental("dojox.lang.observable");
+dojox.lang.observable=function(_1,_2,_3,_4){
+return dojox.lang.makeObservable(_2,_3,_4)(_1);
+};
+dojox.lang.makeObservable=function(_5,_6,_7,_8){
+_8=_8||{};
+_7=_7||function(_9,_a,_b,_c){
+return _a[_b].apply(_9,_c);
+};
+function _d(_e,_f,i){
+return function(){
+return _7(_e,_f,i,arguments);
+};
+};
+if(dojox.lang.lettableWin){
+var _10=dojox.lang.makeObservable;
+_10.inc=(_10.inc||0)+1;
+var _11="gettable_"+_10.inc;
+dojox.lang.lettableWin[_11]=_5;
+var _12="settable_"+_10.inc;
+dojox.lang.lettableWin[_12]=_6;
+var _13={};
+return function(_14){
+if(_14.__observable){
+return _14.__observable;
+}
+if(_14.data__){
+throw new Error("Can wrap an object that is already wrapped");
+}
+var _15=[],i,l;
+for(i in _8){
+_15.push(i);
+}
+var _16={type:1,event:1};
+for(i in _14){
+if(i.match(/^[a-zA-Z][\w\$_]*$/)&&!(i in _8)&&!(i in _16)){
+_15.push(i);
+}
+}
+var _17=_15.join(",");
+var _18,_19=_13[_17];
+if(!_19){
+var _1a="dj_lettable_"+(_10.inc++);
+var _1b=_1a+"_dj_getter";
+var _1c=["Class "+_1a,"\tPublic data__"];
+for(i=0,l=_15.length;i<l;i++){
+_18=_15[i];
+var _1d=typeof _14[_18];
+if(_1d=="function"||_8[_18]){
+_1c.push(" Public "+_18);
+}else{
+if(_1d!="object"){
+_1c.push("\tPublic Property Let "+_18+"(val)","\t\tCall "+_12+"(me.data__,\""+_18+"\",val)","\tEnd Property","\tPublic Property Get "+_18,"\t\t"+_18+" = "+_11+"(me.data__,\""+_18+"\")","\tEnd Property");
+}
+}
+}
+_1c.push("End Class");
+_1c.push("Function "+_1b+"()","\tDim tmp","\tSet tmp = New "+_1a,"\tSet "+_1b+" = tmp","End Function");
+dojox.lang.lettableWin.vbEval(_1c.join("\n"));
+_13[_17]=_19=function(){
+return dojox.lang.lettableWin.construct(_1b);
+};
+}
+var _1e=_19();
+_1e.data__=_14;
+try{
+_14.__observable=_1e;
+}
+catch(e){
+}
+for(i=0,l=_15.length;i<l;i++){
+_18=_15[i];
+try{
+var val=_14[_18];
+}
+catch(e){
+}
+if(typeof val=="function"||_8[_18]){
+_1e[_18]=_d(_1e,_14,_18);
+}
+}
+return _1e;
+};
+}else{
+return function(_1f){
+if(_1f.__observable){
+return _1f.__observable;
+}
+var _20=_1f instanceof Array?[]:{};
+_20.data__=_1f;
+for(var i in _1f){
+if(i.charAt(0)!="_"){
+if(typeof _1f[i]=="function"){
+_20[i]=_d(_20,_1f,i);
+}else{
+if(typeof _1f[i]!="object"){
+(function(i){
+_20.__defineGetter__(i,function(){
+return _5(_1f,i);
+});
+_20.__defineSetter__(i,function(_21){
+return _6(_1f,i,_21);
+});
+})(i);
+}
+}
+}
+}
+for(i in _8){
+_20[i]=_d(_20,_1f,i);
+}
+_1f.__observable=_20;
+return _20;
+};
+}
+};
+if(!{}.__defineGetter__){
+if(dojo.isIE){
+var frame;
+if(document.body){
+frame=document.createElement("iframe");
+document.body.appendChild(frame);
+}else{
+document.write("<iframe id='dj_vb_eval_frame'></iframe>");
+frame=document.getElementById("dj_vb_eval_frame");
+}
+frame.style.display="none";
+var doc=frame.contentWindow.document;
+dojox.lang.lettableWin=frame.contentWindow;
+doc.write("<html><head><script language=\"VBScript\" type=\"text/VBScript\">"+"Function vb_global_eval(code)"+"ExecuteGlobal(code)"+"End Function"+"</script>"+"<script type=\"text/javascript\">"+"function vbEval(code){ \n"+"return vb_global_eval(code);"+"}"+"function construct(name){ \n"+"return window[name]();"+"}"+"</script>"+"</head><body>vb-eval</body></html>");
+doc.close();
+}else{
+throw new Error("This browser does not support getters and setters");
+}
+}
+dojox.lang.ReadOnlyProxy=dojox.lang.makeObservable(function(obj,i){
+return obj[i];
+},function(obj,i,_22){
+});
+}
diff --git a/js/dojo/dojox/lang/oo/Decorator.js b/js/dojo/dojox/lang/oo/Decorator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/Decorator.js
@@ -0,0 +1,24 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.Decorator"]){
+dojo._hasResource["dojox.lang.oo.Decorator"]=true;
+dojo.provide("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,D=oo.Decorator=function(_1,_2){
+this.value=_1;
+this.decorator=typeof _2=="object"?function(){
+return _2.exec.apply(_2,arguments);
+}:_2;
+};
+oo.makeDecorator=function(_3){
+return function(_4){
+return new D(_4,_3);
+};
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/oo/Filter.js b/js/dojo/dojox/lang/oo/Filter.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/Filter.js
@@ -0,0 +1,27 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.Filter"]){
+dojo._hasResource["dojox.lang.oo.Filter"]=true;
+dojo.provide("dojox.lang.oo.Filter");
+(function(){
+var oo=dojox.lang.oo,F=oo.Filter=function(_1,_2){
+this.bag=_1;
+this.filter=typeof _2=="object"?function(){
+return _2.exec.apply(_2,arguments);
+}:_2;
+},_3=function(_4){
+this.map=_4;
+};
+_3.prototype.exec=function(_5){
+return this.map.hasOwnProperty(_5)?this.map[_5]:_5;
+};
+oo.filter=function(_6,_7){
+return new F(_6,new _3(_7));
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/oo/aop.js b/js/dojo/dojox/lang/oo/aop.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/aop.js
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.aop"]){
+dojo._hasResource["dojox.lang.oo.aop"]=true;
+dojo.provide("dojox.lang.oo.aop");
+dojo.require("dojox.lang.oo.Decorator");
+dojo.require("dojox.lang.oo.general");
+(function(){
+var oo=dojox.lang.oo,md=oo.makeDecorator,_1=oo.general,_2=oo.aop,_3=dojo.isFunction;
+_2.before=_1.before;
+_2.around=_1.wrap;
+_2.afterReturning=md(function(_4,_5,_6){
+return _3(_6)?function(){
+var _7=_6.apply(this,arguments);
+_5.call(this,_7);
+return _7;
+}:function(){
+_5.call(this);
+};
+});
+_2.afterThrowing=md(function(_8,_9,_a){
+return _3(_a)?function(){
+var _b;
+try{
+_b=_a.apply(this,arguments);
+}
+catch(e){
+_9.call(this,e);
+throw e;
+}
+return _b;
+}:_a;
+});
+_2.after=md(function(_c,_d,_e){
+return _3(_e)?function(){
+var _f;
+try{
+_f=_e.apply(this,arguments);
+}
+finally{
+_d.call(this);
+}
+return _f;
+}:function(){
+_d.call(this);
+};
+});
+})();
+}
diff --git a/js/dojo/dojox/lang/oo/general.js b/js/dojo/dojox/lang/oo/general.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/general.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.general"]){
+dojo._hasResource["dojox.lang.oo.general"]=true;
+dojo.provide("dojox.lang.oo.general");
+dojo.require("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,md=oo.makeDecorator,_1=oo.general,_2=dojo.isFunction;
+_1.augment=md(function(_3,_4,_5){
+return typeof _5=="undefined"?_4:_5;
+});
+_1.override=md(function(_6,_7,_8){
+return typeof _8!="undefined"?_7:_8;
+});
+_1.shuffle=md(function(_9,_a,_b){
+return _2(_b)?function(){
+return _b.apply(this,_a.apply(this,arguments));
+}:_b;
+});
+_1.wrap=md(function(_c,_d,_e){
+return function(){
+return _d.call(this,_e,arguments);
+};
+});
+_1.tap=md(function(_f,_10,_11){
+return function(){
+_10.apply(this,arguments);
+return this;
+};
+});
+_1.before=md(function(_12,_13,_14){
+return _2(_14)?function(){
+_13.apply(this,arguments);
+return _14.apply(this,arguments);
+}:_13;
+});
+_1.after=md(function(_15,_16,_17){
+return _2(_17)?function(){
+_17.apply(this,arguments);
+return _16.apply(this,arguments);
+}:_16;
+});
+})();
+}
diff --git a/js/dojo/dojox/lang/oo/mixin.js b/js/dojo/dojox/lang/oo/mixin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/mixin.js
@@ -0,0 +1,83 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.mixin"]){
+dojo._hasResource["dojox.lang.oo.mixin"]=true;
+dojo.provide("dojox.lang.oo.mixin");
+dojo.experimental("dojox.lang.oo.mixin");
+dojo.require("dojox.lang.oo.Filter");
+dojo.require("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,_1=oo.Filter,_2=oo.Decorator,_3={},_4=function(_5){
+return _5;
+},_6=function(_7,_8,_9){
+return _8;
+},_a=function(_b,_c,_d,_e){
+_b[_c]=_d;
+},_f={},_10=dojo._extraNames,_11=_10.length,_12=oo.applyDecorator=function(_13,_14,_15,_16){
+if(_15 instanceof _2){
+var d=_15.decorator;
+_15=_12(_13,_14,_15.value,_16);
+return d(_14,_15,_16);
+}
+return _13(_14,_15,_16);
+};
+oo.__mixin=function(_17,_18,_19,_1a,_1b){
+var _1c,_1d,_1e,_1f,_20,i;
+for(_1c in _18){
+_1e=_18[_1c];
+if(!(_1c in _3)||_3[_1c]!==_1e){
+_1d=_1a(_1c,_17,_18,_1e);
+if(_1d&&(!(_1d in _17)||!(_1d in _3)||_3[_1d]!==_1e)){
+_20=_17[_1d];
+_1f=_12(_19,_1d,_1e,_20);
+if(_20!==_1f){
+_1b(_17,_1d,_1f,_20);
+}
+}
+}
+}
+if(_11){
+for(i=0;i<_11;++i){
+_1c=_10[i];
+_1e=_18[_1c];
+if(!(_1c in _3)||_3[_1c]!==_1e){
+_1d=_1a(_1c,_17,_18,_1e);
+if(_1d&&(!(_1d in _17)||!(_1d in _3)||_3[_1d]!==_1e)){
+_20=_17[_1d];
+_1f=_12(_19,_1d,_1e,_20);
+if(_20!==_1f){
+_1b(_17,_1d,_1f,_20);
+}
+}
+}
+}
+}
+return _17;
+};
+oo.mixin=function(_21,_22){
+var _23,_24,i=1,l=arguments.length;
+for(;i<l;++i){
+_22=arguments[i];
+if(_22 instanceof _1){
+_24=_22.filter;
+_22=_22.bag;
+}else{
+_24=_4;
+}
+if(_22 instanceof _2){
+_23=_22.decorator;
+_22=_22.value;
+}else{
+_23=_6;
+}
+oo.__mixin(_21,_22,_23,_24,_a);
+}
+return _21;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/oo/rearrange.js b/js/dojo/dojox/lang/oo/rearrange.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/oo/rearrange.js
@@ -0,0 +1,49 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.rearrange"]){
+dojo._hasResource["dojox.lang.oo.rearrange"]=true;
+dojo.provide("dojox.lang.oo.rearrange");
+(function(){
+var _1=dojo._extraNames,_2=_1.length,_3=Object.prototype.toString;
+dojox.lang.oo.rearrange=function(_4,_5){
+var _6,_7,_8,i,t;
+for(_6 in _5){
+_7=_5[_6];
+if(!_7||_3.call(_7)=="[object String]"){
+_8=_4[_6];
+if(!(_6 in empty)||empty[_6]!==_8){
+if(!(delete _4[_6])){
+_4[_6]=undefined;
+}
+if(_7){
+_4[_7]=_8;
+}
+}
+}
+}
+if(_2){
+for(i=0;i<_2;++i){
+_6=_1[i];
+_7=_5[_6];
+if(!_7||_3.call(_7)=="[object String]"){
+_8=_4[_6];
+if(!(_6 in empty)||empty[_6]!==_8){
+if(!(delete _4[_6])){
+_4[_6]=undefined;
+}
+if(_7){
+_4[_7]=_8;
+}
+}
+}
+}
+}
+return _4;
+};
+})();
+}
diff --git a/js/dojo/dojox/lang/typed.js b/js/dojo/dojox/lang/typed.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/lang/typed.js
@@ -0,0 +1,146 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.typed"]){
+dojo._hasResource["dojox.lang.typed"]=true;
+(function(){
+var _1,_2=typeof dojo!="undefined";
+if(_2){
+dojo.provide("dojox.lang.typed");
+dojo.require("dojox.json.schema");
+_1=dojox.json.schema;
+}else{
+if(typeof JSONSchema=="undefined"){
+throw new Error("Dojo or JSON Schema library must be present");
+}
+_1=JSONSchema;
+}
+function _3(_4,_5){
+var _6=function(){
+var _7=_5();
+if(_7&&_7.parameters){
+var _8=_7.parameters;
+for(var j=0;j<_8.length;j++){
+arguments[j]=_9(arguments[j],_8[j],j.toString());
+}
+if(_7.additionalParameters){
+for(;j<arguments.length;j++){
+arguments[j]=_9(arguments[j],_7.additionalParameters,j.toString());
+}
+}
+}
+var _a=_4.apply(this,arguments);
+if(_7.returns){
+_9(_a,_7.returns);
+}
+return _a;
+};
+_6.__typedFunction__=true;
+for(var i in _4){
+_6[i]=_4[i];
+}
+return _6;
+};
+function _b(_c){
+return function(){
+return _c;
+};
+};
+function _9(_d,_e,_f){
+if(typeof _d=="function"&&_e&&!_d.__typedFunction__){
+_d=_3(_d,_b(_e));
+}
+var _10=_1._validate(_d,_e,_f);
+if(!_10.valid){
+var _11="";
+var _12=_10.errors;
+for(var i=0;i<_12.length;i++){
+_11+=_12[i].property+" "+_12[i].message+"\n";
+}
+throw new TypeError(_11);
+}
+return _d;
+};
+var _13=_1.__defineGetter__;
+var _14=function(_15){
+if(_15.__typedClass__){
+return _15;
+}
+var _16=function(){
+var i,_17,_18=_16.properties;
+var _19=_16.methods;
+_15.apply(this,arguments);
+this.__props__={};
+for(i in _19){
+_17=this[i];
+if(_17){
+if(!_17.__typedFunction__){
+var _1a=this;
+while(!_1a.hasOwnProperty(i)&&_1a.__proto__){
+_1a=_1a.__proto__;
+}
+(function(i){
+_1a[i]=_3(_17,function(){
+return _19[i];
+});
+})(i);
+}
+}else{
+(function(i){
+this[i]=function(){
+throw new TypeError("The method "+i+" is defined but not implemented");
+};
+})(i);
+}
+}
+if(_13){
+var _1b=this;
+for(i in _18){
+_17=this[i];
+if(this.hasOwnProperty(i)){
+this.__props__[i]=_17;
+}
+(function(i){
+delete _1b[i];
+_1b.__defineGetter__(i,function(){
+return i in this.__props__?this.__props__[i]:this.__proto__[i];
+});
+_1b.__defineSetter__(i,function(_1c){
+_9(_1c,_18[i],i);
+return this.__props__[i]=_1c;
+});
+})(i);
+}
+}
+_9(this,_16);
+};
+_16.prototype=_15.prototype;
+for(var i in _15){
+_16[i]=_15[i];
+}
+if(_15.prototype.declaredClass&&_2){
+dojo.setObject(_15.prototype.declaredClass,_16);
+}
+_16.__typedClass__=true;
+return _16;
+};
+if(_2){
+dojox.lang.typed=_14;
+if(dojo.config.typeCheckAllClasses){
+var _1d=dojo.declare;
+dojo.declare=function(_1e){
+var _1f=_1d.apply(this,arguments);
+_1f=_14(_1f);
+return _1f;
+};
+dojo.mixin(dojo.declare,_1d);
+}
+}else{
+typed=_14;
+}
+})();
+}
diff --git a/js/dojo/dojox/math/BigInteger-ext.js b/js/dojo/dojox/math/BigInteger-ext.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/BigInteger-ext.js
@@ -0,0 +1,796 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.BigInteger-ext"]){
+dojo._hasResource["dojox.math.BigInteger-ext"]=true;
+dojo.provide("dojox.math.BigInteger-ext");
+dojo.experimental("dojox.math.BigInteger-ext");
+dojo.require("dojox.math.BigInteger");
+(function(){
+var _1=dojox.math.BigInteger,_2=_1._nbi,_3=_1._nbv,_4=_1._nbits,_5=_1._Montgomery;
+function _6(){
+var r=_2();
+this._copyTo(r);
+return r;
+};
+function _7(){
+if(this.s<0){
+if(this.t==1){
+return this[0]-this._DV;
+}else{
+if(this.t==0){
+return -1;
+}
+}
+}else{
+if(this.t==1){
+return this[0];
+}else{
+if(this.t==0){
+return 0;
+}
+}
+}
+return ((this[1]&((1<<(32-this._DB))-1))<<this._DB)|this[0];
+};
+function _8(){
+return (this.t==0)?this.s:(this[0]<<24)>>24;
+};
+function _9(){
+return (this.t==0)?this.s:(this[0]<<16)>>16;
+};
+function _a(r){
+return Math.floor(Math.LN2*this._DB/Math.log(r));
+};
+function _b(){
+if(this.s<0){
+return -1;
+}else{
+if(this.t<=0||(this.t==1&&this[0]<=0)){
+return 0;
+}else{
+return 1;
+}
+}
+};
+function _c(b){
+if(b==null){
+b=10;
+}
+if(this.signum()==0||b<2||b>36){
+return "0";
+}
+var cs=this._chunkSize(b);
+var a=Math.pow(b,cs);
+var d=_3(a),y=_2(),z=_2(),r="";
+this._divRemTo(d,y,z);
+while(y.signum()>0){
+r=(a+z.intValue()).toString(b).substr(1)+r;
+y._divRemTo(d,y,z);
+}
+return z.intValue().toString(b)+r;
+};
+function _d(s,b){
+this._fromInt(0);
+if(b==null){
+b=10;
+}
+var cs=this._chunkSize(b);
+var d=Math.pow(b,cs),mi=false,j=0,w=0;
+for(var i=0;i<s.length;++i){
+var x=intAt(s,i);
+if(x<0){
+if(s.charAt(i)=="-"&&this.signum()==0){
+mi=true;
+}
+continue;
+}
+w=b*w+x;
+if(++j>=cs){
+this._dMultiply(d);
+this._dAddOffset(w,0);
+j=0;
+w=0;
+}
+}
+if(j>0){
+this._dMultiply(Math.pow(b,j));
+this._dAddOffset(w,0);
+}
+if(mi){
+_1.ZERO._subTo(this,this);
+}
+};
+function _e(a,b,c){
+if("number"==typeof b){
+if(a<2){
+this._fromInt(1);
+}else{
+this._fromNumber(a,c);
+if(!this.testBit(a-1)){
+this._bitwiseTo(_1.ONE.shiftLeft(a-1),_f,this);
+}
+if(this._isEven()){
+this._dAddOffset(1,0);
+}
+while(!this.isProbablePrime(b)){
+this._dAddOffset(2,0);
+if(this.bitLength()>a){
+this._subTo(_1.ONE.shiftLeft(a-1),this);
+}
+}
+}
+}else{
+var x=[],t=a&7;
+x.length=(a>>3)+1;
+b.nextBytes(x);
+if(t>0){
+x[0]&=((1<<t)-1);
+}else{
+x[0]=0;
+}
+this._fromString(x,256);
+}
+};
+function _10(){
+var i=this.t,r=[];
+r[0]=this.s;
+var p=this._DB-(i*this._DB)%8,d,k=0;
+if(i-->0){
+if(p<this._DB&&(d=this[i]>>p)!=(this.s&this._DM)>>p){
+r[k++]=d|(this.s<<(this._DB-p));
+}
+while(i>=0){
+if(p<8){
+d=(this[i]&((1<<p)-1))<<(8-p);
+d|=this[--i]>>(p+=this._DB-8);
+}else{
+d=(this[i]>>(p-=8))&255;
+if(p<=0){
+p+=this._DB;
+--i;
+}
+}
+if((d&128)!=0){
+d|=-256;
+}
+if(k==0&&(this.s&128)!=(d&128)){
+++k;
+}
+if(k>0||d!=this.s){
+r[k++]=d;
+}
+}
+}
+return r;
+};
+function _11(a){
+return (this.compareTo(a)==0);
+};
+function _12(a){
+return (this.compareTo(a)<0)?this:a;
+};
+function _13(a){
+return (this.compareTo(a)>0)?this:a;
+};
+function _14(a,op,r){
+var i,f,m=Math.min(a.t,this.t);
+for(i=0;i<m;++i){
+r[i]=op(this[i],a[i]);
+}
+if(a.t<this.t){
+f=a.s&this._DM;
+for(i=m;i<this.t;++i){
+r[i]=op(this[i],f);
+}
+r.t=this.t;
+}else{
+f=this.s&this._DM;
+for(i=m;i<a.t;++i){
+r[i]=op(f,a[i]);
+}
+r.t=a.t;
+}
+r.s=op(this.s,a.s);
+r._clamp();
+};
+function _15(x,y){
+return x&y;
+};
+function _16(a){
+var r=_2();
+this._bitwiseTo(a,_15,r);
+return r;
+};
+function _f(x,y){
+return x|y;
+};
+function _17(a){
+var r=_2();
+this._bitwiseTo(a,_f,r);
+return r;
+};
+function _18(x,y){
+return x^y;
+};
+function _19(a){
+var r=_2();
+this._bitwiseTo(a,_18,r);
+return r;
+};
+function _1a(x,y){
+return x&~y;
+};
+function _1b(a){
+var r=_2();
+this._bitwiseTo(a,_1a,r);
+return r;
+};
+function _1c(){
+var r=_2();
+for(var i=0;i<this.t;++i){
+r[i]=this._DM&~this[i];
+}
+r.t=this.t;
+r.s=~this.s;
+return r;
+};
+function _1d(n){
+var r=_2();
+if(n<0){
+this._rShiftTo(-n,r);
+}else{
+this._lShiftTo(n,r);
+}
+return r;
+};
+function _1e(n){
+var r=_2();
+if(n<0){
+this._lShiftTo(-n,r);
+}else{
+this._rShiftTo(n,r);
+}
+return r;
+};
+function _1f(x){
+if(x==0){
+return -1;
+}
+var r=0;
+if((x&65535)==0){
+x>>=16;
+r+=16;
+}
+if((x&255)==0){
+x>>=8;
+r+=8;
+}
+if((x&15)==0){
+x>>=4;
+r+=4;
+}
+if((x&3)==0){
+x>>=2;
+r+=2;
+}
+if((x&1)==0){
+++r;
+}
+return r;
+};
+function _20(){
+for(var i=0;i<this.t;++i){
+if(this[i]!=0){
+return i*this._DB+_1f(this[i]);
+}
+}
+if(this.s<0){
+return this.t*this._DB;
+}
+return -1;
+};
+function _21(x){
+var r=0;
+while(x!=0){
+x&=x-1;
+++r;
+}
+return r;
+};
+function _22(){
+var r=0,x=this.s&this._DM;
+for(var i=0;i<this.t;++i){
+r+=_21(this[i]^x);
+}
+return r;
+};
+function _23(n){
+var j=Math.floor(n/this._DB);
+if(j>=this.t){
+return (this.s!=0);
+}
+return ((this[j]&(1<<(n%this._DB)))!=0);
+};
+function _24(n,op){
+var r=_1.ONE.shiftLeft(n);
+this._bitwiseTo(r,op,r);
+return r;
+};
+function _25(n){
+return this._changeBit(n,_f);
+};
+function _26(n){
+return this._changeBit(n,_1a);
+};
+function _27(n){
+return this._changeBit(n,_18);
+};
+function _28(a,r){
+var i=0,c=0,m=Math.min(a.t,this.t);
+while(i<m){
+c+=this[i]+a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+if(a.t<this.t){
+c+=a.s;
+while(i<this.t){
+c+=this[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=this.s;
+}else{
+c+=this.s;
+while(i<a.t){
+c+=a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=a.s;
+}
+r.s=(c<0)?-1:0;
+if(c>0){
+r[i++]=c;
+}else{
+if(c<-1){
+r[i++]=this._DV+c;
+}
+}
+r.t=i;
+r._clamp();
+};
+function _29(a){
+var r=_2();
+this._addTo(a,r);
+return r;
+};
+function _2a(a){
+var r=_2();
+this._subTo(a,r);
+return r;
+};
+function _2b(a){
+var r=_2();
+this._multiplyTo(a,r);
+return r;
+};
+function _2c(a){
+var r=_2();
+this._divRemTo(a,r,null);
+return r;
+};
+function _2d(a){
+var r=_2();
+this._divRemTo(a,null,r);
+return r;
+};
+function _2e(a){
+var q=_2(),r=_2();
+this._divRemTo(a,q,r);
+return [q,r];
+};
+function _2f(n){
+this[this.t]=this.am(0,n-1,this,0,0,this.t);
+++this.t;
+this._clamp();
+};
+function _30(n,w){
+while(this.t<=w){
+this[this.t++]=0;
+}
+this[w]+=n;
+while(this[w]>=this._DV){
+this[w]-=this._DV;
+if(++w>=this.t){
+this[this.t++]=0;
+}
+++this[w];
+}
+};
+function _31(){
+};
+function _32(x){
+return x;
+};
+function _33(x,y,r){
+x._multiplyTo(y,r);
+};
+function _34(x,r){
+x._squareTo(r);
+};
+_31.prototype.convert=_32;
+_31.prototype.revert=_32;
+_31.prototype.mulTo=_33;
+_31.prototype.sqrTo=_34;
+function _35(e){
+return this._exp(e,new _31());
+};
+function _36(a,n,r){
+var i=Math.min(this.t+a.t,n);
+r.s=0;
+r.t=i;
+while(i>0){
+r[--i]=0;
+}
+var j;
+for(j=r.t-this.t;i<j;++i){
+r[i+this.t]=this.am(0,a[i],r,i,0,this.t);
+}
+for(j=Math.min(a.t,n);i<j;++i){
+this.am(0,a[i],r,i,0,n-i);
+}
+r._clamp();
+};
+function _37(a,n,r){
+--n;
+var i=r.t=this.t+a.t-n;
+r.s=0;
+while(--i>=0){
+r[i]=0;
+}
+for(i=Math.max(n-this.t,0);i<a.t;++i){
+r[this.t+i-n]=this.am(n-i,a[i],r,0,0,this.t+i-n);
+}
+r._clamp();
+r._drShiftTo(1,r);
+};
+function _38(m){
+this.r2=_2();
+this.q3=_2();
+_1.ONE._dlShiftTo(2*m.t,this.r2);
+this.mu=this.r2.divide(m);
+this.m=m;
+};
+function _39(x){
+if(x.s<0||x.t>2*this.m.t){
+return x.mod(this.m);
+}else{
+if(x.compareTo(this.m)<0){
+return x;
+}else{
+var r=_2();
+x._copyTo(r);
+this.reduce(r);
+return r;
+}
+}
+};
+function _3a(x){
+return x;
+};
+function _3b(x){
+x._drShiftTo(this.m.t-1,this.r2);
+if(x.t>this.m.t+1){
+x.t=this.m.t+1;
+x._clamp();
+}
+this.mu._multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+this.m._multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+while(x.compareTo(this.r2)<0){
+x._dAddOffset(1,this.m.t+1);
+}
+x._subTo(this.r2,x);
+while(x.compareTo(this.m)>=0){
+x._subTo(this.m,x);
+}
+};
+function _3c(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+function _3d(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+_38.prototype.convert=_39;
+_38.prototype.revert=_3a;
+_38.prototype.reduce=_3b;
+_38.prototype.mulTo=_3d;
+_38.prototype.sqrTo=_3c;
+function _3e(e,m){
+var i=e.bitLength(),k,r=_3(1),z;
+if(i<=0){
+return r;
+}else{
+if(i<18){
+k=1;
+}else{
+if(i<48){
+k=3;
+}else{
+if(i<144){
+k=4;
+}else{
+if(i<768){
+k=5;
+}else{
+k=6;
+}
+}
+}
+}
+}
+if(i<8){
+z=new Classic(m);
+}else{
+if(m._isEven()){
+z=new _38(m);
+}else{
+z=new _5(m);
+}
+}
+var g=[],n=3,k1=k-1,km=(1<<k)-1;
+g[1]=z.convert(this);
+if(k>1){
+var g2=_2();
+z.sqrTo(g[1],g2);
+while(n<=km){
+g[n]=_2();
+z.mulTo(g2,g[n-2],g[n]);
+n+=2;
+}
+}
+var j=e.t-1,w,is1=true,r2=_2(),t;
+i=_4(e[j])-1;
+while(j>=0){
+if(i>=k1){
+w=(e[j]>>(i-k1))&km;
+}else{
+w=(e[j]&((1<<(i+1))-1))<<(k1-i);
+if(j>0){
+w|=e[j-1]>>(this._DB+i-k1);
+}
+}
+n=k;
+while((w&1)==0){
+w>>=1;
+--n;
+}
+if((i-=n)<0){
+i+=this._DB;
+--j;
+}
+if(is1){
+g[w]._copyTo(r);
+is1=false;
+}else{
+while(n>1){
+z.sqrTo(r,r2);
+z.sqrTo(r2,r);
+n-=2;
+}
+if(n>0){
+z.sqrTo(r,r2);
+}else{
+t=r;
+r=r2;
+r2=t;
+}
+z.mulTo(r2,g[w],r);
+}
+while(j>=0&&(e[j]&(1<<i))==0){
+z.sqrTo(r,r2);
+t=r;
+r=r2;
+r2=t;
+if(--i<0){
+i=this._DB-1;
+--j;
+}
+}
+}
+return z.revert(r);
+};
+function _3f(a){
+var x=(this.s<0)?this.negate():this.clone();
+var y=(a.s<0)?a.negate():a.clone();
+if(x.compareTo(y)<0){
+var t=x;
+x=y;
+y=t;
+}
+var i=x.getLowestSetBit(),g=y.getLowestSetBit();
+if(g<0){
+return x;
+}
+if(i<g){
+g=i;
+}
+if(g>0){
+x._rShiftTo(g,x);
+y._rShiftTo(g,y);
+}
+while(x.signum()>0){
+if((i=x.getLowestSetBit())>0){
+x._rShiftTo(i,x);
+}
+if((i=y.getLowestSetBit())>0){
+y._rShiftTo(i,y);
+}
+if(x.compareTo(y)>=0){
+x._subTo(y,x);
+x._rShiftTo(1,x);
+}else{
+y._subTo(x,y);
+y._rShiftTo(1,y);
+}
+}
+if(g>0){
+y._lShiftTo(g,y);
+}
+return y;
+};
+function _40(n){
+if(n<=0){
+return 0;
+}
+var d=this._DV%n,r=(this.s<0)?n-1:0;
+if(this.t>0){
+if(d==0){
+r=this[0]%n;
+}else{
+for(var i=this.t-1;i>=0;--i){
+r=(d*r+this[i])%n;
+}
+}
+}
+return r;
+};
+function _41(m){
+var ac=m._isEven();
+if((this._isEven()&&ac)||m.signum()==0){
+return _1.ZERO;
+}
+var u=m.clone(),v=this.clone();
+var a=_3(1),b=_3(0),c=_3(0),d=_3(1);
+while(u.signum()!=0){
+while(u._isEven()){
+u._rShiftTo(1,u);
+if(ac){
+if(!a._isEven()||!b._isEven()){
+a._addTo(this,a);
+b._subTo(m,b);
+}
+a._rShiftTo(1,a);
+}else{
+if(!b._isEven()){
+b._subTo(m,b);
+}
+}
+b._rShiftTo(1,b);
+}
+while(v._isEven()){
+v._rShiftTo(1,v);
+if(ac){
+if(!c._isEven()||!d._isEven()){
+c._addTo(this,c);
+d._subTo(m,d);
+}
+c._rShiftTo(1,c);
+}else{
+if(!d._isEven()){
+d._subTo(m,d);
+}
+}
+d._rShiftTo(1,d);
+}
+if(u.compareTo(v)>=0){
+u._subTo(v,u);
+if(ac){
+a._subTo(c,a);
+}
+b._subTo(d,b);
+}else{
+v._subTo(u,v);
+if(ac){
+c._subTo(a,c);
+}
+d._subTo(b,d);
+}
+}
+if(v.compareTo(_1.ONE)!=0){
+return _1.ZERO;
+}
+if(d.compareTo(m)>=0){
+return d.subtract(m);
+}
+if(d.signum()<0){
+d._addTo(m,d);
+}else{
+return d;
+}
+if(d.signum()<0){
+return d.add(m);
+}else{
+return d;
+}
+};
+var _42=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
+var _43=(1<<26)/_42[_42.length-1];
+function _44(t){
+var i,x=this.abs();
+if(x.t==1&&x[0]<=_42[_42.length-1]){
+for(i=0;i<_42.length;++i){
+if(x[0]==_42[i]){
+return true;
+}
+}
+return false;
+}
+if(x._isEven()){
+return false;
+}
+i=1;
+while(i<_42.length){
+var m=_42[i],j=i+1;
+while(j<_42.length&&m<_43){
+m*=_42[j++];
+}
+m=x._modInt(m);
+while(i<j){
+if(m%_42[i++]==0){
+return false;
+}
+}
+}
+return x._millerRabin(t);
+};
+function _45(t){
+var n1=this.subtract(_1.ONE);
+var k=n1.getLowestSetBit();
+if(k<=0){
+return false;
+}
+var r=n1.shiftRight(k);
+t=(t+1)>>1;
+if(t>_42.length){
+t=_42.length;
+}
+var a=_2();
+for(var i=0;i<t;++i){
+a._fromInt(_42[i]);
+var y=a.modPow(r,this);
+if(y.compareTo(_1.ONE)!=0&&y.compareTo(n1)!=0){
+var j=1;
+while(j++<k&&y.compareTo(n1)!=0){
+y=y.modPowInt(2,this);
+if(y.compareTo(_1.ONE)==0){
+return false;
+}
+}
+if(y.compareTo(n1)!=0){
+return false;
+}
+}
+}
+return true;
+};
+dojo.extend(_1,{_chunkSize:_a,_toRadix:_c,_fromRadix:_d,_fromNumber:_e,_bitwiseTo:_14,_changeBit:_24,_addTo:_28,_dMultiply:_2f,_dAddOffset:_30,_multiplyLowerTo:_36,_multiplyUpperTo:_37,_modInt:_40,_millerRabin:_45,clone:_6,intValue:_7,byteValue:_8,shortValue:_9,signum:_b,toByteArray:_10,equals:_11,min:_12,max:_13,and:_16,or:_17,xor:_19,andNot:_1b,not:_1c,shiftLeft:_1d,shiftRight:_1e,getLowestSetBit:_20,bitCount:_22,testBit:_23,setBit:_25,clearBit:_26,flipBit:_27,add:_29,subtract:_2a,multiply:_2b,divide:_2c,remainder:_2d,divideAndRemainder:_2e,modPow:_3e,modInverse:_41,pow:_35,gcd:_3f,isProbablePrime:_44});
+})();
+}
diff --git a/js/dojo/dojox/math/BigInteger.js b/js/dojo/dojox/math/BigInteger.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/BigInteger.js
@@ -0,0 +1,635 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.BigInteger"]){
+dojo._hasResource["dojox.math.BigInteger"]=true;
+dojo.provide("dojox.math.BigInteger");
+dojo.experimental("dojox.math.BigInteger");
+(function(){
+var _1;
+var _2=244837814094590;
+var _3=((_2&16777215)==15715070);
+function _4(a,b,c){
+if(a!=null){
+if("number"==typeof a){
+this._fromNumber(a,b,c);
+}else{
+if(!b&&"string"!=typeof a){
+this._fromString(a,256);
+}else{
+this._fromString(a,b);
+}
+}
+}
+};
+function _5(){
+return new _4(null);
+};
+function _6(i,x,w,j,c,n){
+while(--n>=0){
+var v=x*this[i++]+w[j]+c;
+c=Math.floor(v/67108864);
+w[j++]=v&67108863;
+}
+return c;
+};
+function _7(i,x,w,j,c,n){
+var xl=x&32767,xh=x>>15;
+while(--n>=0){
+var l=this[i]&32767;
+var h=this[i++]>>15;
+var m=xh*l+h*xl;
+l=xl*l+((m&32767)<<15)+w[j]+(c&1073741823);
+c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);
+w[j++]=l&1073741823;
+}
+return c;
+};
+function _8(i,x,w,j,c,n){
+var xl=x&16383,xh=x>>14;
+while(--n>=0){
+var l=this[i]&16383;
+var h=this[i++]>>14;
+var m=xh*l+h*xl;
+l=xl*l+((m&16383)<<14)+w[j]+c;
+c=(l>>28)+(m>>14)+xh*h;
+w[j++]=l&268435455;
+}
+return c;
+};
+if(_3&&(navigator.appName=="Microsoft Internet Explorer")){
+_4.prototype.am=_7;
+_1=30;
+}else{
+if(_3&&(navigator.appName!="Netscape")){
+_4.prototype.am=_6;
+_1=26;
+}else{
+_4.prototype.am=_8;
+_1=28;
+}
+}
+var _9=52;
+var _a="0123456789abcdefghijklmnopqrstuvwxyz";
+var _b=[];
+var rr,vv;
+rr="0".charCodeAt(0);
+for(vv=0;vv<=9;++vv){
+_b[rr++]=vv;
+}
+rr="a".charCodeAt(0);
+for(vv=10;vv<36;++vv){
+_b[rr++]=vv;
+}
+rr="A".charCodeAt(0);
+for(vv=10;vv<36;++vv){
+_b[rr++]=vv;
+}
+function _c(n){
+return _a.charAt(n);
+};
+function _d(s,i){
+var c=_b[s.charCodeAt(i)];
+return (c==null)?-1:c;
+};
+function _e(r){
+for(var i=this.t-1;i>=0;--i){
+r[i]=this[i];
+}
+r.t=this.t;
+r.s=this.s;
+};
+function _f(x){
+this.t=1;
+this.s=(x<0)?-1:0;
+if(x>0){
+this[0]=x;
+}else{
+if(x<-1){
+this[0]=x+_DV;
+}else{
+this.t=0;
+}
+}
+};
+function nbv(i){
+var r=_5();
+r._fromInt(i);
+return r;
+};
+function _10(s,b){
+var k;
+if(b==16){
+k=4;
+}else{
+if(b==8){
+k=3;
+}else{
+if(b==256){
+k=8;
+}else{
+if(b==2){
+k=1;
+}else{
+if(b==32){
+k=5;
+}else{
+if(b==4){
+k=2;
+}else{
+this.fromRadix(s,b);
+return;
+}
+}
+}
+}
+}
+}
+this.t=0;
+this.s=0;
+var i=s.length,mi=false,sh=0;
+while(--i>=0){
+var x=(k==8)?s[i]&255:_d(s,i);
+if(x<0){
+if(s.charAt(i)=="-"){
+mi=true;
+}
+continue;
+}
+mi=false;
+if(sh==0){
+this[this.t++]=x;
+}else{
+if(sh+k>this._DB){
+this[this.t-1]|=(x&((1<<(this._DB-sh))-1))<<sh;
+this[this.t++]=(x>>(this._DB-sh));
+}else{
+this[this.t-1]|=x<<sh;
+}
+}
+sh+=k;
+if(sh>=this._DB){
+sh-=this._DB;
+}
+}
+if(k==8&&(s[0]&128)!=0){
+this.s=-1;
+if(sh>0){
+this[this.t-1]|=((1<<(this._DB-sh))-1)<<sh;
+}
+}
+this._clamp();
+if(mi){
+_4.ZERO._subTo(this,this);
+}
+};
+function _11(){
+var c=this.s&this._DM;
+while(this.t>0&&this[this.t-1]==c){
+--this.t;
+}
+};
+function _12(b){
+if(this.s<0){
+return "-"+this.negate().toString(b);
+}
+var k;
+if(b==16){
+k=4;
+}else{
+if(b==8){
+k=3;
+}else{
+if(b==2){
+k=1;
+}else{
+if(b==32){
+k=5;
+}else{
+if(b==4){
+k=2;
+}else{
+return this._toRadix(b);
+}
+}
+}
+}
+}
+var km=(1<<k)-1,d,m=false,r="",i=this.t;
+var p=this._DB-(i*this._DB)%k;
+if(i-->0){
+if(p<this._DB&&(d=this[i]>>p)>0){
+m=true;
+r=_c(d);
+}
+while(i>=0){
+if(p<k){
+d=(this[i]&((1<<p)-1))<<(k-p);
+d|=this[--i]>>(p+=this._DB-k);
+}else{
+d=(this[i]>>(p-=k))&km;
+if(p<=0){
+p+=this._DB;
+--i;
+}
+}
+if(d>0){
+m=true;
+}
+if(m){
+r+=_c(d);
+}
+}
+}
+return m?r:"0";
+};
+function _13(){
+var r=_5();
+_4.ZERO._subTo(this,r);
+return r;
+};
+function _14(){
+return (this.s<0)?this.negate():this;
+};
+function _15(a){
+var r=this.s-a.s;
+if(r){
+return r;
+}
+var i=this.t;
+r=i-a.t;
+if(r){
+return r;
+}
+while(--i>=0){
+if((r=this[i]-a[i])){
+return r;
+}
+}
+return 0;
+};
+function _16(x){
+var r=1,t;
+if((t=x>>>16)){
+x=t;
+r+=16;
+}
+if((t=x>>8)){
+x=t;
+r+=8;
+}
+if((t=x>>4)){
+x=t;
+r+=4;
+}
+if((t=x>>2)){
+x=t;
+r+=2;
+}
+if((t=x>>1)){
+x=t;
+r+=1;
+}
+return r;
+};
+function _17(){
+if(this.t<=0){
+return 0;
+}
+return this._DB*(this.t-1)+_16(this[this.t-1]^(this.s&this._DM));
+};
+function _18(n,r){
+var i;
+for(i=this.t-1;i>=0;--i){
+r[i+n]=this[i];
+}
+for(i=n-1;i>=0;--i){
+r[i]=0;
+}
+r.t=this.t+n;
+r.s=this.s;
+};
+function _19(n,r){
+for(var i=n;i<this.t;++i){
+r[i-n]=this[i];
+}
+r.t=Math.max(this.t-n,0);
+r.s=this.s;
+};
+function _1a(n,r){
+var bs=n%this._DB;
+var cbs=this._DB-bs;
+var bm=(1<<cbs)-1;
+var ds=Math.floor(n/this._DB),c=(this.s<<bs)&this._DM,i;
+for(i=this.t-1;i>=0;--i){
+r[i+ds+1]=(this[i]>>cbs)|c;
+c=(this[i]&bm)<<bs;
+}
+for(i=ds-1;i>=0;--i){
+r[i]=0;
+}
+r[ds]=c;
+r.t=this.t+ds+1;
+r.s=this.s;
+r._clamp();
+};
+function _1b(n,r){
+r.s=this.s;
+var ds=Math.floor(n/this._DB);
+if(ds>=this.t){
+r.t=0;
+return;
+}
+var bs=n%this._DB;
+var cbs=this._DB-bs;
+var bm=(1<<bs)-1;
+r[0]=this[ds]>>bs;
+for(var i=ds+1;i<this.t;++i){
+r[i-ds-1]|=(this[i]&bm)<<cbs;
+r[i-ds]=this[i]>>bs;
+}
+if(bs>0){
+r[this.t-ds-1]|=(this.s&bm)<<cbs;
+}
+r.t=this.t-ds;
+r._clamp();
+};
+function _1c(a,r){
+var i=0,c=0,m=Math.min(a.t,this.t);
+while(i<m){
+c+=this[i]-a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+if(a.t<this.t){
+c-=a.s;
+while(i<this.t){
+c+=this[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=this.s;
+}else{
+c+=this.s;
+while(i<a.t){
+c-=a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c-=a.s;
+}
+r.s=(c<0)?-1:0;
+if(c<-1){
+r[i++]=this._DV+c;
+}else{
+if(c>0){
+r[i++]=c;
+}
+}
+r.t=i;
+r._clamp();
+};
+function _1d(a,r){
+var x=this.abs(),y=a.abs();
+var i=x.t;
+r.t=i+y.t;
+while(--i>=0){
+r[i]=0;
+}
+for(i=0;i<y.t;++i){
+r[i+x.t]=x.am(0,y[i],r,i,0,x.t);
+}
+r.s=0;
+r._clamp();
+if(this.s!=a.s){
+_4.ZERO._subTo(r,r);
+}
+};
+function _1e(r){
+var x=this.abs();
+var i=r.t=2*x.t;
+while(--i>=0){
+r[i]=0;
+}
+for(i=0;i<x.t-1;++i){
+var c=x.am(i,x[i],r,2*i,0,1);
+if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x._DV){
+r[i+x.t]-=x._DV;
+r[i+x.t+1]=1;
+}
+}
+if(r.t>0){
+r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);
+}
+r.s=0;
+r._clamp();
+};
+function _1f(m,q,r){
+var pm=m.abs();
+if(pm.t<=0){
+return;
+}
+var pt=this.abs();
+if(pt.t<pm.t){
+if(q!=null){
+q._fromInt(0);
+}
+if(r!=null){
+this._copyTo(r);
+}
+return;
+}
+if(r==null){
+r=_5();
+}
+var y=_5(),ts=this.s,ms=m.s;
+var nsh=this._DB-_16(pm[pm.t-1]);
+if(nsh>0){
+pm._lShiftTo(nsh,y);
+pt._lShiftTo(nsh,r);
+}else{
+pm._copyTo(y);
+pt._copyTo(r);
+}
+var ys=y.t;
+var y0=y[ys-1];
+if(y0==0){
+return;
+}
+var yt=y0*(1<<this._F1)+((ys>1)?y[ys-2]>>this._F2:0);
+var d1=this._FV/yt,d2=(1<<this._F1)/yt,e=1<<this._F2;
+var i=r.t,j=i-ys,t=(q==null)?_5():q;
+y._dlShiftTo(j,t);
+if(r.compareTo(t)>=0){
+r[r.t++]=1;
+r._subTo(t,r);
+}
+_4.ONE._dlShiftTo(ys,t);
+t._subTo(y,y);
+while(y.t<ys){
+y[y.t++]=0;
+}
+while(--j>=0){
+var qd=(r[--i]==y0)?this._DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
+if((r[i]+=y.am(0,qd,r,j,0,ys))<qd){
+y._dlShiftTo(j,t);
+r._subTo(t,r);
+while(r[i]<--qd){
+r._subTo(t,r);
+}
+}
+}
+if(q!=null){
+r._drShiftTo(ys,q);
+if(ts!=ms){
+_4.ZERO._subTo(q,q);
+}
+}
+r.t=ys;
+r._clamp();
+if(nsh>0){
+r._rShiftTo(nsh,r);
+}
+if(ts<0){
+_4.ZERO._subTo(r,r);
+}
+};
+function _20(a){
+var r=_5();
+this.abs()._divRemTo(a,null,r);
+if(this.s<0&&r.compareTo(_4.ZERO)>0){
+a._subTo(r,r);
+}
+return r;
+};
+function _21(m){
+this.m=m;
+};
+function _22(x){
+if(x.s<0||x.compareTo(this.m)>=0){
+return x.mod(this.m);
+}else{
+return x;
+}
+};
+function _23(x){
+return x;
+};
+function _24(x){
+x._divRemTo(this.m,null,x);
+};
+function _25(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+function _26(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+dojo.extend(_21,{convert:_22,revert:_23,reduce:_24,mulTo:_25,sqrTo:_26});
+function _27(){
+if(this.t<1){
+return 0;
+}
+var x=this[0];
+if((x&1)==0){
+return 0;
+}
+var y=x&3;
+y=(y*(2-(x&15)*y))&15;
+y=(y*(2-(x&255)*y))&255;
+y=(y*(2-(((x&65535)*y)&65535)))&65535;
+y=(y*(2-x*y%this._DV))%this._DV;
+return (y>0)?this._DV-y:-y;
+};
+function _28(m){
+this.m=m;
+this.mp=m._invDigit();
+this.mpl=this.mp&32767;
+this.mph=this.mp>>15;
+this.um=(1<<(m._DB-15))-1;
+this.mt2=2*m.t;
+};
+function _29(x){
+var r=_5();
+x.abs()._dlShiftTo(this.m.t,r);
+r._divRemTo(this.m,null,r);
+if(x.s<0&&r.compareTo(_4.ZERO)>0){
+this.m._subTo(r,r);
+}
+return r;
+};
+function _2a(x){
+var r=_5();
+x._copyTo(r);
+this.reduce(r);
+return r;
+};
+function _2b(x){
+while(x.t<=this.mt2){
+x[x.t++]=0;
+}
+for(var i=0;i<this.m.t;++i){
+var j=x[i]&32767;
+var u0=(j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x._DM;
+j=i+this.m.t;
+x[j]+=this.m.am(0,u0,x,i,0,this.m.t);
+while(x[j]>=x._DV){
+x[j]-=x._DV;
+x[++j]++;
+}
+}
+x._clamp();
+x._drShiftTo(this.m.t,x);
+if(x.compareTo(this.m)>=0){
+x._subTo(this.m,x);
+}
+};
+function _2c(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+function _2d(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+dojo.extend(_28,{convert:_29,revert:_2a,reduce:_2b,mulTo:_2d,sqrTo:_2c});
+function _2e(){
+return ((this.t>0)?(this[0]&1):this.s)==0;
+};
+function _2f(e,z){
+if(e>4294967295||e<1){
+return _4.ONE;
+}
+var r=_5(),r2=_5(),g=z.convert(this),i=_16(e)-1;
+g._copyTo(r);
+while(--i>=0){
+z.sqrTo(r,r2);
+if((e&(1<<i))>0){
+z.mulTo(r2,g,r);
+}else{
+var t=r;
+r=r2;
+r2=t;
+}
+}
+return z.revert(r);
+};
+function _30(e,m){
+var z;
+if(e<256||m._isEven()){
+z=new _21(m);
+}else{
+z=new _28(m);
+}
+return this._exp(e,z);
+};
+dojo.extend(_4,{_DB:_1,_DM:(1<<_1)-1,_DV:1<<_1,_FV:Math.pow(2,_9),_F1:_9-_1,_F2:2*_1-_9,_copyTo:_e,_fromInt:_f,_fromString:_10,_clamp:_11,_dlShiftTo:_18,_drShiftTo:_19,_lShiftTo:_1a,_rShiftTo:_1b,_subTo:_1c,_multiplyTo:_1d,_squareTo:_1e,_divRemTo:_1f,_invDigit:_27,_isEven:_2e,_exp:_2f,toString:_12,negate:_13,abs:_14,compareTo:_15,bitLength:_17,mod:_20,modPowInt:_30});
+dojo._mixin(_4,{ZERO:nbv(0),ONE:nbv(1),_nbi:_5,_nbv:nbv,_nbits:_16,_Montgomery:_28});
+dojox.math.BigInteger=_4;
+})();
+}
diff --git a/js/dojo/dojox/math/LICENSE-BigInteger b/js/dojo/dojox/math/LICENSE-BigInteger
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/LICENSE-BigInteger
@@ -0,0 +1,40 @@
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+ Tom Wu
+ tjw@cs.Stanford.EDU
\ No newline at end of file
diff --git a/js/dojo/dojox/math/random/Secure.js b/js/dojo/dojox/math/random/Secure.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/random/Secure.js
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.Secure"]){
+dojo._hasResource["dojox.math.random.Secure"]=true;
+dojo.provide("dojox.math.random.Secure");
+dojo.declare("dojox.math.random.Secure",null,{constructor:function(_1,_2){
+this.prng=_1;
+var p=this.pool=new Array(_1.size);
+this.pptr=0;
+for(var i=0,_3=_1.size;i<_3;){
+var t=Math.floor(65536*Math.random());
+p[i++]=t>>>8;
+p[i++]=t&255;
+}
+this.seedTime();
+if(!_2){
+this.h=[dojo.connect(dojo.body(),"onclick",this,"seedTime"),dojo.connect(dojo.body(),"onkeypress",this,"seedTime")];
+}
+},destroy:function(){
+if(this.h){
+dojo.forEach(this.h,dojo.disconnect);
+}
+},nextBytes:function(_4){
+var _5=this.state;
+if(!_5){
+this.seedTime();
+_5=this.state=this.prng();
+_5.init(this.pool);
+for(var p=this.pool,i=0,_6=p.length;i<_6;p[i++]=0){
+}
+this.pptr=0;
+}
+for(var i=0,_6=_4.length;i<_6;++i){
+_4[i]=_5.next();
+}
+},seedTime:function(){
+this._seed_int(new Date().getTime());
+},_seed_int:function(x){
+var p=this.pool,i=this.pptr;
+p[i++]^=x&255;
+p[i++]^=(x>>8)&255;
+p[i++]^=(x>>16)&255;
+p[i++]^=(x>>24)&255;
+if(i>=this.prng.size){
+i-=this.prng.size;
+}
+this.pptr=i;
+}});
+}
diff --git a/js/dojo/dojox/math/random/Simple.js b/js/dojo/dojox/math/random/Simple.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/random/Simple.js
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.Simple"]){
+dojo._hasResource["dojox.math.random.Simple"]=true;
+dojo.provide("dojox.math.random.Simple");
+dojo.declare("dojox.math.random.Simple",null,{destroy:function(){
+},nextBytes:function(_1){
+for(var i=0,l=_1.length;i<l;++i){
+_1[i]=Math.floor(256*Math.random());
+}
+}});
+}
diff --git a/js/dojo/dojox/math/random/prng4.js b/js/dojo/dojox/math/random/prng4.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/random/prng4.js
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.prng4"]){
+dojo._hasResource["dojox.math.random.prng4"]=true;
+dojo.provide("dojox.math.random.prng4");
+(function(){
+function _1(){
+this.i=0;
+this.j=0;
+this.S=new Array(256);
+};
+dojo.extend(_1,{init:function(_2){
+var i,j,t,S=this.S,_3=_2.length;
+for(i=0;i<256;++i){
+S[i]=i;
+}
+j=0;
+for(i=0;i<256;++i){
+j=(j+S[i]+_2[i%_3])&255;
+t=S[i];
+S[i]=S[j];
+S[j]=t;
+}
+this.i=0;
+this.j=0;
+},next:function(){
+var t,i,j,S=this.S;
+this.i=i=(this.i+1)&255;
+this.j=j=(this.j+S[i])&255;
+t=S[i];
+S[i]=S[j];
+S[j]=t;
+return S[(t+S[i])&255];
+}});
+dojox.math.random.prng4=function(){
+return new _1();
+};
+dojox.math.random.prng4.size=256;
+})();
+}
diff --git a/js/dojo/dojox/math/round.js b/js/dojo/dojox/math/round.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/round.js
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.round"]){
+dojo._hasResource["dojox.math.round"]=true;
+dojo.provide("dojox.math.round");
+dojo.experimental("dojox.math.round");
+dojox.math.round=function(_1,_2,_3){
+var _4=Math.log(Math.abs(_1))/Math.log(10);
+var _5=10/(_3||10);
+var _6=Math.pow(10,-15+_4);
+return (_5*(+_1+(_1>0?_6:-_6))).toFixed(_2)/_5;
+};
+if((0.9).toFixed()==0){
+(function(){
+var _7=dojox.math.round;
+dojox.math.round=function(v,p,m){
+var d=Math.pow(10,-p||0),a=Math.abs(v);
+if(!v||a>=d||a*Math.pow(10,p+1)<5){
+d=0;
+}
+return _7(v,p,m)+(v>0?d:-d);
+};
+})();
+}
+}
diff --git a/js/dojo/dojox/math/stats.js b/js/dojo/dojox/math/stats.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/math/stats.js
@@ -0,0 +1,108 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.stats"]){
+dojo._hasResource["dojox.math.stats"]=true;
+dojo.provide("dojox.math.stats");
+(function(){
+var st=dojox.math.stats;
+dojo.mixin(st,{sd:function(a){
+return Math.sqrt(st.variance(a));
+},variance:function(a){
+var _1=0,_2=0;
+dojo.forEach(a,function(_3){
+_1+=_3;
+_2+=Math.pow(_3,2);
+});
+return (_2/a.length)-Math.pow(_1/a.length,2);
+},bestFit:function(a,_4,_5){
+_4=_4||"x",_5=_5||"y";
+if(a[0]!==undefined&&typeof (a[0])=="number"){
+a=dojo.map(a,function(_6,_7){
+return {x:_7,y:_6};
+});
+}
+var sx=0,sy=0,_8=0,_9=0,_a=0,_b=0,_c=0,n=a.length,t;
+for(var i=0;i<n;i++){
+sx+=a[i][_4];
+sy+=a[i][_5];
+_8+=Math.pow(a[i][_4],2);
+_9+=Math.pow(a[i][_5],2);
+_a+=a[i][_4]*a[i][_5];
+}
+for(i=0;i<n;i++){
+t=a[i][_4]-sx/n;
+_b+=t*t;
+_c+=t*a[i][_5];
+}
+var _d=_c/(_b||1);
+var d=Math.sqrt((_8-Math.pow(sx,2)/n)*(_9-Math.pow(sy,2)/n));
+if(d===0){
+throw new Error("dojox.math.stats.bestFit: the denominator for Pearson's R is 0.");
+}
+var r=(_a-(sx*sy/n))/d;
+var r2=Math.pow(r,2);
+if(_d<0){
+r=-r;
+}
+return {slope:_d,intercept:(sy-sx*_d)/(n||1),r:r,r2:r2};
+},forecast:function(a,x,_e,_f){
+var fit=st.bestFit(a,_e,_f);
+return (fit.slope*x)+fit.intercept;
+},mean:function(a){
+var t=0;
+dojo.forEach(a,function(v){
+t+=v;
+});
+return t/Math.max(a.length,1);
+},min:function(a){
+return Math.min.apply(null,a);
+},max:function(a){
+return Math.max.apply(null,a);
+},median:function(a){
+var t=a.slice(0).sort(function(a,b){
+return a-b;
+});
+return (t[Math.floor(a.length/2)]+t[Math.ceil(a.length/2)])/2;
+},mode:function(a){
+var o={},r=0,m=Number.MIN_VALUE;
+dojo.forEach(a,function(v){
+(o[v]!==undefined)?o[v]++:o[v]=1;
+});
+for(var p in o){
+if(m<o[p]){
+m=o[p],r=p;
+}
+}
+return r;
+},sum:function(a){
+var sum=0;
+dojo.forEach(a,function(n){
+sum+=n;
+});
+return sum;
+},approxLin:function(a,pos){
+var p=pos*(a.length-1),t=Math.ceil(p),f=t-1;
+if(f<0){
+return a[0];
+}
+if(t>=a.length){
+return a[a.length-1];
+}
+return a[f]*(t-p)+a[t]*(p-f);
+},summary:function(a,_10){
+if(!_10){
+a=a.slice(0);
+a.sort(function(a,b){
+return a-b;
+});
+}
+var l=st.approxLin,_11={min:a[0],p25:l(a,0.25),med:l(a,0.5),p75:l(a,0.75),max:a[a.length-1],p10:l(a,0.1),p90:l(a,0.9)};
+return _11;
+}});
+})();
+}
diff --git a/js/dojo/dojox/resources/_modules.js b/js/dojo/dojox/resources/_modules.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/resources/_modules.js
@@ -0,0 +1,7 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
diff --git a/js/dojo/dojox/robot/README b/js/dojo/dojox/robot/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/robot/README
@@ -0,0 +1,59 @@
+-------------------------------------------------------------------------------
+dojox.robot.recorder
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 2008-07-30
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+ Mark Hays
+-------------------------------------------------------------------------------
+Project description
+
+Writing automated test cases takes time, and DOH is no exception. You have to
+look up element ids, invent dojo.queries for elements with no id,
+figure out exactly how many pixels to move the mouse . . . the list goes on.
+
+This recorder module enables DOH test case writers to create complete DOH test
+scripts directly from their actions and input on a Web page. Simply drop the
+generated code into your test page, set a pass condition, and the test will
+repeat your actions.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo
+-------------------------------------------------------------------------------
+Documentation
+
+See installation instructions below to prepare a test page for recording.
+
+To record a test, click in an area of the document with no dojo.stopEvents
+and press CTRL-ALT-ENTER in the main window. You will get a verification alert
+when you successfully start the recorder. Then you can interact with the Web
+page and the recorder will monitor your actions. It's usually good to record one
+test per widget instance per type of interaction (keyboard vs mouse for instance)
+you are testing.
+
+After you finish interacting with the Web page, click out of any dojo.stopEvents
+and press CTRL-ALT-ENTER again. You will see a box containing the generated source
+code for your recording. Copy this into a dojo.addOnLoad on the same page to register
+the test with DOH. Replace the /*Your condition here*/ text with a JS condition that
+indicates that the test passed. Again, having multiple small tests will help you
+keep the condition small. Add a doh.run() call after you register all of your tests
+to make them execute when you load the page.
+-------------------------------------------------------------------------------
+Installation instructions
+
+To ready the recorder for a particular page, add this line to your dojo.requires:
+dojo.require("dojox.robot.recorder");
+
+You can safely remove this line after you are finished recording your tests.
+-------------------------------------------------------------------------------
+Additional Notes
+
+Known limitations:
+- Content in an iframe might not report events to the recorder.
+- keyDown/keyUp events are supported by DOH, but not by the recorder.
+ If you hold a key down, it will generate lots of keyPress events instead.
+ Simply change these to one keyDown call yourself.
diff --git a/js/dojo/dojox/robot/recorder.js b/js/dojo/dojox/robot/recorder.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/robot/recorder.js
@@ -0,0 +1,329 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.robot.recorder"]){
+dojo._hasResource["dojox.robot.recorder"]=true;
+dojo.provide("dojox.robot.recorder");
+dojo.experimental("dojox.robot.recorder");
+(function(){
+var _1=1000;
+var _2=500;
+var _3=10000;
+var _4=[];
+var _5=0;
+var _6=null;
+var _7=null;
+var _8=function(){
+alert("Started recording.");
+_4=[];
+_6=new Date();
+_7=new Date();
+};
+var _9=function(_a,_b){
+if(_6==null||_a=="doh.robot.keyPress"&&_b[0]==dojo.keys.ENTER&&eval("("+_b[2]+")").ctrl&&eval("("+_b[2]+")").alt){
+return;
+}
+var dt=Math.max(Math.min(Math.round((new Date()).getTime()-_7.getTime()),_3),1);
+if(_a=="doh.robot.mouseMove"){
+_b[2]=dt;
+}else{
+_b[1]=dt;
+}
+_4.push({name:_a,args:_b});
+_7=new Date();
+};
+var _c=function(){
+var c=_4;
+if(c[0].name=="doh.robot.keyPress"&&(c[0].args[0]==dojo.keys.ENTER||c[0].args[0]==77)){
+c.splice(0,1);
+}
+for(var i=c.length-1;(i>=c.length-2)&&(i>=0);i--){
+if(c[i].name=="doh.robot.keyPress"&&c[i].args[0]==dojo.keys.ALT||c[i].args[0]==dojo.keys.CTRL){
+c.splice(i,1);
+}
+}
+for(i=0;i<c.length;i++){
+var _d,_e;
+if(c[i+1]&&c[i].name=="doh.robot.mouseMove"&&c[i+1].name==c[i].name&&c[i+1].args[2]<_2){
+_d=c[i+1];
+_e=0;
+while(_d&&_d.name==c[i].name&&_d.args[2]<_2){
+c.splice(i+1,1);
+_e+=_d.args[2];
+c[i].args[0]=_d.args[0];
+c[i].args[1]=_d.args[1];
+_d=c[i+1];
+}
+c[i].args[3]=_e;
+}else{
+if(c[i+1]&&c[i].name=="doh.robot.mouseWheel"&&c[i+1].name==c[i].name&&c[i+1].args[1]<_2){
+_d=c[i+1];
+_e=0;
+while(_d&&_d.name==c[i].name&&_d.args[1]<_2){
+c.splice(i+1,1);
+_e+=_d.args[1];
+c[i].args[0]+=_d.args[0];
+_d=c[i+1];
+}
+c[i].args[2]=_e;
+}else{
+if(c[i+2]&&c[i].name=="doh.robot.mouseMoveAt"&&c[i+2].name=="doh.robot.scrollIntoView"){
+var _f=c.splice(i+2,1)[0];
+c.splice(i,0,_f);
+}else{
+if(c[i+1]&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseRelease"&&c[i].args[0]==c[i+1].args[0]){
+c[i].name="doh.robot.mouseClick";
+c.splice(i+1,1);
+if(c[i+1]&&c[i+1].name=="doh.robot.mouseClick"&&c[i].args[0]==c[i+1].args[0]){
+c.splice(i+1,1);
+}
+}else{
+if(c[i+1]&&c[i-1]&&c[i-1].name=="doh.robot.mouseMoveAt"&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseMove"){
+var cmd={name:"doh.robot.mouseMoveAt",args:[c[i-1].args[0],1,100,c[i-1].args[3]+1,c[i-1].args[4]]};
+c.splice(i+1,0,cmd);
+}else{
+if(c[i+1]&&((c[i].name=="doh.robot.keyPress"&&typeof c[i].args[0]=="string")||c[i].name=="doh.robot.typeKeys")&&c[i+1].name=="doh.robot.keyPress"&&typeof c[i+1].args[0]=="string"&&c[i+1].args[1]<=_1&&!eval("("+c[i].args[2]+")").ctrl&&!eval("("+c[i].args[2]+")").alt&&!eval("("+c[i+1].args[2]+")").ctrl&&!eval("("+c[i+1].args[2]+")").alt){
+c[i].name="doh.robot.typeKeys";
+c[i].args.splice(3,1);
+_d=c[i+1];
+var _10=0;
+while(_d&&_d.name=="doh.robot.keyPress"&&typeof _d.args[0]=="string"&&_d.args[1]<=_1&&!eval("("+_d.args[2]+")").ctrl&&!eval("("+_d.args[2]+")").alt){
+c.splice(i+1,1);
+c[i].args[0]+=_d.args[0];
+_10+=_d.args[1];
+_d=c[i+1];
+}
+c[i].args[2]=_10;
+c[i].args[0]="'"+c[i].args[0]+"'";
+}else{
+if(c[i].name=="doh.robot.keyPress"){
+if(typeof c[i].args[0]=="string"){
+c[i].args[0]="'"+c[i].args[0]+"'";
+}else{
+if(c[i].args[0]==0){
+c.splice(i,1);
+}else{
+for(var j in dojo.keys){
+if(dojo.keys[j]==c[i].args[0]){
+c[i].args[0]="dojo.keys."+j;
+break;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+};
+var _11=function(){
+if(!_6){
+_8();
+}else{
+_12();
+}
+};
+var _12=function(){
+var dt=Math.round((new Date()).getTime()-_6.getTime());
+_6=null;
+_c();
+var c=_4;
+if(c.length){
+var s="doh.register('dojox.robot.AutoGeneratedTestGroup',{\n";
+s+=" name: 'autotest"+(_5++)+"',\n";
+s+=" timeout: "+(dt+2000)+",\n";
+s+=" runTest: function(){\n";
+s+=" var d = new doh.Deferred();\n";
+for(var i=0;i<c.length;i++){
+s+=" "+c[i].name+"(";
+for(var j=0;j<c[i].args.length;j++){
+var arg=c[i].args[j];
+s+=arg;
+if(j!=c[i].args.length-1){
+s+=", ";
+}
+}
+s+=");\n";
+}
+s+=" doh.robot.sequence(function(){\n";
+s+=" if(/*Your condition here*/){\n";
+s+=" d.callback(true);\n";
+s+=" }else{\n";
+s+=" d.errback(new Error('We got a failure'));\n";
+s+=" }\n";
+s+=" }, 1000);\n";
+s+=" return d;\n";
+s+=" }\n";
+s+="});\n";
+var div=document.createElement("div");
+div.id="dojox.robot.recorder";
+div.style.backgroundColor="white";
+div.style.position="absolute";
+var _13={y:(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),x:(window.pageXOffset||(window["dojo"]?dojo._fixIeBiDiScrollLeft(document.documentElement.scrollLeft):undefined)||document.body.scrollLeft||0)};
+div.style.left=_13.x+"px";
+div.style.top=_13.y+"px";
+var h1=document.createElement("h1");
+h1.innerHTML="Your code:";
+div.appendChild(h1);
+var pre=document.createElement("pre");
+if(pre.innerText!==undefined){
+pre.innerText=s;
+}else{
+pre.textContent=s;
+}
+div.appendChild(pre);
+var _14=document.createElement("button");
+_14.innerHTML="Close";
+var _15=dojo.connect(_14,"onmouseup",function(e){
+dojo.stopEvent(e);
+document.body.removeChild(div);
+dojo.disconnect(_15);
+});
+div.appendChild(_14);
+document.body.appendChild(div);
+_4=[];
+}
+};
+var _16=function(_17){
+if(typeof _17=="string"){
+return "'"+_17+"'";
+}else{
+if(_17.id){
+return "'"+_17.id+"'";
+}else{
+var _18=document.getElementsByTagName(_17.nodeName);
+var i;
+for(i=0;i<_18.length;i++){
+if(_18[i]==_17){
+break;
+}
+}
+return "function(){ return document.getElementsByTagName('"+_17.nodeName+"')["+i+"]; }";
+}
+}
+};
+var _19=function(b){
+return "{left:"+(b==0)+", middle:"+(b==1)+", right:"+(b==2)+"}";
+};
+var _1a=function(e){
+return "{'shift':"+(e.shiftKey)+", 'ctrl':"+(e.ctrlKey)+", 'alt':"+(e.altKey)+"}";
+};
+dojo.connect(document,"onkeydown",function(e){
+if((e.keyCode==dojo.keys.ENTER||e.keyCode==77)&&e.ctrlKey&&e.altKey){
+dojo.stopEvent(e);
+_11();
+}
+});
+var _1b={type:""};
+var _1c=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _1d=_16(e.target);
+var _1e=dojo.coords(e.target);
+_9("doh.robot.mouseMoveAt",[_1d,0,100,e.clientX-_1e.x,e.clientY-_1e.y]);
+_9("doh.robot.mousePress",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _1f=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _20=_16(e.target);
+var _21=dojo.coords(e.target);
+_9("doh.robot.mouseClick",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _22=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _23=_16(e.target);
+var _24=dojo.coords(e.target);
+_9("doh.robot.mouseRelease",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _25=function(e){
+if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
+return;
+}
+_1b={type:e.type,pageX:e.pageX,pageY:e.pageY};
+_9("doh.robot.mouseMove",[e.pageX,e.pageY,0,100,true]);
+};
+var _26=function(e){
+if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
+return;
+}
+_1b={type:e.type,detail:(e.detail?(e.detail):(-e.wheelDelta/120))};
+_9("doh.robot.mouseWheel",[_1b.detail]);
+};
+var _27=function(e){
+if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
+return;
+}
+_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
+_9("doh.robot.keyPress",[e.charOrCode==dojo.keys.SPACE?" ":e.charOrCode,0,_1a(e)]);
+};
+var _28=function(e){
+if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
+return;
+}
+_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
+};
+dojo.connect(document,"onmousedown",_1c);
+dojo.connect(document,"onmouseup",_22);
+dojo.connect(document,"onclick",_1f);
+dojo.connect(document,"onkeypress",_27);
+dojo.connect(document,"onkeyup",_28);
+dojo.connect(document,"onmousemove",_25);
+dojo.connect(document,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll",_26);
+dojo.addOnLoad(function(){
+if(window["dijit"]&&dijit.scrollIntoView){
+dojo.connect(dijit,"scrollIntoView",function(_29){
+_9("doh.robot.scrollIntoView",[_16(_29)]);
+});
+}
+});
+dojo.connect(dojo,"connect",function(_2a,_2b,f){
+if(_2a&&(!f||!f._mine)){
+var _2c=null;
+if(_2b.toLowerCase()=="onmousedown"){
+_2c=dojo.hitch(this,_1c);
+}else{
+if(_2b.toLowerCase()==(!dojo.isMozilla?"onmousewheel":"dommousescroll")){
+_2c=dojo.hitch(this,_26);
+}else{
+if(_2b.toLowerCase()=="onclick"){
+_2c=dojo.hitch(this,_1f);
+}else{
+if(_2b.toLowerCase()=="onmouseup"){
+_2c=dojo.hitch(this,_22);
+}else{
+if(_2b.toLowerCase()=="onkeypress"){
+_2c=dojo.hitch(this,_27);
+}else{
+if(_2b.toLowerCase()=="onkeyup"){
+_2c=dojo.hitch(this,_28);
+}
+}
+}
+}
+}
+}
+if(_2c==null){
+return;
+}
+_2c._mine=true;
+dojo.connect(_2a,_2b,_2c);
+}
+});
+})();
+}
diff --git a/js/dojo/dojox/rpc/Client.js b/js/dojo/dojox/rpc/Client.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/Client.js
@@ -0,0 +1,21 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Client"]){
+dojo._hasResource["dojox.rpc.Client"]=true;
+dojo.provide("dojox.rpc.Client");
+(function(){
+dojo._defaultXhr=dojo.xhr;
+dojo.xhr=function(_1,_2){
+var _3=_2.headers=_2.headers||{};
+_3["Client-Id"]=dojox.rpc.Client.clientId;
+_3["Seq-Id"]=dojox._reqSeqId=(dojox._reqSeqId||0)+1;
+return dojo._defaultXhr.apply(dojo,arguments);
+};
+})();
+dojox.rpc.Client.clientId=(Math.random()+"").substring(2,14)+(new Date().getTime()+"").substring(8,13);
+}
diff --git a/js/dojo/dojox/rpc/JsonRPC.js b/js/dojo/dojox/rpc/JsonRPC.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/JsonRPC.js
@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.JsonRPC"]){
+dojo._hasResource["dojox.rpc.JsonRPC"]=true;
+dojo.provide("dojox.rpc.JsonRPC");
+dojo.require("dojox.rpc.Service");
+(function(){
+function _1(_2){
+return {serialize:function(_3,_4,_5,_6){
+var d={id:this._requestId++,method:_4.name,params:_5};
+if(_2){
+d.jsonrpc=_2;
+}
+return {data:dojo.toJson(d),handleAs:"json",contentType:"application/json",transport:"POST"};
+},deserialize:function(_7){
+if("Error"==_7.name){
+_7=dojo.fromJson(_7.responseText);
+}
+if(_7.error){
+var e=new Error(_7.error.message||_7.error);
+e._rpcErrorObject=_7.error;
+return e;
+}
+return _7.result;
+}};
+};
+dojox.rpc.envelopeRegistry.register("JSON-RPC-1.0",function(_8){
+return _8=="JSON-RPC-1.0";
+},dojo.mixin({namedParams:false},_1()));
+dojox.rpc.envelopeRegistry.register("JSON-RPC-2.0",function(_9){
+return _9=="JSON-RPC-2.0";
+},_1("2.0"));
+})();
+}
diff --git a/js/dojo/dojox/rpc/JsonRest.js b/js/dojo/dojox/rpc/JsonRest.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/JsonRest.js
@@ -0,0 +1,342 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.JsonRest"]){
+dojo._hasResource["dojox.rpc.JsonRest"]=true;
+dojo.provide("dojox.rpc.JsonRest");
+dojo.require("dojox.json.ref");
+dojo.require("dojox.rpc.Rest");
+(function(){
+var _1=[];
+var _2=dojox.rpc.Rest;
+var jr;
+function _3(_4,_5,_6,_7){
+var _8=_5.ioArgs&&_5.ioArgs.xhr&&_5.ioArgs.xhr.getResponseHeader("Last-Modified");
+if(_8&&_2._timeStamps){
+_2._timeStamps[_7]=_8;
+}
+var _9=_4._schema&&_4._schema.hrefProperty;
+if(_9){
+dojox.json.ref.refAttribute=_9;
+}
+_6=_6&&dojox.json.ref.resolveJson(_6,{defaultId:_7,index:_2._index,timeStamps:_8&&_2._timeStamps,time:_8,idPrefix:_4.servicePath.replace(/[^\/]*$/,""),idAttribute:jr.getIdAttribute(_4),schemas:jr.schemas,loader:jr._loader,idAsRef:_4.idAsRef,assignAbsoluteIds:true});
+dojox.json.ref.refAttribute="$ref";
+return _6;
+};
+jr=dojox.rpc.JsonRest={serviceClass:dojox.rpc.Rest,conflictDateHeader:"If-Unmodified-Since",commit:function(_a){
+_a=_a||{};
+var _b=[];
+var _c={};
+var _d=[];
+for(var i=0;i<_1.length;i++){
+var _e=_1[i];
+var _f=_e.object;
+var old=_e.old;
+var _10=false;
+if(!(_a.service&&(_f||old)&&(_f||old).__id.indexOf(_a.service.servicePath))&&_e.save){
+delete _f.__isDirty;
+if(_f){
+if(old){
+var _11;
+if((_11=_f.__id.match(/(.*)#.*/))){
+_f=_2._index[_11[1]];
+}
+if(!(_f.__id in _c)){
+_c[_f.__id]=_f;
+if(_a.incrementalUpdates&&!_11){
+var _12=(typeof _a.incrementalUpdates=="function"?_a.incrementalUpdates:function(){
+_12={};
+for(var j in _f){
+if(_f.hasOwnProperty(j)){
+if(_f[j]!==old[j]){
+_12[j]=_f[j];
+}
+}else{
+if(old.hasOwnProperty(j)){
+return null;
+}
+}
+}
+return _12;
+})(_f,old);
+}
+if(_12){
+_b.push({method:"post",target:_f,content:_12});
+}else{
+_b.push({method:"put",target:_f,content:_f});
+}
+}
+}else{
+var _13=jr.getServiceAndId(_f.__id).service;
+var _14=jr.getIdAttribute(_13);
+if((_14 in _f)&&!_a.alwaysPostNewItems){
+_b.push({method:"put",target:_f,content:_f});
+}else{
+_b.push({method:"post",target:{__id:_13.servicePath},content:_f});
+}
+}
+}else{
+if(old){
+_b.push({method:"delete",target:old});
+}
+}
+_d.push(_e);
+_1.splice(i--,1);
+}
+}
+dojo.connect(_a,"onError",function(){
+if(_a.revertOnError!==false){
+var _15=_1;
+_1=_d;
+var _16=0;
+jr.revert();
+_1=_15;
+}else{
+_1=dirtyObject.concat(_d);
+}
+});
+jr.sendToServer(_b,_a);
+return _b;
+},sendToServer:function(_17,_18){
+var _19;
+var _1a=dojo.xhr;
+var _1b=_17.length;
+var i,_1c;
+var _1d;
+var _1e=this.conflictDateHeader;
+dojo.xhr=function(_1f,_20){
+_20.headers=_20.headers||{};
+_20.headers["Transaction"]=_17.length-1==i?"commit":"open";
+if(_1e&&_1d){
+_20.headers[_1e]=_1d;
+}
+if(_1c){
+_20.headers["Content-ID"]="<"+_1c+">";
+}
+return _1a.apply(dojo,arguments);
+};
+for(i=0;i<_17.length;i++){
+var _21=_17[i];
+dojox.rpc.JsonRest._contentId=_21.content&&_21.content.__id;
+var _22=_21.method=="post";
+_1d=_21.method=="put"&&_2._timeStamps[_21.content.__id];
+if(_1d){
+_2._timeStamps[_21.content.__id]=(new Date())+"";
+}
+_1c=_22&&dojox.rpc.JsonRest._contentId;
+var _23=jr.getServiceAndId(_21.target.__id);
+var _24=_23.service;
+var dfd=_21.deferred=_24[_21.method](_23.id.replace(/#/,""),dojox.json.ref.toJson(_21.content,false,_24.servicePath,true));
+(function(_25,dfd,_26){
+dfd.addCallback(function(_27){
+try{
+var _28=dfd.ioArgs.xhr&&dfd.ioArgs.xhr.getResponseHeader("Location");
+if(_28){
+var _29=_28.match(/(^\w+:\/\/)/)&&_28.indexOf(_26.servicePath);
+_28=_29>0?_28.substring(_29):(_26.servicePath+_28).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/,"$2$3");
+_25.__id=_28;
+_2._index[_28]=_25;
+}
+_27=_3(_26,dfd,_27,_25&&_25.__id);
+}
+catch(e){
+}
+if(!(--_1b)){
+if(_18.onComplete){
+_18.onComplete.call(_18.scope,_17);
+}
+}
+return _27;
+});
+})(_21.content,dfd,_24);
+dfd.addErrback(function(_2a){
+_1b=-1;
+_18.onError.call(_18.scope,_2a);
+});
+}
+dojo.xhr=_1a;
+},getDirtyObjects:function(){
+return _1;
+},revert:function(_2b){
+for(var i=_1.length;i>0;){
+i--;
+var _2c=_1[i];
+var _2d=_2c.object;
+var old=_2c.old;
+var _2e=dojox.data._getStoreForItem(_2d||old);
+if(!(_2b&&(_2d||old)&&(_2d||old).__id.indexOf(_2b.servicePath))){
+if(_2d&&old){
+for(var j in old){
+if(old.hasOwnProperty(j)&&_2d[j]!==old[j]){
+if(_2e){
+_2e.onSet(_2d,j,_2d[j],old[j]);
+}
+_2d[j]=old[j];
+}
+}
+for(j in _2d){
+if(!old.hasOwnProperty(j)){
+if(_2e){
+_2e.onSet(_2d,j,_2d[j]);
+}
+delete _2d[j];
+}
+}
+}else{
+if(!old){
+if(_2e){
+_2e.onDelete(_2d);
+}
+}else{
+if(_2e){
+_2e.onNew(old);
+}
+}
+}
+delete (_2d||old).__isDirty;
+_1.splice(i,1);
+}
+}
+},changing:function(_2f,_30){
+if(!_2f.__id){
+return;
+}
+_2f.__isDirty=true;
+for(var i=0;i<_1.length;i++){
+var _31=_1[i];
+if(_2f==_31.object){
+if(_30){
+_31.object=false;
+if(!this._saveNotNeeded){
+_31.save=true;
+}
+}
+return;
+}
+}
+var old=_2f instanceof Array?[]:{};
+for(i in _2f){
+if(_2f.hasOwnProperty(i)){
+old[i]=_2f[i];
+}
+}
+_1.push({object:!_30&&_2f,old:old,save:!this._saveNotNeeded});
+},deleteObject:function(_32){
+this.changing(_32,true);
+},getConstructor:function(_33,_34){
+if(typeof _33=="string"){
+var _35=_33;
+_33=new dojox.rpc.Rest(_33,true);
+this.registerService(_33,_35,_34);
+}
+if(_33._constructor){
+return _33._constructor;
+}
+_33._constructor=function(_36){
+var _37=this;
+var _38=arguments;
+var _39;
+var _3a;
+function _3b(_3c){
+if(_3c){
+_3b(_3c["extends"]);
+_39=_3c.properties;
+for(var i in _39){
+var _3d=_39[i];
+if(_3d&&(typeof _3d=="object")&&("default" in _3d)){
+_37[i]=_3d["default"];
+}
+}
+}
+if(_3c&&_3c.prototype&&_3c.prototype.initialize){
+_3a=true;
+_3c.prototype.initialize.apply(_37,_38);
+}
+};
+_3b(_33._schema);
+if(!_3a&&_36&&typeof _36=="object"){
+dojo.mixin(_37,_36);
+}
+var _3e=jr.getIdAttribute(_33);
+_2._index[this.__id=this.__clientId=_33.servicePath+(this[_3e]||Math.random().toString(16).substring(2,14)+"@"+((dojox.rpc.Client&&dojox.rpc.Client.clientId)||"client"))]=this;
+if(dojox.json.schema&&_39){
+dojox.json.schema.mustBeValid(dojox.json.schema.validate(this,_33._schema));
+}
+_1.push({object:this,save:true});
+};
+return dojo.mixin(_33._constructor,_33._schema,{load:_33});
+},fetch:function(_3f){
+var _40=jr.getServiceAndId(_3f);
+return this.byId(_40.service,_40.id);
+},getIdAttribute:function(_41){
+var _42=_41._schema;
+var _43;
+if(_42){
+if(!(_43=_42._idAttr)){
+for(var i in _42.properties){
+if(_42.properties[i].identity||(_42.properties[i].link=="self")){
+_42._idAttr=_43=i;
+}
+}
+}
+}
+return _43||"id";
+},getServiceAndId:function(_44){
+var _45="";
+for(var _46 in jr.services){
+if((_44.substring(0,_46.length)==_46)&&(_46.length>=_45.length)){
+_45=_46;
+}
+}
+if(_45){
+return {service:jr.services[_45],id:_44.substring(_45.length)};
+}
+var _47=_44.match(/^(.*\/)([^\/]*)$/);
+return {service:new jr.serviceClass(_47[1],true),id:_47[2]};
+},services:{},schemas:{},registerService:function(_48,_49,_4a){
+_49=_48.servicePath=_49||_48.servicePath;
+_48._schema=jr.schemas[_49]=_4a||_48._schema||{};
+jr.services[_49]=_48;
+},byId:function(_4b,id){
+var _4c,_4d=_2._index[(_4b.servicePath||"")+id];
+if(_4d&&!_4d._loadObject){
+_4c=new dojo.Deferred();
+_4c.callback(_4d);
+return _4c;
+}
+return this.query(_4b,id);
+},query:function(_4e,id,_4f){
+var _50=_4e(id,_4f);
+_50.addCallback(function(_51){
+if(_51.nodeType&&_51.cloneNode){
+return _51;
+}
+return _3(_4e,_50,_51,typeof id!="string"||(_4f&&(_4f.start||_4f.count))?undefined:id);
+});
+return _50;
+},_loader:function(_52){
+var _53=jr.getServiceAndId(this.__id);
+var _54=this;
+jr.query(_53.service,_53.id).addBoth(function(_55){
+if(_55==_54){
+delete _55.$ref;
+delete _55._loadObject;
+}else{
+_54._loadObject=function(_56){
+_56(_55);
+};
+}
+_52(_55);
+});
+},isDirty:function(_57){
+if(!_57){
+return !!_1.length;
+}
+return _57.__isDirty;
+}};
+})();
+}
diff --git a/js/dojo/dojox/rpc/OfflineRest.js b/js/dojo/dojox/rpc/OfflineRest.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/OfflineRest.js
@@ -0,0 +1,203 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.OfflineRest"]){
+dojo._hasResource["dojox.rpc.OfflineRest"]=true;
+dojo.provide("dojox.rpc.OfflineRest");
+dojo.require("dojox.data.ClientFilter");
+dojo.require("dojox.rpc.Rest");
+dojo.require("dojox.storage");
+(function(){
+var _1=dojox.rpc.Rest;
+var _2="dojox_rpc_OfflineRest";
+var _3;
+var _4=_1._index;
+dojox.storage.manager.addOnLoad(function(){
+_3=dojox.storage.manager.available;
+for(var i in _4){
+_5(_4[i],i);
+}
+});
+var _6;
+function _7(_8){
+return _8.replace(/[^0-9A-Za-z_]/g,"_");
+};
+function _5(_9,id){
+if(_3&&!_6&&(id||(_9&&_9.__id))){
+dojox.storage.put(_7(id||_9.__id),typeof _9=="object"?dojox.json.ref.toJson(_9):_9,function(){
+},_2);
+}
+};
+function _a(_b){
+return _b instanceof Error&&(_b.status==503||_b.status>12000||!_b.status);
+};
+function _c(){
+if(_3){
+var _d=dojox.storage.get("dirty",_2);
+if(_d){
+for(var _e in _d){
+_f(_e,_d);
+}
+}
+}
+};
+var _10;
+function _11(){
+_10.sendChanges();
+_10.downloadChanges();
+};
+var _12=setInterval(_11,15000);
+dojo.connect(document,"ononline",_11);
+_10=dojox.rpc.OfflineRest={turnOffAutoSync:function(){
+clearInterval(_12);
+},sync:_11,sendChanges:_c,downloadChanges:function(){
+},addStore:function(_13,_14){
+_10.stores.push(_13);
+_13.fetch({queryOptions:{cache:true},query:_14,onComplete:function(_15,_16){
+_13._localBaseResults=_15;
+_13._localBaseFetch=_16;
+}});
+}};
+_10.stores=[];
+var _17=_1._get;
+_1._get=function(_18,id){
+try{
+_c();
+if(window.navigator&&navigator.onLine===false){
+throw new Error();
+}
+var dfd=_17(_18,id);
+}
+catch(e){
+dfd=new dojo.Deferred();
+dfd.errback(e);
+}
+var _19=dojox.rpc._sync;
+dfd.addCallback(function(_1a){
+_5(_1a,_18._getRequest(id).url);
+return _1a;
+});
+dfd.addErrback(function(_1b){
+if(_3){
+if(_a(_1b)){
+var _1c={};
+var _1d=function(id,_1e){
+if(_1c[id]){
+return _1e;
+}
+var _1f=dojo.fromJson(dojox.storage.get(_7(id),_2))||_1e;
+_1c[id]=_1f;
+for(var i in _1f){
+var val=_1f[i];
+id=val&&val.$ref;
+if(id){
+if(id.substring&&id.substring(0,4)=="cid:"){
+id=id.substring(4);
+}
+_1f[i]=_1d(id,val);
+}
+}
+if(_1f instanceof Array){
+for(i=0;i<_1f.length;i++){
+if(_1f[i]===undefined){
+_1f.splice(i--,1);
+}
+}
+}
+return _1f;
+};
+_6=true;
+var _20=_1d(_18._getRequest(id).url);
+if(!_20){
+return _1b;
+}
+_6=false;
+return _20;
+}else{
+return _1b;
+}
+}else{
+if(_19){
+return new Error("Storage manager not loaded, can not continue");
+}
+dfd=new dojo.Deferred();
+dfd.addCallback(arguments.callee);
+dojox.storage.manager.addOnLoad(function(){
+dfd.callback();
+});
+return dfd;
+}
+});
+return dfd;
+};
+function _21(_22,_23,_24,_25,_26){
+if(_22=="delete"){
+dojox.storage.remove(_7(_23),_2);
+}else{
+dojox.storage.put(_7(_24),_25,function(){
+},_2);
+}
+var _27=_26&&_26._store;
+if(_27){
+_27.updateResultSet(_27._localBaseResults,_27._localBaseFetch);
+dojox.storage.put(_7(_26._getRequest(_27._localBaseFetch.query).url),dojox.json.ref.toJson(_27._localBaseResults),function(){
+},_2);
+}
+};
+dojo.addOnLoad(function(){
+dojo.connect(dojox.data,"restListener",function(_28){
+var _29=_28.channel;
+var _2a=_28.event.toLowerCase();
+var _2b=dojox.rpc.JsonRest&&dojox.rpc.JsonRest.getServiceAndId(_29).service;
+_21(_2a,_29,_2a=="post"?_29+_28.result.id:_29,dojo.toJson(_28.result),_2b);
+});
+});
+var _2c=_1._change;
+_1._change=function(_2d,_2e,id,_2f){
+if(!_3){
+return _2c.apply(this,arguments);
+}
+var _30=_2e._getRequest(id).url;
+_21(_2d,_30,dojox.rpc.JsonRest._contentId,_2f,_2e);
+var _31=dojox.storage.get("dirty",_2)||{};
+if(_2d=="put"||_2d=="delete"){
+var _32=_30;
+}else{
+_32=0;
+for(var i in _31){
+if(!isNaN(parseInt(i))){
+_32=i;
+}
+}
+_32++;
+}
+_31[_32]={method:_2d,id:_30,content:_2f};
+return _f(_32,_31);
+};
+function _f(_33,_34){
+var _35=_34[_33];
+var _36=dojox.rpc.JsonRest.getServiceAndId(_35.id);
+var _37=_2c(_35.method,_36.service,_36.id,_35.content);
+_34[_33]=_35;
+dojox.storage.put("dirty",_34,function(){
+},_2);
+_37.addBoth(function(_38){
+if(_a(_38)){
+return null;
+}
+var _39=dojox.storage.get("dirty",_2)||{};
+delete _39[_33];
+dojox.storage.put("dirty",_39,function(){
+},_2);
+return _38;
+});
+return _37;
+};
+dojo.connect(_4,"onLoad",_5);
+dojo.connect(_4,"onUpdate",_5);
+})();
+}
diff --git a/js/dojo/dojox/rpc/ProxiedPath.js b/js/dojo/dojox/rpc/ProxiedPath.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/ProxiedPath.js
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.ProxiedPath"]){
+dojo._hasResource["dojox.rpc.ProxiedPath"]=true;
+dojo.provide("dojox.rpc.ProxiedPath");
+dojo.require("dojox.rpc.Service");
+dojox.rpc.envelopeRegistry.register("PROXIED-PATH",function(_1){
+return _1=="PROXIED-PATH";
+},{serialize:function(_2,_3,_4){
+var i;
+var _5=dojox.rpc.getTarget(_2,_3);
+if(dojo.isArray(_4)){
+for(i=0;i<_4.length;i++){
+_5+="/"+(_4[i]==null?"":_4[i]);
+}
+}else{
+for(i in _4){
+_5+="/"+i+"/"+_4[i];
+}
+}
+return {data:"",target:(_3.proxyUrl||_2.proxyUrl)+"?url="+encodeURIComponent(_5)};
+},deserialize:function(_6){
+return _6;
+}});
+}
diff --git a/js/dojo/dojox/rpc/Rest.js b/js/dojo/dojox/rpc/Rest.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/Rest.js
@@ -0,0 +1,87 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Rest"]){
+dojo._hasResource["dojox.rpc.Rest"]=true;
+dojo.provide("dojox.rpc.Rest");
+(function(){
+if(dojox.rpc&&dojox.rpc.transportRegistry){
+dojox.rpc.transportRegistry.register("REST",function(_1){
+return _1=="REST";
+},{getExecutor:function(_2,_3,_4){
+return new dojox.rpc.Rest(_3.name,(_3.contentType||_4._smd.contentType||"").match(/json|javascript/),null,function(id,_5){
+var _6=_4._getRequest(_3,[id]);
+_6.url=_6.target+(_6.data?"?"+_6.data:"");
+return _6;
+});
+}});
+}
+var _7;
+function _8(_9,_a,_b,id){
+_9.addCallback(function(_c){
+if(_9.ioArgs.xhr&&_b){
+_b=_9.ioArgs.xhr.getResponseHeader("Content-Range");
+_9.fullLength=_b&&(_b=_b.match(/\/(.*)/))&&parseInt(_b[1]);
+}
+return _c;
+});
+return _9;
+};
+_7=dojox.rpc.Rest=function(_d,_e,_f,_10){
+var _11;
+_11=function(id,_12){
+return _7._get(_11,id,_12);
+};
+_11.isJson=_e;
+_11._schema=_f;
+_11.cache={serialize:_e?((dojox.json&&dojox.json.ref)||dojo).toJson:function(_13){
+return _13;
+}};
+_11._getRequest=_10||function(id,_14){
+if(dojo.isObject(id)){
+id=dojo.objectToQuery(id);
+id=id?"?"+id:"";
+}
+if(_14&&_14.sort&&!_14.queryStr){
+id+=(id?"&":"?")+"sort(";
+for(var i=0;i<_14.sort.length;i++){
+var _15=_14.sort[i];
+id+=(i>0?",":"")+(_15.descending?"-":"+")+encodeURIComponent(_15.attribute);
+}
+id+=")";
+}
+var _16={url:_d+(id==null?"":id),handleAs:_e?"json":"text",contentType:_e?"application/json":"text/plain",sync:dojox.rpc._sync,headers:{Accept:_e?"application/json,application/javascript":"*/*"}};
+if(_14&&(_14.start>=0||_14.count>=0)){
+_16.headers.Range="items="+(_14.start||"0")+"-"+((_14.count&&_14.count!=Infinity&&(_14.count+(_14.start||0)-1))||"");
+}
+dojox.rpc._sync=false;
+return _16;
+};
+function _17(_18){
+_11[_18]=function(id,_19){
+return _7._change(_18,_11,id,_19);
+};
+};
+_17("put");
+_17("post");
+_17("delete");
+_11.servicePath=_d;
+return _11;
+};
+_7._index={};
+_7._timeStamps={};
+_7._change=function(_1a,_1b,id,_1c){
+var _1d=_1b._getRequest(id);
+_1d[_1a+"Data"]=_1c;
+return _8(dojo.xhr(_1a.toUpperCase(),_1d,true),_1b);
+};
+_7._get=function(_1e,id,_1f){
+_1f=_1f||{};
+return _8(dojo.xhrGet(_1e._getRequest(id,_1f)),_1e,(_1f.start>=0||_1f.count>=0),id);
+};
+})();
+}
diff --git a/js/dojo/dojox/rpc/SMDLibrary/dojo-api.smd b/js/dojo/dojox/rpc/SMDLibrary/dojo-api.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/dojo-api.smd
@@ -0,0 +1,30 @@
+{
+ envelope: "URL",
+ transport: "JSONP",
+ callbackParamName: "callback",
+ services: {
+ get: {
+ target: "http://api.dojotoolkit.org/jsdoc/jsonp",
+ parameters: [
+ { name: "name", type: "string", optional: false },
+ { name: "exact", type: "boolean", optional: true },
+ { name: "recursion", type: "boolean", optional: true },
+ { name: "resource", type: "string", optional: true },
+ { name: "project", type: "string", optional: true },
+ { name: "version", type: "string", optional: true },
+ { name: "attributes", type: "array", optional: true }
+ ]
+ },
+ batch: {
+ target: "http://api.dojotoolkit.org/jsdoc/jsonp/batch",
+ parameters: [
+ { name: "names", type: "array", optional: false },
+ { name: "exact", type: "boolean", optional: true },
+ { name: "recursion", type: "boolean", optional: true },
+ { name: "project", type: "string", optional: true },
+ { name: "version", type: "string", optional: true },
+ { name: "attributes", type: "array", optional: false }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/js/dojo/dojox/rpc/SMDLibrary/friendfeed.smd b/js/dojo/dojox/rpc/SMDLibrary/friendfeed.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/friendfeed.smd
@@ -0,0 +1,49 @@
+{
+ "SMDVersion": "2.0",
+ "id": "http://friendfeed.com/api",
+ "description": "Friendfeed's API - documentation at http://code.google.com/p/friendfeed-api/wiki/ApiDocumentation",
+
+ transport: "JSONP",
+ envelope: "URL",
+
+ additionalParameters: true,
+ parameters: [
+ { name: "format", optional: false, "default": "json" },
+ { name: "service", optional: true },
+ { name: "start", optional: true, type: "integer" },
+ { name: "num", optional: true, type: "integer" }
+ ],
+
+ services: {
+ users: {
+ target: "http://friendfeed.com/api/feed/user",
+ parameters: [
+ { name: "nickname", type: "string", optional: false, "default": "" }
+ ]
+ },
+ entry: {
+ target: "http://friendfeed.com/api/feed/entry",
+ parameters: [
+ { name: "entry_id", type: "string", optional: false, "default": "" }
+ ]
+ },
+ search: {
+ target: "http://friendfeed.com/api/feed/search",
+ parameters: [
+ { name: "q", type: "string", optional: false, "default": "" }
+ ]
+ },
+ url: {
+ target: "http://friendfeed.com/api/feed/url",
+ parameters: [
+ { name: "url", type: "string", optional: false, "default": "" }
+ ]
+ },
+ domain: {
+ target: "http://friendfeed.com/api/feed/domain",
+ parameters: [
+ { name: "domain", type: "string", optional: false, "default":"" }
+ ]
+ }
+ }
+}
diff --git a/js/dojo/dojox/rpc/SMDLibrary/geonames.smd b/js/dojo/dojox/rpc/SMDLibrary/geonames.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/geonames.smd
@@ -0,0 +1,263 @@
+{
+
+ // JSON REST services provided by geonames.org
+ // adapted from: http://www.geonames.org/export/JSON-webservices.html
+ // http://creativecommons.org/licenses/by/3.0/
+ // INCOMPLETE IMPLEMENTATION
+
+ "SMDVersion":"2.0",
+ "id":"/geonames",
+ "transport":"JSONP",
+ "envelope":"URL",
+ "target": "http://ws.geonames.org/",
+
+ "parameters" : [
+ {name:"type", optional: false, "default":"JSON"}
+ ],
+
+ "services":{
+ getCountryInfo:{
+ // Result : returns info about a country such as name, population, etc.
+ // If country parameter is not specified, that information is returned for
+ // every country
+ "target": "countryInfoJSON",
+ "parameters": [
+ { name: "country", type:"STRING", optional: true },
+ { name: "lang", type:"STRING"}, // default: "en"
+ { name: "maxRows", type:"INTEGER", optional: true } // default: 10
+ ]
+ },
+
+ getCities:{
+ // Result : returns a list of cities and placenames in the bounding box,
+ // ordered by relevancy (capital/population). Placenames close together
+ // are filterered out and only the larger name is included in the resulting list.
+ "target": "citiesJSON",
+ "parameters": [
+ { name: "north", type:"FLOAT"},
+ { name: "south", type:"FLOAT"},
+ { name: "east", type:"FLOAT"},
+ { name: "west", type:"FLOAT"},
+ { name: "lang", type:"STRING"}, // default: "en"
+ { name: "maxRows", type:"INTEGER", optional: true } // deault: 10
+ ]
+ },
+
+ "getQuakes":{
+ // Result : returns a list of earthquakes, ordered by magnitude
+ "target" : "earthquakesJSON",
+ "parameters" : [
+ // bounding box coords:
+ { name: "north", type:"FLOAT" },
+ { name: "south", type:"FLOAT" },
+ { name: "east", type:"FLOAT" },
+ { name: "west", type:"FLOAT" },
+ { name: "date", type:"STRING",optional: true }, // yyyy-MM-dd
+ { name: "minMagniture", type:"INTERGER",optional: true },
+ { name: "maxRows", type:"INTEGER", optional: true } // deault: 10
+ ]
+ },
+
+ "getWeather":{
+ // Weather data is provided in the METAR (METeorological Aerodrome Report) format.
+ // Result : returns a list of weather stations with the most recent weather observation
+ "target" : "weatherJSON",
+ "parameters" : [
+ { name: "north", type:"FLOAT" },
+ { name: "south", type:"FLOAT" },
+ { name: "east", type:"FLOAT" },
+ { name: "west", type:"FLOAT" },
+ { name: "maxRows", type:"INTEGER",optional:true } // deault: 10
+ ]
+ },
+
+ "getWeatherByICAO":{
+ // Result : returns the weather station and the most recent weather observation for the ICAO code
+ "target": "weatherIcaoJSON",
+ "parameters": [
+ { name:"ICAO", type:"STRING" }
+ ]
+ },
+
+ "getWeatherByCoords":{
+ // Result : returns a weather station with the most recent weather observation
+ "target": "findNearByWeatherJSON",
+ "parameters": [
+ { name:"lat", type:"FLOAT" },
+ { name:"lng", type:"FLOAT" }
+ ]
+ },
+
+ "getChildren":{
+ // Returns the children for a given geonameId. The children are the
+ // administrative divisions within an other administrative division.
+ // Like the counties (ADM2) in a state (ADM1) or also the countries
+ // in a continent.
+ "target": "childrenJSON",
+ "parameters": [
+ { name:"geonameId", type:"INTEGER" }
+ ]
+ },
+
+ "getHierarchy":{
+ // Result : returns a list of GeoName records, ordered by hierarchy
+ // level. The top hierarchy (continent) is the first element in the list
+ "target": "hierarchyJSON",
+ "parameters": [
+ { name:"geonameId", type:"INTEGER" }
+ ]
+ },
+
+ "getNeighbours":{
+ // The neighbourhood for US cities. Data provided by Zillow under cc-by-sa license.
+ "target":"neighboursJSON",
+ "parameters": [
+ { name:"geonameId", type:"INTEGER" }
+ //{ name:"lat", type:"FLOAT" },
+ //{ name:"long", type:"FLOAT" }
+ ]
+ },
+
+ "getNeighbourhood":{
+ // returns the neighbourhood for the given latitude/longitude
+ // Example http://ws.geonames.org/neighbourhood?lat=40.78343&lng=-73.96625
+ "target":"neighbourhoodJSON",
+ "parameters":[
+ { name:"lat", type:"FLOAT" },
+ { name:"lng", type:"FLOAT" },
+ { name:"radius", type:"FLOAT" }
+ ]
+ },
+
+ "getSiblings":{
+ // Result : returns a list of GeoNames records that have the same
+ // administrative level and the same father
+ "target":"siblingsJSON",
+ "parameters": [
+ { name:"geonameId", type:"INTEGER" }
+ ]
+ },
+
+ "getCountryCode":{
+ // returns the iso country code for the given latitude/longitude
+ // With the parameter type=xml this service returns an xml document
+ // with iso country code and country name. The optional parameter
+ // lang can be used to specify the language the country name should
+ // be in. JSON output is produced with type=JSON
+ "target":"countryCode",
+ "parameters": [
+ { name:"lat", type:"FLOAT" },
+ { name:"lng", type:"FLOAT" },
+ { name:"lang", type:"STRING",optional:true },
+ { name:"radius", type:"FLOAT" }
+ ]
+ },
+
+ "getCountrySubdivision":{
+ // returns the country and the administrative subdivison (state, province,...) for the given latitude/longitude
+ // Example http://ws.geonames.org/countrySubdivisionJSON?lat=47.03&lng=10.2
+ "target":"countrySubdivisionJSON",
+ "parameters":[
+ { name:"lat", type:"FLOAT" },
+ { name:"long", type:"FLOAT" },
+ { name:"radius", type:"FLOAT" }
+ ]
+ },
+
+ "getWikipediaBoundingBox":{
+ // returns the wikipedia entries within the bounding box as xml document
+ // Example http://ws.geonames.org/wikipediaBoundingBoxJSON?north=44.1&south=-9.9&east=-22.4&west=55.2
+ "target":"wikipediaBoundingBoxJSON",
+ "parameters":[
+ { name: "north", type:"FLOAT" },
+ { name: "south", type:"FLOAT" },
+ { name: "east", type:"FLOAT" },
+ { name: "west", type:"FLOAT" },
+ { name: "lang", type:"STRING",optional:true }, // default: "en"
+ { name: "maxRows", type:"INTEGER",optional:true } // default: 10
+ ]
+ },
+
+ "searchWikipedia":{
+ // returns the wikipedia entries found for the searchterm as xml document
+ // Example http://ws.geonames.org/wikipediaSearchJSON?q=london&maxRows=10
+ "target":"wikipediaSearchJSON",
+ "parameters":[
+ { name: "q", type:"STRING" }, // place name?
+ { name: "title", type:"STRING" }, // optional
+ { name: "lang", type:"FLOAT",optional:true }, // de or en
+ { name: "maxRows", type:"INTEGER",optional:true } // default: 10
+ ]
+ },
+
+ "getTimezone":{
+ // the timezone at the lat/lng with gmt offset (1. January) and dst offset (1. July)
+ "target":"timezoneJSON",
+ "parameters":[
+ { name:"lat", type:"FLOAT" },
+ { name:"lng", type:"FLOAT" }
+ ]
+ },
+
+ "search":{
+ // returns the names found for the searchterm as xml or json document,
+ // the search is using an AND operator
+ "target":"searchJSON",
+ "parameters":[
+ // exhaustive list. see: http://www.geonames.org/export/geonames-search.html
+ { name:"q", type:"STRING" },
+ { name:"name", type:"STRING" },
+ { name:"name_equals", type:"STRING" },
+ // optional:
+ { name:"maxRows", type:"INTEGER",optional:true }, // def: 100, max:1000
+ { name:"startRow", type:"INTEGER",optional:true }, // def: 0
+ { name:"country", type:"STRING",optional:true }, // iso-3166, def: all
+ /* name:"adminCode..." */
+ { name:"featureClass", type:"STRING",optional:true}, // ? multi, enum(a,h,l,p,r,s,t,u,v)
+ { name:"featureCode", type:"STRING",optional:true},
+ { name:"lang", type:"STRING",optional:true}, // iso-636
+ { name:"type", type:"STRING",optional:true}, // xml | json | rdf, def: xml
+ { name:"style", type:"STRING",optional:true }, // SHORT,MEDIUM,LONG,FULL def: MEDIUM
+ { name:"isNamedRequired", type:"BOOLEAN", optional:true }
+ ]
+ },
+
+ "postalCodeLookup":{
+ // returns a list of places for the given postalcode in JSON format
+ // Example http://ws.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT
+ "target":"postalCodeLookupJSON",
+ "parameters":[
+ { name:"postalcode", type:"STRING" },
+ { name:"country", type:"STRING",optional:true},
+ { name:"maxRows", type:"INTEGER", optional:true }, // def: 20
+ { name:"charset", type:"STRING",optional:true } // def: utf-8
+ ]
+ },
+
+ "postalCodeSearch":{
+ "target":"postalCodeSearchJSON",
+ "parameters":[
+ { name:"postalcode", type:"STRING",optional:true}, // one or the other
+ { name:"placename", type:"STRING",optional:true }, // one or the other
+ { name:"country", type:"STRING",optional:true},
+ { name:"style", type:"STRING",optional:true}, // def: MEDIUM
+ { name:"maxRows", type:"INTEGER",optional:true}, // def: 20
+ { name:"charset", type:"STRING",optional:true} // def: utf-8
+ ]
+ }
+
+ // TODO: implement:
+ // findNearby,
+ // findNearbyPlaceName
+ // findNearbyPostalCodes,
+ // findNearbyStreets,
+ // findNearByWeather
+ // findNearByWikipedia
+ // findNeareastAddress
+ // findNearestInterestion
+ // get
+ // gtop30
+ // srtm3
+
+ } // end services
+}
diff --git a/js/dojo/dojox/rpc/SMDLibrary/google.smd b/js/dojo/dojox/rpc/SMDLibrary/google.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/google.smd
@@ -0,0 +1,129 @@
+{
+ // Google Ajax API SMD as defined by:
+ // http://code.google.com/apis/ajaxsearch/documentation/reference.html
+ // PLEASE Read the Google Terms of Service:
+ // http://code.google.com/apis/ajaxsearch/terms.html
+
+ "SMDVersion": "2.0",
+ "id": "http://ajax.googleapis.com/ajax/services/search/",
+ "description": "Google Ajax API",
+
+ "transport": "JSONP",
+ "envelope": "URL",
+ "additionalParameters": true,
+
+ "parameters": [
+ // the most important param, the search query:
+ { "name": "q", optional: false, "default":"" },
+
+ // Google doesn't require, but appreciates, you using an API key
+ // see: http://code.google.com/apis/ajaxsearch/signup.html
+ // { "name": "key", optional: true, "default": "[enter your key]" },
+
+ // result size: large | small (8 or 4 per page)
+ { "name": "rsz", optional:true, "default": "small" },
+
+ // language selection:
+ { "name": "hl", optional:true, "default": "en" },
+
+ // starting offset
+ { "name": "start", optional:true, "default": 0 },
+
+ { "name": "alt", optional:false, "default": "json" },
+
+ // API version: only 1.0 supported
+ { "name": "v", optional:false, "default": "1.0" }
+ ],
+
+ "services": {
+
+ "webSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/web",
+ "parameters": [
+ { "name": "cx", "type":"string", "optional":true }, // unique id
+ { "name": "cref", "type":"string", "optional":true }, // linked custom search engine
+ { "name": "safe", "type":"string", "optional":true }, // active | moderate | off
+ // lr: see: http://www.google.com/coop/docs/cse/resultsxml.html#languageCollections
+ { "name": "lr", "type":"string", "optional":true } // restrict to lang
+ ]
+ },
+
+ "localSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/local",
+ "parameters": [
+ // comma separated lat,long value to use for center
+ { "name": "sll", "type": "string", "optional": true },
+ { "name": "sspn", "type":"string", "optional": true } // bounding box?
+ ]
+ },
+
+ "videoSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/video",
+ "parameters": [
+ // ordering, set "d" to order by date, "default": by relevance
+ { "name": "scoring", "type": "string", "optional": true }
+ ]
+ },
+
+ "blogSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/blogs",
+ "parameters": [
+ // see videoSearch params
+ { "name": "scoring", "type": "string", "optional": true }
+ ]
+ },
+
+ "newsSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/news",
+ "parameters": [
+ { "name": "scoring", "type": "string", "optional": true },
+ // geo: scope search to location. supply city, state, country, or zipcode
+ // using geo makes "q" param optional
+ { "name": "geo", "type":"string", optional:true }
+ ]
+ },
+
+ "bookSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/books",
+ "parameters": [
+ // set to "1" to only include full books
+ { "name":"as_brr", "optional": true, "type":"number" },
+ // restrict search to user-defined library
+ { "name":"as_list", "optional": true, "type":"string" }
+ ]
+ },
+
+ "imageSearch": {
+ "target": "http://ajax.googleapis.com/ajax/services/search/images",
+ "parameters": [
+ // safe: active | moderate | off
+ { "name": "safe", "type":"string", "optional":true },
+ // limit image size: one of: icon, small|medium|large|xlarge, xxlarge, huge
+ { "name": "imgsz", "type":"string", "optional": true },
+ // limit image color: one of: mono|gray|color
+ { "name": "imgc", "type":"string", "optional": true },
+ // use "face" to limit to mugshots
+ { "name": "imgtype", "type":"string", "optional": true },
+ // limit to file "type": jpg|png|gif|bmp
+ { "name": "as_filetype", "type": "string", "optional": true },
+ // limit results to domain:
+ { "name": "as_sitesearch", "type": "string", "optional": true }
+ ]
+ },
+
+ "getFeed": {
+ "target": "http://ajax.googleapis.com/ajax/services/feed/load",
+ // pass a feed URL in the q parameter
+ "parameters": []
+ },
+
+ "translate" : {
+ "target" : "http://ajax.googleapis.com/ajax/services/language/translate",
+ "parameters": [
+ // A String like "en|es" (for english -> spanish)
+ { "name":"langpair", "type":"string", optional:false }
+ ]
+ }
+
+ }
+}
diff --git a/js/dojo/dojox/rpc/SMDLibrary/wikipedia.smd b/js/dojo/dojox/rpc/SMDLibrary/wikipedia.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/wikipedia.smd
@@ -0,0 +1,49 @@
+{
+ "SMDVersion": "2.0",
+ "id": "http://en.wikipedia.org/w/api.php",
+ "description": "Wikipedia API",
+
+ transport: "JSONP",
+ envelope: "URL",
+ additionalParameters: true,
+ target: "http://en.wikipedia.org/w/api.php",
+ parameters: [
+ { name: "format", optional: false, "default": "json" }
+ ],
+
+ services: {
+
+ /*
+ * This is a very very basic spec that just gives us a free-form API
+ * endpoint to talk to. See http://en.wikipedia.org/w/api.php for
+ * details on what parameters to supply and what sort of data you
+ * should expect to see. Note that returned JSON is often somewhat
+ * ... interesting ...:
+ *
+ * {
+ * "parse": {
+ * "text": {
+ * "*": "<table ..."
+ * },
+ * "langlinks": [
+ * {
+ * "lang": "simple",
+ * "*": ""
+ * },
+ * // etc.
+ * ]
+ * }
+ * }
+ *
+ * Not sure why we'd ever want an element to be named "*", but that's
+ * how it is. So take care.
+ *
+ */
+ query: {
+ parameters: [
+ { name: "action", type: "string", "default": "parse" }
+ ]
+ }
+
+ }
+}
diff --git a/js/dojo/dojox/rpc/SMDLibrary/yahoo.smd b/js/dojo/dojox/rpc/SMDLibrary/yahoo.smd
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/SMDLibrary/yahoo.smd
@@ -0,0 +1,519 @@
+{
+ "SMDVersion": "2.0",
+ // FIXME: is this the kind of value we're supposed to use here?
+ "id": "http://developer.yahoo.com/search/",
+ "description": "Yahoo's search API",
+
+ transport: "JSONP",
+ envelope: "URL",
+ additionalParameters: true,
+ parameters: [
+ { name: "appid", optional: false, "default": "dojotoolkit" },
+ { name: "output", optional: false, "default": "json" }
+ ],
+
+ // FIXME: Quite a few of these APIs can take multiple entries for the same parameter, to behave
+ // as multi-select options. How should we handle these?
+
+ // ANSWER: JSON Schema defines this aspect of SMD, enumeration of possible values is handled
+ // with an "options" attribute. For example:
+ // { name: "search_in", type: "string", optional: true, "default": "all", options:["all", "question", "best_answer"]}, // can be "all", "question", "best_answer"
+
+ services: {
+ //
+ // ANSWERS
+ //
+ // FIXME: Some of these API endpoints' names only make sense when you know they're in the
+ // Yahoo Answers part of the API; just reading a flat listing of methods in this SMD
+ // likely won't have enough information about what they do. Should we split this up?
+
+ // http://developer.yahoo.com/answers/V1/questionSearch.html
+ questionSearch: {
+ target: "http://answers.yahooapis.com/AnswersService/V1/questionSearch",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "search_in", type: "string", optional: true, "default": "all" }, // can be "all", "question", "best_answer"
+ { name: "category_id", type: "integer", optional: true, "default": null }, // one of (category_id, category_name) is required
+ { name: "category_name", type: "string", optional: true, "default": null },
+ { name: "region", type: "string", optional: true, "default": "us" }, // can be "us", "uk", "ca", "au", "in", "es", "br", "ar", "mx", "e1", "it", "de", "fr", "sg"
+ { name: "date_range", type: "string", optional: true, "default": "all" }, // can be "all", "7", "7-30", "30-60", "60-90", "more90"
+ { name: "sort", type: "string", optional: true, "default": "relevance" }, // can be "relevance", "date_desc", "date_asc"
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+ { name: "start", type: "integer", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 } // max 50
+ ]
+ },
+
+ // http://developer.yahoo.com/answers/V1/getByCategory.html
+ getByCategory: {
+ target: "http://answers.yahooapis.com/AnswersService/V1/getByCategory",
+ parameters: [
+ { name: "category_id", type: "integer", optional: true, "default": null }, // one of (category_id, category_name) is required
+ { name: "category_name", type: "string", optional: true, "default": null },
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+ { name: "region", type: "string", optional: true, "default": "us" }, // can be "us", "uk", "ca", "au", "in", "es", "br", "ar", "mx", "e1", "it", "de", "fr", "sg"
+ { name: "sort", type: "string", optional: true, "default": "date_desc" }, // can be "date_desc", "date_asc", "ans_count_desc", "ans_count_asc"
+ { name: "start", type: "integer", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 } // max 50
+ ]
+ },
+
+ // http://developer.yahoo.com/answers/V1/getQuestion.html
+ getQuestion: {
+ target: "http://answers.yahooapis.com/AnswersService/V1/getQuestion",
+ parameters: [
+ { name: "question_id", type: "string", optional: true, "default": null }
+ ]
+ },
+
+ // http://developer.yahoo.com/answers/V1/getByUser.html
+ getByUser: {
+ target: "http://answers.yahooapis.com/AnswersService/V1/getByUser",
+ parameters: [
+ { name: "user_id", type: "string", optional: false, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+ { name: "filter", type: "string", optional: true, "default": "question" }, // can be "question", "answer", "best_answer"
+ { name: "sort", type: "string", optional: true, "default": "date_desc" }, // can be "date_desc", "date_asc", "ans_count_desc", "ans_count_asc"
+ { name: "start", type: "integer", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 } // max 50
+ ]
+ },
+
+ //
+ // AUDIO SEARCH
+ //
+
+ // http://developer.yahoo.com/search/audio/V1/artistSearch.html
+ artistSearch: {
+ target: "http://search.yahooapis.com/AudioSearchService/V1/artistSearch",
+ parameters: [
+ { name: "artist", type: "string", optional: true, "default": "" }, // one of (artist, artistid) is required
+ { name: "artistid", type: "string", optional: true, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/audio/V1/albumSearch.html
+ albumSearch: {
+ target: "http://search.yahooapis.com/AudioSearchService/V1/albumSearch",
+ parameters: [
+ { name: "artist", type: "string", optional: true, "default": "" },
+ { name: "artistid", type: "string", optional: true, "default": "" },
+ { name: "album", type: "string", optional: true, "default": "" },
+ { name: "albumid", type: "string", optional: true, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/audio/V1/songSearch.html
+ songSearch: {
+ // beware, this method has returned many a JSON string containing syntax error(s)
+ target: "http://search.yahooapis.com/AudioSearchService/V1/songSearch",
+ parameters: [
+ { name: "artist", type: "string", optional: true, "default": "" },
+ { name: "artistid", type: "string", optional: true, "default": "" },
+ { name: "album", type: "string", optional: true, "default": "" },
+ { name: "albumid", type: "string", optional: true, "default": "" },
+ { name: "song", type: "string", optional: true, "default": "" },
+ { name: "songid", type: "string", optional: true, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/audio/V1/songDownloadLocation.html
+ songDownloadLocation: {
+ target: "http://search.yahooapis.com/AudioSearchService/V1/songDownloadLocation",
+ parameters: [
+ { name: "songid", type: "string", optional: false, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "source", type: "string", optional: true, "default": "" } // can be "audiolunchbox", "artistdirect", "buymusic", "dmusic", "emusic", "epitonic", "garageband", "itunes", "yahoo", "livedownloads", "mp34u", "msn", "musicmatch", "mapster", "passalong", "rhapsody", "soundclick", "theweb"
+ ]
+ },
+
+ //
+ // CONTENT ANALYSIS
+ //
+
+ // http://developer.yahoo.com/search/content/V1/termExtraction.html
+ termExtraction: {
+ // FIXME: the API docs say to submit this as a POST, but we need JSONP for cross-domain, right?
+ // transport: "POST",
+ target: "http://search.yahooapis.com/ContentAnalysisService/V1/termExtraction",
+ parameters: [
+ { name: "context", type: "string", optional: false, "default": "" },
+ { name: "query", type: "string", optional: true, "default": "" }
+ ]
+ },
+
+ //
+ // CONTEXT SEARCH
+ //
+
+ // http://developer.yahoo.com/search/content/V1/contextSearch.html
+ contextSearch: {
+ target: "http://search.yahooapis.com/WebSearchService/V1/contextSearch",
+ parameters: [
+ { name: "query", type: "string", optional: true, "default": "" },
+ { name: "context", type: "string", optional: false, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 100
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "html", "msword", "pdf", "ppt", "rss", "txt", "xls"
+ { name: "adult_ok", type: "boolean", optional: true, "default": null },
+ { name: "similar_ok", type: "boolean", optional: true, "default": null },
+ { name: "language", type: "string", optional: true, "default": null },
+ { name: "country", type: "string", optional: true, "default": null },
+ { name: "site", type: "string", optional: true, "default": null },
+ { name: "license", type: "string", optional: true, "default": "any" } // can be "any", "cc_any", "cc_commercial", "cc_modifiable"
+ ]
+ },
+
+ //
+ // IMAGE SEARCH
+ //
+
+ // http://developer.yahoo.com/search/image/V1/imageSearch.html
+ imageSearch: {
+ target: "http://search.yahooapis.com/ImageSearchService/V1/imageSearch",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "bmp", "gif", "jpeg", "png"
+ { name: "adult_ok", type: "boolean", optional: true, "default": null },
+ { name: "coloration", type: "string", optional: true, "default": "any" }, // can be "any", "color", "bw"
+ { name: "site", type: "string", optional: true, "default": null }
+ ]
+ },
+
+ //
+ // LOCAL SEARCH
+ //
+
+ // http://developer.yahoo.com/search/local/V3/localSearch.html
+ localSearch: {
+ target: "http://local.yahooapis.com/LocalSearchService/V3/localSearch",
+ parameters: [
+ { name: "query", type: "string", optional: true, "default": "" }, // optional, but one of (query, listing_id) is required
+ { name: "listing_id", type: "string", optional: true, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 20
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "sort", type: "string", optional: true, "default": "relevance" }, // can be "relevance", "title", "distance", "rating"
+ { name: "radius", type: "float", optional: true }, // the default varies according to location
+ { name: "street", type: "string", optional: true, "default": null },
+ { name: "city", type: "string", optional: true, "default": null },
+ { name: "state", type: "string", optional: true, "default": null }, // full name or two-letter abbreviation
+ { name: "zip", type: "any", optional: true, "default": null }, // ddddd or ddddd-dddd format
+ { name: "location", type: "string", optional: true, "default": null }, // free text, supersedes the street, city, state, zip fields
+ { name: "latitude", type: "float", optional: true }, // -90 to 90
+ { name: "longitude", type: "float", optional: true }, // -180 to 180
+ { name: "category", type: "integer", optional: true },
+ { name: "omit_category", type: "integer", optional: true },
+ { name: "minimum_rating", type: "integer", optional: true }
+ ]
+ },
+
+ // http://developer.yahoo.com/local/V1/collectionSearch.html
+ collectionSearch: {
+ target: "http://collections.local.yahooapis.com/LocalSearchService/V1/collectionSearch",
+ parameters: [
+ { name: "query", type: "string", optional: true, "default": "" }, // optional, but at least one of (query, username) is required
+ { name: "username", type: "string", optional: true, "default": "" },
+ { name: "city", type: "string", optional: true, "default": null },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/local/V1/getCollection.html
+ getCollection: {
+ target: "http://collections.local.yahooapis.com/LocalSearchService/V1/getCollection",
+ parameters: [
+ { name: "collection_id", type: "integer", optional: false, "default": "" }
+ ]
+ },
+
+ //
+ // MY WEB 2.0
+ //
+
+ // http://developer.yahoo.com/search/myweb/V1/urlSearch.html
+ urlSearch: {
+ target: "http://search.yahooapis.com/MyWebService/V1/urlSearch",
+ parameters: [
+ { name: "tag", type: "string", optional: true, "default": "" },
+ { name: "yahooid", type: "string", optional: true, "default": "" },
+ { name: "sort", type: "string", optional: true, "default": "date" }, // can be "date", "title", "url"
+ { name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/myweb/V1/tagSearch.html
+ tagSearch: {
+ target: "http://search.yahooapis.com/MyWebService/V1/tagSearch",
+ parameters: [
+ { name: "url", type: "string", optional: true, "default": "" },
+ { name: "yahooid", type: "string", optional: true, "default": "" },
+ { name: "sort", type: "string", optional: true, "default": "popularity" }, // can be "popularity", "tag", "date"
+ { name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/myweb/V1/relatedTags.html
+ relatedTags: {
+ target: "http://search.yahooapis.com/MyWebService/V1/relatedTags",
+ parameters: [
+ { name: "tag", type: "string", optional: false, "default": "" },
+ { name: "yahooid", type: "string", optional: true, "default": "" },
+ { name: "sort", type: "string", optional: true, "default": "popularity" }, // can be "popularity", "tag", "date"
+ { name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ //
+ // NEWS SEARCH
+ //
+
+ // http://developer.yahoo.com/search/news/V1/newsSearch.html
+ newsSearch: {
+ target: "http://search.yahooapis.com/NewsSearchService/V1/newsSearch",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "sort", type: "string", optional: true, "default": "rank" }, // can be "rank", "date"
+ { name: "language", type: "string", optional: true, "default": null },
+ { name: "site", type: "string", optional: true, "default": null }
+ ]
+ },
+
+ //
+ // SHOPPING
+ //
+
+ // http://developer.yahoo.com/shopping/V2/catalogListing.html
+ catalogListing: {
+ target: "http://shopping.yahooapis.com/ShoppingService/V2/catalogListing",
+ parameters: [
+ { name: "catalogid", type: "integer", optional: true, "default": null }, // required if idtype,idvalue are not specified
+ { name: "getlisting", type: "boolean", optional: true, "default": 1 },
+ { name: "getreview", type: "boolean", optional: true, "default": 0 },
+ { name: "getspec", type: "boolean", optional: true, "default": 0 },
+ { name: "idtype", type: "string", optional: true, "default": null }, // can be "upc", "brand,model", "brand,partnum"; required if catalogid is not specified
+ { name: "idvalue", type: "string", optional: true, "default": null }, // required if catalogid is not specified
+ { name: "onlynew", type: "boolean", optional: true, "default": 1 },
+ { name: "reviewstart", type: "integer", optional: true, "default": 1 },
+ { name: "reviewsort", type: "string", optional: true, "default": "mostRecommended_descending" }, // can be "mostRecommended_descending", "mostRecommended_ascending", "latest_descending", "latest_ascending", "highestRated_descending", "highestRated_ascending"
+ { name: "zip", type: "string", optional: true, "default": null }
+ ]
+ },
+
+
+ // http://developer.yahoo.com/shopping/V1/merchantSearch.html
+ merchantSearch: {
+ target: "http://api.shopping.yahoo.com/ShoppingService/V1/merchantSearch",
+ parameters: [
+ { name: "merchantid", type: "integer", optional: false, "default": null }
+ ]
+ },
+
+
+ // http://developer.yahoo.com/shopping/V3/productSearch.html
+ productSearch: {
+ target: "http://shopping.yahooapis.com/ShoppingService/V3/productSearch",
+ parameters: [
+ { name: "query", type: "string", optional: true, "default": "" }, // required if category is not specified
+ { name: "category", type: "any", optional: true, "default": "" }, // required if query is not specified
+ { name: "class", type: "string", optional: true, "default": null }, // can be "catalogs", "freeoffers", "paidoffers"; defaults to all three of these
+ { name: "department", type: "integer", optional: true, "default": null },
+ { name: "highestprice", type: "float", optional: true, "default": null },
+ { name: "lowestprice", type: "float", optional: true, "default": null },
+ { name: "merchantId", type: "integer", optional: true, "default": null },
+ { name: "refinement", type: "string", optional: true, "default": null }, // used only if category is specified
+ { name: "results", type: "integer", optional: true, "default": 10 }, // 1-50
+ { name: "show_numratings", type: "boolean", optional: true, "default": 0 },
+ { name: "show_narrowing", type: "boolean", optional: true, "default": 1 },
+ { name: "sort", type: "string", optional: true }, // can be "price_ascending", "price_descending", "userrating_ascending", "userrating_descending"; omitted, the default is to sort by relevance
+ { name: "start", type: "integer", optional: true, "default": 1 } // 1-300
+ ]
+ },
+
+ //
+ // SITE EXPLORER
+ //
+
+ // http://developer.yahoo.com/search/siteexplorer/V1/inlinkData.html
+ inlinkData: {
+ target: "http://search.yahooapis.com/SiteExplorerService/V1/inlinkData",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 50 }, // max 100
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "entire_site", type: "boolean", optional: true, "default": null },
+ { name: "omit_inlinks", type: "string", optional: true, "default": "none" } // can be "none", "domain", "subdomain"
+ ]
+ },
+
+ // http://developer.yahoo.com/search/siteexplorer/V1/pageData.html
+ pageData: {
+ target: "http://search.yahooapis.com/SiteExplorerService/V1/pageData",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 50 }, // max 100
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "domain_only", type: "boolean", optional: true, "default": null }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/siteexplorer/V1/ping.html
+ ping: {
+ target: "http://search.yahooapis.com/SiteExplorerService/V1/ping",
+ parameters: [
+ { name: "sitemap", type: "string", optional: false, "default": "" }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/siteexplorer/V1/updateNotification.html
+ updateNotification: {
+ target: "http://search.yahooapis.com/SiteExplorerService/V1/updateNotification",
+ parameters: [
+ { name: "url", type: "string", optional: false, "default": "" }
+ ]
+ },
+
+ //
+ // TRAFFIC
+ //
+
+ // http://developer.yahoo.com/traffic/rest/V1/index.html
+ trafficData: {
+ target: "http://local.yahooapis.com/MapsService/V1/trafficData",
+ parameters: [
+ { name: "street", type: "string", optional: true, "default": "" },
+ { name: "city", type: "string", optional: true, "default": "" },
+ { name: "state", type: "string", optional: true, "default": null }, // full name or two-letter abbreviation
+ { name: "zip", type: "any", optional: true, "default": null }, // ddddd or ddddd-dddd format
+ { name: "location", type: "string", optional: true, "default": null }, // free text, supersedes the street, city, state, zip fields
+ { name: "latitude", type: "float", optional: true }, // -90 to 90
+ { name: "longitude", type: "float", optional: true }, // -180 to 180
+ { name: "severity", type: "integer", optional: true, "default": 1 }, // can be 1-5
+ { name: "zoom", type: "integer", optional: true, "default": 6 }, // can be 1-12
+ { name: "radius", type: "float", optional: true }, // in miles, default varies with location; ignored if zoom is specified
+ { name: "include_map", type: "boolean", optional: true, "default": 0 },
+ { name: "image_type", type: "string", optional: true, "default": "png" }, // can be "png" or "gif"
+ { name: "image_height", type: "integer", optional: true, "default": 500 }, // in pixels, can be 10-2000
+ { name: "image_width", type: "integer", optional: true, "default": 620 } // in pixels, can be 10-2000
+ ]
+ },
+
+ //
+ // TRAVEL
+ //
+
+ // http://developer.yahoo.com/travel/tripservice/V1.1/tripSearch.html
+ tripSearch: {
+ target: "http://travel.yahooapis.com/TripService/V1.1/tripSearch",
+ parameters: [
+ { name: "query", type: "string", optional: true, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 }
+ ]
+ },
+
+ // http://developer.yahoo.com/travel/tripservice/V1.1/getTrip.html
+ getTrip: {
+ target: "http://travel.yahooapis.com/TripService/V1.1/getTrip",
+ parameters: [
+ { name: "id", type: "integer", optional: false, "default": null }
+ ]
+ },
+
+ //
+ // UTILITY SERVICES
+ //
+
+ // http://developer.yahoo.com/util/timeservice/V1/getTime.html
+ /* RGG: commented out because it refuses to return JSON format even when you tell it
+ to do so (it returns a <script> tag)
+ getTime: {
+ target: "http://developer.yahooapis.com/TimeService/V1/getTime",
+ parameters: [
+ { name: "format", type: "string", optional: true, "default": "unix" } // can be "unix" for unix timestamp, "ms" for milliseconds
+ ]
+ },
+ */
+
+ //
+ // VIDEO SEARCH
+ //
+
+ // http://developer.yahoo.com/search/video/V1/videoSearch.html
+ videoSearch: {
+ target: "http://search.yahooapis.com/VideoSearchService/V1/videoSearch",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "avi", "flash", "mpeg", "msmedia", "quicktime", "realmedia"
+ { name: "adult_ok", type: "boolean", optional: true, "default": null },
+ { name: "site", type: "string", optional: true, "default": null }
+ ]
+ },
+
+ //
+ // WEB SEARCH
+ //
+
+ // http://developer.yahoo.com/search/web/V1/webSearch.html
+ webSearch: {
+ target: "http://search.yahooapis.com/WebSearchService/V1/webSearch",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" }, // must be less than 1kb
+ { name: "region", type: "string", optional: true, "default": "us" },
+ { name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+ { name: "results", type: "integer", optional: true, "default": 10 }, // max 100
+ { name: "start", type: "integer", optional: true, "default": 1 },
+ { name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "html", "msword", "pdf", "ppt", "rss", "txt", "xls"
+ { name: "adult_ok", type: "boolean", optional: true, "default": null },
+ { name: "similar_ok", type: "boolean", optional: true, "default": null },
+ { name: "language", type: "string", optional: true, "default": null },
+ { name: "country", type: "string", optional: true, "default": null },
+ { name: "site", type: "string", optional: true, "default": null },
+ { name: "subscription", type: "string", optional: true, "default": null },
+ { name: "license", type: "string", optional: true, "default": "any" } // can be "any", "cc_any", "cc_commercial", "cc_modifiable"
+ ]
+ },
+
+ // http://developer.yahoo.com/search/web/V1/spellingSuggestion.html
+ spellingSuggestion: {
+ target: "http://search.yahooapis.com/WebSearchService/V1/spellingSuggestion",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" }
+ ]
+ },
+
+ // http://developer.yahoo.com/search/web/V1/relatedSuggestion.html
+ relatedSuggestion: {
+ target: "http://search.yahooapis.com/WebSearchService/V1/relatedSuggestion",
+ parameters: [
+ { name: "query", type: "string", optional: false, "default": "" },
+ { name: "results", type: "integer", optional: true, "default": 10 } // max 50
+ ]
+ }
+ }
+}
diff --git a/js/dojo/dojox/rpc/Service.js b/js/dojo/dojox/rpc/Service.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/Service.js
@@ -0,0 +1,217 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Service"]){
+dojo._hasResource["dojox.rpc.Service"]=true;
+dojo.provide("dojox.rpc.Service");
+dojo.require("dojo.AdapterRegistry");
+dojo.declare("dojox.rpc.Service",null,{constructor:function(_1,_2){
+var _3;
+var _4=this;
+function _5(_6){
+_6._baseUrl=new dojo._Url((dojo.isBrowser?location.href:dojo.config.baseUrl),_3||".")+"";
+_4._smd=_6;
+for(var _7 in _4._smd.services){
+var _8=_7.split(".");
+var _9=_4;
+for(var i=0;i<_8.length-1;i++){
+_9=_9[_8[i]]||(_9[_8[i]]={});
+}
+_9[_8[_8.length-1]]=_4._generateService(_7,_4._smd.services[_7]);
+}
+};
+if(_1){
+if((dojo.isString(_1))||(_1 instanceof dojo._Url)){
+if(_1 instanceof dojo._Url){
+_3=_1+"";
+}else{
+_3=_1;
+}
+var _a=dojo._getText(_3);
+if(!_a){
+throw new Error("Unable to load SMD from "+_1);
+}else{
+_5(dojo.fromJson(_a));
+}
+}else{
+_5(_1);
+}
+}
+this._options=(_2?_2:{});
+this._requestId=0;
+},_generateService:function(_b,_c){
+if(this[_c]){
+throw new Error("WARNING: "+_b+" already exists for service. Unable to generate function");
+}
+_c.name=_b;
+var _d=dojo.hitch(this,"_executeMethod",_c);
+var _e=dojox.rpc.transportRegistry.match(_c.transport||this._smd.transport);
+if(_e.getExecutor){
+_d=_e.getExecutor(_d,_c,this);
+}
+var _f=_c.returns||(_c._schema={});
+var _10="/"+_b+"/";
+_f._service=_d;
+_d.servicePath=_10;
+_d._schema=_f;
+_d.id=dojox.rpc.Service._nextId++;
+return _d;
+},_getRequest:function(_11,_12){
+var smd=this._smd;
+var _13=dojox.rpc.envelopeRegistry.match(_11.envelope||smd.envelope||"NONE");
+var _14=(_11.parameters||[]).concat(smd.parameters||[]);
+if(_13.namedParams){
+if((_12.length==1)&&dojo.isObject(_12[0])){
+_12=_12[0];
+}else{
+var _15={};
+for(var i=0;i<_11.parameters.length;i++){
+if(typeof _12[i]!="undefined"||!_11.parameters[i].optional){
+_15[_11.parameters[i].name]=_12[i];
+}
+}
+_12=_15;
+}
+if(_11.strictParameters||smd.strictParameters){
+for(i in _12){
+var _16=false;
+for(var j=0;j<_14.length;j++){
+if(_14[i].name==i){
+_16=true;
+}
+}
+if(!_16){
+delete _12[i];
+}
+}
+}
+for(i=0;i<_14.length;i++){
+var _17=_14[i];
+if(!_17.optional&&_17.name&&!_12[_17.name]){
+if(_17["default"]){
+_12[_17.name]=_17["default"];
+}else{
+if(!(_17.name in _12)){
+throw new Error("Required parameter "+_17.name+" was omitted");
+}
+}
+}
+}
+}else{
+if(_14&&_14[0]&&_14[0].name&&(_12.length==1)&&dojo.isObject(_12[0])){
+if(_13.namedParams===false){
+_12=dojox.rpc.toOrdered(_14,_12);
+}else{
+_12=_12[0];
+}
+}
+}
+if(dojo.isObject(this._options)){
+_12=dojo.mixin(_12,this._options);
+}
+var _18=_11._schema||_11.returns;
+var _19=_13.serialize.apply(this,[smd,_11,_12]);
+_19._envDef=_13;
+var _1a=(_11.contentType||smd.contentType||_19.contentType);
+return dojo.mixin(_19,{sync:dojox.rpc._sync,contentType:_1a,headers:{},target:_19.target||dojox.rpc.getTarget(smd,_11),transport:_11.transport||smd.transport||_19.transport,envelope:_11.envelope||smd.envelope||_19.envelope,timeout:_11.timeout||smd.timeout,callbackParamName:_11.callbackParamName||smd.callbackParamName,schema:_18,handleAs:_19.handleAs||"auto",preventCache:_11.preventCache||smd.preventCache,frameDoc:this._options.frameDoc||undefined});
+},_executeMethod:function(_1b){
+var _1c=[];
+var i;
+for(i=1;i<arguments.length;i++){
+_1c.push(arguments[i]);
+}
+var _1d=this._getRequest(_1b,_1c);
+var _1e=dojox.rpc.transportRegistry.match(_1d.transport).fire(_1d);
+_1e.addBoth(function(_1f){
+return _1d._envDef.deserialize.call(this,_1f);
+});
+return _1e;
+}});
+dojox.rpc.getTarget=function(smd,_20){
+var _21=smd._baseUrl;
+if(smd.target){
+_21=new dojo._Url(_21,smd.target)+"";
+}
+if(_20.target){
+_21=new dojo._Url(_21,_20.target)+"";
+}
+return _21;
+};
+dojox.rpc.toOrdered=function(_22,_23){
+if(dojo.isArray(_23)){
+return _23;
+}
+var _24=[];
+for(var i=0;i<_22.length;i++){
+_24.push(_23[_22[i].name]);
+}
+return _24;
+};
+dojox.rpc.transportRegistry=new dojo.AdapterRegistry(true);
+dojox.rpc.envelopeRegistry=new dojo.AdapterRegistry(true);
+dojox.rpc.envelopeRegistry.register("URL",function(str){
+return str=="URL";
+},{serialize:function(smd,_25,_26){
+var d=dojo.objectToQuery(_26);
+return {data:d,transport:"POST"};
+},deserialize:function(_27){
+return _27;
+},namedParams:true});
+dojox.rpc.envelopeRegistry.register("JSON",function(str){
+return str=="JSON";
+},{serialize:function(smd,_28,_29){
+var d=dojo.toJson(_29);
+return {data:d,handleAs:"json",contentType:"application/json"};
+},deserialize:function(_2a){
+return _2a;
+}});
+dojox.rpc.envelopeRegistry.register("PATH",function(str){
+return str=="PATH";
+},{serialize:function(smd,_2b,_2c){
+var i;
+var _2d=dojox.rpc.getTarget(smd,_2b);
+if(dojo.isArray(_2c)){
+for(i=0;i<_2c.length;i++){
+_2d+="/"+_2c[i];
+}
+}else{
+for(i in _2c){
+_2d+="/"+i+"/"+_2c[i];
+}
+}
+return {data:"",target:_2d};
+},deserialize:function(_2e){
+return _2e;
+}});
+dojox.rpc.transportRegistry.register("POST",function(str){
+return str=="POST";
+},{fire:function(r){
+r.url=r.target;
+r.postData=r.data;
+return dojo.rawXhrPost(r);
+}});
+dojox.rpc.transportRegistry.register("GET",function(str){
+return str=="GET";
+},{fire:function(r){
+r.url=r.target+(r.data?"?"+r.data:"");
+return dojo.xhrGet(r);
+}});
+dojox.rpc.transportRegistry.register("JSONP",function(str){
+return str=="JSONP";
+},{fire:function(r){
+r.url=r.target+((r.target.indexOf("?")==-1)?"?":"&")+r.data;
+r.callbackParamName=r.callbackParamName||"callback";
+return dojo.io.script.get(r);
+}});
+dojox.rpc.Service._nextId=1;
+dojo._contentHandlers.auto=function(xhr){
+var _2f=dojo._contentHandlers;
+var _30=xhr.getResponseHeader("Content-Type");
+var _31=!_30?_2f.text(xhr):_30.match(/\/.*json/)?_2f.json(xhr):_30.match(/\/javascript/)?_2f.javascript(xhr):_30.match(/\/xml/)?_2f.xml(xhr):_2f.text(xhr);
+return _31;
+};
+}
diff --git a/js/dojo/dojox/rpc/test.txt b/js/dojo/dojox/rpc/test.txt
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/rpc/test.txt
@@ -0,0 +1,1 @@
+this is a test file i'm updating. Again, 11.
diff --git a/js/dojo/dojox/secure/DOM.js b/js/dojo/dojox/secure/DOM.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/secure/DOM.js
@@ -0,0 +1,234 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.DOM"]){
+dojo._hasResource["dojox.secure.DOM"]=true;
+dojo.provide("dojox.secure.DOM");
+dojo.require("dojox.lang.observable");
+dojox.secure.DOM=function(_1){
+function _2(_3){
+if(!_3){
+return _3;
+}
+var _4=_3;
+do{
+if(_4==_1){
+return _5(_3);
+}
+}while((_4=_4.parentNode));
+return null;
+};
+function _5(_6){
+if(_6){
+if(_6.nodeType){
+var _7=_8(_6);
+if(_6.nodeType==1&&typeof _7.style=="function"){
+_7.style=_9(_6.style);
+_7.ownerDocument=_a;
+_7.childNodes={__get__:function(i){
+return _5(_6.childNodes[i]);
+},length:0};
+}
+return _7;
+}
+if(_6&&typeof _6=="object"){
+if(_6.__observable){
+return _6.__observable;
+}
+_7=_6 instanceof Array?[]:{};
+_6.__observable=_7;
+for(var i in _6){
+if(i!="__observable"){
+_7[i]=_5(_6[i]);
+}
+}
+_7.data__=_6;
+return _7;
+}
+if(typeof _6=="function"){
+var _b=function(_c){
+if(typeof _c=="function"){
+return function(){
+for(var i=0;i<arguments.length;i++){
+arguments[i]=_5(arguments[i]);
+}
+return _b(_c.apply(_5(this),arguments));
+};
+}
+return dojox.secure.unwrap(_c);
+};
+return function(){
+if(_6.safetyCheck){
+_6.safetyCheck.apply(_b(this),arguments);
+}
+for(var i=0;i<arguments.length;i++){
+arguments[i]=_b(arguments[i]);
+}
+return _5(_6.apply(_b(this),arguments));
+};
+}
+}
+return _6;
+};
+unwrap=dojox.secure.unwrap;
+function _d(_e){
+_e+="";
+if(_e.match(/behavior:|content:|javascript:|binding|expression|\@import/)){
+throw new Error("Illegal CSS");
+}
+var id=_1.id||(_1.id="safe"+(""+Math.random()).substring(2));
+return _e.replace(/(\}|^)\s*([^\{]*\{)/g,function(t,a,b){
+return a+" #"+id+" "+b;
+});
+};
+function _f(url){
+if(url.match(/:/)&&!url.match(/^(http|ftp|mailto)/)){
+throw new Error("Unsafe URL "+url);
+}
+};
+function _10(el){
+if(el&&el.nodeType==1){
+if(el.tagName.match(/script/i)){
+var src=el.src;
+if(src&&src!=""){
+el.parentNode.removeChild(el);
+dojo.xhrGet({url:src,secure:true}).addCallback(function(_11){
+_a.evaluate(_11);
+});
+}else{
+var _12=el.innerHTML;
+el.parentNode.removeChild(el);
+_5.evaluate(_12);
+}
+}
+if(el.tagName.match(/link/i)){
+throw new Error("illegal tag");
+}
+if(el.tagName.match(/style/i)){
+var _13=function(_14){
+if(el.styleSheet){
+el.styleSheet.cssText=_14;
+}else{
+var _15=doc.createTextNode(_14);
+if(el.childNodes[0]){
+el.replaceChild(_15,el.childNodes[0]);
+}else{
+el.appendChild(_15);
+}
+}
+};
+src=el.src;
+if(src&&src!=""){
+alert("src"+src);
+el.src=null;
+dojo.xhrGet({url:src,secure:true}).addCallback(function(_16){
+_13(_d(_16));
+});
+}
+_13(_d(el.innerHTML));
+}
+if(el.style){
+_d(el.style.cssText);
+}
+if(el.href){
+_f(el.href);
+}
+if(el.src){
+_f(el.src);
+}
+var _17,i=0;
+while((_17=el.attributes[i++])){
+if(_17.name.substring(0,2)=="on"&&_17.value!="null"&&_17.value!=""){
+throw new Error("event handlers not allowed in the HTML, they must be set with element.addEventListener");
+}
+}
+var _18=el.childNodes;
+for(var i=0,l=_18.length;i<l;i++){
+_10(_18[i]);
+}
+}
+};
+function _19(_1a){
+var div=document.createElement("div");
+if(_1a.match(/<object/i)){
+throw new Error("The object tag is not allowed");
+}
+div.innerHTML=_1a;
+_10(div);
+return div;
+};
+var doc=_1.ownerDocument;
+var _a={getElementById:function(id){
+return _2(doc.getElementById(id));
+},createElement:function(_1b){
+return _5(doc.createElement(_1b));
+},createTextNode:function(_1c){
+return _5(doc.createTextNode(_1c));
+},write:function(str){
+var div=_19(str);
+while(div.childNodes.length){
+_1.appendChild(div.childNodes[0]);
+}
+}};
+_a.open=_a.close=function(){
+};
+var _1d={innerHTML:function(_1e,_1f){
+_1e.innerHTML=_19(_1f).innerHTML;
+}};
+_1d.outerHTML=function(_20,_21){
+throw new Error("Can not set this property");
+};
+function _22(_23,_24){
+return function(_25,_26){
+_10(_26[_24]);
+return _25[_23](_26[0]);
+};
+};
+var _27={appendChild:_22("appendChild",0),insertBefore:_22("insertBefore",0),replaceChild:_22("replaceChild",1),cloneNode:function(_28,_29){
+return _28.cloneNode(_29[0]);
+},addEventListener:function(_2a,_2b){
+dojo.connect(_2a,"on"+_2b[0],this,function(_2c){
+_2c=_8(_2c||window.event);
+_2b[1].call(this,_2c);
+});
+}};
+_27.childNodes=_27.style=_27.ownerDocument=function(){
+};
+function _2d(_2e){
+return dojox.lang.makeObservable(function(_2f,_30){
+var _31;
+return _2f[_30];
+},_2e,function(_32,_33,_34,_35){
+for(var i=0;i<_35.length;i++){
+_35[i]=unwrap(_35[i]);
+}
+if(_27[_34]){
+return _5(_27[_34].call(_32,_33,_35));
+}
+return _5(_33[_34].apply(_33,_35));
+},_27);
+};
+var _8=_2d(function(_36,_37,_38){
+if(_1d[_37]){
+_1d[_37](_36,_38);
+}
+_36[_37]=_38;
+});
+var _39={behavior:1,MozBinding:1};
+var _9=_2d(function(_3a,_3b,_3c){
+if(!_39[_3b]){
+_3a[_3b]=_d(_3c);
+}
+});
+_5.safeHTML=_19;
+_5.safeCSS=_d;
+return _5;
+};
+dojox.secure.unwrap=function unwrap(_3d){
+return (_3d&&_3d.data__)||_3d;
+};
+}
diff --git a/js/dojo/dojox/secure/README b/js/dojo/dojox/secure/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/secure/README
@@ -0,0 +1,50 @@
+-------------------------------------------------------------------------------
+DojoX Secure
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 07/04/2008
+-------------------------------------------------------------------------------
+Project state:
+alpha
+-------------------------------------------------------------------------------
+Project authors
+ Kris Zyp (kris@sitepen.com)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX Secure is a collection of tools for security, in particular for working with
+untrusted data and code. The following tools are a part of DojoX Secure:
+
+dojox.secure.capability - Object-capability JavaScript validation. This is
+a validator to run before eval to ensure that a script can't access or modify
+any objects outside of those specifically provided to it.
+
+dojox.secure.sandbox - Provides support for loading web pages, JSON, and scripts
+from other domains using XHR (and XHR plugins) with a safe subset library and
+sandboxed access to the DOM.
+
+dojox.secure.DOM - Provides a DOM facade that restricts access to
+a specified subtree of the DOM. The DOM facade uses getters/setters
+and lettables to emulate the DOM API.
+
+dojox.secure.OAuth - Future project to provide an implementation of OAuth.
+
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/secure/*
+
+Install into the following directory structure:
+/dojox/secure/
+
+...which should be at the same level as your Dojo checkout.
+
diff --git a/js/dojo/dojox/secure/capability.js b/js/dojo/dojox/secure/capability.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/secure/capability.js
@@ -0,0 +1,102 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.capability"]){
+dojo._hasResource["dojox.secure.capability"]=true;
+dojo.provide("dojox.secure.capability");
+dojox.secure.badProps=/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/;
+dojox.secure.capability={keywords:["break","case","catch","const","continue","debugger","default","delete","do","else","enum","false","finally","for","function","if","in","instanceof","new","null","yield","return","switch","throw","true","try","typeof","var","void","while"],validate:function(_1,_2,_3){
+var _4=this.keywords;
+for(var i=0;i<_4.length;i++){
+_3[_4[i]]=true;
+}
+var _5="|this| keyword in object literal without a Class call";
+var _6=[];
+if(_1.match(/[\u200c-\u200f\u202a-\u202e\u206a-\u206f\uff00-\uffff]/)){
+throw new Error("Illegal unicode characters detected");
+}
+if(_1.match(/\/\*@cc_on/)){
+throw new Error("Conditional compilation token is not allowed");
+}
+_1=_1.replace(/\\["'\\\/bfnrtu]/g,"@").replace(/\/\/.*|\/\*[\w\W]*?\*\/|\/(\\[\/\\]|[^*\/])(\\.|[^\/\n\\])*\/[gim]*|("[^"]*")|('[^']*')/g,function(t){
+return t.match(/^\/\/|^\/\*/)?" ":"0";
+}).replace(/\.\s*([a-z\$_A-Z][\w\$_]*)|([;,{])\s*([a-z\$_A-Z][\w\$_]*\s*):/g,function(t,_7,_8,_9){
+_7=_7||_9;
+if(/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/.test(_7)){
+throw new Error("Illegal property name "+_7);
+}
+return (_8&&(_8+"0:"))||"~";
+});
+_1.replace(/([^\[][\]\}]\s*=)|((\Wreturn|\S)\s*\[\s*\+?)|([^=!][=!]=[^=])/g,function(_a){
+if(!_a.match(/((\Wreturn|[=\&\|\:\?\,])\s*\[)|\[\s*\+$/)){
+throw new Error("Illegal operator "+_a.substring(1));
+}
+});
+_1=_1.replace(new RegExp("("+_2.join("|")+")[\\s~]*\\(","g"),function(_b){
+return "new(";
+});
+function _c(_d,_e){
+var _f={};
+_d.replace(/#\d+/g,function(b){
+var _10=_6[b.substring(1)];
+for(var i in _10){
+if(i==_5){
+throw i;
+}
+if(i=="this"&&_10[":method"]&&_10["this"]==1){
+i=_5;
+}
+if(i!=":method"){
+_f[i]=2;
+}
+}
+});
+_d.replace(/(\W|^)([a-z_\$A-Z][\w_\$]*)/g,function(t,a,_11){
+if(_11.charAt(0)=="_"){
+throw new Error("Names may not start with _");
+}
+_f[_11]=1;
+});
+return _f;
+};
+var _12,_13;
+function _14(t,_15,a,b,_16,_17){
+_17.replace(/(^|,)0:\s*function#(\d+)/g,function(t,a,b){
+var _18=_6[b];
+_18[":method"]=1;
+});
+_17=_17.replace(/(^|[^_\w\$])Class\s*\(\s*([_\w\$]+\s*,\s*)*#(\d+)/g,function(t,p,a,b){
+var _19=_6[b];
+delete _19[_5];
+return (p||"")+(a||"")+"#"+b;
+});
+_13=_c(_17,_15);
+function _1a(t,a,b,_1b){
+_1b.replace(/,?([a-z\$A-Z][_\w\$]*)/g,function(t,_1c){
+if(_1c=="Class"){
+throw new Error("Class is reserved");
+}
+delete _13[_1c];
+});
+};
+if(_15){
+_1a(t,a,a,_16);
+}
+_17.replace(/(\W|^)(var) ([ \t,_\w\$]+)/g,_1a);
+return (a||"")+(b||"")+"#"+(_6.push(_13)-1);
+};
+do{
+_12=_1.replace(/((function|catch)(\s+[_\w\$]+)?\s*\(([^\)]*)\)\s*)?{([^{}]*)}/g,_14);
+}while(_12!=_1&&(_1=_12));
+_14(0,0,0,0,0,_1);
+for(i in _13){
+if(!(i in _3)){
+throw new Error("Illegal reference to "+i);
+}
+}
+}};
+}
diff --git a/js/dojo/dojox/secure/sandbox.js b/js/dojo/dojox/secure/sandbox.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/secure/sandbox.js
@@ -0,0 +1,231 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.sandbox"]){
+dojo._hasResource["dojox.secure.sandbox"]=true;
+dojo.provide("dojox.secure.sandbox");
+dojo.require("dojox.secure.DOM");
+dojo.require("dojox.secure.capability");
+dojo.require("dojo.NodeList-fx");
+(function(){
+var _1=setTimeout;
+var _2=setInterval;
+if({}.__proto__){
+var _3=function(_4){
+var _5=Array.prototype[_4];
+if(_5&&!_5.fixed){
+(Array.prototype[_4]=function(){
+if(this==window){
+throw new TypeError("Called with wrong this");
+}
+return _5.apply(this,arguments);
+}).fixed=true;
+}
+};
+_3("concat");
+_3("reverse");
+_3("sort");
+_3("slice");
+_3("forEach");
+_3("filter");
+_3("reduce");
+_3("reduceRight");
+_3("every");
+_3("map");
+_3("some");
+}
+var _6=function(){
+return dojo.xhrGet.apply(dojo,arguments);
+};
+dojox.secure.sandbox=function(_7){
+var _8=dojox.secure.DOM(_7);
+_7=_8(_7);
+var _9=_7.ownerDocument;
+var _a,_b=dojox.secure._safeDojoFunctions(_7,_8);
+var _c=[];
+var _d=["isNaN","isFinite","parseInt","parseFloat","escape","unescape","encodeURI","encodeURIComponent","decodeURI","decodeURIComponent","alert","confirm","prompt","Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","Date","RegExp","Number","Object","Array","String","Math","setTimeout","setInterval","clearTimeout","clearInterval","dojo","get","set","forEach","load","evaluate"];
+for(var i in _b){
+_d.push(i);
+_c.push("var "+i+"=dojo."+i);
+}
+eval(_c.join(";"));
+function _e(_f,_10){
+_10=""+_10;
+if(dojox.secure.badProps.test(_10)){
+throw new Error("bad property access");
+}
+if(_f.__get__){
+return _f.__get__(_10);
+}
+return _f[_10];
+};
+function set(obj,_11,_12){
+_11=""+_11;
+_e(obj,_11);
+if(obj.__set){
+return obj.__set(_11);
+}
+obj[_11]=_12;
+return _12;
+};
+function _13(obj,fun){
+if(typeof fun!="function"){
+throw new TypeError();
+}
+if("length" in obj){
+if(obj.__get__){
+var len=obj.__get__("length");
+for(var i=0;i<len;i++){
+if(i in obj){
+fun.call(obj,obj.__get__(i),i,obj);
+}
+}
+}else{
+len=obj.length;
+for(i=0;i<len;i++){
+if(i in obj){
+fun.call(obj,obj[i],i,obj);
+}
+}
+}
+}else{
+for(i in obj){
+fun.call(obj,_e(obj,i),i,obj);
+}
+}
+};
+function _14(_15,_16,_17){
+var _18,_19,_1a;
+var arg;
+for(var i=0,l=arguments.length;typeof (arg=arguments[i])=="function"&&i<l;i++){
+if(_18){
+_a(_18,arg.prototype);
+}else{
+_19=arg;
+var F=function(){
+};
+F.prototype=arg.prototype;
+_18=new F;
+}
+}
+if(arg){
+for(var j in arg){
+var _1b=arg[j];
+if(typeof _1b=="function"){
+arg[j]=function(){
+if(this instanceof _14){
+return arguments.callee.__rawMethod__.apply(this,arguments);
+}
+throw new Error("Method called on wrong object");
+};
+arg[j].__rawMethod__=_1b;
+}
+}
+if(arg.hasOwnProperty("constructor")){
+_1a=arg.constructor;
+}
+}
+_18=_18?_a(_18,arg):arg;
+function _14(){
+if(_19){
+_19.apply(this,arguments);
+}
+if(_1a){
+_1a.apply(this,arguments);
+}
+};
+_a(_14,arguments[i]);
+_18.constructor=_14;
+_14.prototype=_18;
+return _14;
+};
+function _1c(_1d){
+if(typeof _1d!="function"){
+throw new Error("String is not allowed in setTimeout/setInterval");
+}
+};
+function _1e(_1f,_20){
+_1c(_1f);
+return _1(_1f,_20);
+};
+function _21(_22,_23){
+_1c(_22);
+return _2(_22,_23);
+};
+function _24(_25){
+return _8.evaluate(_25);
+};
+var _26=_8.load=function(url){
+if(url.match(/^[\w\s]*:/)){
+throw new Error("Access denied to cross-site requests");
+}
+return _6({url:(new _b._Url(_8.rootUrl,url))+"",secure:true});
+};
+_8.evaluate=function(_27){
+dojox.secure.capability.validate(_27,_d,{document:1,element:1});
+if(_27.match(/^\s*[\[\{]/)){
+var _28=eval("("+_27+")");
+}else{
+eval(_27);
+}
+};
+return {loadJS:function(url){
+_8.rootUrl=url;
+return _6({url:url,secure:true}).addCallback(function(_29){
+_24(_29,_7);
+});
+},loadHTML:function(url){
+_8.rootUrl=url;
+return _6({url:url,secure:true}).addCallback(function(_2a){
+_7.innerHTML=_2a;
+});
+},evaluate:function(_2b){
+return _8.evaluate(_2b);
+}};
+};
+})();
+dojox.secure._safeDojoFunctions=function(_2c,_2d){
+var _2e=["mixin","require","isString","isArray","isFunction","isObject","isArrayLike","isAlien","hitch","delegate","partial","trim","disconnect","subscribe","unsubscribe","Deferred","toJson","style","attr"];
+var doc=_2c.ownerDocument;
+var _2f=dojox.secure.unwrap;
+dojo.NodeList.prototype.addContent.safetyCheck=function(_30){
+_2d.safeHTML(_30);
+};
+dojo.NodeList.prototype.style.safetyCheck=function(_31,_32){
+if(_31=="behavior"){
+throw new Error("Can not set behavior");
+}
+_2d.safeCSS(_32);
+};
+dojo.NodeList.prototype.attr.safetyCheck=function(_33,_34){
+if(_34&&(_33=="src"||_33=="href"||_33=="style")){
+throw new Error("Illegal to set "+_33);
+}
+};
+var _35={query:function(_36,_37){
+return _2d(dojo.query(_36,_2f(_37||_2c)));
+},connect:function(el,_38){
+var obj=el;
+arguments[0]=_2f(el);
+if(obj!=arguments[0]&&_38.substring(0,2)!="on"){
+throw new Error("Invalid event name for element");
+}
+return dojo.connect.apply(dojo,arguments);
+},body:function(){
+return _2c;
+},byId:function(id){
+return _2c.ownerDocument.getElementById(id);
+},fromJson:function(str){
+dojox.secure.capability.validate(str,[],{});
+return dojo.fromJson(str);
+}};
+for(var i=0;i<_2e.length;i++){
+_35[_2e[i]]=dojo[_2e[i]];
+}
+return _35;
+};
+}
diff --git a/js/dojo/dojox/sketch.js b/js/dojo/dojox/sketch.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch"]){
+dojo._hasResource["dojox.sketch"]=true;
+dojo.provide("dojox.sketch");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.sketch.UndoStack");
+dojo.require("dojox.sketch.Figure");
+dojo.require("dojox.sketch.Toolbar");
+}
diff --git a/js/dojo/dojox/sketch/Anchor.js b/js/dojo/dojox/sketch/Anchor.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/Anchor.js
@@ -0,0 +1,69 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Anchor"]){
+dojo._hasResource["dojox.sketch.Anchor"]=true;
+dojo.provide("dojox.sketch.Anchor");
+dojo.require("dojox.gfx");
+(function(){
+var ta=dojox.sketch;
+ta.Anchor=function(an,id,_1){
+var _2=this;
+var _3=4;
+var _4=null;
+this.type=function(){
+return "Anchor";
+};
+this.annotation=an;
+this.id=id;
+this._key="anchor-"+ta.Anchor.count++;
+this.shape=null;
+this.isControl=(_1!=null)?_1:true;
+this.beginEdit=function(){
+this.annotation.beginEdit(ta.CommandTypes.Modify);
+};
+this.endEdit=function(){
+this.annotation.endEdit();
+};
+this.zoom=function(_5){
+if(this.shape){
+var rs=Math.floor(_3/_5);
+var _6=dojox.gfx.renderer=="vml"?1:1/_5;
+this.shape.setShape({x:an[id].x-rs,y:an[id].y-rs,width:rs*2,height:rs*2}).setStroke({color:"black",width:_6});
+}
+};
+this.setBinding=function(pt){
+an[id]={x:an[id].x+pt.dx,y:an[id].y+pt.dy};
+an.draw();
+an.drawBBox();
+};
+this.setUndo=function(){
+an.setUndo();
+};
+this.enable=function(){
+if(!an.shape){
+return;
+}
+an.figure._add(this);
+_4={x:an[id].x-_3,y:an[id].y-_3,width:_3*2,height:_3*2};
+this.shape=an.shape.createRect(_4).setFill([255,255,255,0.35]);
+this.shape.getEventSource().setAttribute("id",_2._key);
+this.shape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.zoom(an.figure.zoomFactor);
+};
+this.disable=function(){
+an.figure._remove(this);
+if(an.shape){
+an.shape.remove(this.shape);
+}
+this.shape=null;
+_4=null;
+};
+};
+ta.Anchor.count=0;
+})();
+}
diff --git a/js/dojo/dojox/sketch/Annotation.js b/js/dojo/dojox/sketch/Annotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/Annotation.js
@@ -0,0 +1,249 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Annotation"]){
+dojo._hasResource["dojox.sketch.Annotation"]=true;
+dojo.provide("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+dojo.require("dojox.sketch._Plugin");
+(function(){
+var ta=dojox.sketch;
+dojo.declare("dojox.sketch.AnnotationTool",ta._Plugin,{onMouseDown:function(e){
+this._omd=true;
+},onMouseMove:function(e,_1){
+if(!this._omd){
+return;
+}
+if(this._cshape){
+this._cshape.setShape(_1);
+}else{
+this._cshape=this.figure.surface.createRect(_1).setStroke({color:"#999",width:1,style:"ShortDot"}).setFill([255,255,255,0.7]);
+this._cshape.getEventSource().setAttribute("shape-rendering","crispEdges");
+}
+},onMouseUp:function(e){
+if(!this._omd){
+return;
+}
+this._omd=false;
+var f=this.figure;
+if(this._cshape){
+f.surface.remove(this._cshape);
+delete this._cshape;
+}
+if(!(f._startPoint.x==e.pageX&&f._startPoint.y==e.pageY)){
+var _2=10;
+if(Math.max(_2,Math.abs(f._absEnd.x-f._start.x),Math.abs(f._absEnd.y-f._start.y))>_2){
+this._create(f._start,f._end);
+}
+}
+},_create:function(_3,_4){
+var f=this.figure;
+var _5=f.nextKey();
+var a=new (this.annotation)(f,_5);
+a.transform={dx:f._calCol(_3.x/f.zoomFactor),dy:f._calCol(_3.y/f.zoomFactor)};
+a.end={x:f._calCol(_4.x/f.zoomFactor),y:f._calCol(_4.y/f.zoomFactor)};
+if(a.control){
+a.control={x:f._calCol((_4.x/2)/f.zoomFactor),y:f._calCol((_4.y/2)/f.zoomFactor)};
+}
+f.onBeforeCreateShape(a);
+a.initialize();
+f.select(a);
+f.onCreateShape(a);
+f.history.add(ta.CommandTypes.Create,a);
+}});
+ta.Annotation=function(_6,id){
+this.id=this._key=id;
+this.figure=_6;
+this.mode=ta.Annotation.Modes.View;
+this.shape=null;
+this.boundingBox=null;
+this.hasAnchors=true;
+this.anchors={};
+this._properties={"stroke":{color:"blue",width:2},"font":{family:"Arial",size:16,weight:"bold"},"fill":"blue","label":""};
+if(this.figure){
+this.figure.add(this);
+}
+};
+var p=ta.Annotation.prototype;
+p.constructor=ta.Annotation;
+p.type=function(){
+return "";
+};
+p.getType=function(){
+return ta.Annotation;
+};
+p.onRemove=function(_7){
+this.figure.history.add(ta.CommandTypes.Delete,this,this.serialize());
+};
+p.property=function(_8,_9){
+var r;
+_8=_8.toLowerCase();
+if(this._properties[_8]!==undefined){
+r=this._properties[_8];
+}
+if(arguments.length>1){
+this._properties[_8]=_9;
+if(r!=_9){
+this.onPropertyChange(_8,r);
+}
+}
+return r;
+};
+p.onPropertyChange=function(_a,_b){
+};
+p.onCreate=function(){
+this.figure.history.add(ta.CommandTypes.Create,this);
+};
+p.onDblClick=function(e){
+var l=prompt("Set new text:",this.property("label"));
+if(l!==false){
+this.beginEdit(ta.CommandTypes.Modify);
+this.property("label",l);
+this.draw();
+this.endEdit();
+}
+};
+p.initialize=function(){
+};
+p.destroy=function(){
+};
+p.draw=function(){
+};
+p.apply=function(_c){
+};
+p.serialize=function(){
+};
+p.getBBox=function(){
+};
+p.beginEdit=function(_d){
+if(!this._type){
+this._type=_d||ta.CommandTypes.Move;
+this._prevState=this.serialize();
+}
+};
+p.endEdit=function(){
+if(this._prevState!=this.serialize()){
+this.figure.history.add(this._type,this,this._prevState);
+}
+this._type=this._prevState="";
+};
+p.calculate={slope:function(p1,p2){
+if(!(p1.x-p2.x)){
+return 0;
+}
+return ((p1.y-p2.y)/(p1.x-p2.x));
+},dx:function(p1,p2,dy){
+var s=this.slope(p1,p2);
+if(s==0){
+return s;
+}
+return dy/s;
+},dy:function(p1,p2,dx){
+return this.slope(p1,p2)*dx;
+}};
+p.drawBBox=function(){
+var r=this.getBBox();
+if(!this.boundingBox){
+this.boundingBox=this.shape.createRect(r).moveToBack().setStroke({color:"#999",width:1,style:"Dash"}).setFill([238,238,238,0.3]);
+this.boundingBox.getEventSource().setAttribute("id",this.id+"-boundingBox");
+this.boundingBox.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.figure._add(this);
+}else{
+this.boundingBox.setShape(r);
+}
+};
+p.setBinding=function(pt){
+this.transform.dx+=pt.dx;
+this.transform.dy+=pt.dy;
+this.draw();
+};
+p.getTextBox=function(_e){
+var fp=this.property("font");
+var f={fontFamily:fp.family,fontSize:fp.size,fontWeight:fp.weight};
+if(_e){
+f.fontSize=Math.floor(f.fontSize/_e);
+}
+return dojox.gfx._base._getTextBox(this.property("label"),f);
+};
+p.setMode=function(m){
+if(this.mode==m){
+return;
+}
+this.mode=m;
+var _f="disable";
+if(m==ta.Annotation.Modes.Edit){
+_f="enable";
+}
+if(_f=="enable"){
+this.drawBBox();
+this.figure._add(this);
+}else{
+if(this.boundingBox){
+if(this.shape){
+this.shape.remove(this.boundingBox);
+}
+this.boundingBox=null;
+}
+}
+for(var p in this.anchors){
+this.anchors[p][_f]();
+}
+};
+p.zoom=function(pct){
+pct=pct||this.figure.zoomFactor;
+if(this.labelShape){
+var f=dojo.clone(this.property("font"));
+f.size=Math.ceil(f.size/pct)+"px";
+this.labelShape.setFont(f);
+}
+for(var n in this.anchors){
+this.anchors[n].zoom(pct);
+}
+if(dojox.gfx.renderer=="vml"){
+pct=1;
+}
+if(this.pathShape){
+var s=dojo.clone(this.property("stroke"));
+s.width=pct>1?s.width:Math.ceil(s.width/pct)+"px";
+this.pathShape.setStroke(s);
+}
+};
+p.writeCommonAttrs=function(){
+return "id=\""+this.id+"\" dojoxsketch:type=\""+this.type()+"\""+" transform=\"translate("+this.transform.dx+","+this.transform.dy+")\""+(this.data?(" ><![CDATA[data:"+dojo.toJson(this.data)+"]]"):"");
+};
+p.readCommonAttrs=function(obj){
+var i=0,cs=obj.childNodes,c;
+while((c=cs[i++])){
+if(c.nodeType==4){
+if(c.nodeValue.substr(0,11)=="properties:"){
+this._properties=dojo.fromJson(c.nodeValue.substr(11));
+}else{
+if(c.nodeValue.substr(0,5)=="data:"){
+this.data=dojo.fromJson(c.nodeValue.substr(5));
+}else{
+console.error("unknown CDATA node in node ",obj);
+}
+}
+}
+}
+if(obj.getAttribute("transform")){
+var t=obj.getAttribute("transform").replace("translate(","");
+var pt=t.split(",");
+this.transform.dx=parseFloat(pt[0],10);
+this.transform.dy=parseFloat(pt[1],10);
+}
+};
+ta.Annotation.Modes={View:0,Edit:1};
+ta.Annotation.register=function(_10,_11){
+var cls=ta[_10+"Annotation"];
+ta.registerTool(_10,function(p){
+dojo.mixin(p,{shape:_10,annotation:cls});
+return new (_11||ta.AnnotationTool)(p);
+});
+};
+})();
+}
diff --git a/js/dojo/dojox/sketch/DoubleArrowAnnotation.js b/js/dojo/dojox/sketch/DoubleArrowAnnotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/DoubleArrowAnnotation.js
@@ -0,0 +1,178 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.DoubleArrowAnnotation"]){
+dojo._hasResource["dojox.sketch.DoubleArrowAnnotation"]=true;
+dojo.provide("dojox.sketch.DoubleArrowAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.DoubleArrowAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=6;
+this.textYOffset=10;
+this.textAlign="middle";
+this.startRotation=0;
+this.endRotation=0;
+this.labelShape=null;
+this.pathShape=null;
+this.startArrow=null;
+this.startArrowGroup=null;
+this.endArrow=null;
+this.endArrowGroup=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.DoubleArrowAnnotation.prototype=new ta.Annotation;
+var p=ta.DoubleArrowAnnotation.prototype;
+p.constructor=ta.DoubleArrowAnnotation;
+p.type=function(){
+return "DoubleArrow";
+};
+p.getType=function(){
+return ta.DoubleArrowAnnotation;
+};
+p._rot=function(){
+var _2=this.control.y-this.start.y;
+var _3=this.control.x-this.start.x;
+this.startRotation=Math.atan2(_2,_3);
+_2=this.end.y-this.control.y;
+_3=this.end.x-this.control.x;
+this.endRotation=Math.atan2(_2,_3);
+};
+p._pos=function(){
+var _4=this.textOffset;
+if(this.control.y<this.end.y){
+_4*=-1;
+}else{
+_4+=this.textYOffset;
+}
+var ab={x:((this.control.x-this.start.x)*0.5)+this.start.x,y:((this.control.y-this.start.y)*0.5)+this.start.y};
+var bc={x:((this.end.x-this.control.x)*0.5)+this.control.x,y:((this.end.y-this.control.y)*0.5)+this.control.y};
+this.textPosition={x:((bc.x-ab.x)*0.5)+ab.x,y:(((bc.y-ab.y)*0.5)+ab.y)+_4};
+};
+p.apply=function(_5){
+if(!_5){
+return;
+}
+if(_5.documentElement){
+_5=_5.documentElement;
+}
+this.readCommonAttrs(_5);
+for(var i=0;i<_5.childNodes.length;i++){
+var c=_5.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _6=this.property("stroke");
+var _7=c.getAttribute("style");
+var m=_7.match(/stroke:([^;]+);/);
+if(m){
+_6.color=m[1];
+this.property("fill",m[1]);
+}
+m=_7.match(/stroke-width:([^;]+);/);
+if(m){
+_6.width=m[1];
+}
+this.property("stroke",_6);
+}
+}
+}
+};
+p.initialize=function(_8){
+var _9=(ta.Annotation.labelFont)?ta.Annotation.labelFont:{family:"Times",size:"16px"};
+this.apply(_8);
+this._rot();
+this._pos();
+var _a=this.startRotation;
+var _b=dojox.gfx.matrix.rotate(_a);
+_a=this.endRotation;
+var _c=dojox.gfx.matrix.rotateAt(_a,this.end.x,this.end.y);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+" "+this.start.y+"Q"+this.control.x+" "+this.control.y+" "+this.end.x+" "+this.end.y+" l0,0");
+this.startArrowGroup=this.shape.createGroup().setTransform({dx:this.start.x,dy:this.start.y});
+this.startArrowGroup.applyTransform(_b);
+this.startArrow=this.startArrowGroup.createPath();
+this.endArrowGroup=this.shape.createGroup().setTransform(_c);
+this.endArrow=this.endArrowGroup.createPath();
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.startArrowGroup.remove(this.startArrow);
+this.endArrowGroup.remove(this.endArrow);
+this.shape.remove(this.startArrowGroup);
+this.shape.remove(this.endArrowGroup);
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=this.startArrowGroup=this.startArrow=this.endArrowGroup=this.endArrow=null;
+};
+p.draw=function(_d){
+this.apply(_d);
+this._rot();
+this._pos();
+var _e=this.startRotation;
+var _f=dojox.gfx.matrix.rotate(_e);
+_e=this.endRotation;
+var _10=dojox.gfx.matrix.rotateAt(_e,this.end.x,this.end.y);
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+" "+this.start.y+" Q"+this.control.x+" "+this.control.y+" "+this.end.x+" "+this.end.y+" l0,0");
+this.startArrowGroup.setTransform({dx:this.start.x,dy:this.start.y}).applyTransform(_f);
+this.startArrow.setFill(this.property("fill"));
+this.endArrowGroup.setTransform(_10);
+this.endArrow.setFill(this.property("fill"));
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(pct){
+if(this.startArrow){
+pct=pct||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,pct);
+var l=pct>1?20:Math.floor(20/pct),w=pct>1?5:Math.floor(5/pct),h=pct>1?3:Math.floor(3/pct);
+this.startArrow.setShape("M0,0 l"+l+",-"+w+" -"+h+","+w+" "+h+","+w+" Z");
+this.endArrow.setShape("M"+this.end.x+","+this.end.y+" l-"+l+",-"+w+" "+h+","+w+" -"+h+","+w+" Z");
+}
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+s.color+";stroke-width:"+s.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<g transform=\"translate("+this.start.x+","+this.start.y+") "+"rotate("+(Math.round((this.startRotation*(180/Math.PI))*Math.pow(10,4))/Math.pow(10,4))+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M0,0 l20,-5, -3,5, 3,5 Z\" />"+"</g>"+"<g transform=\"rotate("+(Math.round((this.endRotation*(180/Math.PI))*Math.pow(10,4))/Math.pow(10,4))+", "+this.end.x+", "+this.end.y+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M"+this.end.x+","+this.end.y+" l-20,-5, 3,5, -3,5 Z\" />"+"</g>"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("DoubleArrow");
+})();
+}
diff --git a/js/dojo/dojox/sketch/Figure.js b/js/dojo/dojox/sketch/Figure.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/Figure.js
@@ -0,0 +1,470 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Figure"]){
+dojo._hasResource["dojox.sketch.Figure"]=true;
+dojo.provide("dojox.sketch.Figure");
+dojo.experimental("dojox.sketch");
+dojo.require("dojox.gfx");
+dojo.require("dojox.sketch.UndoStack");
+(function(){
+var ta=dojox.sketch;
+ta.tools={};
+ta.registerTool=function(_1,fn){
+ta.tools[_1]=fn;
+};
+ta.Figure=function(_2){
+var _3=this;
+this.annCounter=1;
+this.shapes=[];
+this.image=null;
+this.imageSrc=null;
+this.size={w:0,h:0};
+this.surface=null;
+this.group=null;
+this.node=null;
+this.zoomFactor=1;
+this.tools=null;
+this.obj={};
+dojo.mixin(this,_2);
+this.selected=[];
+this.hasSelections=function(){
+return this.selected.length>0;
+};
+this.isSelected=function(_4){
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==_4){
+return true;
+}
+}
+return false;
+};
+this.select=function(_5){
+if(!_3.isSelected(_5)){
+_3.clearSelections();
+_3.selected=[_5];
+}
+_5.setMode(ta.Annotation.Modes.View);
+_5.setMode(ta.Annotation.Modes.Edit);
+};
+this.deselect=function(_6){
+var _7=-1;
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==_6){
+_7=i;
+break;
+}
+}
+if(_7>-1){
+_6.setMode(ta.Annotation.Modes.View);
+_3.selected.splice(_7,1);
+}
+return _6;
+};
+this.clearSelections=function(){
+for(var i=0;i<_3.selected.length;i++){
+_3.selected[i].setMode(ta.Annotation.Modes.View);
+}
+_3.selected=[];
+};
+this.replaceSelection=function(n,o){
+if(!_3.isSelected(o)){
+_3.select(n);
+return;
+}
+var _8=-1;
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==o){
+_8=i;
+break;
+}
+}
+if(_8>-1){
+_3.selected.splice(_8,1,n);
+}
+};
+this._c=null;
+this._ctr=null;
+this._lp=null;
+this._action=null;
+this._prevState=null;
+this._startPoint=null;
+this._ctool=null;
+this._start=null;
+this._end=null;
+this._absEnd=null;
+this._cshape=null;
+this._dblclick=function(e){
+var o=_3._fromEvt(e);
+if(o){
+_3.onDblClickShape(o,e);
+}
+};
+this._keydown=function(e){
+var _9=false;
+if(e.ctrlKey){
+if(e.keyCode===90||e.keyCode===122){
+_3.undo();
+_9=true;
+}else{
+if(e.keyCode===89||e.keyCode===121){
+_3.redo();
+_9=true;
+}
+}
+}
+if(e.keyCode===46||e.keyCode===8){
+_3._delete(_3.selected);
+_9=true;
+}
+if(_9){
+dojo.stopEvent(e);
+}
+};
+this._md=function(e){
+if(dojox.gfx.renderer=="vml"){
+_3.node.focus();
+}
+var o=_3._fromEvt(e);
+_3._startPoint={x:e.pageX,y:e.pageY};
+_3._ctr=dojo.position(_3.node);
+var _a={x:_3.node.scrollLeft,y:_3.node.scrollTop};
+_3._ctr={x:_3._ctr.x-_a.x,y:_3._ctr.y-_a.y};
+var X=e.clientX-_3._ctr.x,Y=e.clientY-_3._ctr.y;
+_3._lp={x:X,y:Y};
+_3._start={x:X,y:Y};
+_3._end={x:X,y:Y};
+_3._absEnd={x:X,y:Y};
+if(!o){
+_3.clearSelections();
+_3._ctool.onMouseDown(e);
+}else{
+if(o.type&&o.type()!="Anchor"){
+if(!_3.isSelected(o)){
+_3.select(o);
+_3._sameShapeSelected=false;
+}else{
+_3._sameShapeSelected=true;
+}
+}
+o.beginEdit();
+_3._c=o;
+}
+};
+this._mm=function(e){
+if(!_3._ctr){
+return;
+}
+var x=e.clientX-_3._ctr.x;
+var y=e.clientY-_3._ctr.y;
+var dx=x-_3._lp.x;
+var dy=y-_3._lp.y;
+_3._absEnd={x:x,y:y};
+if(_3._c){
+_3._c.setBinding({dx:dx/_3.zoomFactor,dy:dy/_3.zoomFactor});
+_3._lp={x:x,y:y};
+}else{
+_3._end={x:dx,y:dy};
+var _b={x:Math.min(_3._start.x,_3._absEnd.x),y:Math.min(_3._start.y,_3._absEnd.y),width:Math.abs(_3._start.x-_3._absEnd.x),height:Math.abs(_3._start.y-_3._absEnd.y)};
+if(_b.width&&_b.height){
+_3._ctool.onMouseMove(e,_b);
+}
+}
+};
+this._mu=function(e){
+if(_3._c){
+_3._c.endEdit();
+}else{
+_3._ctool.onMouseUp(e);
+}
+_3._c=_3._ctr=_3._lp=_3._action=_3._prevState=_3._startPoint=null;
+_3._cshape=_3._start=_3._end=_3._absEnd=null;
+};
+this.initUndoStack();
+};
+var p=ta.Figure.prototype;
+p.initUndoStack=function(){
+this.history=new ta.UndoStack(this);
+};
+p.setTool=function(t){
+this._ctool=t;
+};
+p.gridSize=0;
+p._calCol=function(v){
+return this.gridSize?(Math.round(v/this.gridSize)*this.gridSize):v;
+};
+p._delete=function(_c,_d){
+for(var i=0;i<_c.length;i++){
+_c[i].setMode(ta.Annotation.Modes.View);
+_c[i].destroy(_d);
+this.remove(_c[i]);
+this._remove(_c[i]);
+if(!_d){
+_c[i].onRemove();
+}
+}
+_c.splice(0,_c.length);
+};
+p.onDblClickShape=function(_e,e){
+if(_e["onDblClick"]){
+_e.onDblClick(e);
+}
+};
+p.onCreateShape=function(_f){
+};
+p.onBeforeCreateShape=function(_10){
+};
+p.initialize=function(_11){
+this.node=_11;
+this.surface=dojox.gfx.createSurface(_11,this.size.w,this.size.h);
+this.group=this.surface.createGroup();
+this._cons=[];
+var es=this.surface.getEventSource();
+this._cons.push(dojo.connect(es,"ondraggesture",dojo.stopEvent),dojo.connect(es,"ondragenter",dojo.stopEvent),dojo.connect(es,"ondragover",dojo.stopEvent),dojo.connect(es,"ondragexit",dojo.stopEvent),dojo.connect(es,"ondragstart",dojo.stopEvent),dojo.connect(es,"onselectstart",dojo.stopEvent),dojo.connect(es,"onmousedown",this._md),dojo.connect(es,"onmousemove",this._mm),dojo.connect(es,"onmouseup",this._mu),dojo.connect(es,"onclick",this,"onClick"),dojo.connect(es,"ondblclick",this._dblclick),dojo.connect(_11,"onkeydown",this._keydown));
+this.image=this.group.createImage({width:this.imageSize.w,height:this.imageSize.h,src:this.imageSrc});
+};
+p.destroy=function(_12){
+if(!this.node){
+return;
+}
+if(!_12){
+if(this.history){
+this.history.destroy();
+}
+if(this._subscribed){
+dojo.unsubscribe(this._subscribed);
+delete this._subscribed;
+}
+}
+dojo.forEach(this._cons,dojo.disconnect);
+this._cons=[];
+dojo.empty(this.node);
+this.group=this.surface=null;
+this.obj={};
+this.shapes=[];
+};
+p.nextKey=function(){
+return "annotation-"+this.annCounter++;
+};
+p.draw=function(){
+};
+p.zoom=function(pct){
+this.zoomFactor=pct/100;
+var w=this.size.w*this.zoomFactor;
+var h=this.size.h*this.zoomFactor;
+this.surface.setDimensions(w,h);
+this.group.setTransform(dojox.gfx.matrix.scale(this.zoomFactor,this.zoomFactor));
+for(var i=0;i<this.shapes.length;i++){
+this.shapes[i].zoom(this.zoomFactor);
+}
+};
+p.getFit=function(){
+var wF=(this.node.parentNode.offsetWidth-5)/this.size.w;
+var hF=(this.node.parentNode.offsetHeight-5)/this.size.h;
+return Math.min(wF,hF)*100;
+};
+p.unzoom=function(){
+this.zoomFactor=1;
+this.surface.setDimensions(this.size.w,this.size.h);
+this.group.setTransform();
+};
+p._add=function(obj){
+this.obj[obj._key]=obj;
+};
+p._remove=function(obj){
+if(this.obj[obj._key]){
+delete this.obj[obj._key];
+}
+};
+p._get=function(key){
+if(key&&key.indexOf("bounding")>-1){
+key=key.replace("-boundingBox","");
+}else{
+if(key&&key.indexOf("-labelShape")>-1){
+key=key.replace("-labelShape","");
+}
+}
+return this.obj[key];
+};
+p._keyFromEvt=function(e){
+var key=e.target.id+"";
+if(key.length==0){
+var p=e.target.parentNode;
+var _13=this.surface.getEventSource();
+while(p&&p.id.length==0&&p!=_13){
+p=p.parentNode;
+}
+key=p.id;
+}
+return key;
+};
+p._fromEvt=function(e){
+return this._get(this._keyFromEvt(e));
+};
+p.add=function(_14){
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i]==_14){
+return true;
+}
+}
+this.shapes.push(_14);
+return true;
+};
+p.remove=function(_15){
+var idx=-1;
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i]==_15){
+idx=i;
+break;
+}
+}
+if(idx>-1){
+this.shapes.splice(idx,1);
+}
+return _15;
+};
+p.get=function(id){
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i].id==id){
+return this.shapes[i];
+}
+}
+return null;
+};
+p.convert=function(ann,t){
+var _16=t+"Annotation";
+if(!ta[_16]){
+return;
+}
+var _17=ann.type(),id=ann.id,_18=ann.label,_19=ann.mode,_1a=ann.tokenId;
+var _1b,end,_1c,_1d;
+switch(_17){
+case "Preexisting":
+case "Lead":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+end={x:ann.end.x,y:ann.end.y};
+var cx=end.x-((end.x-_1b.x)/2);
+var cy=end.y-((end.y-_1b.y)/2);
+_1c={x:cx,y:cy};
+break;
+case "SingleArrow":
+case "DoubleArrow":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+end={x:ann.end.x,y:ann.end.y};
+_1c={x:ann.control.x,y:ann.control.y};
+break;
+case "Underline":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+_1c={x:_1b.x+50,y:_1b.y+50};
+end={x:_1b.x+100,y:_1b.y+100};
+break;
+case "Brace":
+}
+var n=new ta[_16](this,id);
+if(n.type()=="Underline"){
+n.transform={dx:_1d.dx+_1b.x,dy:_1d.dy+_1b.y};
+}else{
+if(n.transform){
+n.transform=_1d;
+}
+if(n.start){
+n.start=_1b;
+}
+}
+if(n.end){
+n.end=end;
+}
+if(n.control){
+n.control=_1c;
+}
+n.label=_18;
+n.token=dojo.lang.shallowCopy(ann.token);
+n.initialize();
+this.replaceSelection(n,ann);
+this._remove(ann);
+this.remove(ann);
+ann.destroy();
+n.setMode(_19);
+};
+p.setValue=function(_1e){
+var obj=dojox.xml.DomParser.parse(_1e);
+var _1f=this.node;
+this.load(obj,_1f);
+};
+p.load=function(obj,n){
+if(this.surface){
+this.destroy(true);
+}
+var _20=obj.documentElement;
+this.size={w:parseFloat(_20.getAttribute("width"),10),h:parseFloat(_20.getAttribute("height"),10)};
+var g=_20.childrenByName("g")[0];
+var img=g.childrenByName("image")[0];
+this.imageSize={w:parseFloat(img.getAttribute("width"),10),h:parseFloat(img.getAttribute("height"),10)};
+this.imageSrc=img.getAttribute("xlink:href");
+this.initialize(n);
+var ann=g.childrenByName("g");
+for(var i=0;i<ann.length;i++){
+this._loadAnnotation(ann[i]);
+}
+if(this._loadDeferred){
+this._loadDeferred.callback(this);
+this._loadDeferred=null;
+}
+this.onLoad();
+};
+p.onLoad=function(){
+};
+p.onClick=function(){
+};
+p._loadAnnotation=function(obj){
+var _21=obj.getAttribute("dojoxsketch:type")+"Annotation";
+if(ta[_21]){
+var a=new ta[_21](this,obj.id);
+a.initialize(obj);
+this.nextKey();
+a.setMode(ta.Annotation.Modes.View);
+this._add(a);
+return a;
+}
+return null;
+};
+p.onUndo=function(){
+};
+p.onBeforeUndo=function(){
+};
+p.onRedo=function(){
+};
+p.onBeforeRedo=function(){
+};
+p.undo=function(){
+if(this.history){
+this.onBeforeUndo();
+this.history.undo();
+this.onUndo();
+}
+};
+p.redo=function(){
+if(this.history){
+this.onBeforeRedo();
+this.history.redo();
+this.onRedo();
+}
+};
+p.serialize=function(){
+var s="<svg xmlns=\"http://www.w3.org/2000/svg\" "+"xmlns:xlink=\"http://www.w3.org/1999/xlink\" "+"xmlns:dojoxsketch=\"http://dojotoolkit.org/dojox/sketch\" "+"width=\""+this.size.w+"\" height=\""+this.size.h+"\">"+"<g>"+"<image xlink:href=\""+this.imageSrc+"\" x=\"0\" y=\"0\" width=\""+this.size.w+"\" height=\""+this.size.h+"\" />";
+for(var i=0;i<this.shapes.length;i++){
+s+=this.shapes[i].serialize();
+}
+s+="</g></svg>";
+return s;
+};
+p.getValue=p.serialize;
+})();
+}
diff --git a/js/dojo/dojox/sketch/LeadAnnotation.js b/js/dojo/dojox/sketch/LeadAnnotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/LeadAnnotation.js
@@ -0,0 +1,151 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.LeadAnnotation"]){
+dojo._hasResource["dojox.sketch.LeadAnnotation"]=true;
+dojo.provide("dojox.sketch.LeadAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.LeadAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=4;
+this.textYOffset=10;
+this.pathShape=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.LeadAnnotation.prototype=new ta.Annotation;
+var p=ta.LeadAnnotation.prototype;
+p.constructor=ta.LeadAnnotation;
+p.type=function(){
+return "Lead";
+};
+p.getType=function(){
+return ta.LeadAnnotation;
+};
+p._pos=function(){
+var _2=this.textOffset,x=0,y=0;
+var _3=this.calculate.slope(this.control,this.end);
+this.textAlign="middle";
+if(Math.abs(_3)>=1){
+x=this.end.x+this.calculate.dx(this.control,this.end,_2);
+if(this.control.y>this.end.y){
+y=this.end.y-_2;
+}else{
+y=this.end.y+_2+this.textYOffset;
+}
+}else{
+if(_3==0){
+x=this.end.x+_2;
+y=this.end.y+this.textYOffset;
+}else{
+if(this.start.x>this.end.x){
+x=this.end.x-_2;
+this.textAlign="end";
+}else{
+x=this.end.x+_2;
+this.textAlign="start";
+}
+if(this.start.y<this.end.y){
+y=this.end.y+this.calculate.dy(this.control,this.end,_2)+this.textYOffset;
+}else{
+y=this.end.y+this.calculate.dy(this.control,this.end,-_2);
+}
+}
+}
+this.textPosition={x:x,y:y};
+};
+p.apply=function(_4){
+if(!_4){
+return;
+}
+if(_4.documentElement){
+_4=_4.documentElement;
+}
+this.readCommonAttrs(_4);
+for(var i=0;i<_4.childNodes.length;i++){
+var c=_4.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _5=this.property("stroke");
+var _6=c.getAttribute("style");
+var m=_6.match(/stroke:([^;]+);/);
+if(m){
+_5.color=m[1];
+this.property("fill",m[1]);
+}
+m=_6.match(/stroke-width:([^;]+);/);
+if(m){
+_5.width=m[1];
+}
+this.property("stroke",_5);
+}
+}
+}
+};
+p.initialize=function(_7){
+this.apply(_7);
+this._pos();
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.draw=function(_8){
+this.apply(_8);
+this._pos();
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.serialize=function(){
+var _9=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+_9.color+";stroke-width:"+_9.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<text style=\"fill:"+_9.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("Lead");
+})();
+}
diff --git a/js/dojo/dojox/sketch/PreexistingAnnotation.js b/js/dojo/dojox/sketch/PreexistingAnnotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/PreexistingAnnotation.js
@@ -0,0 +1,141 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.PreexistingAnnotation"]){
+dojo._hasResource["dojox.sketch.PreexistingAnnotation"]=true;
+dojo.provide("dojox.sketch.PreexistingAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.PreexistingAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.end={x:200,y:200};
+this.radius=8;
+this.textPosition={x:196,y:196};
+this.textOffset=4;
+this.textAlign="end";
+this.rectShape=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.PreexistingAnnotation.prototype=new ta.Annotation;
+var p=ta.PreexistingAnnotation.prototype;
+p.constructor=ta.PreexistingAnnotation;
+p.type=function(){
+return "Preexisting";
+};
+p.getType=function(){
+return ta.PreexistingAnnotation;
+};
+p._pos=function(){
+var x=Math.min(this.start.x,this.end.x);
+var y=Math.min(this.start.y,this.end.y);
+var w=Math.max(this.start.x,this.end.x);
+var h=Math.max(this.start.y,this.end.y);
+this.start={x:x,y:y};
+this.end={x:w,y:h};
+this.textPosition={x:this.end.x-this.textOffset,y:this.end.y-this.textOffset};
+};
+p.apply=function(_2){
+if(!_2){
+return;
+}
+if(_2.documentElement){
+_2=_2.documentElement;
+}
+this.readCommonAttrs(_2);
+for(var i=0;i<_2.childNodes.length;i++){
+var c=_2.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="rect"){
+if(c.getAttribute("x")!==null){
+this.start.x=parseFloat(c.getAttribute("x"),10);
+}
+if(c.getAttribute("width")!==null){
+this.end.x=parseFloat(c.getAttribute("width"),10)+parseFloat(c.getAttribute("x"),10);
+}
+if(c.getAttribute("y")!==null){
+this.start.y=parseFloat(c.getAttribute("y"),10);
+}
+if(c.getAttribute("height")!==null){
+this.end.y=parseFloat(c.getAttribute("height"),10)+parseFloat(c.getAttribute("y"),10);
+}
+if(c.getAttribute("r")!==null){
+this.radius=parseFloat(c.getAttribute("r"),10);
+}
+var _3=this.property("stroke");
+var _4=c.getAttribute("style");
+var m=_4.match(/stroke:([^;]+);/);
+if(m){
+_3.color=m[1];
+this.property("fill",m[1]);
+}
+m=_4.match(/stroke-width:([^;]+);/);
+if(m){
+_3.width=m[1];
+}
+this.property("stroke",_3);
+}
+}
+}
+};
+p.initialize=function(_5){
+this.apply(_5);
+this._pos();
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.rectShape=this.shape.createRect({x:this.start.x,y:this.start.y,width:this.end.x-this.start.x,height:this.end.y-this.start.y,r:this.radius}).setFill([255,255,255,0.1]);
+this.rectShape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.rectShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.rectShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.end.x);
+var y=Math.min(this.start.y,this.end.y);
+var w=Math.max(this.start.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.end.y)-y;
+return {x:x-2,y:y-2,width:w+4,height:h+4};
+};
+p.draw=function(_6){
+this.apply(_6);
+this._pos();
+this.shape.setTransform(this.transform);
+this.rectShape.setShape({x:this.start.x,y:this.start.y,width:this.end.x-this.start.x,height:this.end.y-this.start.y,r:this.radius}).setFill([255,255,255,0.1]);
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(_7){
+if(this.rectShape){
+_7=_7||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,_7);
+_7=dojox.gfx.renderer=="vml"?1:_7;
+this.rectShape.setStroke({color:this.property("fill"),width:1/_7});
+}
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<rect style=\"stroke:"+s.color+";stroke-width:1;fill:none;\" "+"x=\""+this.start.x+"\" "+"width=\""+(this.end.x-this.start.x)+"\" "+"y=\""+this.start.y+"\" "+"height=\""+(this.end.y-this.start.y)+"\" "+"rx=\""+this.radius+"\" "+"ry=\""+this.radius+"\" "+" />"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("Preexisting");
+})();
+}
diff --git a/js/dojo/dojox/sketch/README b/js/dojo/dojox/sketch/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/README
@@ -0,0 +1,58 @@
+-------------------------------------------------------------------------------
+dojox.sketch
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 28/01/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Contributed by TeamPatent (supported by National Science Foundation grant 638334)
+ Tom Trenka (ttrenka@gmail.com)
+ Heng Liu/LiuCougar (heng@teampatent.com)
+-------------------------------------------------------------------------------
+Project description
+
+A cross-browser drawing editor based on dojox.gfx.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dijit (Toolbar, Button, Slider)
+dojox.gfx
+dojox.xml
+-------------------------------------------------------------------------------
+Documentation
+
+Currently, 5 shapes are supported: line, single arrow line, double arrow line,
+underline text and text. The first 3 shapes can have optinal text associated.
+
+Shapes can be added, deleted, moved and modified. All of these operations can
+be undo-ed or redo-ed.
+
+TODO:
+ * provide UI to change various properties on shapes (fill, stroke, text) and
+allow changing of background image
+ * serialize/unserialize in dojox.gfx to svg (and maybe vml as well?) (or another
+simplier format? such as a json based one, which is easier to parse, and then
+write a convertor to convert the json format to svg or any other format?)
+ * Move mousedown/up/move to each shape (to prepare for the following)
+ * Add shapes for other primitive shapes (needs to decide which primitive
+dojox.gfx.shapes are useful), and add in support for user to group any
+shapes/groups to form a single "compound shape" (need to add support to set
+fill/stroke properties on the entire compound shape, which shallpropagate to
+all children shapes)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Install dijit, dojox.gfx and dojox.xml first
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/sketch.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/sketch/*
+
+Install into the following directory structure:
+/dojox/sketch/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
diff --git a/js/dojo/dojox/sketch/SingleArrowAnnotation.js b/js/dojo/dojox/sketch/SingleArrowAnnotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/SingleArrowAnnotation.js
@@ -0,0 +1,185 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.SingleArrowAnnotation"]){
+dojo._hasResource["dojox.sketch.SingleArrowAnnotation"]=true;
+dojo.provide("dojox.sketch.SingleArrowAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.SingleArrowAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=4;
+this.textYOffset=10;
+this.rotation=0;
+this.pathShape=null;
+this.arrowhead=null;
+this.arrowheadGroup=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.SingleArrowAnnotation.prototype=new ta.Annotation;
+var p=ta.SingleArrowAnnotation.prototype;
+p.constructor=ta.SingleArrowAnnotation;
+p.type=function(){
+return "SingleArrow";
+};
+p.getType=function(){
+return ta.SingleArrowAnnotation;
+};
+p._rot=function(){
+var _2=this.control.y-this.start.y;
+var _3=this.control.x-this.start.x;
+this.rotation=Math.atan2(_2,_3);
+};
+p._pos=function(){
+var _4=this.textOffset,x=0,y=0;
+var _5=this.calculate.slope(this.control,this.end);
+this.textAlign="middle";
+if(Math.abs(_5)>=1){
+x=this.end.x+this.calculate.dx(this.control,this.end,_4);
+if(this.control.y>this.end.y){
+y=this.end.y-_4;
+}else{
+y=this.end.y+_4+this.textYOffset;
+}
+}else{
+if(_5==0){
+x=this.end.x+_4;
+y=this.end.y+this.textYOffset;
+}else{
+if(this.start.x>this.end.x){
+x=this.end.x-_4;
+this.textAlign="end";
+}else{
+x=this.end.x+_4;
+this.textAlign="start";
+}
+if(this.start.y<this.end.y){
+y=this.end.y+this.calculate.dy(this.control,this.end,_4)+this.textYOffset;
+}else{
+y=this.end.y+this.calculate.dy(this.control,this.end,-_4);
+}
+}
+}
+this.textPosition={x:x,y:y};
+};
+p.apply=function(_6){
+if(!_6){
+return;
+}
+if(_6.documentElement){
+_6=_6.documentElement;
+}
+this.readCommonAttrs(_6);
+for(var i=0;i<_6.childNodes.length;i++){
+var c=_6.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _7=this.property("stroke");
+var _8=c.getAttribute("style");
+var m=_8.match(/stroke:([^;]+);/);
+if(m){
+_7.color=m[1];
+this.property("fill",m[1]);
+}
+m=_8.match(/stroke-width:([^;]+);/);
+if(m){
+_7.width=m[1];
+}
+this.property("stroke",_7);
+}
+}
+}
+};
+p.initialize=function(_9){
+var _a=(ta.Annotation.labelFont)?ta.Annotation.labelFont:{family:"Times",size:"16px"};
+this.apply(_9);
+this._rot();
+this._pos();
+var _b=this.rotation;
+var _c=dojox.gfx.matrix.rotate(_b);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.arrowheadGroup=this.shape.createGroup();
+this.arrowhead=this.arrowheadGroup.createPath();
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.arrowheadGroup.remove(this.arrowhead);
+this.shape.remove(this.arrowheadGroup);
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=this.arrowheadGroup=this.arrowhead=null;
+};
+p.draw=function(_d){
+this.apply(_d);
+this._rot();
+this._pos();
+var _e=this.rotation;
+var _f=dojox.gfx.matrix.rotate(_e);
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.arrowheadGroup.setTransform({dx:this.start.x,dy:this.start.y}).applyTransform(_f);
+this.arrowhead.setFill(this.property("fill"));
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(pct){
+if(this.arrowhead){
+pct=pct||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,pct);
+if(this._curPct!==pct){
+this._curPct=pct;
+var l=pct>1?20:Math.floor(20/pct),w=pct>1?5:Math.floor(5/pct),h=pct>1?3:Math.floor(3/pct);
+this.arrowhead.setShape("M0,0 l"+l+",-"+w+" -"+h+","+w+" "+h+","+w+" Z");
+}
+}
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.serialize=function(){
+var s=this.property("stroke");
+var r=this.rotation*(180/Math.PI);
+r=Math.round(r*Math.pow(10,4))/Math.pow(10,4);
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+s.color+";stroke-width:"+s.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<g transform=\"translate("+this.start.x+","+this.start.y+") "+"rotate("+r+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M0,0 l20,-5, -3,5, 3,5 Z\" />"+"</g>"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("SingleArrow");
+})();
+}
diff --git a/js/dojo/dojox/sketch/Slider.js b/js/dojo/dojox/sketch/Slider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/Slider.js
@@ -0,0 +1,36 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Slider"]){
+dojo._hasResource["dojox.sketch.Slider"]=true;
+dojo.provide("dojox.sketch.Slider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.declare("dojox.sketch.Slider",dojox.sketch._Plugin,{_initButton:function(){
+this.slider=new dijit.form.HorizontalSlider({minimum:5,maximum:100,style:"width:100px;float:right"});
+this.slider._movable.node.title="Double Click to \"Zoom to Fit\"";
+this.connect(this.slider,"onChange","_setZoom");
+this.connect(this.slider.sliderHandle,"ondblclick","_zoomToFit");
+},_zoomToFit:function(){
+var r=this.figure.getFit();
+this.slider.attr("value",this.slider.maximum<r?this.slider.maximum:(this.slider.minimum>r?this.slider.minimum:r));
+},_setZoom:function(v){
+if(v&&this.figure){
+this.figure.zoom(v);
+}
+},reset:function(){
+this.slider.attr("value",this.slider.maximum);
+this._zoomToFit();
+},setToolbar:function(t){
+this._initButton();
+t.addChild(this.slider);
+if(!t._reset2Zoom){
+t._reset2Zoom=true;
+this.connect(t,"reset","reset");
+}
+}});
+dojox.sketch.registerTool("Slider",dojox.sketch.Slider);
+}
diff --git a/js/dojo/dojox/sketch/Toolbar.js b/js/dojo/dojox/sketch/Toolbar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/Toolbar.js
@@ -0,0 +1,83 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Toolbar"]){
+dojo._hasResource["dojox.sketch.Toolbar"]=true;
+dojo.provide("dojox.sketch.Toolbar");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.sketch.ButtonGroup",null,{constructor:function(){
+this._childMaps={};
+this._children=[];
+},add:function(_1){
+this._childMaps[_1]=_1.connect(_1,"onActivate",dojo.hitch(this,"_resetGroup",_1));
+this._children.push(_1);
+},_resetGroup:function(p){
+var cs=this._children;
+dojo.forEach(cs,function(c){
+if(p!=c&&c["attr"]){
+c.attr("checked",false);
+}
+});
+}});
+dojo.declare("dojox.sketch.Toolbar",dijit.Toolbar,{figure:null,plugins:null,postCreate:function(){
+this.inherited(arguments);
+this.shapeGroup=new dojox.sketch.ButtonGroup;
+if(!this.plugins){
+this.plugins=["Slider","Lead","SingleArrow","DoubleArrow","Underline","Preexisting"];
+}
+this._plugins=[];
+dojo.forEach(this.plugins,function(_2){
+var _3=dojo.isString(_2)?_2:_2.name;
+var p=new dojox.sketch.tools[_3](_2.args||{});
+this._plugins.push(p);
+p.setToolbar(this);
+if(!this._defaultTool&&p.button){
+this._defaultTool=p;
+}
+},this);
+},setFigure:function(f){
+this.figure=f;
+this.connect(f,"onLoad","reset");
+dojo.forEach(this._plugins,function(p){
+p.setFigure(f);
+});
+},destroy:function(){
+dojo.forEach(this._plugins,function(p){
+p.destroy();
+});
+this.inherited(arguments);
+delete this._defaultTool;
+delete this._plugins;
+},addGroupItem:function(_4,_5){
+if(_5!="toolsGroup"){
+console.error("not supported group "+_5);
+return;
+}
+this.shapeGroup.add(_4);
+},reset:function(){
+this._defaultTool.activate();
+},_setShape:function(s){
+if(!this.figure.surface){
+return;
+}
+if(this.figure.hasSelections()){
+for(var i=0;i<this.figure.selected.length;i++){
+var _6=this.figure.selected[i].serialize();
+this.figure.convert(this.figure.selected[i],s);
+this.figure.history.add(dojox.sketch.CommandTypes.Convert,this.figure.selected[i],_6);
+}
+}
+}});
+dojox.sketch.makeToolbar=function(_7,_8){
+var _9=new dojox.sketch.Toolbar();
+_9.setFigure(_8);
+_7.appendChild(_9.domNode);
+return _9;
+};
+}
diff --git a/js/dojo/dojox/sketch/UnderlineAnnotation.js b/js/dojo/dojox/sketch/UnderlineAnnotation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/UnderlineAnnotation.js
@@ -0,0 +1,113 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.UnderlineAnnotation"]){
+dojo._hasResource["dojox.sketch.UnderlineAnnotation"]=true;
+dojo.provide("dojox.sketch.UnderlineAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.UnderlineAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.property("label","#");
+this.labelShape=null;
+this.lineShape=null;
+};
+ta.UnderlineAnnotation.prototype=new ta.Annotation;
+var p=ta.UnderlineAnnotation.prototype;
+p.constructor=ta.UnderlineAnnotation;
+p.type=function(){
+return "Underline";
+};
+p.getType=function(){
+return ta.UnderlineAnnotation;
+};
+p.apply=function(_2){
+if(!_2){
+return;
+}
+if(_2.documentElement){
+_2=_2.documentElement;
+}
+this.readCommonAttrs(_2);
+for(var i=0;i<_2.childNodes.length;i++){
+var c=_2.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes[0].nodeValue);
+var _3=c.getAttribute("style");
+var m=_3.match(/fill:([^;]+);/);
+if(m){
+var _4=this.property("stroke");
+_4.collor=m[1];
+this.property("stroke",_4);
+this.property("fill",_4.collor);
+}
+}
+}
+};
+p.initialize=function(_5){
+this.apply(_5);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.labelShape=this.shape.createText({x:0,y:0,text:this.property("label"),decoration:"underline",align:"start"});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.lineShape=this.shape.createLine({x1:1,x2:this.labelShape.getTextWidth(),y1:2,y2:2});
+this.lineShape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.labelShape);
+this.shape.remove(this.lineShape);
+this.figure.group.remove(this.shape);
+this.shape=this.lineShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var b=this.getTextBox();
+var z=this.figure.zoomFactor;
+return {x:0,y:(b.h*-1+4)/z,width:(b.w+2)/z,height:b.h/z};
+};
+p.draw=function(_6){
+this.apply(_6);
+this.shape.setTransform(this.transform);
+this.labelShape.setShape({x:0,y:0,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(_7){
+if(this.labelShape){
+_7=_7||this.figure.zoomFactor;
+var _8=dojox.gfx.renderer=="vml"?0:2/_7;
+ta.Annotation.prototype.zoom.call(this,_7);
+_7=dojox.gfx.renderer=="vml"?1:_7;
+this.lineShape.setShape({x1:0,x2:this.getBBox().width-_8,y1:2,y2:2}).setStroke({color:this.property("fill"),width:1/_7});
+if(this.mode==ta.Annotation.Modes.Edit){
+this.drawBBox();
+}
+}
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<text style=\"fill:"+this.property("fill")+";\" font-weight=\"bold\" text-decoration=\"underline\" "+"x=\"0\" y=\"0\">"+this.property("label")+"</text>"+"</g>";
+};
+dojo.declare("dojox.sketch.UnderlineAnnotationTool",ta.AnnotationTool,{onMouseDown:function(){
+},onMouseUp:function(){
+var f=this.figure;
+if(!f._start){
+return;
+}
+f._end={x:0,y:0};
+this._create(f._start,{x:f._start.x+10,y:f._start.y+10});
+},onMouseMove:function(){
+}});
+ta.Annotation.register("Underline",ta.UnderlineAnnotationTool);
+})();
+}
diff --git a/js/dojo/dojox/sketch/UndoStack.js b/js/dojo/dojox/sketch/UndoStack.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/UndoStack.js
@@ -0,0 +1,71 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.UndoStack"]){
+dojo._hasResource["dojox.sketch.UndoStack"]=true;
+dojo.provide("dojox.sketch.UndoStack");
+dojo.require("dojox.xml.DomParser");
+(function(){
+var ta=dojox.sketch;
+ta.CommandTypes={Create:"Create",Move:"Move",Modify:"Modify",Delete:"Delete",Convert:"Convert"};
+dojo.declare("dojox.sketch.UndoStack",null,{constructor:function(_1){
+this.figure=_1;
+this._steps=[];
+this._undoedSteps=[];
+},apply:function(_2,_3,to){
+if(!_3&&!to&&_2.fullText){
+this.figure.setValue(_2.fullText);
+return;
+}
+var _4=_3.shapeText;
+var _5=to.shapeText;
+if(_4.length==0&&_5.length==0){
+return;
+}
+if(_4.length==0){
+var o=dojox.xml.DomParser.parse(_5).documentElement;
+var a=this.figure._loadAnnotation(o);
+if(a){
+this.figure._add(a);
+}
+return;
+}
+if(_5.length==0){
+var _6=this.figure.get(_3.shapeId);
+this.figure._delete([_6],true);
+return;
+}
+var _7=this.figure.get(to.shapeId);
+var no=dojox.xml.DomParser.parse(_5).documentElement;
+_7.draw(no);
+this.figure.select(_7);
+return;
+},add:function(_8,_9,_a){
+var id=_9?_9.id:"";
+var _b=_9?_9.serialize():"";
+if(_8==ta.CommandTypes.Delete){
+_b="";
+}
+var _c={cmdname:_8,before:{shapeId:id,shapeText:_a||""},after:{shapeId:id,shapeText:_b}};
+this._steps.push(_c);
+this._undoedSteps=[];
+},destroy:function(){
+},undo:function(){
+var _d=this._steps.pop();
+if(_d){
+this._undoedSteps.push(_d);
+this.apply(_d,_d.after,_d.before);
+}
+},redo:function(){
+var _e=this._undoedSteps.pop();
+if(_e){
+this._steps.push(_e);
+this.apply(_e,_e.before,_e.after);
+}
+}});
+})();
+}
diff --git a/js/dojo/dojox/sketch/_Plugin.js b/js/dojo/dojox/sketch/_Plugin.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/_Plugin.js
@@ -0,0 +1,51 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch._Plugin"]){
+dojo._hasResource["dojox.sketch._Plugin"]=true;
+dojo.provide("dojox.sketch._Plugin");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.sketch._Plugin",null,{constructor:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+this._connects=[];
+},figure:null,iconClassPrefix:"dojoxSketchIcon",itemGroup:"toolsGroup",button:null,queryCommand:null,shape:"",useDefaultCommand:true,buttonClass:dijit.form.ToggleButton,_initButton:function(){
+if(this.shape.length){
+var _2=this.iconClassPrefix+" "+this.iconClassPrefix+this.shape.charAt(0).toUpperCase()+this.shape.substr(1);
+if(!this.button){
+var _3={label:this.shape,showLabel:false,iconClass:_2,dropDown:this.dropDown,tabIndex:"-1"};
+this.button=new this.buttonClass(_3);
+this.connect(this.button,"onClick","activate");
+}
+}
+},attr:function(_4,_5){
+return this.button.attr(_4,_5);
+},onActivate:function(){
+},activate:function(e){
+this.onActivate();
+this.figure.setTool(this);
+this.attr("checked",true);
+},onMouseDown:function(e){
+},onMouseMove:function(e){
+},onMouseUp:function(e){
+},destroy:function(f){
+dojo.forEach(this._connects,dojo.disconnect);
+},connect:function(o,f,tf){
+this._connects.push(dojo.connect(o,f,this,tf));
+},setFigure:function(_6){
+this.figure=_6;
+},setToolbar:function(_7){
+this._initButton();
+if(this.button){
+_7.addChild(this.button);
+}
+if(this.itemGroup){
+_7.addGroupItem(this,this.itemGroup);
+}
+}});
+}
diff --git a/js/dojo/dojox/sketch/resources/images/icons.gif b/js/dojo/dojox/sketch/resources/images/icons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ab33b0aefd238b5738e86049decfbd1c87c79545
GIT binary patch
literal 600
zc${<hbhEHb6kwRha8-@L#l@wgqvPGXcX#jJJ#*&F?%liR&71f7^=o5e<MQ(IRjXEY
zbY#t(S$^isJQo+!b?esMy}KqY&0kkn*U8Dr(9rP8l`Ah^yr`?I6BHC|Y;3%A>5`I?
zQh9mIyLUUEJ$qJMTr4RmxoTC*|NqAr7#L>GoSBxE_W%EX2I>LDpDc_F3~CHIAP&e+
z3~c`$CKq_<NcEpsvT=#dw0Qw9Cf<|@TD@#VS(j+s>RTC~ZmVb?ezvaaY~JqsYK~0W
z4h*ZlUW}c2eY$%?wP$TpGe=!TS!_{3Z(sie7gm*6R^=(7)27dCnC&&IfqDMi8J@G2
zE}Q2&dE(l2zD!yC>{)DEVz+JG9<g)BZWbnH77w<KYQ<cKJ^0la8P2WnU_6_kdcjwP
znfc=SyZ1Z~911;g%JbZH-^-U%uQA+ly?J|`%9k(qzyFAM_|)^s%k%G6t#~|n>0N7K
z_8CX5D-JMBYvY#<+o`beR6Ea4qbwOFhDIqC)?Ex7nkn}uPIUew$r+$@ZD)fUOHP1U
zK^K!goByPk4wk1Dr98)G2?%W6n6aHpXo}AU1(qWmCIM~%0*e$gCvnR4&B$4FN#;Pa
zOV+%TD_fRd+&safW5M<?U30;L$ESLig}sZZD3UH|xWJGnxLd}h<%PHTJ0|va$u&o_
mBaSrfsDJF%F`>e6;w~i#hlT|=J_(#D`}-)>+bUjw!5RRInem4J
diff --git a/js/dojo/dojox/sketch/resources/sketch.css b/js/dojo/dojox/sketch/resources/sketch.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sketch/resources/sketch.css
@@ -0,0 +1,17 @@
+.dojoxSketchIcon{
+ background-repeat:no-repeat;
+ height:16px;
+ min-width:16px;
+ text-align:center;
+ width:16px;
+}
+.dojoxSketchIcon { background-image:url(images/icons.gif); }
+.ShowCallouts{ background-position:0px 0px; }
+.PreviousCallout{ background-position:0px -16px; }
+.NextCallout{ background-position:0px -32px; }
+.dojoxSketchIconLead{ background-position:0px -48px; }
+.dojoxSketchIconUnderline{ background-position:0px -64px; }
+.dojoxSketchIconSingleArrow{ background-position:0px -80px; }
+.dojoxSketchIconBrace{ background-position:0px -96px; }
+.dojoxSketchIconDoubleArrow{ background-position:0px -112px; }
+.dojoxSketchIconPreexisting{ background-position:0px -128px; }
diff --git a/js/dojo/dojox/sql/LICENSE b/js/dojo/dojox/sql/LICENSE
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sql/LICENSE
@@ -0,0 +1,9 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+_crypto.js - internally uses AES algorithm
+ * AES algorithm copyright Chris Veness (CLA signed and permission given to use code under BSD license)
+ Taken from http://www.movable-type.co.uk/scripts/aes.html
diff --git a/js/dojo/dojox/sql/README b/js/dojo/dojox/sql/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sql/README
@@ -0,0 +1,32 @@
+-------------------------------------------------------------------------------
+dojox.sql
+-------------------------------------------------------------------------------
+Version X.XXX
+Release date: MM/DD/YYYY
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Brad Neuberg
+-------------------------------------------------------------------------------
+Project description
+
+Code to interface with the Google Gears-specific SQL engine, used
+by dojox.storage and dojox.off.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Google Gears (gears.google.com)
+-------------------------------------------------------------------------------
+Documentation
+
+TBD
+-------------------------------------------------------------------------------
+Installation instructions
+
+TBD
+-------------------------------------------------------------------------------
+Additional Notes
+
+We should consider relocating crypto code to dojox.encoding
diff --git a/js/dojo/dojox/sql/_base.js b/js/dojo/dojox/sql/_base.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sql/_base.js
@@ -0,0 +1,330 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sql._base"]){
+dojo._hasResource["dojox.sql._base"]=true;
+dojo.provide("dojox.sql._base");
+dojo.require("dojox.sql._crypto");
+dojo.mixin(dojox.sql,{dbName:null,debug:(dojo.exists("dojox.sql.debug")?dojox.sql.debug:false),open:function(_1){
+if(this._dbOpen&&(!_1||_1==this.dbName)){
+return;
+}
+if(!this.dbName){
+this.dbName="dot_store_"+window.location.href.replace(/[^0-9A-Za-z_]/g,"_");
+if(this.dbName.length>63){
+this.dbName=this.dbName.substring(0,63);
+}
+}
+if(!_1){
+_1=this.dbName;
+}
+try{
+this._initDb();
+this.db.open(_1);
+this._dbOpen=true;
+}
+catch(exp){
+throw exp.message||exp;
+}
+},close:function(_2){
+if(dojo.isIE){
+return;
+}
+if(!this._dbOpen&&(!_2||_2==this.dbName)){
+return;
+}
+if(!_2){
+_2=this.dbName;
+}
+try{
+this.db.close(_2);
+this._dbOpen=false;
+}
+catch(exp){
+throw exp.message||exp;
+}
+},_exec:function(_3){
+try{
+this._initDb();
+if(!this._dbOpen){
+this.open();
+this._autoClose=true;
+}
+var _4=null;
+var _5=null;
+var _6=null;
+var _7=dojo._toArray(_3);
+_4=_7.splice(0,1)[0];
+if(this._needsEncrypt(_4)||this._needsDecrypt(_4)){
+_5=_7.splice(_7.length-1,1)[0];
+_6=_7.splice(_7.length-1,1)[0];
+}
+if(this.debug){
+this._printDebugSQL(_4,_7);
+}
+var _8;
+if(this._needsEncrypt(_4)){
+_8=new dojox.sql._SQLCrypto("encrypt",_4,_6,_7,_5);
+return null;
+}else{
+if(this._needsDecrypt(_4)){
+_8=new dojox.sql._SQLCrypto("decrypt",_4,_6,_7,_5);
+return null;
+}
+}
+var rs=this.db.execute(_4,_7);
+rs=this._normalizeResults(rs);
+if(this._autoClose){
+this.close();
+}
+return rs;
+}
+catch(exp){
+exp=exp.message||exp;
+if(this._autoClose){
+try{
+this.close();
+}
+catch(e){
+}
+}
+throw exp;
+}
+return null;
+},_initDb:function(){
+if(!this.db){
+try{
+this.db=google.gears.factory.create("beta.database","1.0");
+}
+catch(exp){
+dojo.setObject("google.gears.denied",true);
+if(dojox.off){
+dojox.off.onFrameworkEvent("coreOperationFailed");
+}
+throw "Google Gears must be allowed to run";
+}
+}
+},_printDebugSQL:function(_9,_a){
+var _b="dojox.sql(\""+_9+"\"";
+for(var i=0;i<_a.length;i++){
+if(typeof _a[i]=="string"){
+_b+=", \""+_a[i]+"\"";
+}else{
+_b+=", "+_a[i];
+}
+}
+_b+=")";
+},_normalizeResults:function(rs){
+var _c=[];
+if(!rs){
+return [];
+}
+while(rs.isValidRow()){
+var _d={};
+for(var i=0;i<rs.fieldCount();i++){
+var _e=rs.fieldName(i);
+var _f=rs.field(i);
+_d[_e]=_f;
+}
+_c.push(_d);
+rs.next();
+}
+rs.close();
+return _c;
+},_needsEncrypt:function(sql){
+return /encrypt\([^\)]*\)/i.test(sql);
+},_needsDecrypt:function(sql){
+return /decrypt\([^\)]*\)/i.test(sql);
+}});
+dojo.declare("dojox.sql._SQLCrypto",null,{constructor:function(_10,sql,_11,_12,_13){
+if(_10=="encrypt"){
+this._execEncryptSQL(sql,_11,_12,_13);
+}else{
+this._execDecryptSQL(sql,_11,_12,_13);
+}
+},_execEncryptSQL:function(sql,_14,_15,_16){
+var _17=this._stripCryptoSQL(sql);
+var _18=this._flagEncryptedArgs(sql,_15);
+var _19=this;
+this._encrypt(_17,_14,_15,_18,function(_1a){
+var _1b=false;
+var _1c=[];
+var exp=null;
+try{
+_1c=dojox.sql.db.execute(_17,_1a);
+}
+catch(execError){
+_1b=true;
+exp=execError.message||execError;
+}
+if(exp!=null){
+if(dojox.sql._autoClose){
+try{
+dojox.sql.close();
+}
+catch(e){
+}
+}
+_16(null,true,exp.toString());
+return;
+}
+_1c=dojox.sql._normalizeResults(_1c);
+if(dojox.sql._autoClose){
+dojox.sql.close();
+}
+if(dojox.sql._needsDecrypt(sql)){
+var _1d=_19._determineDecryptedColumns(sql);
+_19._decrypt(_1c,_1d,_14,function(_1e){
+_16(_1e,false,null);
+});
+}else{
+_16(_1c,false,null);
+}
+});
+},_execDecryptSQL:function(sql,_1f,_20,_21){
+var _22=this._stripCryptoSQL(sql);
+var _23=this._determineDecryptedColumns(sql);
+var _24=false;
+var _25=[];
+var exp=null;
+try{
+_25=dojox.sql.db.execute(_22,_20);
+}
+catch(execError){
+_24=true;
+exp=execError.message||execError;
+}
+if(exp!=null){
+if(dojox.sql._autoClose){
+try{
+dojox.sql.close();
+}
+catch(e){
+}
+}
+_21(_25,true,exp.toString());
+return;
+}
+_25=dojox.sql._normalizeResults(_25);
+if(dojox.sql._autoClose){
+dojox.sql.close();
+}
+this._decrypt(_25,_23,_1f,function(_26){
+_21(_26,false,null);
+});
+},_encrypt:function(sql,_27,_28,_29,_2a){
+this._totalCrypto=0;
+this._finishedCrypto=0;
+this._finishedSpawningCrypto=false;
+this._finalArgs=_28;
+for(var i=0;i<_28.length;i++){
+if(_29[i]){
+var _2b=_28[i];
+var _2c=i;
+this._totalCrypto++;
+dojox.sql._crypto.encrypt(_2b,_27,dojo.hitch(this,function(_2d){
+this._finalArgs[_2c]=_2d;
+this._finishedCrypto++;
+if(this._finishedCrypto>=this._totalCrypto&&this._finishedSpawningCrypto){
+_2a(this._finalArgs);
+}
+}));
+}
+}
+this._finishedSpawningCrypto=true;
+},_decrypt:function(_2e,_2f,_30,_31){
+this._totalCrypto=0;
+this._finishedCrypto=0;
+this._finishedSpawningCrypto=false;
+this._finalResultSet=_2e;
+for(var i=0;i<_2e.length;i++){
+var row=_2e[i];
+for(var _32 in row){
+if(_2f=="*"||_2f[_32]){
+this._totalCrypto++;
+var _33=row[_32];
+this._decryptSingleColumn(_32,_33,_30,i,function(_34){
+_31(_34);
+});
+}
+}
+}
+this._finishedSpawningCrypto=true;
+},_stripCryptoSQL:function(sql){
+sql=sql.replace(/DECRYPT\(\*\)/ig,"*");
+var _35=sql.match(/ENCRYPT\([^\)]*\)/ig);
+if(_35!=null){
+for(var i=0;i<_35.length;i++){
+var _36=_35[i];
+var _37=_36.match(/ENCRYPT\(([^\)]*)\)/i)[1];
+sql=sql.replace(_36,_37);
+}
+}
+_35=sql.match(/DECRYPT\([^\)]*\)/ig);
+if(_35!=null){
+for(i=0;i<_35.length;i++){
+var _38=_35[i];
+var _39=_38.match(/DECRYPT\(([^\)]*)\)/i)[1];
+sql=sql.replace(_38,_39);
+}
+}
+return sql;
+},_flagEncryptedArgs:function(sql,_3a){
+var _3b=new RegExp(/([\"][^\"]*\?[^\"]*[\"])|([\'][^\']*\?[^\']*[\'])|(\?)/ig);
+var _3c;
+var _3d=0;
+var _3e=[];
+while((_3c=_3b.exec(sql))!=null){
+var _3f=RegExp.lastMatch+"";
+if(/^[\"\']/.test(_3f)){
+continue;
+}
+var _40=false;
+if(/ENCRYPT\([^\)]*$/i.test(RegExp.leftContext)){
+_40=true;
+}
+_3e[_3d]=_40;
+_3d++;
+}
+return _3e;
+},_determineDecryptedColumns:function(sql){
+var _41={};
+if(/DECRYPT\(\*\)/i.test(sql)){
+_41="*";
+}else{
+var _42=/DECRYPT\((?:\s*\w*\s*\,?)*\)/ig;
+var _43=_42.exec(sql);
+while(_43){
+var _44=new String(RegExp.lastMatch);
+var _45=_44.replace(/DECRYPT\(/i,"");
+_45=_45.replace(/\)/,"");
+_45=_45.split(/\s*,\s*/);
+dojo.forEach(_45,function(_46){
+if(/\s*\w* AS (\w*)/i.test(_46)){
+_46=_46.match(/\s*\w* AS (\w*)/i)[1];
+}
+_41[_46]=true;
+});
+_43=_42.exec(sql);
+}
+}
+return _41;
+},_decryptSingleColumn:function(_47,_48,_49,_4a,_4b){
+dojox.sql._crypto.decrypt(_48,_49,dojo.hitch(this,function(_4c){
+this._finalResultSet[_4a][_47]=_4c;
+this._finishedCrypto++;
+if(this._finishedCrypto>=this._totalCrypto&&this._finishedSpawningCrypto){
+_4b(this._finalResultSet);
+}
+}));
+}});
+(function(){
+var _4d=dojox.sql;
+dojox.sql=new Function("return dojox.sql._exec(arguments);");
+dojo.mixin(dojox.sql,_4d);
+})();
+}
diff --git a/js/dojo/dojox/sql/_crypto.js b/js/dojo/dojox/sql/_crypto.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/sql/_crypto.js
@@ -0,0 +1,293 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sql._crypto"]){
+dojo._hasResource["dojox.sql._crypto"]=true;
+dojo.provide("dojox.sql._crypto");
+dojo.mixin(dojox.sql._crypto,{_POOL_SIZE:100,encrypt:function(_1,_2,_3){
+this._initWorkerPool();
+var _4={plaintext:_1,password:_2};
+_4=dojo.toJson(_4);
+_4="encr:"+String(_4);
+this._assignWork(_4,_3);
+},decrypt:function(_5,_6,_7){
+this._initWorkerPool();
+var _8={ciphertext:_5,password:_6};
+_8=dojo.toJson(_8);
+_8="decr:"+String(_8);
+this._assignWork(_8,_7);
+},_initWorkerPool:function(){
+if(!this._manager){
+try{
+this._manager=google.gears.factory.create("beta.workerpool","1.0");
+this._unemployed=[];
+this._employed={};
+this._handleMessage=[];
+var _9=this;
+this._manager.onmessage=function(_a,_b){
+var _c=_9._employed["_"+_b];
+_9._employed["_"+_b]=undefined;
+_9._unemployed.push("_"+_b);
+if(_9._handleMessage.length){
+var _d=_9._handleMessage.shift();
+_9._assignWork(_d.msg,_d.callback);
+}
+_c(_a);
+};
+var _e="function _workerInit(){"+"gearsWorkerPool.onmessage = "+String(this._workerHandler)+";"+"}";
+var _f=_e+" _workerInit();";
+for(var i=0;i<this._POOL_SIZE;i++){
+this._unemployed.push("_"+this._manager.createWorker(_f));
+}
+}
+catch(exp){
+throw exp.message||exp;
+}
+}
+},_assignWork:function(msg,_10){
+if(!this._handleMessage.length&&this._unemployed.length){
+var _11=this._unemployed.shift().substring(1);
+this._employed["_"+_11]=_10;
+this._manager.sendMessage(msg,parseInt(_11,10));
+}else{
+this._handleMessage={msg:msg,callback:_10};
+}
+},_workerHandler:function(msg,_12){
+var _13=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];
+var _14=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];
+function _15(_16,w){
+var Nb=4;
+var Nr=w.length/Nb-1;
+var _17=[[],[],[],[]];
+for(var i=0;i<4*Nb;i++){
+_17[i%4][Math.floor(i/4)]=_16[i];
+}
+_17=_18(_17,w,0,Nb);
+for(var _19=1;_19<Nr;_19++){
+_17=_1a(_17,Nb);
+_17=_1b(_17,Nb);
+_17=_1c(_17,Nb);
+_17=_18(_17,w,_19,Nb);
+}
+_17=_1a(_17,Nb);
+_17=_1b(_17,Nb);
+_17=_18(_17,w,Nr,Nb);
+var _1d=new Array(4*Nb);
+for(var i=0;i<4*Nb;i++){
+_1d[i]=_17[i%4][Math.floor(i/4)];
+}
+return _1d;
+};
+function _1a(s,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+s[r][c]=_13[s[r][c]];
+}
+}
+return s;
+};
+function _1b(s,Nb){
+var t=new Array(4);
+for(var r=1;r<4;r++){
+for(var c=0;c<4;c++){
+t[c]=s[r][(c+r)%Nb];
+}
+for(var c=0;c<4;c++){
+s[r][c]=t[c];
+}
+}
+return s;
+};
+function _1c(s,Nb){
+for(var c=0;c<4;c++){
+var a=new Array(4);
+var b=new Array(4);
+for(var i=0;i<4;i++){
+a[i]=s[i][c];
+b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1;
+}
+s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3];
+s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3];
+s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3];
+s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3];
+}
+return s;
+};
+function _18(_1e,w,rnd,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+_1e[r][c]^=w[rnd*4+c][r];
+}
+}
+return _1e;
+};
+function _1f(key){
+var Nb=4;
+var Nk=key.length/4;
+var Nr=Nk+6;
+var w=new Array(Nb*(Nr+1));
+var _20=new Array(4);
+for(var i=0;i<Nk;i++){
+var r=[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]];
+w[i]=r;
+}
+for(var i=Nk;i<(Nb*(Nr+1));i++){
+w[i]=new Array(4);
+for(var t=0;t<4;t++){
+_20[t]=w[i-1][t];
+}
+if(i%Nk==0){
+_20=_21(_22(_20));
+for(var t=0;t<4;t++){
+_20[t]^=_14[i/Nk][t];
+}
+}else{
+if(Nk>6&&i%Nk==4){
+_20=_21(_20);
+}
+}
+for(var t=0;t<4;t++){
+w[i][t]=w[i-Nk][t]^_20[t];
+}
+}
+return w;
+};
+function _21(w){
+for(var i=0;i<4;i++){
+w[i]=_13[w[i]];
+}
+return w;
+};
+function _22(w){
+w[4]=w[0];
+for(var i=0;i<4;i++){
+w[i]=w[i+1];
+}
+return w;
+};
+function _23(_24,_25,_26){
+if(!(_26==128||_26==192||_26==256)){
+return "";
+}
+var _27=_26/8;
+var _28=new Array(_27);
+for(var i=0;i<_27;i++){
+_28[i]=_25.charCodeAt(i)&255;
+}
+var key=_15(_28,_1f(_28));
+key=key.concat(key.slice(0,_27-16));
+var _29=16;
+var _2a=new Array(_29);
+var _2b=(new Date()).getTime();
+for(var i=0;i<4;i++){
+_2a[i]=(_2b>>>i*8)&255;
+}
+for(var i=0;i<4;i++){
+_2a[i+4]=(_2b/4294967296>>>i*8)&255;
+}
+var _2c=_1f(key);
+var _2d=Math.ceil(_24.length/_29);
+var _2e=new Array(_2d);
+for(var b=0;b<_2d;b++){
+for(var c=0;c<4;c++){
+_2a[15-c]=(b>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_2a[15-c-4]=(b/4294967296>>>c*8);
+}
+var _2f=_15(_2a,_2c);
+var _30=b<_2d-1?_29:(_24.length-1)%_29+1;
+var ct="";
+for(var i=0;i<_30;i++){
+var _31=_24.charCodeAt(b*_29+i);
+var _32=_31^_2f[i];
+ct+=String.fromCharCode(_32);
+}
+_2e[b]=_33(ct);
+}
+var _34="";
+for(var i=0;i<8;i++){
+_34+=String.fromCharCode(_2a[i]);
+}
+_34=_33(_34);
+return _34+"-"+_2e.join("-");
+};
+function _35(_36,_37,_38){
+if(!(_38==128||_38==192||_38==256)){
+return "";
+}
+var _39=_38/8;
+var _3a=new Array(_39);
+for(var i=0;i<_39;i++){
+_3a[i]=_37.charCodeAt(i)&255;
+}
+var _3b=_1f(_3a);
+var key=_15(_3a,_3b);
+key=key.concat(key.slice(0,_39-16));
+var _3c=_1f(key);
+_36=_36.split("-");
+var _3d=16;
+var _3e=new Array(_3d);
+var _3f=_40(_36[0]);
+for(var i=0;i<8;i++){
+_3e[i]=_3f.charCodeAt(i);
+}
+var _41=new Array(_36.length-1);
+for(var b=1;b<_36.length;b++){
+for(var c=0;c<4;c++){
+_3e[15-c]=((b-1)>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_3e[15-c-4]=((b/4294967296-1)>>>c*8)&255;
+}
+var _42=_15(_3e,_3c);
+_36[b]=_40(_36[b]);
+var pt="";
+for(var i=0;i<_36[b].length;i++){
+var _43=_36[b].charCodeAt(i);
+var _44=_43^_42[i];
+pt+=String.fromCharCode(_44);
+}
+_41[b-1]=pt;
+}
+return _41.join("");
+};
+function _33(str){
+return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){
+return "!"+c.charCodeAt(0)+"!";
+});
+};
+function _40(str){
+return str.replace(/!\d\d?\d?!/g,function(c){
+return String.fromCharCode(c.slice(1,-1));
+});
+};
+function _45(_46,_47){
+return _23(_46,_47,256);
+};
+function _48(_49,_4a){
+return _35(_49,_4a,256);
+};
+var cmd=msg.substr(0,4);
+var arg=msg.substr(5);
+if(cmd=="encr"){
+arg=eval("("+arg+")");
+var _4b=arg.plaintext;
+var _4c=arg.password;
+var _4d=_45(_4b,_4c);
+gearsWorkerPool.sendMessage(String(_4d),_12);
+}else{
+if(cmd=="decr"){
+arg=eval("("+arg+")");
+var _4e=arg.ciphertext;
+var _4c=arg.password;
+var _4d=_48(_4e,_4c);
+gearsWorkerPool.sendMessage(String(_4d),_12);
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/storage/AirDBStorageProvider.js b/js/dojo/dojox/storage/AirDBStorageProvider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/storage/AirDBStorageProvider.js
@@ -0,0 +1,177 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirDBStorageProvider"]){
+dojo._hasResource["dojox.storage.AirDBStorageProvider"]=true;
+dojo.provide("dojox.storage.AirDBStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.File=window.runtime.flash.filesystem.File;
+_1.SQLConnection=window.runtime.flash.data.SQLConnection;
+_1.SQLStatement=window.runtime.flash.data.SQLStatement;
+dojo.declare("dojox.storage.AirDBStorageProvider",[dojox.storage.Provider],{DATABASE_FILE:"dojo.db",TABLE_NAME:"__DOJO_STORAGE",initialized:false,_db:null,initialize:function(){
+this.initialized=false;
+try{
+this._db=new _1.SQLConnection();
+this._db.open(_1.File.applicationStorageDirectory.resolvePath(this.DATABASE_FILE));
+this._sql("CREATE TABLE IF NOT EXISTS "+this.TABLE_NAME+"(namespace TEXT, key TEXT, value TEXT)");
+this._sql("CREATE UNIQUE INDEX IF NOT EXISTS namespace_key_index ON "+this.TABLE_NAME+" (namespace, key)");
+this.initialized=true;
+}
+catch(e){
+}
+dojox.storage.manager.loaded();
+},_sql:function(_2,_3){
+var _4=new _1.SQLStatement();
+_4.sqlConnection=this._db;
+_4.text=_2;
+if(_3){
+for(var _5 in _3){
+_4.parameters[_5]=_3[_5];
+}
+}
+_4.execute();
+return _4.getResult();
+},_beginTransaction:function(){
+this._db.begin();
+},_commitTransaction:function(){
+this._db.commit();
+},isAvailable:function(){
+return true;
+},put:function(_6,_7,_8,_9){
+if(this.isValidKey(_6)==false){
+throw new Error("Invalid key given: "+_6);
+}
+_9=_9||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_9)==false){
+throw new Error("Invalid namespace given: "+_9);
+}
+try{
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_9,":key":_6});
+this._sql("INSERT INTO "+this.TABLE_NAME+" VALUES (:namespace, :key, :value)",{":namespace":_9,":key":_6,":value":_7});
+}
+catch(e){
+_8(this.FAILED,_6,e.toString());
+return;
+}
+if(_8){
+_8(this.SUCCESS,_6,null,_9);
+}
+},get:function(_a,_b){
+if(this.isValidKey(_a)==false){
+throw new Error("Invalid key given: "+_a);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+var _c=this._sql("SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_b,":key":_a});
+if(_c.data&&_c.data.length){
+return _c.data[0].value;
+}
+return null;
+},getNamespaces:function(){
+var _d=[this.DEFAULT_NAMESPACE];
+var rs=this._sql("SELECT namespace FROM "+this.TABLE_NAME+" DESC GROUP BY namespace");
+if(rs.data){
+for(var i=0;i<rs.data.length;i++){
+if(rs.data[i].namespace!=this.DEFAULT_NAMESPACE){
+_d.push(rs.data[i].namespace);
+}
+}
+}
+return _d;
+},getKeys:function(_e){
+_e=_e||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_e)==false){
+throw new Error("Invalid namespace given: "+_e);
+}
+var _f=[];
+var rs=this._sql("SELECT key FROM "+this.TABLE_NAME+" WHERE namespace = :namespace",{":namespace":_e});
+if(rs.data){
+for(var i=0;i<rs.data.length;i++){
+_f.push(rs.data[i].key);
+}
+}
+return _f;
+},clear:function(_10){
+if(this.isValidKey(_10)==false){
+throw new Error("Invalid namespace given: "+_10);
+}
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace",{":namespace":_10});
+},remove:function(key,_11){
+_11=_11||this.DEFAULT_NAMESPACE;
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_11,":key":key});
+},putMultiple:function(_12,_13,_14,_15){
+if(this.isValidKeyArray(_12)===false||!_13 instanceof Array||_12.length!=_13.length){
+throw new Error("Invalid arguments: keys = ["+_12+"], values = ["+_13+"]");
+}
+if(_15==null||typeof _15=="undefined"){
+_15=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_15)==false){
+throw new Error("Invalid namespace given: "+_15);
+}
+this._statusHandler=_14;
+try{
+this._beginTransaction();
+for(var i=0;i<_12.length;i++){
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_15,":key":_12[i]});
+this._sql("INSERT INTO "+this.TABLE_NAME+" VALUES (:namespace, :key, :value)",{":namespace":_15,":key":_12[i],":value":_13[i]});
+}
+this._commitTransaction();
+}
+catch(e){
+if(_14){
+_14(this.FAILED,_12,e.toString(),_15);
+}
+return;
+}
+if(_14){
+_14(this.SUCCESS,_12,null);
+}
+},getMultiple:function(_16,_17){
+if(this.isValidKeyArray(_16)===false){
+throw new Error("Invalid key array given: "+_16);
+}
+if(_17==null||typeof _17=="undefined"){
+_17=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_17)==false){
+throw new Error("Invalid namespace given: "+_17);
+}
+var _18=[];
+for(var i=0;i<_16.length;i++){
+var _19=this._sql("SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_17,":key":_16[i]});
+_18[i]=_19.data&&_19.data.length?_19.data[0].value:null;
+}
+return _18;
+},removeMultiple:function(_1a,_1b){
+_1b=_1b||this.DEFAULT_NAMESPACE;
+this._beginTransaction();
+for(var i=0;i<_1a.length;i++){
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = namespace = :namespace AND key = :key",{":namespace":_1b,":key":_1a[i]});
+}
+this._commitTransaction();
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirDBStorageProvider",new dojox.storage.AirDBStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
diff --git a/js/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js b/js/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js
@@ -0,0 +1,168 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirEncryptedLocalStorageProvider"]){
+dojo._hasResource["dojox.storage.AirEncryptedLocalStorageProvider"]=true;
+dojo.provide("dojox.storage.AirEncryptedLocalStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.ByteArray=window.runtime.flash.utils.ByteArray;
+_1.EncryptedLocalStore=window.runtime.flash.data.EncryptedLocalStore,dojo.declare("dojox.storage.AirEncryptedLocalStorageProvider",[dojox.storage.Provider],{initialize:function(){
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+return true;
+},_getItem:function(_2){
+var _3=_1.EncryptedLocalStore.getItem("__dojo_"+_2);
+return _3?_3.readUTFBytes(_3.length):"";
+},_setItem:function(_4,_5){
+var _6=new _1.ByteArray();
+_6.writeUTFBytes(_5);
+_1.EncryptedLocalStore.setItem("__dojo_"+_4,_6);
+},_removeItem:function(_7){
+_1.EncryptedLocalStore.removeItem("__dojo_"+_7);
+},put:function(_8,_9,_a,_b){
+if(this.isValidKey(_8)==false){
+throw new Error("Invalid key given: "+_8);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_b)==false){
+throw new Error("Invalid namespace given: "+_b);
+}
+try{
+var _c=this._getItem("namespaces")||"|";
+if(_c.indexOf("|"+_b+"|")==-1){
+this._setItem("namespaces",_c+_b+"|");
+}
+var _d=this._getItem(_b+"_keys")||"|";
+if(_d.indexOf("|"+_8+"|")==-1){
+this._setItem(_b+"_keys",_d+_8+"|");
+}
+this._setItem("_"+_b+"_"+_8,_9);
+}
+catch(e){
+_a(this.FAILED,_8,e.toString(),_b);
+return;
+}
+if(_a){
+_a(this.SUCCESS,_8,null,_b);
+}
+},get:function(_e,_f){
+if(this.isValidKey(_e)==false){
+throw new Error("Invalid key given: "+_e);
+}
+_f=_f||this.DEFAULT_NAMESPACE;
+return this._getItem("_"+_f+"_"+_e);
+},getNamespaces:function(){
+var _10=[this.DEFAULT_NAMESPACE];
+var _11=(this._getItem("namespaces")||"|").split("|");
+for(var i=0;i<_11.length;i++){
+if(_11[i].length&&_11[i]!=this.DEFAULT_NAMESPACE){
+_10.push(_11[i]);
+}
+}
+return _10;
+},getKeys:function(_12){
+_12=_12||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_12)==false){
+throw new Error("Invalid namespace given: "+_12);
+}
+var _13=[];
+var _14=(this._getItem(_12+"_keys")||"|").split("|");
+for(var i=0;i<_14.length;i++){
+if(_14[i].length){
+_13.push(_14[i]);
+}
+}
+return _13;
+},clear:function(_15){
+if(this.isValidKey(_15)==false){
+throw new Error("Invalid namespace given: "+_15);
+}
+var _16=this._getItem("namespaces")||"|";
+if(_16.indexOf("|"+_15+"|")!=-1){
+this._setItem("namespaces",_16.replace("|"+_15+"|","|"));
+}
+var _17=(this._getItem(_15+"_keys")||"|").split("|");
+for(var i=0;i<_17.length;i++){
+if(_17[i].length){
+this._removeItem(_15+"_"+_17[i]);
+}
+}
+this._removeItem(_15+"_keys");
+},remove:function(key,_18){
+_18=_18||this.DEFAULT_NAMESPACE;
+var _19=this._getItem(_18+"_keys")||"|";
+if(_19.indexOf("|"+key+"|")!=-1){
+this._setItem(_18+"_keys",_19.replace("|"+key+"|","|"));
+}
+this._removeItem("_"+_18+"_"+key);
+},putMultiple:function(_1a,_1b,_1c,_1d){
+if(this.isValidKeyArray(_1a)===false||!_1b instanceof Array||_1a.length!=_1b.length){
+throw new Error("Invalid arguments: keys = ["+_1a+"], values = ["+_1b+"]");
+}
+if(_1d==null||typeof _1d=="undefined"){
+_1d=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1d)==false){
+throw new Error("Invalid namespace given: "+_1d);
+}
+this._statusHandler=_1c;
+try{
+for(var i=0;i<_1a.length;i++){
+this.put(_1a[i],_1b[i],null,_1d);
+}
+}
+catch(e){
+if(_1c){
+_1c(this.FAILED,_1a,e.toString(),_1d);
+}
+return;
+}
+if(_1c){
+_1c(this.SUCCESS,_1a,null);
+}
+},getMultiple:function(_1e,_1f){
+if(this.isValidKeyArray(_1e)===false){
+throw new Error("Invalid key array given: "+_1e);
+}
+if(_1f==null||typeof _1f=="undefined"){
+_1f=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1f)==false){
+throw new Error("Invalid namespace given: "+_1f);
+}
+var _20=[];
+for(var i=0;i<_1e.length;i++){
+_20[i]=this.get(_1e[i],_1f);
+}
+return _20;
+},removeMultiple:function(_21,_22){
+_22=_22||this.DEFAULT_NAMESPACE;
+for(var i=0;i<_21.length;i++){
+this.remove(_21[i],_22);
+}
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirEncryptedLocalStorageProvider",new dojox.storage.AirEncryptedLocalStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
diff --git a/js/dojo/dojox/storage/AirFileStorageProvider.js b/js/dojo/dojox/storage/AirFileStorageProvider.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/storage/AirFileStorageProvider.js
@@ -0,0 +1,174 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirFileStorageProvider"]){
+dojo._hasResource["dojox.storage.AirFileStorageProvider"]=true;
+dojo.provide("dojox.storage.AirFileStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.File=window.runtime.flash.filesystem.File;
+_1.FileStream=window.runtime.flash.filesystem.FileStream;
+_1.FileMode=window.runtime.flash.filesystem.FileMode;
+dojo.declare("dojox.storage.AirFileStorageProvider",[dojox.storage.Provider],{initialized:false,_storagePath:"__DOJO_STORAGE/",initialize:function(){
+this.initialized=false;
+try{
+var _2=_1.File.applicationStorageDirectory.resolvePath(this._storagePath);
+if(!_2.exists){
+_2.createDirectory();
+}
+this.initialized=true;
+}
+catch(e){
+}
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+return true;
+},put:function(_3,_4,_5,_6){
+if(this.isValidKey(_3)==false){
+throw new Error("Invalid key given: "+_3);
+}
+_6=_6||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_6)==false){
+throw new Error("Invalid namespace given: "+_6);
+}
+try{
+this.remove(_3,_6);
+var _7=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_6);
+if(!_7.exists){
+_7.createDirectory();
+}
+var _8=_7.resolvePath(_3);
+var _9=new _1.FileStream();
+_9.open(_8,_1.FileMode.WRITE);
+_9.writeObject(_4);
+_9.close();
+}
+catch(e){
+_5(this.FAILED,_3,e.toString(),_6);
+return;
+}
+if(_5){
+_5(this.SUCCESS,_3,null,_6);
+}
+},get:function(_a,_b){
+if(this.isValidKey(_a)==false){
+throw new Error("Invalid key given: "+_a);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+var _c=null;
+var _d=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_b+"/"+_a);
+if(_d.exists&&!_d.isDirectory){
+var _e=new _1.FileStream();
+_e.open(_d,_1.FileMode.READ);
+_c=_e.readObject();
+_e.close();
+}
+return _c;
+},getNamespaces:function(){
+var _f=[this.DEFAULT_NAMESPACE];
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath);
+var _10=dir.getDirectoryListing(),i;
+for(i=0;i<_10.length;i++){
+if(_10[i].isDirectory&&_10[i].name!=this.DEFAULT_NAMESPACE){
+_f.push(_10[i].name);
+}
+}
+return _f;
+},getKeys:function(_11){
+_11=_11||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_11)==false){
+throw new Error("Invalid namespace given: "+_11);
+}
+var _12=[];
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_11);
+if(dir.exists&&dir.isDirectory){
+var _13=dir.getDirectoryListing(),i;
+for(i=0;i<_13.length;i++){
+_12.push(_13[i].name);
+}
+}
+return _12;
+},clear:function(_14){
+if(this.isValidKey(_14)==false){
+throw new Error("Invalid namespace given: "+_14);
+}
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_14);
+if(dir.exists&&dir.isDirectory){
+dir.deleteDirectory(true);
+}
+},remove:function(key,_15){
+_15=_15||this.DEFAULT_NAMESPACE;
+var _16=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_15+"/"+key);
+if(_16.exists&&!_16.isDirectory){
+_16.deleteFile();
+}
+},putMultiple:function(_17,_18,_19,_1a){
+if(this.isValidKeyArray(_17)===false||!_18 instanceof Array||_17.length!=_18.length){
+throw new Error("Invalid arguments: keys = ["+_17+"], values = ["+_18+"]");
+}
+if(_1a==null||typeof _1a=="undefined"){
+_1a=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1a)==false){
+throw new Error("Invalid namespace given: "+_1a);
+}
+this._statusHandler=_19;
+try{
+for(var i=0;i<_17.length;i++){
+this.put(_17[i],_18[i],null,_1a);
+}
+}
+catch(e){
+if(_19){
+_19(this.FAILED,_17,e.toString(),_1a);
+}
+return;
+}
+if(_19){
+_19(this.SUCCESS,_17,null,_1a);
+}
+},getMultiple:function(_1b,_1c){
+if(this.isValidKeyArray(_1b)===false){
+throw new Error("Invalid key array given: "+_1b);
+}
+if(_1c==null||typeof _1c=="undefined"){
+_1c=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1c)==false){
+throw new Error("Invalid namespace given: "+_1c);
+}
+var _1d=[];
+for(var i=0;i<_1b.length;i++){
+_1d[i]=this.get(_1b[i],_1c);
+}
+return _1d;
+},removeMultiple:function(_1e,_1f){
+_1f=_1f||this.DEFAULT_NAMESPACE;
+for(var i=0;i<_1e.length;i++){
+this.remove(_1e[i],_1f);
+}
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirFileStorageProvider",new dojox.storage.AirFileStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
diff --git a/js/dojo/dojox/storage/Storage.swf b/js/dojo/dojox/storage/Storage.swf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9a09f70f91e506843fc2c77aa7809abb359bbc1e
GIT binary patch
literal 3325
zc$@+K3<C2*S5pX5A^-q*+Pqm!Y}?oo9+8wp|NkVh)`^_N$;OV8ti0KuWaGq+9sk7}
zn-ZkBi*#KGv_#v=Qlyro;<yEh-kOt7h0zx6Y45!ji=GM;D0=9j*B*+ZJruq5(B6u=
z^X5JNNTQOoC~CkI`DWg{nR)Z(eQ(}NkjB3U$tpl^0+yvy{Od^p{uL7VcsO_spZHcN
zmkWC33w_^kb1U|9d-bJfIF@d1SopiAR}45Eyw}6Jy?QJyLp)1)-?Vpi6B>@~+1^pZ
zfSOhFYPwnbwgFY_Qqa8v*f+ct|9$mk!!cZU!*V^{G{G{As=M8&>K^Y3`U|~g>bs@^
zd#3IlfFZ_&n86*}_TXjJuIn`mnwH^Kbkv}9<a$OOT%*!-YTgmxF!tdJXR6v3*Xw1D
z#OF*~uNqaTFkSR&bs2wm(JQD6>Sy5~y0hP`8<yvSX;}McK-H+&Rbxf>bf_ENfn5c?
z(J+s|u!8pJ02RAl&y`VhhyKA>OOB%-L8FP*3Uxe(*|)a2RC+vj87j8r+NP1K8oSMX
za6PAH?c)qiRhq76*UMJZH1C6BG)(MN@*LO+NKCxT)VL2*dcA?qfMk02;X&}Vk6#P0
zV?i(MI4}S^d(aO%(=ZKJz-^c~FVAgsU%Ba+u&cYqwqwqtkE+JY{2sW?U7^(UwGZBB
z|6evS0=%PnSSpnaui)5?HB;Yr0Zt@PAv-$yQwjc%VjqbtH65!gK;?0Kd>>;of1-c_
zs-)pZBEvsq!7~Ft5n@hyKvmMLk$qrOvY0<f18+$!Vqb~+N@`kTBMt)gASyPg#f*@G
zvU}8C640lyXFolAv^@J6Ai|)=1he%cG#)Aj4a3whLY+p78KL_buC6o#XW6joS<cKA
zJr}Tz9Z#W6AWwqCqe;{2287|~$Jo6DmzSJ`KLS%Zqh_*bQxBY=nLm;sMNY|NCr*;w
z#z)+KY<wrX$;=-B@x`9w<dJ9Kb0f2yK{0(yj3O84o2e)V9UikD({PeP_xa6=96E-Z
zcD|TLF<+l@$7iyPEHUy0B4>*zS;?SB6eZeiLbRhuWr175c%-z<csgfi45zP;jc}1m
z@8mc~6P!#e2v46oKFji6s@2n9K@c&Q7P--(N0iVbN`dQ#qLfyTT!O%>ilVUyV`ia)
zE*Dw%U!HO=wkha)B}Q*8@Kcifk@PK?e7lgkay-Bc#f2i(-F?VXxLj4Fb=K!yK5ToR
z^T&gJpDJZAGFlqlq-8^DNGq(%wGCRlDNbKF831)ko%ZL6i@jdtp@*~?^+r66dW*p)
z+6G@qy#3%e)mvQ$e^1SIrOm4EcctA>XS&j+)v2zu+v*2hX&<T|b)|i*-swuatA5gz
zc2B+cX6If%o?!_lh0d*6ji$#o2w7|vPY-G?D2FxgfZi5?Eh(ADucXdJLa^2Eeg5KA
zlIs1KF_Sz{am?RCm_r|EoU;$qd4G(BA`8xWTubYG@kJGQC~^XJxW(HP?7)>u<Jf5i
zZFoqG!^tpfVZ%~{BWtAlV%VK6@37w#w37!RR!Eqy{QQr`4)L`vDG5FcOY<3)9dTDu
zALW6gu7p5c8A4r&DC#PCwu3K-v;KUBF}@m?3*a~U$ZF3-Tu`nWCPIX@&F#|T^2+Mw
z(ldOnEp2Z;?Sji9C=BPk1=-;DR@3xq4TM+-%-DbM?H<^NxM6#^m%C6g4c%enC&rP>
zep$kF8z|mIv{AQT7~&`BPP!uS^48eP3hBJx@+I(1*%gC4LXGwvyJ=MgnyWYlLc!H~
z!#motU(}3cv(^ZKWG**L*lO10Uh;p-RW#P#&$)+tGz4{xfKsnkHym!zQ+&12C8Y!1
zF{=69=SGEmuxTR(gwpo%@@lCB4a2H3KvP)NRyMSCSX<iITwM{sP7InW+g8cby{60I
zqiX}DFLZX`DIeR}uJ;*&Q3GxXI3>WOYu1p-HOxH-g&~Y=Q7=ah%&j3XM&Es59Fh1q
zmV!__hE!@+aN=CB0@V(5H`Eg+#P`h34kAc`dplPU{t+(y9N%u?|F?W}&1XLBUxTu?
zw6$6)EG@5=pR7J3GZ}sn>LNU^8hbSh4Im(nn7JJsx<bP}ZYR1l5^xdV`19co;D}q|
zzY=WeB~(e|LRky3pd!#AZQltsrLi=FzkJnlYTBo&f~v++djz#7mf9<*y|L6jLG6pB
z_6ur%EOkIo2V$v%f;t#W9TL=`Sn9B#4#!eQ1a%~qIx486vD7nydZwM)IxlCjWl&(q
za~z(G5h24NI_G+aVA1$`05>@gM@#36naHu>LU?RI)s9DfaA6sTJPY-Kh!sWpG@lpB
z29eYYyhYNUEC}Mr@fpI7Oh^#&zZHC0g3?!mueOuIgzt{*T!uqhB3>lor6S+<{Bwz{
zjub<nnM`aj(PRF32cMTU+W!z(eheIpPImBI33x^#tyg&~x>}JW+_>LOE8!em6G#vj
z1wW85Q~jkY<I6X6vuS`5T7L)#L6CpS-xqy@gq$gwm}!m90g9Yw+!FHAzM4R&5{ALd
zBG;_P-@z3rf1;voN|Fmg@5sE{jX+QJ_#<qAo*9DkI_^;*vlpQ#d)=fQ>q0Wr`mcf3
z$#$&~2i)|L$1OGqsZ69z;ce;Y@jwla2Wo-7Sy-t`N_~$X4GPfdi<F|$Z<_tKfDKvA
zapw^!JV)e;{^9Hgrzic0Hj+^%qMwo|w5y+P98b~#6a9o6RJeOYHiBys17WjD;sHOj
zz0XfdNrH@fw%8*p2~NFD#(Y3g_u1Q=A3r1)3zuA@h@7RSz%BUvP@E>`n2=wbb`CYx
z9?En$`wF6*AH^>P;yh~M{Fpcm;=Gd$RxH=+Zjla-@oSHS-2$PruwD!0NTD1yJ?Mr7
zL2T>6Ky<f7$WzMsH>MOx^X2Wc4!1>K%d+8o20x9bd2k33pU^S=CbY{TqtE(&@q-Wr
z1iJMcXE9AubOZ?^jHSE50+U~#7T9?~i=6odz4v&6NslaRH!2<yUB!2-U!^m{gu$8$
zgEdv)i#^2_r{V{y8?$y5C8cRR3yk9Ni)%2)2TkLkjPrgmV0ge8=HnS~{?q;;YJo}x
zU!Jm4-9!I4!p>IftjE$iPcAIa_<rgOwySRfCI#xjhkL{;3jdQ$RSee8w?DaM`zr)9
zEwxXDznl5q>n~<H+D1eH#}BaOV6*`~TC!!dKXo51Qty&8t&_IRPys8DZQzVfQXynT
zfd`DZl8vNT?*HGNzP|R8Vi6$w0dj`|L}oP~8go_K5Q}zL$W{EjzDDAcfRCS@Mgmpl
z!64Jr%Kp?2@~Ks3;Je_94kjo98>CF9>C%5=^qUkKdhLpL|C1Fz*EJAiKM)2Y07zXY
zpAJI{M;I!@JX@$;vc=c%|H>8<U9tsjXTLt}G%!sDrr%`X-MF>z`mmtMOG4m8xjiKA
zwTA?o7*b;hXyfyvp91z*r__&;|8d%qs;>uO5y29{dGD&!v4=$W)g<t(@%8bIuaC2Q
z{7tT)XrprA2Cw1#4PxPo(h6UG1D%-Sd>1hCm_hY7BM<^S`L{tJ#Ca_SfsC}n3z|KF
z7SMDS74aZJ61oy=GLes5ZHxqA@D|?t4o_pRg**JHA$L1!D6vNkrNff0aA%oExzZBl
zpF_+3z=H?gHhAP9_S^H09AFtxKRxabO63&+d&cNq>4~^kTFiHr`8NGB-(__x&)=@9
zns~dSPO`aR7gp)N)0vbY*{YiND}s`!2wtR$pcJhLwq1^%4&GE4|Es?wuC!mA`t`x+
z1u8G0ZEZF1kZU+kS>>zsVwQ?yoY{fBM%6yFSWB+1R~)-;RBJlBuYBzdYE$$!TGV-L
zn^jg}i>uz1sk~L=jH1S6TN^Fk2iPAQS6Kmb&0+Zisg5V?+G|=BuV!0hgRlM;D+oHe
zRYiplJg+e~JKNQw*+z4BmhNM@Yi5NRvuL1WSl+CAxHqdeJzEH8g~W%EN}_{;9Lyry
z#Z7c?>sQrA-8|EP=lToXtvI!YHy6DC7KXEGVT;Yzr(t@gy#^L3bKREW%3L@6(uFD$
z1<?n_FH7saJb6>zrlpdPlthxzl1M6$7P%2ku*!^BkLlp5^`CUnr1Is}LnHQTKE52~
z<*M(U{1DUujxo7XgS7XnLn0+pZ41AL)gf_Jnm;+q%SI%3)IZPi3$Q^SIq=W0Fmnfj
zsuL?4X_Us!QAW5BUgPmG*!^IV>N-+BECgma>Mi<L!|J$tew`A;dSsvC@-GDL7z;Fb
z7HWW<v%=g7Egx-Gf~jd~z9^b6YEghJYzf91X}!G5(B5{5>BllMJ%@fw^V*)3Cg(Ho
zP+rB?SC??gx1KJQmdjg98ya}*a>u_{phZkE#lj;aV$9E=60e;WGq8xC{{{d6|NjF3
HbC+V#8&++u
diff --git a/js/dojo/dojox/storage/buildFlashStorage.sh b/js/dojo/dojox/storage/buildFlashStorage.sh
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/storage/buildFlashStorage.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# TODO: FIXME: Get rid of this and hook it into Dojo's general build script
+# You must have mtasc to run this
+mtasc -trace DojoExternalInterface.trace -main -cp ../flash -swf Storage.swf -version 8 -header 215:138:10 Storage.as
diff --git a/js/dojo/dojox/storage/storage_dialog.swf b/js/dojo/dojox/storage/storage_dialog.swf
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..db6b21739c2bb7a25b7c075a7fb8d110ea4e9515
GIT binary patch
literal 26980
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
HaP+2d>$+CU
diff --git a/js/dojo/dojox/string/BidiComplex.js b/js/dojo/dojox/string/BidiComplex.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/string/BidiComplex.js
@@ -0,0 +1,246 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.string.BidiComplex"]){
+dojo._hasResource["dojox.string.BidiComplex"]=true;
+dojo.provide("dojox.string.BidiComplex");
+dojo.experimental("dojox.string.BidiComplex");
+(function(){
+var _1=[];
+dojox.string.BidiComplex.attachInput=function(_2,_3){
+_2.alt=_3;
+dojo.connect(_2,"onkeydown",this,"_ceKeyDown");
+dojo.connect(_2,"onkeyup",this,"_ceKeyUp");
+dojo.connect(_2,"oncut",this,"_ceCutText");
+dojo.connect(_2,"oncopy",this,"_ceCopyText");
+_2.value=dojox.string.BidiComplex.createDisplayString(_2.value,_2.alt);
+};
+dojox.string.BidiComplex.createDisplayString=function(_4,_5){
+_4=dojox.string.BidiComplex.stripSpecialCharacters(_4);
+var _6=dojox.string.BidiComplex._parse(_4,_5);
+var _7="‪"+_4;
+var _8=1;
+dojo.forEach(_6,function(n){
+if(n!=null){
+var _9=_7.substring(0,n+_8);
+var _a=_7.substring(n+_8,_7.length);
+_7=_9+"‎"+_a;
+_8++;
+}
+});
+return _7;
+};
+dojox.string.BidiComplex.stripSpecialCharacters=function(_b){
+return _b.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+};
+dojox.string.BidiComplex._ceKeyDown=function(_c){
+var _d=dojo.isIE?_c.srcElement:_c.target;
+_1=_d.value;
+};
+dojox.string.BidiComplex._ceKeyUp=function(_e){
+var _f="‎";
+var _10=dojo.isIE?_e.srcElement:_e.target;
+var _11=_10.value;
+var _12=_e.keyCode;
+if((_12==dojo.keys.HOME)||(_12==dojo.keys.END)||(_12==dojo.keys.SHIFT)){
+return;
+}
+var _13,_14;
+var _15=dojox.string.BidiComplex._getCaretPos(_e,_10);
+if(_15){
+_13=_15[0];
+_14=_15[1];
+}
+if(dojo.isIE){
+var _16=_13,_17=_14;
+if(_12==dojo.keys.LEFT_ARROW){
+if((_11.charAt(_14-1)==_f)&&(_13==_14)){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}
+return;
+}
+if(_12==dojo.keys.RIGHT_ARROW){
+if(_11.charAt(_14-1)==_f){
+_17=_14+1;
+if(_13==_14){
+_16=_13+1;
+}
+}
+dojox.string.BidiComplex._setSelectedRange(_10,_16,_17);
+return;
+}
+}else{
+if(_12==dojo.keys.LEFT_ARROW){
+if(_11.charAt(_14-1)==_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}
+return;
+}
+if(_12==dojo.keys.RIGHT_ARROW){
+if(_11.charAt(_14-1)==_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1);
+}
+return;
+}
+}
+var _18=dojox.string.BidiComplex.createDisplayString(_11,_10.alt);
+if(_11!=_18){
+window.status=_11+" c="+_14;
+_10.value=_18;
+if((_12==dojo.keys.DELETE)&&(_18.charAt(_14)==_f)){
+_10.value=_18.substring(0,_14)+_18.substring(_14+2,_18.length);
+}
+if(_12==dojo.keys.DELETE){
+dojox.string.BidiComplex._setSelectedRange(_10,_13,_14);
+}else{
+if(_12==dojo.keys.BACKSPACE){
+if((_1.length>=_14)&&(_1.charAt(_14-1)==_f)){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}else{
+dojox.string.BidiComplex._setSelectedRange(_10,_13,_14);
+}
+}else{
+if(_10.value.charAt(_14)!=_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1);
+}
+}
+}
+}
+};
+dojox.string.BidiComplex._processCopy=function(_19,_1a,_1b){
+if(_1a==null){
+if(dojo.isIE){
+var _1c=document.selection.createRange();
+_1a=_1c.text;
+}else{
+_1a=_19.value.substring(_19.selectionStart,_19.selectionEnd);
+}
+}
+var _1d=dojox.string.BidiComplex.stripSpecialCharacters(_1a);
+if(dojo.isIE){
+window.clipboardData.setData("Text",_1d);
+}
+return true;
+};
+dojox.string.BidiComplex._ceCopyText=function(_1e){
+if(dojo.isIE){
+_1e.returnValue=false;
+}
+return dojox.string.BidiComplex._processCopy(_1e,null,false);
+};
+dojox.string.BidiComplex._ceCutText=function(_1f){
+var ret=dojox.string.BidiComplex._processCopy(_1f,null,false);
+if(!ret){
+return false;
+}
+if(dojo.isIE){
+document.selection.clear();
+}else{
+var _20=_1f.selectionStart;
+_1f.value=_1f.value.substring(0,_20)+_1f.value.substring(_1f.selectionEnd);
+_1f.setSelectionRange(_20,_20);
+}
+return true;
+};
+dojox.string.BidiComplex._getCaretPos=function(_21,_22){
+if(dojo.isIE){
+var _23=0,_24=document.selection.createRange().duplicate(),_25=_24.duplicate(),_26=_24.text.length;
+if(_22.type=="textarea"){
+_25.moveToElementText(_22);
+}else{
+_25.expand("textedit");
+}
+while(_24.compareEndPoints("StartToStart",_25)>0){
+_24.moveStart("character",-1);
+++_23;
+}
+return [_23,_23+_26];
+}
+return [_21.target.selectionStart,_21.target.selectionEnd];
+};
+dojox.string.BidiComplex._setSelectedRange=function(_27,_28,_29){
+if(dojo.isIE){
+var _2a=_27.createTextRange();
+if(_2a){
+if(_27.type=="textarea"){
+_2a.moveToElementText(_27);
+}else{
+_2a.expand("textedit");
+}
+_2a.collapse();
+_2a.moveEnd("character",_29);
+_2a.moveStart("character",_28);
+_2a.select();
+}
+}else{
+_27.selectionStart=_28;
+_27.selectionEnd=_29;
+}
+};
+var _2b=function(c){
+return (c>="0"&&c<="9")||(c>"ÿ");
+};
+var _2c=function(c){
+return (c>="A"&&c<="Z")||(c>="a"&&c<="z");
+};
+var _2d=function(_2e,i,_2f){
+while(i>0){
+if(i==_2f){
+return false;
+}
+i--;
+if(_2b(_2e.charAt(i))){
+return true;
+}
+if(_2c(_2e.charAt(i))){
+return false;
+}
+}
+return false;
+};
+dojox.string.BidiComplex._parse=function(str,_30){
+var _31=-1,_32=[];
+var _33={FILE_PATH:"/\\:.",URL:"/:.?=&#",XPATH:"/\\:.<>=[]",EMAIL:"<>@.,;"}[_30];
+switch(_30){
+case "FILE_PATH":
+case "URL":
+case "XPATH":
+dojo.forEach(str,function(ch,i){
+if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+});
+break;
+case "EMAIL":
+var _34=false;
+dojo.forEach(str,function(ch,i){
+if(ch=="\""){
+if(_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+i++;
+var i1=str.indexOf("\"",i);
+if(i1>=i){
+i=i1;
+}
+if(_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+}
+if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+});
+}
+return _32;
+};
+})();
+}
diff --git a/js/dojo/dojox/testing/DocTest.js b/js/dojo/dojox/testing/DocTest.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/testing/DocTest.js
@@ -0,0 +1,89 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.testing.DocTest"]){
+dojo._hasResource["dojox.testing.DocTest"]=true;
+dojo.provide("dojox.testing.DocTest");
+dojo.require("dojo.string");
+dojo.declare("dojox.testing.DocTest",null,{errors:[],getTests:function(_1){
+var _2=dojo.moduleUrl(_1).path;
+var _3=_2.substring(0,_2.length-1)+".js";
+var _4=dojo.xhrGet({url:_3,handleAs:"text"});
+var _5=dojo._getText(_3);
+return this._getTestsFromString(_5,true);
+},getTestsFromString:function(_6){
+return this._getTestsFromString(_6,false);
+},_getTestsFromString:function(_7,_8){
+var _9=dojo.hitch(dojo.string,"trim");
+var _a=_7.split("\n");
+var _b=_a.length;
+var _c=[];
+var _d={commands:[],expectedResult:[],line:null};
+for(var i=0;i<_b+1;i++){
+var l=_9(_a[i]||"");
+if((_8&&l.match(/^\/\/\s+>>>\s.*/))||l.match(/^\s*>>>\s.*/)){
+if(!_d.line){
+_d.line=i+1;
+}
+if(_d.expectedResult.length>0){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+_d={commands:[],expectedResult:[],line:i+1};
+}
+l=_8?_9(l).substring(2,l.length):l;
+l=_9(l).substring(3,l.length);
+_d.commands.push(_9(l));
+}else{
+if((!_8||l.match(/^\/\/\s+.*/))&&_d.commands.length&&_d.expectedResult.length==0){
+l=_8?_9(l).substring(3,l.length):l;
+_d.expectedResult.push(_9(l));
+}else{
+if(_d.commands.length>0&&_d.expectedResult.length){
+if(!_8||l.match(/^\/\/\s*$/)){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+}
+if(_8&&!l.match(/^\/\//)){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+}
+_d={commands:[],expectedResult:[],line:0};
+}
+}
+}
+}
+return _c;
+},run:function(_e){
+this.errors=[];
+var _f=this.getTests(_e);
+if(_f){
+this._run(_f);
+}
+},_run:function(_10){
+var len=_10.length;
+this.tests=len;
+var oks=0;
+for(var i=0;i<len;i++){
+var t=_10[i];
+var res=this.runTest(t.commands,t.expectedResult);
+var msg="Test "+(i+1)+": ";
+var _11=t.commands.join(" ");
+_11=(_11.length>50?_11.substr(0,50)+"...":_11);
+if(res.success){
+oks+=1;
+}else{
+this.errors.push({commands:t.commands,actual:res.actualResult,expected:t.expectedResult});
+console.error(msg+"Failed: "+_11,{commands:t.commands,actualResult:res.actualResult,expectedResult:t.expectedResult});
+}
+}
+},runTest:function(_12,_13){
+var ret={success:false,actualResult:null};
+var _14=_12.join("\n");
+ret.actualResult=eval(_14);
+if((String(ret.actualResult)==_13)||(dojo.toJson(ret.actualResult)==_13)||((_13.charAt(0)=="\"")&&(_13.charAt(_13.length-1)=="\"")&&(String(ret.actualResult)==_13.substring(1,_13.length-1)))){
+ret.success=true;
+}
+return ret;
+}});
+}
diff --git a/js/dojo/dojox/testing/README b/js/dojo/dojox/testing/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/testing/README
@@ -0,0 +1,41 @@
+-------------------------------------------------------------------------------
+dojox.testing
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 06/18/08
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+ Wolfram Kriesing (wolfram@dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description
+
+ A port of Python's DocTests module to Dojo and D.O.H. which is also
+ compatible with Dojo's API documentation system
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+ dojo.string, DOH
+
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+
+ http://svn.dojotoolkit.org/dojo/dojox/trunk/testing/*
+
+Install into the following directory structure:
+
+ /dojox/testing/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+Additional Notes
+
+ None.
diff --git a/js/dojo/dojox/timing/doLater.js b/js/dojo/dojox/timing/doLater.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/timing/doLater.js
@@ -0,0 +1,24 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing.doLater"]){
+dojo._hasResource["dojox.timing.doLater"]=true;
+dojo.provide("dojox.timing.doLater");
+dojo.experimental("dojox.timing.doLater");
+dojox.timing.doLater=function(_1,_2,_3){
+if(_1){
+return false;
+}
+var _4=dojox.timing.doLater.caller,_5=dojox.timing.doLater.caller.arguments;
+_3=_3||100;
+_2=_2||dojo.global;
+setTimeout(function(){
+_4.apply(_2,_5);
+},_3);
+return true;
+};
+}
diff --git a/js/dojo/dojox/validate/br.js b/js/dojo/dojox/validate/br.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/validate/br.js
@@ -0,0 +1,203 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.br"]){
+dojo._hasResource["dojox.validate.br"]=true;
+dojo.provide("dojox.validate.br");
+dojo.require("dojox.validate._base");
+dojox.validate.br.isValidCnpj=function(_1){
+if(!dojo.isString(_1)){
+if(!_1){
+return false;
+}
+_1=_1+"";
+while(_1.length<14){
+_1="0"+_1;
+}
+}
+var _2={format:["##.###.###/####-##","########/####-##","############-##","##############"]};
+if(dojox.validate.isNumberFormat(_1,_2)){
+_1=_1.replace("/","").replace(/\./g,"").replace("-","");
+var _3=[];
+var dv=[];
+var i,j,_4;
+for(i=0;i<10;i++){
+_4="";
+for(j=0;j<_1.length;j++){
+_4+=""+i;
+}
+if(_1===_4){
+return false;
+}
+}
+for(i=0;i<12;i++){
+_3.push(parseInt(_1.charAt(i),10));
+}
+for(i=12;i<14;i++){
+dv.push(parseInt(_1.charAt(i),10));
+}
+var _5=[9,8,7,6,5,4,3,2,9,8,7,6].reverse();
+var _6=0;
+for(i=0;i<_3.length;i++){
+_6+=_3[i]*_5[i];
+}
+var _7=_6%11;
+if(_7==dv[0]){
+_6=0;
+_5=[9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
+_3.push(_7);
+for(i=0;i<_3.length;i++){
+_6+=_3[i]*_5[i];
+}
+var _8=_6%11;
+if(_8===dv[1]){
+return true;
+}
+}
+}
+return false;
+};
+dojox.validate.br.computeCnpjDv=function(_9){
+if(!dojo.isString(_9)){
+if(!_9){
+return "";
+}
+_9=_9+"";
+while(_9.length<12){
+_9="0"+_9;
+}
+}
+var _a={format:["##.###.###/####","########/####","############"]};
+if(dojox.validate.isNumberFormat(_9,_a)){
+_9=_9.replace("/","").replace(/\./g,"");
+var _b=[];
+var i,j,_c;
+for(i=0;i<10;i++){
+_c="";
+for(j=0;j<_9.length;j++){
+_c+=""+i;
+}
+if(_9===_c){
+return "";
+}
+}
+for(i=0;i<_9.length;i++){
+_b.push(parseInt(_9.charAt(i),10));
+}
+var _d=[9,8,7,6,5,4,3,2,9,8,7,6].reverse();
+var _e=0;
+for(i=0;i<_b.length;i++){
+_e+=_b[i]*_d[i];
+}
+var _f=_e%11;
+_e=0;
+_d=[9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
+_b.push(_f);
+for(i=0;i<_b.length;i++){
+_e+=_b[i]*_d[i];
+}
+var dv1=_e%11;
+return (""+_f)+dv1;
+}
+return "";
+};
+dojox.validate.br.isValidCpf=function(_10){
+if(!dojo.isString(_10)){
+if(!_10){
+return false;
+}
+_10=_10+"";
+while(_10.length<11){
+_10="0"+_10;
+}
+}
+var _11={format:["###.###.###-##","#########-##","###########"]};
+if(dojox.validate.isNumberFormat(_10,_11)){
+_10=_10.replace("-","").replace(/\./g,"");
+var cpf=[];
+var dv=[];
+var i,j,tmp;
+for(i=0;i<10;i++){
+tmp="";
+for(j=0;j<_10.length;j++){
+tmp+=""+i;
+}
+if(_10===tmp){
+return false;
+}
+}
+for(i=0;i<9;i++){
+cpf.push(parseInt(_10.charAt(i),10));
+}
+for(i=9;i<12;i++){
+dv.push(parseInt(_10.charAt(i),10));
+}
+var _12=[9,8,7,6,5,4,3,2,1].reverse();
+var sum=0;
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_12[i];
+}
+var dv0=sum%11;
+if(dv0==dv[0]){
+sum=0;
+_12=[9,8,7,6,5,4,3,2,1,0].reverse();
+cpf.push(dv0);
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_12[i];
+}
+var dv1=sum%11;
+if(dv1===dv[1]){
+return true;
+}
+}
+}
+return false;
+};
+dojox.validate.br.computeCpfDv=function(_13){
+if(!dojo.isString(_13)){
+if(!_13){
+return "";
+}
+_13=_13+"";
+while(_13.length<9){
+_13="0"+_13;
+}
+}
+var _14={format:["###.###.###","#########"]};
+if(dojox.validate.isNumberFormat(_13,_14)){
+_13=_13.replace(/\./g,"");
+var cpf=[];
+for(i=0;i<10;i++){
+tmp="";
+for(j=0;j<_13.length;j++){
+tmp+=""+i;
+}
+if(_13===tmp){
+return "";
+}
+}
+for(i=0;i<_13.length;i++){
+cpf.push(parseInt(_13.charAt(i),10));
+}
+var _15=[9,8,7,6,5,4,3,2,1].reverse();
+var sum=0;
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_15[i];
+}
+var dv0=sum%11;
+sum=0;
+_15=[9,8,7,6,5,4,3,2,1,0].reverse();
+cpf.push(dv0);
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_15[i];
+}
+var dv1=sum%11;
+return (""+dv0)+dv1;
+}
+return "";
+};
+}
diff --git a/js/dojo/dojox/widget/AnalogGauge.js b/js/dojo/dojox/widget/AnalogGauge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/AnalogGauge.js
@@ -0,0 +1,246 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.AnalogGauge"]){
+dojo._hasResource["dojox.widget.AnalogGauge"]=true;
+dojo.provide("dojox.widget.AnalogGauge");
+dojo.require("dojox.gfx");
+dojo.require("dojox.widget.gauge._Gauge");
+dojo.experimental("dojox.widget.AnalogGauge");
+dojo.declare("dojox.widget.gauge.AnalogLineIndicator",[dojox.widget.gauge._Indicator],{_getShapes:function(){
+var _1=[];
+_1[0]=this._gauge.surface.createLine({x1:0,y1:-this.offset,x2:0,y2:-this.length-this.offset}).setStroke({color:this.color,width:this.width});
+return _1;
+},draw:function(_2){
+if(this.shapes){
+this._move(_2);
+}else{
+if(this.text){
+this._gauge.surface.rawNode.removeChild(this.text);
+this.text=null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var a=this._gauge._getAngle(v);
+this.color=this.color||"#000000";
+this.length=this.length||this._gauge.radius;
+this.width=this.width||1;
+this.offset=this.offset||0;
+this.highlight=this.highlight||"#D0D0D0";
+this.shapes=this._getShapes(this._gauge,this);
+if(this.shapes){
+for(var s=0;s<this.shapes.length;s++){
+this.shapes[s].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(a)]);
+if(this.hover){
+this.shapes[s].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[s].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[s].getEventSource().style.cursor="pointer";
+}
+}
+}
+if(this.label){
+var _3=this.length+this.offset;
+var x=this._gauge.cx+(_3+5)*Math.sin(this._gauge._getRadians(a));
+var y=this._gauge.cy-(_3+5)*Math.cos(this._gauge._getRadians(a));
+var _4="start";
+if(a<=-10){
+_4="end";
+}
+if(a>-10&&a<10){
+_4="middle";
+}
+var _5="bottom";
+if((a<-90)||(a>90)){
+_5="top";
+}
+this.text=this._gauge.drawText(""+this.label,x,y,_4,_5,this.color,this.font);
+}
+this.currentValue=this.value;
+}
+},_move:function(_6){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var c=this.currentValue;
+if(_6){
+var _7=this._gauge._getAngle(v);
+for(var i in this.shapes){
+this.shapes[i].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(_7)]);
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+}
+}else{
+if(c!=v){
+var _8=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_8,"onAnimate",dojo.hitch(this,function(_9){
+for(var i in this.shapes){
+this.shapes[i].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(this._gauge._getAngle(_9))]);
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+}
+this.currentValue=_9;
+}));
+_8.play();
+}
+}
+}});
+dojo.declare("dojox.widget.AnalogGauge",dojox.widget.gauge._Gauge,{startAngle:-90,endAngle:90,cx:0,cy:0,radius:0,_defaultIndicator:dojox.widget.gauge.AnalogLineIndicator,startup:function(){
+if(this.getChildren){
+dojo.forEach(this.getChildren(),function(_a){
+_a.startup();
+});
+}
+this.startAngle=Number(this.startAngle);
+this.endAngle=Number(this.endAngle);
+this.cx=Number(this.cx);
+if(!this.cx){
+this.cx=this.width/2;
+}
+this.cy=Number(this.cy);
+if(!this.cy){
+this.cy=this.height/2;
+}
+this.radius=Number(this.radius);
+if(!this.radius){
+this.radius=Math.min(this.cx,this.cy)-25;
+}
+this._oppositeMiddle=(this.startAngle+this.endAngle)/2+180;
+this.inherited(arguments);
+},_getAngle:function(_b){
+return (_b-this.min)/(this.max-this.min)*(this.endAngle-this.startAngle)+this.startAngle;
+},_getValueForAngle:function(_c){
+if(_c>this._oppositeMiddle){
+_c-=360;
+}
+return (_c-this.startAngle)*(this.max-this.min)/(this.endAngle-this.startAngle)+this.min;
+},_getRadians:function(_d){
+return _d*Math.PI/180;
+},_getDegrees:function(_e){
+return _e*180/Math.PI;
+},draw:function(){
+var i;
+if(this._rangeData){
+for(i=0;i<this._rangeData.length;i++){
+this.drawRange(this._rangeData[i]);
+}
+if(this._img&&this.image.overlay){
+this._img.moveToFront();
+}
+}
+if(this._indicatorData){
+for(i=0;i<this._indicatorData.length;i++){
+this._indicatorData[i].draw();
+}
+}
+},drawRange:function(_f){
+var _10;
+if(_f.shape){
+this.surface.remove(_f.shape);
+_f.shape=null;
+}
+var a1;
+var a2;
+if((_f.low==this.min)&&(_f.high==this.max)&&((this.endAngle-this.startAngle)==360)){
+_10=this.surface.createCircle({cx:this.cx,cy:this.cy,r:this.radius});
+}else{
+a1=this._getRadians(this._getAngle(_f.low));
+a2=this._getRadians(this._getAngle(_f.high));
+var x1=this.cx+this.radius*Math.sin(a1);
+var y1=this.cy-this.radius*Math.cos(a1);
+var x2=this.cx+this.radius*Math.sin(a2);
+var y2=this.cy-this.radius*Math.cos(a2);
+var big=0;
+if((a2-a1)>Math.PI){
+big=1;
+}
+_10=this.surface.createPath();
+if(_f.size){
+_10.moveTo(this.cx+(this.radius-_f.size)*Math.sin(a1),this.cy-(this.radius-_f.size)*Math.cos(a1));
+}else{
+_10.moveTo(this.cx,this.cy);
+}
+_10.lineTo(x1,y1);
+_10.arcTo(this.radius,this.radius,0,big,1,x2,y2);
+if(_f.size){
+_10.lineTo(this.cx+(this.radius-_f.size)*Math.sin(a2),this.cy-(this.radius-_f.size)*Math.cos(a2));
+_10.arcTo((this.radius-_f.size),(this.radius-_f.size),0,big,0,this.cx+(this.radius-_f.size)*Math.sin(a1),this.cy-(this.radius-_f.size)*Math.cos(a1));
+}
+_10.closePath();
+}
+if(dojo.isArray(_f.color)||dojo.isString(_f.color)){
+_10.setStroke({color:_f.color});
+_10.setFill(_f.color);
+}else{
+if(_f.color.type){
+a1=this._getRadians(this._getAngle(_f.low));
+a2=this._getRadians(this._getAngle(_f.high));
+_f.color.x1=this.cx+(this.radius*Math.sin(a1))/2;
+_f.color.x2=this.cx+(this.radius*Math.sin(a2))/2;
+_f.color.y1=this.cy-(this.radius*Math.cos(a1))/2;
+_f.color.y2=this.cy-(this.radius*Math.cos(a2))/2;
+_10.setFill(_f.color);
+_10.setStroke({color:_f.color.colors[0].color});
+}else{
+_10.setStroke({color:"green"});
+_10.setFill("green");
+_10.getEventSource().setAttribute("class",_f.color.style);
+}
+}
+if(_f.hover){
+_10.getEventSource().setAttribute("hover",_f.hover);
+}
+_f.shape=_10;
+},getRangeUnderMouse:function(_11){
+var _12=null;
+var pos=dojo.coords(this.gaugeContent);
+var x=_11.clientX-pos.x;
+var y=_11.clientY-pos.y;
+var r=Math.sqrt((y-this.cy)*(y-this.cy)+(x-this.cx)*(x-this.cx));
+if(r<this.radius){
+var _13=this._getDegrees(Math.atan2(y-this.cy,x-this.cx)+Math.PI/2);
+var _14=this._getValueForAngle(_13);
+if(this._rangeData){
+for(var i=0;(i<this._rangeData.length)&&!_12;i++){
+if((Number(this._rangeData[i].low)<=_14)&&(Number(this._rangeData[i].high)>=_14)){
+_12=this._rangeData[i];
+}
+}
+}
+}
+return _12;
+},_dragIndicator:function(_15,_16){
+var pos=dojo.coords(_15.gaugeContent);
+var x=_16.clientX-pos.x;
+var y=_16.clientY-pos.y;
+var _17=_15._getDegrees(Math.atan2(y-_15.cy,x-_15.cx)+Math.PI/2);
+var _18=_15._getValueForAngle(_17);
+if(_18<_15.min){
+_18=_15.min;
+}
+if(_18>_15.max){
+_18=_15.max;
+}
+_15._drag.value=_18;
+_15._drag.currentValue=_18;
+_15._drag.onDragMove(_15._drag);
+_15._drag.draw(true);
+dojo.stopEvent(_16);
+}});
+}
diff --git a/js/dojo/dojox/widget/AutoRotator.js b/js/dojo/dojox/widget/AutoRotator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/AutoRotator.js
@@ -0,0 +1,104 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.AutoRotator"]){
+dojo._hasResource["dojox.widget.AutoRotator"]=true;
+dojo.provide("dojox.widget.AutoRotator");
+dojo.require("dojox.widget.Rotator");
+(function(d){
+d.declare("dojox.widget.AutoRotator",dojox.widget.Rotator,{suspendOnHover:false,duration:4000,autoStart:true,pauseOnManualChange:false,cycles:-1,random:false,reverse:false,constructor:function(){
+var _1=this;
+if(_1.cycles-0==_1.cycles&&_1.cycles>0){
+_1.cycles++;
+}else{
+_1.cycles=_1.cycles?-1:0;
+}
+_1._connects=[d.connect(_1._domNode,"onmouseover",function(){
+if(_1.suspendOnHover&&!_1.anim&&!_1.wfe){
+var t=_1._endTime,n=_1._now();
+_1._suspended=true;
+_1._resetTimer();
+_1._resumeDuration=t>n?t-n:0.01;
+}
+}),d.connect(_1._domNode,"onmouseout",function(){
+if(_1.suspendOnHover&&!_1.anim){
+_1._suspended=false;
+if(_1.playing&&!_1.wfe){
+_1.play(true);
+}
+}
+})];
+if(_1.autoStart&&_1.panes.length>1){
+_1.play();
+}else{
+_1.pause();
+}
+},destroy:function(){
+d.forEach(this._connects,d.disconnect);
+this.inherited(arguments);
+},play:function(_2,_3){
+this.playing=true;
+this._resetTimer();
+if(_2!==true&&this.cycles>0){
+this.cycles--;
+}
+if(this.cycles==0){
+this.pause();
+}else{
+if(!this._suspended){
+this.onUpdate("play");
+if(_3){
+this._cycle();
+}else{
+var r=(this._resumeDuration||0)-0,u=(r>0?r:(this.panes[this.idx].duration||this.duration))-0;
+this._resumeDuration=0;
+this._endTime=this._now()+u;
+this._timer=setTimeout(d.hitch(this,"_cycle",false),u);
+}
+}
+}
+},pause:function(){
+this.playing=this._suspended=false;
+this.cycles=-1;
+this._resetTimer();
+this.onUpdate("pause");
+},_now:function(){
+return (new Date()).getTime();
+},_resetTimer:function(){
+clearTimeout(this._timer);
+},_cycle:function(_4){
+var _5=this,i=_5.idx,j;
+if(_5.random){
+do{
+j=Math.floor(Math.random()*_5.panes.length+1);
+}while(j==i);
+}else{
+j=i+(_5.reverse?-1:1);
+}
+var _6=_5.go(j);
+if(_6){
+_6.addCallback(function(_7){
+_5.onUpdate("cycle");
+if(_5.playing){
+_5.play(false,_7);
+}
+});
+}
+},onManualChange:function(_8){
+this.cycles=-1;
+if(_8!="play"){
+this._resetTimer();
+if(this.pauseOnManualChange){
+this.pause();
+}
+}
+if(this.playing){
+this.play();
+}
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/BarGauge.js b/js/dojo/dojox/widget/BarGauge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/BarGauge.js
@@ -0,0 +1,194 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.BarGauge"]){
+dojo._hasResource["dojox.widget.BarGauge"]=true;
+dojo.provide("dojox.widget.BarGauge");
+dojo.require("dojox.gfx");
+dojo.require("dojox.widget.gauge._Gauge");
+dojo.experimental("dojox.widget.BarGauge");
+dojo.declare("dojox.widget.gauge.BarLineIndicator",[dojox.widget.gauge._Indicator],{width:1,_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _1=this._gauge._getPosition(v);
+var _2=[];
+if(this.width>1){
+_2[0]=this._gauge.surface.createRect({x:_1,y:this._gauge.dataY+this.offset,width:this.width,height:this.length});
+_2[0].setStroke({color:this.color});
+_2[0].setFill(this.color);
+}else{
+_2[0]=this._gauge.surface.createLine({x1:_1,y1:this._gauge.dataY+this.offset,x2:_1,y2:this._gauge.dataY+this.offset+this.length});
+_2[0].setStroke({color:this.color});
+}
+return _2;
+},draw:function(_3){
+var i;
+if(this.shapes){
+this._move(_3);
+}else{
+if(this.shapes){
+for(i=0;i<this.shapes.length;i++){
+this._gauge.surface.remove(this.shapes[i]);
+}
+this.shapes=null;
+}
+if(this.text){
+this._gauge.surface.rawNode.removeChild(this.text);
+this.text=null;
+}
+this.color=this.color||"#000000";
+this.length=this.length||this._gauge.dataHeight;
+this.width=this.width||3;
+this.offset=this.offset||0;
+this.highlight=this.highlight||"#4D4D4D";
+this.highlight2=this.highlight2||"#A3A3A3";
+this.shapes=this._getShapes(this._gauge,this);
+if(this.label){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _4=this._gauge._getPosition(v);
+this.text=this._gauge.drawText(""+this.label,_4,this._gauge.dataY+this.offset-5,"middle","top",this.color,this.font);
+}
+for(i=0;i<this.shapes.length;i++){
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[i].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[i].getEventSource().style.cursor="pointer";
+}
+}
+this.currentValue=this.value;
+}
+},_move:function(_5){
+var v=this.value;
+if(v<this.min){
+v=this.min;
+}
+if(v>this.max){
+v=this.max;
+}
+var c=this._gauge._getPosition(this.currentValue);
+this.currentValue=v;
+v=this._gauge._getPosition(v)-this._gauge.dataX;
+if(_5){
+this.shapes[0].applyTransform(dojox.gfx.matrix.translate(v-(this.shapes[0].matrix?this.shapes[0].matrix.dx:0),0));
+}else{
+var _6=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_6,"onAnimate",dojo.hitch(this,function(_7){
+this.shapes[0].applyTransform(dojox.gfx.matrix.translate(_7-(this.shapes[0].matrix?this.shapes[0].matrix.dx:0),0));
+}));
+_6.play();
+}
+}});
+dojo.declare("dojox.widget.BarGauge",dojox.widget.gauge._Gauge,{dataX:5,dataY:5,dataWidth:0,dataHeight:0,_defaultIndicator:dojox.widget.gauge.BarLineIndicator,startup:function(){
+if(this.getChildren){
+dojo.forEach(this.getChildren(),function(_8){
+_8.startup();
+});
+}
+if(!this.dataWidth){
+this.dataWidth=this.gaugeWidth-10;
+}
+if(!this.dataHeight){
+this.dataHeight=this.gaugeHeight-10;
+}
+this.inherited(arguments);
+},_getPosition:function(_9){
+return this.dataX+Math.floor((_9-this.min)/(this.max-this.min)*this.dataWidth);
+},_getValueForPosition:function(_a){
+return (_a-this.dataX)*(this.max-this.min)/this.dataWidth+this.min;
+},draw:function(){
+if(!this.surface){
+this.createSurface();
+}
+var i;
+if(this._rangeData){
+for(i=0;i<this._rangeData.length;i++){
+this.drawRange(this._rangeData[i]);
+}
+if(this._img&&this.image.overlay){
+this._img.moveToFront();
+}
+}
+if(this._indicatorData){
+for(i=0;i<this._indicatorData.length;i++){
+this._indicatorData[i].draw();
+}
+}
+},drawRange:function(_b){
+if(_b.shape){
+this.surface.remove(_b.shape);
+_b.shape=null;
+}
+var x1=this._getPosition(_b.low);
+var x2=this._getPosition(_b.high);
+var _c=this.surface.createRect({x:x1,y:this.dataY,width:x2-x1,height:this.dataHeight});
+if(dojo.isArray(_b.color)||dojo.isString(_b.color)){
+_c.setStroke({color:_b.color});
+_c.setFill(_b.color);
+}else{
+if(_b.color.type){
+var y=this.dataY+this.dataHeight/2;
+_b.color.x1=x1;
+_b.color.x2=x2;
+_b.color.y1=y;
+_b.color.y2=y;
+_c.setFill(_b.color);
+_c.setStroke({color:_b.color.colors[0].color});
+}else{
+_c.setStroke({color:"green"});
+_c.setFill("green");
+_c.getEventSource().setAttribute("class",_b.color.style);
+}
+}
+if(_b.hover){
+_c.getEventSource().setAttribute("hover",_b.hover);
+}
+_b.shape=_c;
+},getRangeUnderMouse:function(_d){
+var _e=null;
+var _f=dojo.coords(this.gaugeContent);
+var x=_d.clientX-_f.x;
+var _10=this._getValueForPosition(x);
+if(this._rangeData){
+for(var i=0;(i<this._rangeData.length)&&!_e;i++){
+if((Number(this._rangeData[i].low)<=_10)&&(Number(this._rangeData[i].high)>=_10)){
+_e=this._rangeData[i];
+}
+}
+}
+return _e;
+},_dragIndicator:function(_11,_12){
+var pos=dojo.coords(_11.gaugeContent);
+var x=_12.clientX-pos.x;
+var _13=_11._getValueForPosition(x);
+if(_13<_11.min){
+_13=_11.min;
+}
+if(_13>_11.max){
+_13=_11.max;
+}
+_11._drag.value=_13;
+_11._drag.onDragMove(_11._drag);
+_11._drag.draw(true);
+dojo.stopEvent(_12);
+}});
+}
diff --git a/js/dojo/dojox/widget/Calendar.js b/js/dojo/dojox/widget/Calendar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar.js
@@ -0,0 +1,502 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Calendar"]){
+dojo._hasResource["dojox.widget.Calendar"]=true;
+dojo.provide("dojox.widget.Calendar");
+dojo.experimental("dojox.widget.Calendar");
+dojo.require("dijit.Calendar");
+dojo.require("dijit._Container");
+dojo.declare("dojox.widget._CalendarBase",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.widget","Calendar/Calendar.html","<div class=\"dojoxCalendar\">\n <div tabindex=\"0\" class=\"dojoxCalendarContainer\" style=\"visibility: visible;\" dojoAttachPoint=\"container\">\n\t\t<div style=\"display:none\">\n\t\t\t<div dojoAttachPoint=\"previousYearLabelNode\"></div>\n\t\t\t<div dojoAttachPoint=\"nextYearLabelNode\"></div>\n\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\"></div>\n\t\t</div>\n <div class=\"dojoxCalendarHeader\">\n <div>\n <div class=\"dojoxCalendarDecrease\" dojoAttachPoint=\"decrementMonth\"></div>\n </div>\n <div class=\"\">\n <div class=\"dojoxCalendarIncrease\" dojoAttachPoint=\"incrementMonth\"></div>\n </div>\n <div class=\"dojoxCalendarTitle\" dojoAttachPoint=\"header\" dojoAttachEvent=\"onclick: onHeaderClick\">\n </div>\n </div>\n <div class=\"dojoxCalendarBody\" dojoAttachPoint=\"containerNode\"></div>\n <div class=\"\">\n <div class=\"dojoxCalendarFooter\" dojoAttachPoint=\"footer\"> \n </div>\n </div>\n </div>\n</div>\n"),_views:null,useFx:true,widgetsInTemplate:true,value:new Date(),constraints:null,footerFormat:"medium",constructor:function(){
+this._views=[];
+},postMixInProperties:function(){
+var c=this.constraints;
+if(c){
+var _1=dojo.date.stamp.fromISOString;
+if(typeof c.min=="string"){
+c.min=_1(c.min);
+}
+if(typeof c.max=="string"){
+c.max=_1(c.max);
+}
+}
+},postCreate:function(){
+this.displayMonth=new Date(this.attr("value"));
+var _2={parent:this,_getValueAttr:dojo.hitch(this,function(){
+return new Date(this._internalValue||this.value);
+}),_getDisplayMonthAttr:dojo.hitch(this,function(){
+return new Date(this.displayMonth);
+}),_getConstraintsAttr:dojo.hitch(this,function(){
+return this.constraints;
+}),getLang:dojo.hitch(this,function(){
+return this.lang;
+}),isDisabledDate:dojo.hitch(this,this.isDisabledDate),getClassForDate:dojo.hitch(this,this.getClassForDate),addFx:this.useFx?dojo.hitch(this,this.addFx):function(){
+}};
+dojo.forEach(this._views,function(_3){
+var _4=new _3(_2,dojo.create("div"));
+this.addChild(_4);
+var _5=_4.getHeader();
+if(_5){
+this.header.appendChild(_5);
+dojo.style(_5,"display","none");
+}
+dojo.style(_4.domNode,"visibility","hidden");
+dojo.connect(_4,"onValueSelected",this,"_onDateSelected");
+_4.attr("value",this.attr("value"));
+},this);
+if(this._views.length<2){
+dojo.style(this.header,"cursor","auto");
+}
+this.inherited(arguments);
+this._children=this.getChildren();
+this._currentChild=0;
+var _6=new Date();
+this.footer.innerHTML="Today: "+dojo.date.locale.format(_6,{formatLength:this.footerFormat,selector:"date",locale:this.lang});
+dojo.connect(this.footer,"onclick",this,"goToToday");
+var _7=this._children[0];
+dojo.style(_7.domNode,"top","0px");
+dojo.style(_7.domNode,"visibility","visible");
+var _8=_7.getHeader();
+if(_8){
+dojo.style(_7.getHeader(),"display","");
+}
+dojo[_7.useHeader?"removeClass":"addClass"](this.container,"no-header");
+_7.onDisplay();
+var _9=this;
+var _a=function(_b,_c,_d){
+dijit.typematic.addMouseListener(_9[_b],_9,function(_e){
+if(_e>=0){
+_9._adjustDisplay(_c,_d);
+}
+},0.8,500);
+};
+_a("incrementMonth","month",1);
+_a("decrementMonth","month",-1);
+this._updateTitleStyle();
+},addFx:function(_f,_10){
+},_setValueAttr:function(_11){
+if(!_11["getFullYear"]){
+_11=dojo.date.stamp.fromISOString(_11+"");
+}
+if(!this.value||dojo.date.compare(_11,this.value)){
+_11=new Date(_11);
+this.displayMonth=new Date(_11);
+this._internalValue=_11;
+if(!this.isDisabledDate(_11,this.lang)&&this._currentChild==0){
+this.value=_11;
+this.onChange(_11);
+}
+this._children[this._currentChild].attr("value",this.value);
+return true;
+}
+return false;
+},isDisabledDate:function(_12,_13){
+var c=this.constraints;
+var _14=dojo.date.compare;
+return c&&(c.min&&(_14(c.min,_12,"date")>0)||(c.max&&_14(c.max,_12,"date")<0));
+},onValueSelected:function(_15){
+},_onDateSelected:function(_16,_17,_18){
+this.displayMonth=_16;
+this.attr("value",_16);
+if(!this._transitionVert(-1)){
+if(!_17&&_17!==0){
+_17=this.attr("value");
+}
+this.onValueSelected(_17);
+}
+},onChange:function(_19){
+},onHeaderClick:function(e){
+this._transitionVert(1);
+},goToToday:function(){
+this.attr("value",new Date());
+this.onValueSelected(this.attr("value"));
+},_transitionVert:function(_1a){
+var _1b=this._children[this._currentChild];
+var _1c=this._children[this._currentChild+_1a];
+if(!_1c){
+return false;
+}
+dojo.style(_1c.domNode,"visibility","visible");
+var _1d=dojo.style(this.containerNode,"height");
+_1c.attr("value",this.displayMonth);
+if(_1b.header){
+dojo.style(_1b.header,"display","none");
+}
+if(_1c.header){
+dojo.style(_1c.header,"display","");
+}
+dojo.style(_1c.domNode,"top",(_1d*-1)+"px");
+dojo.style(_1c.domNode,"visibility","visible");
+this._currentChild+=_1a;
+var _1e=_1d*_1a;
+var _1f=0;
+dojo.style(_1c.domNode,"top",(_1e*-1)+"px");
+var _20=dojo.animateProperty({node:_1b.domNode,properties:{top:_1e},onEnd:function(){
+dojo.style(_1b.domNode,"visibility","hidden");
+}});
+var _21=dojo.animateProperty({node:_1c.domNode,properties:{top:_1f},onEnd:function(){
+_1c.onDisplay();
+}});
+dojo[_1c.useHeader?"removeClass":"addClass"](this.container,"no-header");
+_20.play();
+_21.play();
+_1b.onBeforeUnDisplay();
+_1c.onBeforeDisplay();
+this._updateTitleStyle();
+return true;
+},_updateTitleStyle:function(){
+dojo[this._currentChild<this._children.length-1?"addClass":"removeClass"](this.header,"navToPanel");
+},_slideTable:function(_22,_23,_24){
+var _25=_22.domNode;
+var _26=_25.cloneNode(true);
+var _27=dojo.style(_25,"width");
+_25.parentNode.appendChild(_26);
+dojo.style(_25,"left",(_27*_23)+"px");
+_24();
+var _28=dojo.animateProperty({node:_26,properties:{left:_27*_23*-1},duration:500,onEnd:function(){
+_26.parentNode.removeChild(_26);
+}});
+var _29=dojo.animateProperty({node:_25,properties:{left:0},duration:500});
+_28.play();
+_29.play();
+},_addView:function(_2a){
+this._views.push(_2a);
+},getClassForDate:function(_2b,_2c){
+},_adjustDisplay:function(_2d,_2e,_2f){
+var _30=this._children[this._currentChild];
+var _31=this.displayMonth=_30.adjustDate(this.displayMonth,_2e);
+this._slideTable(_30,_2e,function(){
+_30.attr("value",_31);
+});
+}});
+dojo.declare("dojox.widget._CalendarView",dijit._Widget,{headerClass:"",useHeader:true,cloneClass:function(_32,n,_33){
+var _34=dojo.query(_32,this.domNode)[0];
+var i;
+if(!_33){
+for(i=0;i<n;i++){
+_34.parentNode.appendChild(_34.cloneNode(true));
+}
+}else{
+var _35=dojo.query(_32,this.domNode)[0];
+for(i=0;i<n;i++){
+_34.parentNode.insertBefore(_34.cloneNode(true),_35);
+}
+}
+},_setText:function(_36,_37){
+if(_36.innerHTML!=_37){
+dojo.empty(_36);
+_36.appendChild(dojo.doc.createTextNode(_37));
+}
+},getHeader:function(){
+return this.header||(this.header=this.header=dojo.create("span",{"class":this.headerClass}));
+},onValueSelected:function(_38){
+},adjustDate:function(_39,_3a){
+return dojo.date.add(_39,this.datePart,_3a);
+},onDisplay:function(){
+},onBeforeDisplay:function(){
+},onBeforeUnDisplay:function(){
+}});
+dojo.declare("dojox.widget._CalendarDay",null,{parent:null,constructor:function(){
+this._addView(dojox.widget._CalendarDayView);
+}});
+dojo.declare("dojox.widget._CalendarDayView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarDay.html","<div class=\"dijitCalendarDayLabels\" style=\"left: 0px;\" dojoAttachPoint=\"dayContainer\">\n\t<div dojoAttachPoint=\"header\">\n\t\t<div dojoAttachPoint=\"monthAndYearHeader\">\n\t\t\t<span dojoAttachPoint=\"monthLabelNode\" class=\"dojoxCalendarMonthLabelNode\"></span>\n\t\t\t<span dojoAttachPoint=\"headerComma\" class=\"dojoxCalendarComma\">,</span>\n\t\t\t<span dojoAttachPoint=\"yearLabelNode\" class=\"dojoxCalendarDayYearLabel\"></span>\n\t\t</div>\n\t</div>\n\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dijitCalendarDayLabelTemplate\"><div class=\"dijitCalendarDayLabel\"></div></td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody dojoAttachEvent=\"onclick: _onDayClick\">\n\t\t\t<tr class=\"dijitCalendarWeekTemplate\">\n\t\t\t\t<td class=\"dojoxCalendarNextMonth dijitCalendarDateTemplate\">\n\t\t\t\t\t<div class=\"dijitCalendarDateLabel\"></div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"),datePart:"month",dayWidth:"narrow",postCreate:function(){
+this.cloneClass(".dijitCalendarDayLabelTemplate",6);
+this.cloneClass(".dijitCalendarDateTemplate",6);
+this.cloneClass(".dijitCalendarWeekTemplate",5);
+var _3b=dojo.date.locale.getNames("days",this.dayWidth,"standAlone",this.getLang());
+var _3c=dojo.cldr.supplemental.getFirstDayOfWeek(this.getLang());
+dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_3d,i){
+this._setText(_3d,_3b[(i+_3c)%7]);
+},this);
+},onDisplay:function(){
+if(!this._addedFx){
+this._addedFx=true;
+this.addFx(".dijitCalendarDateTemplate div",this.domNode);
+}
+},_onDayClick:function(e){
+if(typeof (e.target._date)=="undefined"){
+return;
+}
+var _3e=new Date(this.attr("displayMonth"));
+var p=e.target.parentNode;
+var c="dijitCalendar";
+var d=dojo.hasClass(p,c+"PreviousMonth")?-1:(dojo.hasClass(p,c+"NextMonth")?1:0);
+if(d){
+_3e=dojo.date.add(_3e,"month",d);
+}
+_3e.setDate(e.target._date);
+if(this.isDisabledDate(_3e)){
+dojo.stopEvent(e);
+return;
+}
+this.parent._onDateSelected(_3e);
+},_setValueAttr:function(_3f){
+this._populateDays();
+},_populateDays:function(){
+var _40=new Date(this.attr("displayMonth"));
+_40.setDate(1);
+var _41=_40.getDay();
+var _42=dojo.date.getDaysInMonth(_40);
+var _43=dojo.date.getDaysInMonth(dojo.date.add(_40,"month",-1));
+var _44=new Date();
+var _45=this.attr("value");
+var _46=dojo.cldr.supplemental.getFirstDayOfWeek(this.getLang());
+if(_46>_41){
+_46-=7;
+}
+var _47=dojo.date.compare;
+var _48=".dijitCalendarDateTemplate";
+var _49="dijitCalendarSelectedDate";
+var _4a=this._lastDate;
+var _4b=_4a==null||_4a.getMonth()!=_40.getMonth()||_4a.getFullYear()!=_40.getFullYear();
+this._lastDate=_40;
+if(!_4b){
+dojo.query(_48,this.domNode).removeClass(_49).filter(function(_4c){
+return _4c.className.indexOf("dijitCalendarCurrent")>-1&&_4c._date==_45.getDate();
+}).addClass(_49);
+return;
+}
+dojo.query(_48,this.domNode).forEach(function(_4d,i){
+i+=_46;
+var _4e=new Date(_40);
+var _4f,_50="dijitCalendar",adj=0;
+if(i<_41){
+_4f=_43-_41+i+1;
+adj=-1;
+_50+="Previous";
+}else{
+if(i>=(_41+_42)){
+_4f=i-_41-_42+1;
+adj=1;
+_50+="Next";
+}else{
+_4f=i-_41+1;
+_50+="Current";
+}
+}
+if(adj){
+_4e=dojo.date.add(_4e,"month",adj);
+}
+_4e.setDate(_4f);
+if(!_47(_4e,_44,"date")){
+_50="dijitCalendarCurrentDate "+_50;
+}
+if(!_47(_4e,_45,"date")&&!_47(_4e,_45,"month")&&!_47(_4e,_45,"year")){
+_50=_49+" "+_50;
+}
+if(this.isDisabledDate(_4e,this.getLang())){
+_50=" dijitCalendarDisabledDate "+_50;
+}
+var _51=this.getClassForDate(_4e,this.getLang());
+if(_51){
+_50+=_51+" "+_50;
+}
+_4d.className=_50+"Month dijitCalendarDateTemplate";
+_4d.dijitDateValue=_4e.valueOf();
+var _52=dojo.query(".dijitCalendarDateLabel",_4d)[0];
+this._setText(_52,_4e.getDate());
+_52._date=_52.parentNode._date=_4e.getDate();
+},this);
+var _53=dojo.date.locale.getNames("months","wide","standAlone",this.getLang());
+this._setText(this.monthLabelNode,_53[_40.getMonth()]);
+this._setText(this.yearLabelNode,_40.getFullYear());
+}});
+dojo.declare("dojox.widget._CalendarMonthYear",null,{constructor:function(){
+this._addView(dojox.widget._CalendarMonthYearView);
+}});
+dojo.declare("dojox.widget._CalendarMonthYearView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarMonthYear.html","<div class=\"dojoxCal-MY-labels\" style=\"left: 0px;\"\t\n\tdojoAttachPoint=\"myContainer\" dojoAttachEvent=\"onclick: onClick\">\n\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"dojoxCal-MY-G-Template\">\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-M-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarMonthLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-M-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarMonthLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-Y-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarYearLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-Y-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarYearLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t </tr>\n\t\t\t\t\t\t <tr class=\"dojoxCal-MY-btns\">\n\t\t\t\t\t\t \t <td class=\"dojoxCal-MY-btns\" colspan=\"4\">\n\t\t\t\t\t\t \t\t <span class=\"dijitReset dijitInline dijitButtonNode ok-btn\" dojoAttachEvent=\"onclick: onOk\" dojoAttachPoint=\"okBtn\">\n\t\t\t\t\t\t \t \t \t <button\tclass=\"dijitReset dijitStretch dijitButtonContents\">OK</button>\n\t\t\t\t\t\t\t\t </span>\n\t\t\t\t\t\t\t\t <span class=\"dijitReset dijitInline dijitButtonNode cancel-btn\" dojoAttachEvent=\"onclick: onCancel\" dojoAttachPoint=\"cancelBtn\">\n\t\t\t\t\t\t \t \t\t <button\tclass=\"dijitReset dijitStretch dijitButtonContents\">Cancel</button>\n\t\t\t\t\t\t\t\t </span>\n\t\t\t\t\t\t \t </td>\n\t\t\t\t\t\t </tr>\n\t\t\t\t</tbody>\n\t\t</table>\n</div>\n"),datePart:"year",displayedYears:10,useHeader:false,postCreate:function(){
+this.cloneClass(".dojoxCal-MY-G-Template",5,".dojoxCal-MY-btns");
+this.monthContainer=this.yearContainer=this.myContainer;
+var _54="dojoxCalendarYearLabel";
+var _55="dojoxCalendarDecrease";
+var _56="dojoxCalendarIncrease";
+dojo.query("."+_54,this.myContainer).forEach(function(_57,idx){
+var _58=_56;
+switch(idx){
+case 0:
+_58=_55;
+case 1:
+dojo.removeClass(_57,_54);
+dojo.addClass(_57,_58);
+break;
+}
+});
+this._decBtn=dojo.query("."+_55,this.myContainer)[0];
+this._incBtn=dojo.query("."+_56,this.myContainer)[0];
+dojo.query(".dojoxCal-MY-M-Template",this.domNode).filter(function(_59){
+return _59.cellIndex==1;
+}).addClass("dojoxCal-MY-M-last");
+dojo.connect(this,"onBeforeDisplay",dojo.hitch(this,function(){
+this._cachedDate=new Date(this.attr("value").getTime());
+this._populateYears(this._cachedDate.getFullYear());
+this._populateMonths();
+this._updateSelectedMonth();
+this._updateSelectedYear();
+}));
+dojo.connect(this,"_populateYears",dojo.hitch(this,function(){
+this._updateSelectedYear();
+}));
+dojo.connect(this,"_populateMonths",dojo.hitch(this,function(){
+this._updateSelectedMonth();
+}));
+this._cachedDate=this.attr("value");
+this._populateYears();
+this._populateMonths();
+this.addFx(".dojoxCalendarMonthLabel,.dojoxCalendarYearLabel ",this.myContainer);
+},_setValueAttr:function(_5a){
+this._populateYears(_5a.getFullYear());
+},getHeader:function(){
+return null;
+},_getMonthNames:function(_5b){
+this._monthNames=this._monthNames||dojo.date.locale.getNames("months",_5b,"standAlone",this.getLang());
+return this._monthNames;
+},_populateMonths:function(){
+var _5c=this._getMonthNames("abbr");
+dojo.query(".dojoxCalendarMonthLabel",this.monthContainer).forEach(dojo.hitch(this,function(_5d,cnt){
+this._setText(_5d,_5c[cnt]);
+}));
+var _5e=this.attr("constraints");
+if(_5e){
+var _5f=new Date();
+_5f.setFullYear(this._year);
+var min=-1,max=12;
+if(_5e.min){
+var _60=_5e.min.getFullYear();
+if(_60>this._year){
+min=12;
+}else{
+if(_60==this._year){
+min=_5e.min.getMonth();
+}
+}
+}
+if(_5e.max){
+var _61=_5e.max.getFullYear();
+if(_61<this._year){
+max=-1;
+}else{
+if(_61==this._year){
+max=_5e.max.getMonth();
+}
+}
+}
+dojo.query(".dojoxCalendarMonthLabel",this.monthContainer).forEach(dojo.hitch(this,function(_62,cnt){
+dojo[(cnt<min||cnt>max)?"addClass":"removeClass"](_62,"dijitCalendarDisabledDate");
+}));
+}
+var h=this.getHeader();
+if(h){
+this._setText(this.getHeader(),this.attr("value").getFullYear());
+}
+},_populateYears:function(_63){
+var _64=this.attr("constraints");
+var _65=_63||this.attr("value").getFullYear();
+var _66=_65-Math.floor(this.displayedYears/2);
+var min=_64&&_64.min?_64.min.getFullYear():_66-10000;
+_66=Math.max(min,_66);
+this._displayedYear=_65;
+var _67=dojo.query(".dojoxCalendarYearLabel",this.yearContainer);
+var max=_64&&_64.max?_64.max.getFullYear()-_66:_67.length;
+var _68="dijitCalendarDisabledDate";
+_67.forEach(dojo.hitch(this,function(_69,cnt){
+if(cnt<=max){
+this._setText(_69,_66+cnt);
+dojo.removeClass(_69,_68);
+}else{
+dojo.addClass(_69,_68);
+}
+}));
+if(this._incBtn){
+dojo[max<_67.length?"addClass":"removeClass"](this._incBtn,_68);
+}
+if(this._decBtn){
+dojo[min>=_66?"addClass":"removeClass"](this._decBtn,_68);
+}
+var h=this.getHeader();
+if(h){
+this._setText(this.getHeader(),_66+" - "+(_66+11));
+}
+},_updateSelectedYear:function(){
+this._year=String((this._cachedDate||this.attr("value")).getFullYear());
+this._updateSelectedNode(".dojoxCalendarYearLabel",dojo.hitch(this,function(_6a,idx){
+return this._year!==null&&_6a.innerHTML==this._year;
+}));
+},_updateSelectedMonth:function(){
+var _6b=(this._cachedDate||this.attr("value")).getMonth();
+this._month=_6b;
+this._updateSelectedNode(".dojoxCalendarMonthLabel",function(_6c,idx){
+return idx==_6b;
+});
+},_updateSelectedNode:function(_6d,_6e){
+var sel="dijitCalendarSelectedDate";
+dojo.query(_6d,this.domNode).forEach(function(_6f,idx,_70){
+dojo[_6e(_6f,idx,_70)?"addClass":"removeClass"](_6f.parentNode,sel);
+});
+var _71=dojo.query(".dojoxCal-MY-M-Template div",this.myContainer).filter(function(_72){
+return dojo.hasClass(_72.parentNode,sel);
+})[0];
+if(!_71){
+return;
+}
+var _73=dojo.hasClass(_71,"dijitCalendarDisabledDate");
+dojo[_73?"addClass":"removeClass"](this.okBtn,"dijitDisabled");
+},onClick:function(evt){
+var _74;
+var _75=this;
+var sel="dijitCalendarSelectedDate";
+function hc(c){
+return dojo.hasClass(evt.target,c);
+};
+if(hc("dijitCalendarDisabledDate")){
+dojo.stopEvent(evt);
+return false;
+}
+if(hc("dojoxCalendarMonthLabel")){
+_74="dojoxCal-MY-M-Template";
+this._month=evt.target.parentNode.cellIndex+(evt.target.parentNode.parentNode.rowIndex*2);
+this._cachedDate.setMonth(this._month);
+this._updateSelectedMonth();
+}else{
+if(hc("dojoxCalendarYearLabel")){
+_74="dojoxCal-MY-Y-Template";
+this._year=Number(evt.target.innerHTML);
+this._cachedDate.setYear(this._year);
+this._populateMonths();
+this._updateSelectedYear();
+}else{
+if(hc("dojoxCalendarDecrease")){
+this._populateYears(this._displayedYear-10);
+return true;
+}else{
+if(hc("dojoxCalendarIncrease")){
+this._populateYears(this._displayedYear+10);
+return true;
+}else{
+return true;
+}
+}
+}
+}
+dojo.stopEvent(evt);
+return false;
+},onOk:function(evt){
+dojo.stopEvent(evt);
+if(dojo.hasClass(this.okBtn,"dijitDisabled")){
+return false;
+}
+this.onValueSelected(this._cachedDate);
+return false;
+},onCancel:function(evt){
+dojo.stopEvent(evt);
+this.onValueSelected(this.attr("value"));
+return false;
+}});
+dojo.declare("dojox.widget.Calendar2Pane",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonthYear],{});
+dojo.declare("dojox.widget.Calendar",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonthYear],{});
+dojo.declare("dojox.widget.DailyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarDay],{});
+dojo.declare("dojox.widget.MonthAndYearlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarMonthYear],{});
+}
diff --git a/js/dojo/dojox/widget/Calendar/Calendar.css b/js/dojo/dojox/widget/Calendar/Calendar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/Calendar.css
@@ -0,0 +1,260 @@
+.dojoxCalendar {
+ width: 182px;
+}
+.dojoxCalendarContainer {
+ cursor: default;
+ font-family: tahoma, verdana, helvetica;
+ font-size: 11px;
+ padding: 0px;
+ text-align: center;
+ width: 180px;
+ overflow: hidden;
+}
+.dojoxCalendarBody {
+ height: 138px;
+ overflow: hidden;
+ position: relative;
+ margin: auto;
+ width: 180px;
+}
+.dojoxCalendar .no-header .dojoxCalendarBody {
+ height: 162px;
+}
+.dojoxCalendar .dijitCalendarDayLabels, .dojoxCalendarMonthLabels, .dojoxCalendarYearLabels, .dojoxCal-MY-labels {
+ width: 180px;
+ height: 138px;
+ top: 0px;
+ position: absolute;
+ left: 0px;
+ margin: auto;
+ text-align: center;
+}
+.dojoxCalendar .dojoxCalendarBody > div {
+ width: 180px;
+}
+.dojoxCalendar .dijitCalendarDateTemplate {
+ padding: 0 1px 0 0 !important;
+}
+.nihilo .dojoxCalendar .dijitCalendarDateTemplate,
+.soria .dojoxCalendar .dijitCalendarDateTemplate {
+ border: 0px none !important;
+}
+.soria tr.dojoxCal-MY-btns {
+ background: url(../../../dijit/themes/soria/images/tabBottomHoverC.gif) repeat-x scroll 0px -21px;
+}
+.dojoxCalendar .noPointer, .dojoxCalendar .noPointer * {
+ cursor: auto;
+}
+.dojoxCalendarContainer table {
+ font-size: 11px;
+ border-bottom: 4px solid white;
+}
+.dojoxCalendarHeader {
+ height: 20px;
+ width: 172px;
+ padding: 4px 4px 0;
+}
+.dojoxCalendar .no-header .dojoxCalendarHeader {
+ display: none;
+}
+.soria .dojoxCalendarHeader {
+ background: #BED7F0 url(../../../dijit/themes/soria/images/titleBar.png) repeat-x scroll center top;
+}
+.dojoxCalendarDecrease, .dojoxCalendarIncrease {
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dojoxCalendarDecrease {
+ background: transparent url(../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png) no-repeat scroll left top;
+ float: left;
+}
+.dojoxCalendarIncrease {
+ background: transparent url(../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png) no-repeat scroll -30px top;
+ float: right;
+}
+.dojoxCalendarMonthLabel {
+ cursor: pointer;
+ height: 35px;
+ width: 41px;
+ overflow: hidden;
+ text-align: center;
+ padding-top: 10px;
+}
+.dojoxCalendarYearLabel {
+ cursor: pointer;
+ height: 35px;
+ width: 41px;
+ overflow: hidden;
+ text-align: center;
+ padding-top: 10px;
+}
+.dojoxCalendarTitle {
+ cursor: pointer;
+ font-weight: bold;
+}
+.dojoxCalendar .navToPanel .dojoxCalendarDayYearLabel,
+.dojoxCalendar .navToPanel .dojoxCalendarYearHeader,
+.dojoxCalendar .navToPanel .dojoxCalendarMonthHeader {
+ padding-right: 15px;
+ background: url(../../../dijit/themes/tundra/images/comboArrowDown.gif) right no-repeat;
+}
+.dojoxCalendar .dijitCalendarDateLabel {
+ height: 17px;
+ width: 17px;
+ padding: 1px 3px 0px 3px;
+ text-align: center;
+ border: 1px solid white;
+}
+.dojoxCalendar .dijitCalendarDayLabel {
+ cursor: pointer;
+ height: 17px;
+ width: 18px;
+ padding: 0pt 2px;
+ text-align: center;
+}
+.dojoxCalendar .dojoxCalendarContainer {
+ background-color: white;
+ border: 1px solid #656565;
+ color: black;
+}
+.dojoxCalendar .dijitCalendarDisabledDate {
+ text-decoration:line-through !important;
+ cursor:default !important;
+}
+.dojoxCalendar .dojoxCalendarFooter {
+ border-top: 1px solid #F4F4F4;
+ height: 15px;
+ padding-top: 4px;
+ cursor: pointer;
+}
+.soria .dojoxCalendar .dojoxCalendarFooter {
+ border-top: 0px none;
+ padding-top: 5px;
+ background: white url(../../../dijit/themes/soria/images/titleBar.png) repeat-x scroll center top
+}
+.dojoxCalendar .dojoxCalendarMonthLabel {
+ border: 1px solid white;
+}
+.dojoxCalendar .dojoxCalendarYearLabel {
+ border: 1px solid white;
+}
+.dojoxCalendar .dijitCalendarNextMonth .dijitCalendarDateLabel,
+.dojoxCalendar .dijitCalendarPreviousMonth .dijitCalendarDateLabel {
+ border: 0px;
+ color: #646464;
+ padding-left: 0px;
+ padding-right: 0px;
+}
+.dojoxCalendar .dijitCalendarNextMonth, .dojoxCalendar .dijitCalendarPreviousMonth {
+ background-color: #E4E4E4;
+}
+.dojoxCalendar .dijitCalendarNextMonth .dojoxCalendarYearLabel,
+.dojoxCalendar .dijitCalendarPreviousMonth .dojoxCalendarYearLabel {
+ background-color: white;
+ border-color: white;
+ color: #646464;
+}
+.dojoxCalendar .dijitCalendarSelectedDate,
+.tundra .dojoxCalendar .dijitCalendarSelectedDate,
+.nihilo .dojoxCalendar .dijitCalendarSelectedDate {
+
+ background-color:#ffe284 !important;
+ color:black !important;
+ border:#f5b93c solid 1px !important;
+}
+.soria .dojoxCalendar td.dijitCalendarSelectedDate {
+ background-color: #B9CBF1 !important;
+ color: black !important;
+ border: 1px solid #4B5AAA !important;
+}
+.soria .dojoxCalendar .dijitCalendarSelectedDate div {
+
+ background-color: #B9CBF1 !important;
+ border: none !important;
+}
+.dojoxCalendar .dijitCalendarSelectedDate div {
+
+ background-color: #FFE284 !important;
+ border: none !important;
+}
+div.dojoxCalendar tr.dojoxCal-MY-G-Template td.dijitCalendarSelectedDate {
+ background-color: transparent;
+ width: 43px;
+}
+.dojoxCalendar tr.dojoxCal-MY-G-Template td {
+ width: 45px;
+}
+.dojoxCalendar .dijitCalendarSelectedDate div.dijitCalendarDateLabel {
+ padding: 1px 1px 0px 3px;
+}
+.dojoxCalendar .monthOnly .dijitCalendarDayLabels,
+.dojoxCalendar .yearOnly .dijitCalendarDayLabels,
+.dojoxCalendar .monthOnly .dojoxCalendarComma,
+.dojoxCalendar .yearOnly .dojoxCalendarComma,
+.dojoxCalendar .monthOnly .dojoxCalendarFooter,
+.dojoxCalendar .yearOnly .dojoxCalendarFooter,
+.dojoxCalendar .monthOnly .dojoxCalendarYearHeader,
+.dojoxCalendar .monthOnly .dojoxCalendarIncrease,
+.dojoxCalendar .monthOnly .dojoxCalendarDecrease,
+.dojoxCalendar .yearOnly .dojoxCalendarMonthLabelNode {
+ display: none;
+}
+.dojoxCal-MY-labels .dojoxCalendarMonthLabel,
+.dojoxCal-MY-labels .dojoxCalendarYearLabel {
+ height: 13px;
+ padding-top: 4px;
+ padding-bottom: 3px;
+}
+.dojoxCal-MY-labels td.dojoxCal-MY-btns {
+ padding-top: 2px;
+ border-top: 1px solid grey;
+ text-align: center;
+}
+.dojoxCal-MY-labels {
+ background-color: white;
+}
+.dojoxCal-MY-labels .dojoxCalendarIncrease,
+.dojoxCal-MY-labels .dojoxCalendarDecrease {
+ float: none;
+ margin-left: 14px;
+}
+.dojoxCal-MY-btns button {
+ font-size: 8pt;
+}
+.dojoxCalendar .dojoxCal-MY-btns .dijitDisabled button {
+ color: #999;
+}
+.dojoxCal-hidden {
+ visibility: hidden;
+}
+.dojoxCalendar .dojoxCal-MY-labels {
+ height: 164px;
+}
+.dojoxCalendar .dojoxCal-MY-labels .dijitCalendarSelectedDate div {
+ padding-top: 3px;
+ padding-bottom: 2px;
+}
+.soria .dojoxCal-MY-labels .dijitCalendarSelectedDate div {
+ padding-top: 4px;
+ padding-bottom: 3px;
+}
+.dojoxCal-MY-labels .dojoxCalendarMonthLabel {
+ width: 38px;
+}
+.dojoxCal-MY-labels .dojoxCal-MY-M-last {
+ border-right: 1px grey solid;
+}
+.soria .dojoxCal-MY-labels .dojoxCal-MY-M-last {
+ border-right: 1px #B9CBF1 solid;
+}
+.dojoxCal-MY-labels .dojoxCal-MY-M-last .dojoxCalendarMonthLabel,
+.dojoxCal-MY-labels .dojoxCal-MY-G-Template div.dojoxCalendarYearLabel {
+ width: 42px;
+}
+.dojoxCalendar .cancel-btn {
+ margin-left: 11px;
+}
+.dojoxCalendar .ok-btn {
+ margin-left: 15px;
+}
diff --git a/js/dojo/dojox/widget/Calendar/Calendar.html b/js/dojo/dojox/widget/Calendar/Calendar.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/Calendar.html
@@ -0,0 +1,24 @@
+<div class="dojoxCalendar">
+ <div tabindex="0" class="dojoxCalendarContainer" style="visibility: visible;" dojoAttachPoint="container">
+ <div style="display:none">
+ <div dojoAttachPoint="previousYearLabelNode"></div>
+ <div dojoAttachPoint="nextYearLabelNode"></div>
+ <div dojoAttachPoint="monthLabelSpacer"></div>
+ </div>
+ <div class="dojoxCalendarHeader">
+ <div>
+ <div class="dojoxCalendarDecrease" dojoAttachPoint="decrementMonth"></div>
+ </div>
+ <div class="">
+ <div class="dojoxCalendarIncrease" dojoAttachPoint="incrementMonth"></div>
+ </div>
+ <div class="dojoxCalendarTitle" dojoAttachPoint="header" dojoAttachEvent="onclick: onHeaderClick">
+ </div>
+ </div>
+ <div class="dojoxCalendarBody" dojoAttachPoint="containerNode"></div>
+ <div class="">
+ <div class="dojoxCalendarFooter" dojoAttachPoint="footer">
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/js/dojo/dojox/widget/Calendar/CalendarDay.html b/js/dojo/dojox/widget/Calendar/CalendarDay.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/CalendarDay.html
@@ -0,0 +1,23 @@
+<div class="dijitCalendarDayLabels" style="left: 0px;" dojoAttachPoint="dayContainer">
+ <div dojoAttachPoint="header">
+ <div dojoAttachPoint="monthAndYearHeader">
+ <span dojoAttachPoint="monthLabelNode" class="dojoxCalendarMonthLabelNode"></span>
+ <span dojoAttachPoint="headerComma" class="dojoxCalendarComma">,</span>
+ <span dojoAttachPoint="yearLabelNode" class="dojoxCalendarDayYearLabel"></span>
+ </div>
+ </div>
+ <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+ <thead>
+ <tr>
+ <td class="dijitCalendarDayLabelTemplate"><div class="dijitCalendarDayLabel"></div></td>
+ </tr>
+ </thead>
+ <tbody dojoAttachEvent="onclick: _onDayClick">
+ <tr class="dijitCalendarWeekTemplate">
+ <td class="dojoxCalendarNextMonth dijitCalendarDateTemplate">
+ <div class="dijitCalendarDateLabel"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo/dojox/widget/Calendar/CalendarMonth.html b/js/dojo/dojox/widget/Calendar/CalendarMonth.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/CalendarMonth.html
@@ -0,0 +1,12 @@
+<div class="dojoxCalendarMonthLabels" style="left: 0px;"
+ dojoAttachPoint="monthContainer" dojoAttachEvent="onclick: onClick">
+ <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+ <tbody>
+ <tr class="dojoxCalendarMonthGroupTemplate">
+ <td class="dojoxCalendarMonthTemplate">
+ <div class="dojoxCalendarMonthLabel"></div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo/dojox/widget/Calendar/CalendarMonthYear.html b/js/dojo/dojox/widget/Calendar/CalendarMonthYear.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/CalendarMonthYear.html
@@ -0,0 +1,31 @@
+<div class="dojoxCal-MY-labels" style="left: 0px;"
+ dojoAttachPoint="myContainer" dojoAttachEvent="onclick: onClick">
+ <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+ <tbody>
+ <tr class="dojoxCal-MY-G-Template">
+ <td class="dojoxCal-MY-M-Template">
+ <div class="dojoxCalendarMonthLabel"></div>
+ </td>
+ <td class="dojoxCal-MY-M-Template">
+ <div class="dojoxCalendarMonthLabel"></div>
+ </td>
+ <td class="dojoxCal-MY-Y-Template">
+ <div class="dojoxCalendarYearLabel"></div>
+ </td>
+ <td class="dojoxCal-MY-Y-Template">
+ <div class="dojoxCalendarYearLabel"></div>
+ </td>
+ </tr>
+ <tr class="dojoxCal-MY-btns">
+ <td class="dojoxCal-MY-btns" colspan="4">
+ <span class="dijitReset dijitInline dijitButtonNode ok-btn" dojoAttachEvent="onclick: onOk" dojoAttachPoint="okBtn">
+ <button class="dijitReset dijitStretch dijitButtonContents">OK</button>
+ </span>
+ <span class="dijitReset dijitInline dijitButtonNode cancel-btn" dojoAttachEvent="onclick: onCancel" dojoAttachPoint="cancelBtn">
+ <button class="dijitReset dijitStretch dijitButtonContents">Cancel</button>
+ </span>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo/dojox/widget/Calendar/CalendarYear.html b/js/dojo/dojox/widget/Calendar/CalendarYear.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Calendar/CalendarYear.html
@@ -0,0 +1,12 @@
+<div class="dojoxCalendarYearLabels" style="left: 0px;" dojoAttachPoint="yearContainer">
+ <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;" dojoAttachEvent="onclick: onClick">
+ <tbody>
+ <tr class="dojoxCalendarYearGroupTemplate">
+ <td class="dojoxCalendarNextMonth dojoxCalendarYearTemplate">
+ <div class="dojoxCalendarYearLabel">
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo/dojox/widget/CalendarFx.js b/js/dojo/dojox/widget/CalendarFx.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/CalendarFx.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.CalendarFx"]){
+dojo._hasResource["dojox.widget.CalendarFx"]=true;
+dojo.provide("dojox.widget.CalendarFx");
+dojo.require("dojox.widget.FisheyeLite");
+dojo.declare("dojox.widget._FisheyeFX",null,{addFx:function(_1,_2){
+dojo.query(_1,_2).forEach(function(_3){
+new dojox.widget.FisheyeLite({properties:{fontSize:1.1}},_3);
+});
+}});
+dojo.declare("dojox.widget.CalendarFisheye",[dojox.widget.Calendar,dojox.widget._FisheyeFX],{});
+}
diff --git a/js/dojo/dojox/widget/CalendarViews.js b/js/dojo/dojox/widget/CalendarViews.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/CalendarViews.js
@@ -0,0 +1,58 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.CalendarViews"]){
+dojo._hasResource["dojox.widget.CalendarViews"]=true;
+dojo.provide("dojox.widget.CalendarViews");
+dojo.experimental("dojox.widget.CalendarViews");
+dojo.require("dojox.widget.Calendar");
+dojo.declare("dojox.widget._CalendarMonth",null,{constructor:function(){
+this._addView(dojox.widget._CalendarMonthView);
+}});
+dojo.declare("dojox.widget._CalendarMonthView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarMonth.html","<div class=\"dojoxCalendarMonthLabels\" style=\"left: 0px;\" \n\tdojoAttachPoint=\"monthContainer\" dojoAttachEvent=\"onclick: onClick\">\n <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n <tbody>\n <tr class=\"dojoxCalendarMonthGroupTemplate\">\n <td class=\"dojoxCalendarMonthTemplate\">\n <div class=\"dojoxCalendarMonthLabel\"></div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n"),datePart:"year",headerClass:"dojoxCalendarMonthHeader",postCreate:function(){
+this.cloneClass(".dojoxCalendarMonthTemplate",3);
+this.cloneClass(".dojoxCalendarMonthGroupTemplate",2);
+this._populateMonths();
+this.addFx(".dojoxCalendarMonthLabel",this.domNode);
+},_setValueAttr:function(_1){
+this.header.innerHTML=_1.getFullYear();
+},_getMonthNames:dojox.widget._CalendarMonthYearView.prototype._getMonthNames,_populateMonths:dojox.widget._CalendarMonthYearView.prototype._populateMonths,onClick:function(_2){
+if(!dojo.hasClass(_2.target,"dojoxCalendarMonthLabel")){
+dojo.stopEvent(_2);
+return;
+}
+var _3=_2.target.parentNode.cellIndex+(_2.target.parentNode.parentNode.rowIndex*4);
+var _4=this.attr("value");
+_4.setMonth(_3);
+this.onValueSelected(_4,_3);
+}});
+dojo.declare("dojox.widget._CalendarYear",null,{parent:null,constructor:function(){
+this._addView(dojox.widget._CalendarYearView);
+}});
+dojo.declare("dojox.widget._CalendarYearView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarYear.html","<div class=\"dojoxCalendarYearLabels\" style=\"left: 0px;\" dojoAttachPoint=\"yearContainer\">\n <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\" dojoAttachEvent=\"onclick: onClick\">\n <tbody>\n <tr class=\"dojoxCalendarYearGroupTemplate\">\n <td class=\"dojoxCalendarNextMonth dojoxCalendarYearTemplate\">\n <div class=\"dojoxCalendarYearLabel\">\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n"),displayedYears:6,postCreate:function(){
+this.cloneClass(".dojoxCalendarYearTemplate",3);
+this.cloneClass(".dojoxCalendarYearGroupTemplate",2);
+this._populateYears();
+this.addFx(".dojoxCalendarYearLabel",this.domNode);
+},_setValueAttr:function(_5){
+this._populateYears(_5.getFullYear());
+},_populateYears:dojox.widget._CalendarMonthYearView.prototype._populateYears,adjustDate:function(_6,_7){
+return dojo.date.add(_6,"year",_7*12);
+},onClick:function(_8){
+if(!dojo.hasClass(_8.target,"dojoxCalendarYearLabel")){
+dojo.stopEvent(_8);
+return;
+}
+var _9=Number(_8.target.innerHTML);
+var _a=this.attr("value");
+_a.setYear(_9);
+this.onValueSelected(_a,_9);
+}});
+dojo.declare("dojox.widget.Calendar3Pane",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonth,dojox.widget._CalendarYear],{});
+dojo.declare("dojox.widget.MonthlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarMonth],{});
+dojo.declare("dojox.widget.YearlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarYear],{});
+}
diff --git a/js/dojo/dojox/widget/DataPresentation.js b/js/dojo/dojox/widget/DataPresentation.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/DataPresentation.js
@@ -0,0 +1,395 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DataPresentation"]){
+dojo._hasResource["dojox.widget.DataPresentation"]=true;
+dojo.provide("dojox.widget.DataPresentation");
+dojo.experimental("dojox.widget.DataPresentation");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.widget.Legend");
+dojo.require("dojox.charting.action2d.Tooltip");
+dojo.require("dojox.charting.action2d.Highlight");
+dojo.require("dojo.colors");
+dojo.require("dojo.data.ItemFileWriteStore");
+(function(){
+var _1=function(_2,_3,_4,_5,_6){
+var _7=[],_8=_3;
+_7[0]={value:0,text:""};
+var _9=_2.slice(0);
+if(_4){
+_9.reverse();
+}
+var _a=_9.length;
+if((_5!=="ClusteredBars")&&(_5!=="StackedBars")){
+var _b=_6.offsetWidth;
+var _c=(""+_9[0]).length*_9.length*7;
+if(_8==1){
+for(var z=1;z<500;++z){
+if((_c/z)<_b){
+break;
+}
+++_8;
+}
+}
+}
+for(var i=0;i<_a;i++){
+if(i%_8==0){
+_7.push({value:(i+1),text:_9[i]});
+}else{
+_7.push({value:(i+1),text:""});
+}
+}
+_7.push({value:(_a+1),text:""});
+return _7;
+};
+var _d=function(_e,_f){
+var _10={vertical:false,labels:_f,min:0,max:_f.length-1,majorTickStep:1,minorTickStep:1};
+if((_e==="ClusteredBars")||(_e==="StackedBars")){
+_10.vertical=true;
+}
+if((_e==="Lines")||(_e==="Areas")||(_e==="StackedAreas")){
+_10.min++;
+_10.max--;
+}
+return _10;
+};
+var _11=function(_12,_13,_14,_15){
+var _16={vertical:true,fixLower:"major",fixUpper:"major",natural:true};
+if(_13==="secondary"){
+_16.leftBottom=false;
+}
+if((_12==="ClusteredBars")||(_12==="StackedBars")){
+_16.vertical=false;
+}
+if(_14==_15){
+_16.min=_14-1;
+_16.max=_15+1;
+}
+return _16;
+};
+var _17=function(_18,_19,_1a){
+var _1b={type:_18,hAxis:"independent",vAxis:"dependent-"+_19,gap:4,lines:false,areas:false,markers:false};
+if((_18==="ClusteredBars")||(_18==="StackedBars")){
+_1b.hAxis=_1b.vAxis;
+_1b.vAxis="independent";
+}
+if((_18==="Lines")||(_18==="Hybrid-Lines")||(_18==="Areas")||(_18==="StackedAreas")){
+_1b.lines=true;
+}
+if((_18==="Areas")||(_18==="StackedAreas")){
+_1b.areas=true;
+}
+if(_18==="Lines"){
+_1b.markers=true;
+}
+if(_18==="Hybrid-Lines"){
+_1b.shadows={dx:2,dy:2,dw:2};
+_1b.type="Lines";
+}
+if(_18==="Hybrid-ClusteredColumns"){
+_1b.type="ClusteredColumns";
+}
+if(_1a){
+_1b.animate=_1a;
+}
+return _1b;
+};
+var _1c=function(_1d,_1e,_1f,_20,_21,_22,_23,_24,_25,_26){
+var _27=_1e;
+if(!_27){
+_1d.innerHTML="";
+_27=new dojox.charting.Chart2D(_1d);
+}
+if(_23){
+_23._clone=function(){
+var _28=new dojox.charting.Theme({chart:this.chart,plotarea:this.plotarea,axis:this.axis,series:this.series,marker:this.marker,antiAlias:this.antiAlias,assignColors:this.assignColors,assignMarkers:this.assigneMarkers,colors:dojo.delegate(this.colors)});
+_28.markers=this.markers;
+_28._buildMarkerArray();
+return _28;
+};
+_27.setTheme(_23);
+}
+var _29=_1(_24.series_data[0],_22,_20,_1f,_1d);
+var _2a={};
+var _2b=null;
+var _2c=null;
+var _2d=_24.series_name.length;
+for(var i=0;i<_2d;i++){
+if(_24.series_chart[i]&&(_24.series_data[i].length>0)){
+var _2e=_1f;
+var _2f=_24.series_axis[i];
+if(_2e=="Hybrid"){
+if(_24.series_charttype[i]=="line"){
+_2e="Hybrid-Lines";
+}else{
+_2e="Hybrid-ClusteredColumns";
+}
+}
+if(!_2a[_2f]){
+_2a[_2f]={};
+}
+if(!_2a[_2f][_2e]){
+var _30=_2f+"-"+_2e;
+_27.addPlot(_30,_17(_2e,_2f,_21));
+new dojox.charting.action2d.Tooltip(_27,_30);
+if((_2e!=="Lines")&&(_2e!=="Hybrid-Lines")){
+new dojox.charting.action2d.Highlight(_27,_30);
+}
+_2a[_2f][_2e]=true;
+}
+var _31=[];
+var _32=_24.series_data[i].length;
+for(var j=0;j<_32;j++){
+var val=_24.series_data[i][j];
+_31.push(val);
+if(_2b===null||val>_2b){
+_2b=val;
+}
+if(_2c===null||val<_2c){
+_2c=val;
+}
+}
+if(_20){
+_31.reverse();
+}
+var _33={plot:_2f+"-"+_2e};
+if(_24.series_linestyle[i]){
+_33.stroke={style:_24.series_linestyle[i]};
+}
+_27.addSeries(_24.series_name[i],_31,_33);
+}
+}
+_27.addAxis("independent",_d(_1f,_29));
+_27.addAxis("dependent-primary",_11(_1f,"primary",_2c,_2b));
+_27.addAxis("dependent-secondary",_11(_1f,"secondary",_2c,_2b));
+_27.render();
+return _27;
+};
+var _34=function(_35,_36,_37,_38){
+var _39=_36;
+if(!_39){
+if(_38){
+_39=new dojox.charting.widget.Legend({chart:_37,horizontal:false},_35);
+}else{
+_39=new dojox.charting.widget.Legend({chart:_37,vertical:false},_35);
+}
+}
+return _39;
+};
+var _3a=function(_3b,_3c,_3d,_3e,_3f){
+var _40=_3c||new dojox.grid.DataGrid({},_3b);
+_40.startup();
+_40.setStore(_3d,_3e,_3f);
+var _41=[];
+for(var ser=0;ser<_3d.series_name.length;ser++){
+if(_3d.series_grid[ser]&&(_3d.series_data[ser].length>0)){
+_41.push({field:"data."+ser,name:_3d.series_name[ser],width:"auto",formatter:_3d.series_gridformatter[ser]});
+}
+}
+_40.setStructure(_41);
+_40.render();
+return _40;
+};
+var _42=function(_43,_44){
+if(_44.title){
+_43.innerHTML=_44.title;
+}
+};
+var _45=function(_46,_47){
+if(_47.footer){
+_46.innerHTML=_47.footer;
+}
+};
+var _48=function(_49,_4a){
+var _4b=_49;
+if(_4a){
+var _4c=_4a.split(/[.\[\]]+/);
+for(var _4d in _4c){
+if(_4b){
+_4b=_4b[_4c[_4d]];
+}
+}
+}
+return _4b;
+};
+dojo.declare("dojox.widget.DataPresentation",null,{type:"chart",chartType:"clusteredBars",reverse:false,animate:null,labelMod:1,legendVertical:false,constructor:function(_4e,_4f){
+dojo.mixin(this,_4f);
+this.domNode=dojo.byId(_4e);
+this[this.type+"Node"]=this.domNode;
+if(typeof this.theme=="string"){
+this.theme=dojo.getObject(this.theme);
+}
+this.chartNode=dojo.byId(this.chartNode);
+this.legendNode=dojo.byId(this.legendNode);
+this.gridNode=dojo.byId(this.gridNode);
+this.titleNode=dojo.byId(this.titleNode);
+this.footerNode=dojo.byId(this.footerNode);
+if(this.url){
+this.setURL(null,this.refreshInterval);
+}else{
+if(this.data){
+this.setData(null,this.refreshInterval);
+}else{
+this.setStore();
+}
+}
+},setURL:function(url,_50){
+if(_50){
+this.cancelRefresh();
+}
+this.url=url||this.url;
+this.refreshInterval=_50||this.refreshInterval;
+var me=this;
+dojo.xhrGet({url:this.url,handleAs:"json-comment-optional",load:function(_51,_52){
+me.setData(_51);
+},error:function(xhr,_53){
+if(me.urlError&&(typeof me.urlError=="function")){
+me.urlError(xhr,_53);
+}
+}});
+if(_50&&(this.refreshInterval>0)){
+this.refreshIntervalPending=setInterval(function(){
+me.setURL();
+},this.refreshInterval);
+}
+},setData:function(_54,_55){
+if(_55){
+this.cancelRefresh();
+}
+this.data=_54||this.data;
+this.refreshInterval=_55||this.refreshInterval;
+var _56=(typeof this.series=="function")?this.series(this.data):this.series;
+var _57=[],_58=[],_59=[],_5a=[],_5b=[],_5c=[],_5d=[],_5e=[],_5f=[],_60=0;
+for(var ser=0;ser<_56.length;ser++){
+_57[ser]=_48(this.data,_56[ser].datapoints);
+if(_57[ser]&&(_57[ser].length>_60)){
+_60=_57[ser].length;
+}
+_58[ser]=[];
+_59[ser]=_56[ser].name||(_56[ser].namefield?_48(this.data,_56[ser].namefield):null)||("series "+ser);
+_5a[ser]=(_56[ser].chart!==false);
+_5b[ser]=_56[ser].charttype||"bar";
+_5c[ser]=_56[ser].linestyle;
+_5d[ser]=_56[ser].axis||"primary";
+_5e[ser]=(_56[ser].grid!==false);
+_5f[ser]=_56[ser].gridformatter;
+}
+var _61,_62,_63,_64;
+var _65=[];
+for(_61=0;_61<_60;_61++){
+_62={index:_61};
+for(ser=0;ser<_56.length;ser++){
+if(_57[ser]&&(_57[ser].length>_61)){
+_63=_48(_57[ser][_61],_56[ser].field);
+if(_5a[ser]){
+_64=parseFloat(_63);
+if(!isNaN(_64)){
+_63=_64;
+}
+}
+_62["data."+ser]=_63;
+_58[ser].push(_63);
+}
+}
+_65.push(_62);
+}
+if(_60<=0){
+_65.push({index:0});
+}
+var _66=new dojo.data.ItemFileWriteStore({data:{identifier:"index",items:_65}});
+if(this.data.title){
+_66.title=this.data.title;
+}
+if(this.data.footer){
+_66.footer=this.data.footer;
+}
+_66.series_data=_58;
+_66.series_name=_59;
+_66.series_chart=_5a;
+_66.series_charttype=_5b;
+_66.series_linestyle=_5c;
+_66.series_axis=_5d;
+_66.series_grid=_5e;
+_66.series_gridformatter=_5f;
+this.setPreparedStore(_66);
+if(_55&&(this.refreshInterval>0)){
+var me=this;
+this.refreshIntervalPending=setInterval(function(){
+me.setData();
+},this.refreshInterval);
+}
+},refresh:function(){
+if(this.url){
+this.setURL(this.url,this.refreshInterval);
+}else{
+if(this.data){
+this.setData(this.data,this.refreshInterval);
+}
+}
+},cancelRefresh:function(){
+if(this.refreshIntervalPending){
+clearInterval(this.refreshIntervalPending);
+this.refreshIntervalPending=undefined;
+}
+},setStore:function(_67,_68,_69){
+this.setPreparedStore(_67,_68,_69);
+},setPreparedStore:function(_6a,_6b,_6c){
+this.preparedstore=_6a||this.store;
+this.query=_6b||this.query;
+this.queryOptions=_6c||this.queryOptions;
+if(this.preparedstore){
+if(this.chartNode){
+this.chartWidget=_1c(this.chartNode,this.chartWidget,this.chartType,this.reverse,this.animate,this.labelMod,this.theme,this.preparedstore,this.query,this,_6c);
+}
+if(this.legendNode){
+this.legendWidget=_34(this.legendNode,this.legendWidget,this.chartWidget,this.legendVertical);
+}
+if(this.gridNode){
+this.gridWidget=_3a(this.gridNode,this.gridWidget,this.preparedstore,this.query,this.queryOptions);
+}
+if(this.titleNode){
+_42(this.titleNode,this.preparedstore);
+}
+if(this.footerNode){
+_45(this.footerNode,this.preparedstore);
+}
+}
+},getChartWidget:function(){
+return this.chartWidget;
+},getGridWidget:function(){
+return this.gridWidget;
+},destroy:function(){
+this.cancelRefresh();
+if(this.chartWidget){
+this.chartWidget.destroy();
+this.chartWidget=undefined;
+}
+if(this.legendWidget){
+this.legendWidget=undefined;
+}
+if(this.gridWidget){
+this.gridWidget=undefined;
+}
+if(this.chartNode){
+this.chartNode.innerHTML="";
+}
+if(this.legendNode){
+this.legendNode.innerHTML="";
+}
+if(this.gridNode){
+this.gridNode.innerHTML="";
+}
+if(this.titleNode){
+this.titleNode.innerHTML="";
+}
+if(this.footerNode){
+this.footerNode.innerHTML="";
+}
+}});
+})();
+}
diff --git a/js/dojo/dojox/widget/Dialog.js b/js/dojo/dojox/widget/Dialog.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Dialog.js
@@ -0,0 +1,86 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Dialog"]){
+dojo._hasResource["dojox.widget.Dialog"]=true;
+dojo.provide("dojox.widget.Dialog");
+dojo.experimental("dojox.widget.Dialog");
+dojo.require("dijit.Dialog");
+dojo.require("dojox.layout.ContentPane");
+dojo.require("dojox.fx");
+dojo.declare("dojox.widget.Dialog",[dojox.layout.ContentPane,dijit._DialogBase],{templateString:dojo.cache("dojox.widget","Dialog/Dialog.html","<div class=\"dojoxDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoxDialogTitleBar\">\n\t\t<span dojoAttachPoint=\"titleNode\" class=\"dojoxDialogTitle\" id=\"${id}_title\">${title}</span>\n\t</div>\n\t<div dojoAttachPoint=\"dojoxDialogWrapper\">\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dojoxDialogPaneContent\"></div>\n\t</div>\n\t<div dojoAttachPoint=\"closeButtonNode\" class=\"dojoxDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\">\n\t\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</div>\n</div>\n"),sizeToViewport:false,viewportPadding:35,dimensions:null,easing:null,sizeDuration:dijit._defaultDuration,sizeMethod:"chain",showTitle:false,draggable:false,modal:false,constructor:function(_1,_2){
+this.easing=_1.easing||dojo._defaultEasing;
+this.dimensions=_1.dimensions||[300,300];
+},_setup:function(){
+this.inherited(arguments);
+if(!this._alreadyInitialized){
+this._navIn=dojo.fadeIn({node:this.closeButtonNode});
+this._navOut=dojo.fadeOut({node:this.closeButtonNode});
+if(!this.showTitle){
+dojo.addClass(this.domNode,"dojoxDialogNoTitle");
+}
+}
+},layout:function(e){
+this._setSize();
+this.inherited(arguments);
+},_setSize:function(){
+this._vp=dijit.getViewport();
+var tc=this.containerNode,_3=this.sizeToViewport;
+return this._displaysize={w:_3?tc.scrollWidth:this.dimensions[0],h:_3?tc.scrollHeight:this.dimensions[1]};
+},show:function(){
+if(this.open){
+return;
+}
+this._setSize();
+dojo.style(this.closeButtonNode,"opacity",0);
+dojo.style(this.domNode,{overflow:"hidden",opacity:0,width:"1px",height:"1px"});
+dojo.style(this.containerNode,{opacity:0,overflow:"hidden"});
+this.inherited(arguments);
+if(this.modal){
+this._modalconnects.push(dojo.connect(dojo.body(),"onkeypress",function(e){
+if(e.charOrCode==dojo.keys.ESCAPE){
+dojo.stopEvent(e);
+}
+}));
+}else{
+this._modalconnects.push(dojo.connect(dijit._underlay.domNode,"onclick",this,"onCancel"));
+}
+this._modalconnects.push(dojo.connect(this.domNode,"onmouseenter",this,"_handleNav"));
+this._modalconnects.push(dojo.connect(this.domNode,"onmouseleave",this,"_handleNav"));
+},_handleNav:function(e){
+var _4="_navOut",_5="_navIn",_6=(e.type=="mouseout"?_5:_4),_7=(e.type=="mouseout"?_4:_5);
+this[_6].stop();
+this[_7].play();
+},_position:function(){
+if(!this._started){
+return;
+}
+if(this._sizing){
+this._sizing.stop();
+this.disconnect(this._sizingConnect);
+delete this._sizing;
+}
+this.inherited(arguments);
+if(!this.open){
+dojo.style(this.containerNode,"opacity",0);
+}
+var _8=this.viewportPadding*2;
+var _9={node:this.domNode,duration:this.sizeDuration||dijit._defaultDuration,easing:this.easing,method:this.sizeMethod};
+var ds=this._displaysize||this._setSize();
+_9["width"]=ds.w=(ds.w+_8>=this._vp.w||this.sizeToViewport)?this._vp.w-_8:ds.w;
+_9["height"]=ds.h=(ds.h+_8>=this._vp.h||this.sizeToViewport)?this._vp.h-_8:ds.h;
+this._sizing=dojox.fx.sizeTo(_9);
+this._sizingConnect=this.connect(this._sizing,"onEnd","_showContent");
+this._sizing.play();
+},_showContent:function(e){
+var _a=this.containerNode;
+dojo.style(this.domNode,{overflow:"visible",opacity:1});
+dojo.style(this.closeButtonNode,"opacity",1);
+dojo.style(_a,{height:this._displaysize.h-this.titleNode.offsetHeight+"px",width:this._displaysize.w+"px",overflow:"auto"});
+dojo.anim(_a,{opacity:1});
+}});
+}
diff --git a/js/dojo/dojox/widget/Dialog/Dialog.css b/js/dojo/dojox/widget/Dialog/Dialog.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Dialog/Dialog.css
@@ -0,0 +1,85 @@
+
+.dojoxDialog {
+ position: absolute;
+ z-index: 999;
+ outline:0;
+}
+.dojoxDialog .closeText {
+ display:none;
+
+ position:absolute;
+}
+.dojoxDialogFixed div.dojoxDialogTitleBar {
+ cursor:default;
+}
+.dojoxDialogWrapper {
+ left: 0;
+ top: 0;
+}
+.dojoxDialog {
+ background: #fff;
+ -webkit-box-shadow: 0px 5px 10px #adadad;
+ -moz-border-radius:9pt;
+ -webkit-border-radius:8pt;
+ border:1px solid #b7b7b7;
+ padding:1.5em 3px 3px 3px;
+}
+.dojoxDialogFocused {
+ border:1px solid #ccc;
+}
+.dojoxDialog .dojoxDialogPaneContent {
+ border:none;
+ padding:0;
+}
+.dojoxDialogTitleBar {
+
+ cursor:move;
+ top:0;
+ left:0;
+ right:0;
+ background:#ededed;
+ height:1.5em;
+ outline:0;
+ -moz-border-radius-topleft:8pt;
+ -moz-border-radius-topright:8pt;
+ -webkik-border-radius-topleft:7pt;
+ -webkit-border-radius-topright:7pt;
+}
+.dj_webkit .dojoxDialogTitleBar {
+ border:1px solid #ccc;
+}
+.dojoxDialogNoTitle .dojoxDialogTitleBar {
+ display:none;
+}
+.dojoxDialogContent {
+
+ padding: 3px;
+ margin-top:1.2em;
+}
+.dojoxDialogTitle {
+ font-weight: bold;
+ padding: 8px 12px 8px 12px;
+ outline:0;
+ border-bottom:#b7b7b7;
+}
+div.dojoxDialogNoTitle {
+ padding-top:9px;
+}
+.dojoxDialogCloseIcon {
+ background : url("images/dialogCloseButton.png") no-repeat top right;
+ position: absolute;
+ vertical-align: middle;
+ left: -19px;
+ top: -19px;
+ height: 29px;
+ width: 29px;
+ cursor: pointer;
+ z-index: 999;
+}
+.dj_ie6 .dojoxDialogCloseIcon {
+ background-image: url("images/dialogCloseButton.gif");
+}
+.dojoxDialogNoTitle .dojoxDialogCloseIcon {
+ top: -15px;
+ left: -15px;
+}
diff --git a/js/dojo/dojox/widget/Dialog/Dialog.html b/js/dojo/dojox/widget/Dialog/Dialog.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Dialog/Dialog.html
@@ -0,0 +1,11 @@
+<div class="dojoxDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+ <div dojoAttachPoint="titleBar" class="dojoxDialogTitleBar">
+ <span dojoAttachPoint="titleNode" class="dojoxDialogTitle" id="${id}_title">${title}</span>
+ </div>
+ <div dojoAttachPoint="dojoxDialogWrapper">
+ <div dojoAttachPoint="containerNode" class="dojoxDialogPaneContent"></div>
+ </div>
+ <div dojoAttachPoint="closeButtonNode" class="dojoxDialogCloseIcon" dojoAttachEvent="onclick: onCancel">
+ <span dojoAttachPoint="closeText" class="closeText">x</span>
+ </div>
+</div>
diff --git a/js/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif b/js/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1f45a5cd438bca4c7434c6bf64c6ebbd68e537b3
GIT binary patch
literal 1408
zc%1Fi{WF^f0KoAlBuhe&Mo5-=mk^d(Cl!jFCryH+NwITNJyvgLimqOdZPiOOUQ+Y~
z@phcVVqOlT-e+z>>b$GU>AY6Tnb)g&fA6mQ6ZZ2yzkUCJuLs-R>1MDoU<@1;0%$ZE
zg+h6HdfM69A(2Qjne6K7%3`s&T&{_U2@D3aw6vtt=>`S{US3`V0>RPIvA@6n`1p8l
zZ%?ICX=rF9CnpPq!kL+w!^6YS&`_mP>Eq)wHa7O`*)wZvYqeUPmzQ^Tb~Z3DaCCH(
zm6es2mX@EN@8RJwIXO8xI$B&@9334km&+Fx7UJXM0|NtzMB@Jben&?~Wo6~g&JK-6
zb8~Zxh=_1<a%yR5SzcalXlSstwOw6ZZEkMf-Q8VWTwGaMDK9U7^X5%(aByT~WM*dO
z$;k;GkDr*B=<4b!D=V9wot>Yb&&kQ@?(SY&Tie*!*xue=Ute!+Z4C(t;q&<*2o4So
zDin%?g99rotG938Zf<VQ&CLxB4J9Nbq^GB!o}S8NvZSP>o}Qkfq9Pj`o0OE4prD|w
zt*!C#abI6w2M33+u&}texbX0B3WZWzTYG+f-qzL@8yhPYi$_LAa&vPpE-oHFe#~Gn
zDk>^6GBPeNFa7-d+S}WsqM{H8go}&I@bIueAkfp(OH53xuC9Ln{=L1u{kwPX8XFsX
zdwZv*rn0lMr>CbyA`z8J1pwgVzkvV!SLP>B2mllUluz;L2>|gCxP~<H^d5m>1IWhr
z!m1{4sc6f4!!c^jsw_OU?g8;Di+nup2t?XfVe-hF)s;>}^|Ato^XjZ&wuJLomUe_>
z)rYZ{*c<F7^Uzey=dRA+tNma>p1||UZSM_%EH4xBtx?26odeXMl=lc6Ws7cAT}wjO
z1dbR&%t(?;p-h=-hT>4U1dO8NxBGvBwE^`OO<E+1gYBe~;+UU4kYh?+UHau4D2D*0
z<#^X>Kb=6)xJ`ibK9ni-@-4OJV-UBIWMnP2kH3w>*z(AsKWp-?w?CxTsZudI=;ALR
z0!7(P`MmztaU)ah9*=OgO_XA-#UD6KE73>O`xZy|QY<PPSMlp>0w;o~ZnzP`zc|z6
zypoB`;ZM%UcUePbA>J>Tq^nrzQYtLQeF{psUL%D_*61P)bMIXSDVegQ&d_y+l$)9U
zl=(ESfEZH(mmtK7tS_BC1x8lj_t0!)nGYLXAZ>z?gm+)|YBCAptFW)p{-Gp)G+VAE
z0qH}qLhdcLz6APOQK(}i>w^c-VtR`LcFh?i-h*Hfya45cMCt-&f0rdpBl(|8Izcu{
zgDqA{Btd9}RA?Bv2D9*u>nqS~M)sHZqs`Xk1$Tz~N^G`DAaq^tI2ezKkSc2Ag}>kW
z0Uw}*GQaz4>A`1@rUNJ4VXf1rO0KGlKBSFFT#CGMN7c%JrzL=pdWot@$zpY4VH!9c
z0pta3dkJBPGgiL_pPc_FhP$3C7}|s&C<8i&A->c%3KLGk4M%euZ(pfL_i0`Gqx~TW
Gxcmb#F7<l=
diff --git a/js/dojo/dojox/widget/Dialog/images/dialogCloseButton.png b/js/dojo/dojox/widget/Dialog/images/dialogCloseButton.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9d2f4236b875e153d9a65a7278aaaca9c58ce25e
GIT binary patch
literal 1357
zc$@)E1+w~yP)<h;3K|Lk000e1NJLTq0012T0012b1^@s6R+DEB0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$?@2^KRCwB?S9>URSrlK_V<d_+7>`KG
zJLDC^7v&FX6kmy&qI5O+gC^6AA&R0rhLT5VhM|$<4`U>+kaTYtF-FMnAq^sVP2SHv
zYwfw`bk4okb$zqyclSB_oV|W$ueJ7C>na#yV2mgfidY<C5bqEk2rtAxh%LmQ2o*w&
z`ZixxMx-wR#S&4B_={dO677ih2K5>sR3bhI%1TN~*x1+@+uq)0CnqP2<nHc{9UdOC
z#l=O|)6>HuBO|5cb#Ed?sTCGCHa4=Ytu1DZoSmJq>FH@HF_}C-Tfaivr|7$%aLA_X
zrKKeZ3=HJ+x3{;jwzdY#%geC0w+Hj{^Wf;{2tGbO;OXhf-*a<w<L@3E96&=u15{O2
z(XATs74oc!98yvw{1%5F{QUf&udffhyu9G?@eyWcXQ92l9nh=><0C#k9@5j(!NI|S
z-xn1X3B*&#6Q@Ipgi$z5)Ah>A3i$i`!}awww6?Ya`Vx#4D=RA~EG&fJ;9zdbf`S65
zttD?k6W-@(lm3E3#_;ekBqk=p{rx@v%9)uN_!z0KuI45`Iy&NR&`1*U4Vq{OzaYZ6
zxHyQ4isDZ(8bPgA!_(7~2p1O@*}b7>Wo2dDw`6LSN+poKrymo|4IO$YFE0lh8ync!
z+2KAUe+noqErt5}dI${-mCZ|^kx7NQ^Ye4)?d|2tDMmB_sl*Ms38Y`rkB5f`zZn=9
zfQN?%5g{QV5Ed2&*4EZgTwDwh5fS1u`q1d;X#OlUHC48bthKwl3wCyP+_xHuH6doa
za8oLk+(Z`_7tqz!C0k5pZfa@*Oa@#zCJG1-59dB7LXy?hRjydNjzGtb#MjqXAdNA@
zpU*jcY%HJI-{0rv(U$J+ZXS(!d3l_e0>#|iTqMlN$$^`j8=ZA?b90cClmzbX?!weN
zBIPIA-rk<iU{>K@s82dOJNcNOpDz+_Y-~Vwb~Zm=`h-YHC{{G$L8PWUqD=mC@ALCB
zKQ1o`=2tK^H5Kojot?SA$H&L@zJGOf1ycRQN2HfRnj^8Wuy}E&9UUDI6T<@?Fdu`f
zt1CBkWo0Ed{m96O&YFOL02w)DNupn*tM&DDKI7!%q!SDTDIxhVB_##w>gvScqM%Ah
zNYGgq6cohQ93LMGq-#X_2VM2|_wyOb9@=M-0)e7cAWTb3gVWPfXl`zn5ocy*>YQO=
z9a%;rDxs9kQz^or;3aBkXoz88$$&dySXr32x3|u-ii!%o&#(Zn%galy6Z5f9?qUVf
z?`Wc}t&P8cq0f?&lbNlp?f=5W#01wz^;kprK`i2QV#vYL-J*{fn(U)NyGNgLUDOC@
zNQ-5igRt9-j118vSVx(qrRAHEo0}`@z>FmBl6o$kb_L}(dI2kh*n(iUz_8RYOa?}w
zrKN@8@e{2jX<d|hdnA-k5x)z>m}NvC4-O78Oy~>`xn5ut%X%qn1Q<rHKv-+AF+&Lv
zh_kY?*yiS@tog#K!4?)47^XKql5*kWNU)@_(a}-q4u3Yb8>CV{AS|S)CR0h3YYTnM
z)YKHiMnFpVy*~X4LmfVry+RzmMtmmB)zsAR?$6B3j30igER&OyfFCBS4Tv96xBAT;
zzT`N4gZTB8&Yu1SR3Z{z)2T4_zl>z}lz{yapCIlv1w(~;{x(*}zXA*Z7UuTAts#0}
P00000NkvXXu0mjf%q)Qt
diff --git a/js/dojo/dojox/widget/DocTester.js b/js/dojo/dojox/widget/DocTester.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/DocTester.js
@@ -0,0 +1,70 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DocTester"]){
+dojo._hasResource["dojox.widget.DocTester"]=true;
+dojo.provide("dojox.widget.DocTester");
+dojo.require("dojo.string");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.form.BusyButton");
+dojo.require("dojox.testing.DocTest");
+dojo.declare("dojox.widget.DocTester",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.widget","DocTester/DocTester.html","<div dojoAttachPoint=\"domNode\" class=\"dojoxDocTester\">\n\t<div dojoAttachPoint=\"containerNode\"></div>\n\t<button dojoType=\"dojox.form.BusyButton\" busyLabel=\"Testing...\" dojoAttachPoint=\"runButtonNode\">Run tests</button>\n\t<button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"resetButtonNode\" style=\"display:none;\">Reset</button>\n\t<span>\n\t\t<span dojoAttachPoint=\"numTestsNode\">0</span> tests,\n\t\t<span dojoAttachPoint=\"numTestsOkNode\">0</span> passed,\n\t\t<span dojoAttachPoint=\"numTestsNokNode\">0</span> failed\n\t</span>\n</div>\n"),widgetsInTemplate:true,_fillContent:function(_1){
+var _2=_1.innerHTML;
+this.doctests=new dojox.testing.DocTest();
+this.tests=this.doctests.getTestsFromString(this._unescapeHtml(_2));
+var _3=dojo.map(this.tests,"return item.line-1");
+var _4=_2.split("\n");
+var _5="<div class=\"actualResult\">FAILED, actual result was: <span class=\"result\"></span></div>";
+var _6="<pre class=\"testCase testNum0 odd\">";
+for(var i=0;i<_4.length;i++){
+var _7=dojo.indexOf(_3,i);
+if(_7>0&&_7!=-1){
+var _8=_7%2?"even":"odd";
+_6+=_5;
+_6+="</pre><pre class=\"testCase testNum"+_7+" "+_8+"\">";
+}
+_6+=_4[i].replace(/^\s+/,"")+"\n";
+}
+_6+=_5+"</pre>";
+this.containerNode.innerHTML=_6;
+},postCreate:function(){
+this.inherited("postCreate",arguments);
+dojo.connect(this.runButtonNode,"onClick",dojo.hitch(this,"runTests"));
+dojo.connect(this.resetButtonNode,"onClick",dojo.hitch(this,"reset"));
+this.numTestsNode.innerHTML=this.tests.length;
+},runTests:function(){
+var _9={ok:0,nok:0};
+for(var i=0;i<this.tests.length;i++){
+var _a=this.doctests.runTest(this.tests[i].commands,this.tests[i].expectedResult);
+dojo.query(".testNum"+i,this.domNode).addClass(_a.success?"resultOk":"resultNok");
+if(!_a.success){
+_9.nok++;
+this.numTestsNokNode.innerHTML=_9.nok;
+var _b=dojo.query(".testNum"+i+" .actualResult",this.domNode)[0];
+dojo.style(_b,"display","inline");
+dojo.query(".result",_b)[0].innerHTML=dojo.toJson(_a.actualResult);
+}else{
+_9.ok++;
+this.numTestsOkNode.innerHTML=_9.ok;
+}
+}
+this.runButtonNode.cancel();
+dojo.style(this.runButtonNode.domNode,"display","none");
+dojo.style(this.resetButtonNode.domNode,"display","");
+},reset:function(){
+dojo.style(this.runButtonNode.domNode,"display","");
+dojo.style(this.resetButtonNode.domNode,"display","none");
+this.numTestsOkNode.innerHTML="0";
+this.numTestsNokNode.innerHTML="0";
+dojo.query(".actualResult",this.domNode).style("display","none");
+dojo.query(".testCase",this.domNode).removeClass("resultOk").removeClass("resultNok");
+},_unescapeHtml:function(_c){
+_c=String(_c).replace(/&amp;/gm,"&").replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"");
+return _c;
+}});
+}
diff --git a/js/dojo/dojox/widget/DocTester/DocTester.css b/js/dojo/dojox/widget/DocTester/DocTester.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/DocTester/DocTester.css
@@ -0,0 +1,30 @@
+.dojoxDocTester pre.testCase{
+ border:0;
+ padding:0.3em;
+ padding-left:2em;
+}
+.dojoxDocTester pre.odd{
+ background-color:#E3E3E3;
+}
+.dojoxDocTester pre.odd.resultOk{
+ background-color:#C3FFC3;
+}
+.dojoxDocTester pre.odd.resultNok{
+ background-color:#FFC3C3;
+}
+.dojoxDocTester pre.even{
+ background-color:#F3F3F3;
+}
+.dojoxDocTester pre.even.resultOk{
+ background-color:#DFFFDF;
+}
+.dojoxDocTester pre.even.resultNok{
+ background-color:#FFCFCF;
+}
+.dojoxDocTester .actualResult{
+ display:none;
+ font-weight:bold;
+}
+.dojoxDocTester .actualResult .result{
+ color:red;
+}
diff --git a/js/dojo/dojox/widget/DocTester/DocTester.html b/js/dojo/dojox/widget/DocTester/DocTester.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/DocTester/DocTester.html
@@ -0,0 +1,10 @@
+<div dojoAttachPoint="domNode" class="dojoxDocTester">
+ <div dojoAttachPoint="containerNode"></div>
+ <button dojoType="dojox.form.BusyButton" busyLabel="Testing..." dojoAttachPoint="runButtonNode">Run tests</button>
+ <button dojoType="dijit.form.Button" dojoAttachPoint="resetButtonNode" style="display:none;">Reset</button>
+ <span>
+ <span dojoAttachPoint="numTestsNode">0</span> tests,
+ <span dojoAttachPoint="numTestsOkNode">0</span> passed,
+ <span dojoAttachPoint="numTestsNokNode">0</span> failed
+ </span>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/DynamicTooltip.js b/js/dojo/dojox/widget/DynamicTooltip.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/DynamicTooltip.js
@@ -0,0 +1,44 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DynamicTooltip"]){
+dojo._hasResource["dojox.widget.DynamicTooltip"]=true;
+dojo.provide("dojox.widget.DynamicTooltip");
+dojo.experimental("dojox.widget.DynamicTooltip");
+dojo.require("dijit.Tooltip");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget.DynamicTooltip",dijit.Tooltip,{hasLoaded:false,href:"",label:"",preventCache:false,postMixInProperties:function(){
+this.inherited(arguments);
+this._setLoadingLabel();
+},_setLoadingLabel:function(){
+if(this.href){
+this.label=dojo.i18n.getLocalization("dijit","loading",this.lang).loadingState;
+}
+},_setHrefAttr:function(_1){
+this.href=_1;
+this.hasLoaded=false;
+},loadContent:function(){
+if(!this.hasLoaded&&this.href){
+this._setLoadingLabel();
+this.hasLoaded=true;
+dojo.xhrGet({url:this.href,handleAs:"text",tooltipWidget:this,load:function(_2,_3){
+this.tooltipWidget.label=_2;
+this.tooltipWidget.close();
+this.tooltipWidget.open();
+},preventCache:this.preventCache});
+}
+},refresh:function(){
+this.hasLoaded=false;
+},open:function(_4){
+_4=_4||this._connectNodes[0];
+if(!_4){
+return;
+}
+this.loadContent();
+this.inherited(arguments);
+}});
+}
diff --git a/js/dojo/dojox/widget/FeedPortlet.js b/js/dojo/dojox/widget/FeedPortlet.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/FeedPortlet.js
@@ -0,0 +1,227 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FeedPortlet"]){
+dojo._hasResource["dojox.widget.FeedPortlet"]=true;
+dojo.provide("dojox.widget.FeedPortlet");
+dojo.require("dojox.widget.Portlet");
+dojo.require("dijit.Tooltip");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.Button");
+dojo.require("dojox.data.GoogleFeedStore");
+dojo.declare("dojox.widget.FeedPortlet",dojox.widget.Portlet,{local:false,maxResults:5,url:"",openNew:true,showFeedTitle:true,postCreate:function(){
+this.inherited(arguments);
+if(this.local&&!dojox.data.AtomReadStore){
+throw Error(this.declaredClass+": To use local feeds, you must include dojox.data.AtomReadStore on the page.");
+}
+},onFeedError:function(){
+this.containerNode.innerHTML="Error accessing the feed.";
+},addChild:function(_1){
+this.inherited(arguments);
+var _2=_1.attr("feedPortletUrl");
+if(_2){
+this.attr("url",_2);
+}
+},_getTitle:function(_3){
+var t=this.store.getValue(_3,"title");
+return this.local?t.text:t;
+},_getLink:function(_4){
+var l=this.store.getValue(_4,"link");
+return this.local?l.href:l;
+},_getContent:function(_5){
+var c=this.store.getValue(_5,"summary");
+if(!c){
+return null;
+}
+if(this.local){
+c=c.text;
+}
+c=c.split("<script").join("<!--").split("</script>").join("-->");
+c=c.split("<iframe").join("<!--").split("</iframe>").join("-->");
+return c;
+},_setUrlAttr:function(_6){
+this.url=_6;
+if(this._started){
+this.load();
+}
+},startup:function(){
+if(this.started||this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.url||this.url==""){
+throw new Error(this.id+": A URL must be specified for the feed portlet");
+}
+if(this.url&&this.url!=""){
+this.load();
+}
+},load:function(){
+if(this._resultList){
+dojo.destroy(this._resultList);
+}
+var _7,_8;
+if(this.local){
+_7=new dojox.data.AtomReadStore({url:this.url});
+_8={};
+}else{
+_7=new dojox.data.GoogleFeedStore();
+_8={url:this.url};
+}
+var _9={query:_8,count:this.maxResults,onComplete:dojo.hitch(this,function(_a){
+if(this.showFeedTitle&&_7.getFeedValue){
+var _b=this.store.getFeedValue("title");
+if(_b){
+this.attr("title",_b.text?_b.text:_b);
+}
+}
+this.generateResults(_a);
+}),onError:dojo.hitch(this,"onFeedError")};
+this.store=_7;
+_7.fetch(_9);
+},generateResults:function(_c){
+var _d=this.store;
+var _e;
+var ul=this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletList"},this.containerNode);
+dojo.forEach(_c,dojo.hitch(this,function(_f){
+var li=dojo.create("li",{innerHTML:"<a href=\""+this._getLink(_f)+"\""+(this.openNew?" target=\"_blank\"":"")+">"+this._getTitle(_f)+"</a>"},ul);
+dojo.connect(li,"onmouseover",dojo.hitch(this,function(evt){
+if(_e){
+clearTimeout(_e);
+}
+_e=setTimeout(dojo.hitch(this,function(){
+_e=null;
+var _10=this._getContent(_f);
+if(!_10){
+return;
+}
+var _11="<div class=\"dojoxFeedPortletPreview\">"+_10+"</div>";
+dojo.query("li",ul).forEach(function(_12){
+if(_12!=evt.target){
+dijit.hideTooltip(_12);
+}
+});
+dijit.showTooltip(_11,li.firstChild);
+}),500);
+}));
+dojo.connect(li,"onmouseout",function(){
+if(_e){
+clearTimeout(_e);
+_e=null;
+}
+dijit.hideTooltip(li.firstChild);
+});
+}));
+this.resize();
+}});
+dojo.declare("dojox.widget.ExpandableFeedPortlet",dojox.widget.FeedPortlet,{onlyOpenOne:false,generateResults:function(_13){
+var _14=this.store;
+var _15="dojoxPortletToggleIcon";
+var _16="dojoxPortletItemCollapsed";
+var _17="dojoxPortletItemOpen";
+var _18;
+var ul=this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletExpandableList"},this.containerNode);
+dojo.forEach(_13,dojo.hitch(this,dojo.hitch(this,function(_19){
+var li=dojo.create("li",{"class":_16},ul);
+var _1a=dojo.create("div",{style:"width: 100%;"},li);
+var _1b=dojo.create("div",{"class":"dojoxPortletItemSummary",innerHTML:this._getContent(_19)},li);
+dojo.create("span",{"class":_15,innerHTML:"<img src='"+dojo.config.baseUrl+"/resources/blank.gif'>"},_1a);
+var a=dojo.create("a",{href:this._getLink(_19),innerHTML:this._getTitle(_19)},_1a);
+if(this.openNew){
+dojo.attr(a,"target","_blank");
+}
+})));
+dojo.connect(ul,"onclick",dojo.hitch(this,function(evt){
+if(dojo.hasClass(evt.target,_15)||dojo.hasClass(evt.target.parentNode,_15)){
+dojo.stopEvent(evt);
+var li=evt.target.parentNode;
+while(li.tagName!="LI"){
+li=li.parentNode;
+}
+if(this.onlyOpenOne){
+dojo.query("li",ul).filter(function(_1c){
+return _1c!=li;
+}).removeClass(_17).addClass(_16);
+}
+var _1d=dojo.hasClass(li,_17);
+dojo.toggleClass(li,_17,!_1d);
+dojo.toggleClass(li,_16,_1d);
+}
+}));
+}});
+dojo.declare("dojox.widget.PortletFeedSettings",dojox.widget.PortletSettings,{"class":"dojoxPortletFeedSettings",urls:null,selectedIndex:0,buildRendering:function(){
+if(this.urls&&this.urls.length>0){
+var s=dojo.create("select");
+if(this.srcNodeRef){
+dojo.place(s,this.srcNodeRef,"before");
+dojo.destroy(this.srcNodeRef);
+}
+this.srcNodeRef=s;
+dojo.forEach(this.urls,function(url){
+dojo.create("option",{value:url.url||url,innerHTML:url.label||url},s);
+});
+}
+if(this.srcNodeRef.tagName=="SELECT"){
+this.text=this.srcNodeRef;
+var div=dojo.create("div",{},this.srcNodeRef,"before");
+div.appendChild(this.text);
+this.srcNodeRef=div;
+dojo.query("option",this.text).filter("return !item.value;").forEach("item.value = item.innerHTML");
+if(!this.text.value){
+dojo.attr(s||this.text,"value",this.text.options[this.selectedIndex].value);
+}
+}
+this.inherited(arguments);
+},postCreate:function(){
+if(!this.text){
+var _1e=this.text=new dijit.form.TextBox({});
+dojo.create("span",{innerHTML:"Choose Url: "},this.domNode);
+this.addChild(_1e);
+}
+this.addChild(new dijit.form.Button({label:"Load",onClick:dojo.hitch(this,function(){
+this.portlet.attr("url",(this.text.tagName=="SELECT")?this.text.value:this.text.attr("value"));
+if(this.text.tagName=="SELECT"){
+dojo.some(this.text.options,dojo.hitch(this,function(opt,idx){
+if(opt.selected){
+this.attr("selectedIndex",idx);
+return true;
+}
+return false;
+}));
+}
+this.toggle();
+})}));
+this.addChild(new dijit.form.Button({label:"Cancel",onClick:dojo.hitch(this,"toggle")}));
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.portlet){
+throw Error(this.declaredClass+": A PortletFeedSettings widget cannot exist without a Portlet.");
+}
+if(this.text.tagName=="SELECT"){
+dojo.forEach(this.text.options,dojo.hitch(this,function(opt,_1f){
+dojo.attr(opt,"selected",_1f==this.selectedIndex);
+}));
+}
+var url=this.portlet.attr("url");
+if(url){
+if(this.text.tagName=="SELECT"){
+if(!this.urls&&dojo.query("option[value='"+url+"']",this.text).length<1){
+dojo.place(dojo.create("option",{value:url,innerHTML:url,selected:"true"}),this.text,"first");
+}
+}else{
+this.text.attr("value",url);
+}
+}else{
+this.portlet.attr("url",this.attr("feedPortletUrl"));
+}
+},_getFeedPortletUrlAttr:function(){
+return this.text.value;
+}});
+}
diff --git a/js/dojo/dojox/widget/FilePicker.js b/js/dojo/dojox/widget/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/FilePicker.js
@@ -0,0 +1,160 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FilePicker"]){
+dojo._hasResource["dojox.widget.FilePicker"]=true;
+dojo.provide("dojox.widget.FilePicker");
+dojo.require("dojox.widget.RollingList");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.widget","FilePicker",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget._FileInfoPane",[dojox.widget._RollingListPane],{templateString:"",templateString:dojo.cache("dojox.widget","FilePicker/_FileInfoPane.html","<div class=\"dojoxFileInfoPane\">\n\t<table>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoNameLabel\">${_messages.name}</td>\n\t\t\t\t<td class=\"dojoxFileInfoName\" dojoAttachPoint=\"nameNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoPathLabel\">${_messages.path}</td>\n\t\t\t\t<td class=\"dojoxFileInfoPath\" dojoAttachPoint=\"pathNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoSizeLabel\">${_messages.size}</td>\n\t\t\t\t<td class=\"dojoxFileInfoSize\" dojoAttachPoint=\"sizeNode\"></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none;\"></div>\n</div>\n"),postMixInProperties:function(){
+this._messages=dojo.i18n.getLocalization("dojox.widget","FilePicker",this.lang);
+this.inherited(arguments);
+},onItems:function(){
+var _1=this.store,_2=this.items[0];
+if(!_2){
+this._onError("Load",new Error("No item defined"));
+}else{
+this.nameNode.innerHTML=_1.getLabel(_2);
+this.pathNode.innerHTML=_1.getIdentity(_2);
+this.sizeNode.innerHTML=_1.getValue(_2,"size");
+this.parentWidget.scrollIntoView(this);
+this.inherited(arguments);
+}
+}});
+dojo.declare("dojox.widget.FilePicker",dojox.widget.RollingList,{className:"dojoxFilePicker",pathSeparator:"",topDir:"",parentAttr:"parentDir",pathAttr:"path",preloadItems:50,selectDirectories:true,selectFiles:true,_itemsMatch:function(_3,_4){
+if(!_3&&!_4){
+return true;
+}else{
+if(!_3||!_4){
+return false;
+}else{
+if(_3==_4){
+return true;
+}else{
+if(this._isIdentity){
+var _5=[this.store.getIdentity(_3),this.store.getIdentity(_4)];
+dojo.forEach(_5,function(i,_6){
+if(i.lastIndexOf(this.pathSeparator)==(i.length-1)){
+_5[_6]=i.substring(0,i.length-1);
+}else{
+}
+},this);
+return (_5[0]==_5[1]);
+}
+}
+}
+}
+return false;
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+var _7,_8=this.getChildren()[0];
+var _9=dojo.hitch(this,function(){
+if(_7){
+this.disconnect(_7);
+}
+delete _7;
+var _a=_8.items[0];
+if(_a){
+var _b=this.store;
+var _c=_b.getValue(_a,this.parentAttr);
+var _d=_b.getValue(_a,this.pathAttr);
+this.pathSeparator=this.pathSeparator||_b.pathSeparator;
+if(!this.pathSeparator){
+this.pathSeparator=_d.substring(_c.length,_c.length+1);
+}
+if(!this.topDir){
+this.topDir=_c;
+if(this.topDir.lastIndexOf(this.pathSeparator)!=(this.topDir.length-1)){
+this.topDir+=this.pathSeparator;
+}
+}
+}
+});
+if(!this.pathSeparator||!this.topDir){
+if(!_8.items){
+_7=this.connect(_8,"onItems",_9);
+}else{
+_9();
+}
+}
+},getChildItems:function(_e){
+var _f=this.inherited(arguments);
+if(!_f&&this.store.getValue(_e,"directory")){
+_f=[];
+}
+return _f;
+},getMenuItemForItem:function(_10,_11,_12){
+var _13={iconClass:"dojoxDirectoryItemIcon"};
+if(!this.store.getValue(_10,"directory")){
+_13.iconClass="dojoxFileItemIcon";
+var l=this.store.getLabel(_10),idx=l.lastIndexOf(".");
+if(idx>=0){
+_13.iconClass+=" dojoxFileItemIcon_"+l.substring(idx+1);
+}
+if(!this.selectFiles){
+_13.disabled=true;
+}
+}
+var ret=new dijit.MenuItem(_13);
+return ret;
+},getPaneForItem:function(_14,_15,_16){
+var ret=null;
+if(!_14||(this.store.isItem(_14)&&this.store.getValue(_14,"directory"))){
+ret=new dojox.widget._RollingListGroupPane({});
+}else{
+if(this.store.isItem(_14)&&!this.store.getValue(_14,"directory")){
+ret=new dojox.widget._FileInfoPane({});
+}
+}
+return ret;
+},_setPathValueAttr:function(_17,_18,_19){
+if(!_17){
+this.attr("value",null);
+return;
+}
+if(_17.lastIndexOf(this.pathSeparator)==(_17.length-1)){
+_17=_17.substring(0,_17.length-1);
+}
+this.store.fetchItemByIdentity({identity:_17,onItem:function(v){
+if(_18){
+this._lastExecutedValue=v;
+}
+this.attr("value",v);
+if(_19){
+_19();
+}
+},scope:this});
+},_getPathValueAttr:function(val){
+if(!val){
+val=this.value;
+}
+if(val&&this.store.isItem(val)){
+return this.store.getValue(val,this.pathAttr);
+}else{
+return "";
+}
+},_setValue:function(_1a){
+delete this._setInProgress;
+var _1b=this.store;
+if(_1a&&_1b.isItem(_1a)){
+var _1c=this.store.getValue(_1a,"directory");
+if((_1c&&!this.selectDirectories)||(!_1c&&!this.selectFiles)){
+return;
+}
+}else{
+_1a=null;
+}
+if(!this._itemsMatch(this.value,_1a)){
+this.value=_1a;
+this._onChange(_1a);
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/FilePicker/FilePicker.css b/js/dojo/dojox/widget/FilePicker/FilePicker.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/FilePicker/FilePicker.css
@@ -0,0 +1,207 @@
+.dojoxRollingList {
+ border: 1px solid #000;
+ height: 20em;
+ background-color: #FFF;
+ position: relative;
+}
+.dijitPopup .dojoxRollingList {
+ position: static;
+}
+.dojoxRollingListContainer {
+ overflow: scroll;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ white-space: nowrap;
+}
+.dojoxRollingListButtons {
+ position: absolute;
+ right: 5px;
+ padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+ display: none;
+}
+.dojoxRollingListPane {
+ overflow: scroll;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ display:-moz-inline-box;
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+ border:0;
+ padding:0;
+ vertical-align:middle;
+ #vertical-align: auto;
+}
+.dojoxRollingListPane .dijitMenuItem td {
+ width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+ width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+ position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+ padding-right: 15px;
+}
+.dojoxRollingListPane .dijitMenu {
+ border: none !important;
+}
+.dojoxRollingListItem {
+ cursor: default;
+}
+.tundra .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+ background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #fff;
+ background-color: #999;
+ font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+ font-family: inherit;
+}
+.soria .dojoxRollingList {
+ border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+ background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+ font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+ border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+ background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+ font-family: inherit;
+}
+.dojoxFileInfoPane *{
+ white-space: normal;
+}
+.dojoxFileInfoLabel {
+ font-weight: bold;
+ white-space: nowrap;
+}
+.dojoxFileInfoPane {
+ width: 20em;
+}
+.tundra .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url("images/tundraFileIcons.gif");
+ background-repeat: no-repeat;
+}
+.tundra .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.tundra .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.tundra .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
+.soria .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url("images/soriaFileIcons.gif");
+ background-repeat: no-repeat;
+}
+.soria .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.soria .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.soria .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
+.nihilo .dojoxFilePickerItem .dijitMenuItemIcon {
+ background-image: url("images/nihiloFileIcons.gif");
+ background-repeat: no-repeat;
+}
+.nihilo .dojoxFilePickerItem .dojoxEmpty {
+ background-image: none;
+}
+.nihilo .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+ background-position: 0px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+ background-position: -16px;
+}
+.nihilo .dojoxFilePickerItem .dojoxFileItemIcon {
+ background-position: -32px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+ background-position: -48px;
+}
diff --git a/js/dojo/dojox/widget/FilePicker/_FileInfoPane.html b/js/dojo/dojox/widget/FilePicker/_FileInfoPane.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/FilePicker/_FileInfoPane.html
@@ -0,0 +1,19 @@
+<div class="dojoxFileInfoPane">
+ <table>
+ <tbody>
+ <tr>
+ <td class="dojoxFileInfoLabel dojoxFileInfoNameLabel">${_messages.name}</td>
+ <td class="dojoxFileInfoName" dojoAttachPoint="nameNode"></td>
+ </tr>
+ <tr>
+ <td class="dojoxFileInfoLabel dojoxFileInfoPathLabel">${_messages.path}</td>
+ <td class="dojoxFileInfoPath" dojoAttachPoint="pathNode"></td>
+ </tr>
+ <tr>
+ <td class="dojoxFileInfoLabel dojoxFileInfoSizeLabel">${_messages.size}</td>
+ <td class="dojoxFileInfoSize" dojoAttachPoint="sizeNode"></td>
+ </tr>
+ </tbody>
+ </table>
+ <div dojoAttachPoint="containerNode" style="display:none;"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif b/js/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f029204a858a8dff3a9af68f8c57c57a98677c59
GIT binary patch
literal 986
zc$@*+110=NNk%w1VL$*70OolB{r&yK#KhU!+pe&(`}_OJ%gw*Pzqq-&xVX5`(bJ`<
zs^Q|}f`o>@!Naz=y2r`O-{9fq=jeZdgQ%;nv$nXtz{17F#njc;!NI|Yhljkpyv)qZ
z!otG9z`&)YrpL#}x3{;8i;J9`oS~ti{QUgr=;-+P_`bfr@bK{W_xH-m%ErdV&d$!@
z;NZKvyR@{l>gwvcySv!f*p85q*Votc^Yh!=+lPsZ_V)JQ-`}93rO?pO;^N}$?Cj>|
z=9HF~wzjr&bat+<u;b(7iHV7uoSvbgq{+$2$jHdFwYK#1^r)z+<>lq^@$sIXp48OT
zj*gC*nVF)ZqIGq3d3kxEp`w0%esOVeprWIsq@=5>td^FRxw^VzWMr0>m-Xhi=h>?2
z+pMguuCueVfP#asudtAjlKAPmla!R9qN0q9jOpp=^yRkA&dz3LW`>7{_4W0+xw*r`
z!}|LA{{H^Dy1J^Ws`>f(|Ns900000000000000000000000000A^8LW004OaEC2ui
z06+i`000O7fO&$0goTEOgliofa*d9T7#uKpY>SVVkza#UA)RB0f?-w}8CRfrbv!0_
ztgWpnHg%|~uC=hTPEb;IydfjMz)pf8YP@zML?X({S%YyVcy!X!(|9#;dC$?*)YjM`
z#^K^2f*IoHB7=1VbRTsHad8MQE&zBqvg_^d@$>cfvfdmRNU-2QFXhgOODCw#96Co%
zXsGj{g^v>U;N*K4abm@b8D%9|K(eGsl1UQU+2Wz4%a&<k#3<vC4hs$#I>^BYAS1S#
zH*@an=`)WI0Z5Z7MJgm=lr|BfN}U=ZM$HW!P8g`OVhD<&SF>*I`V|ixY)cZTUCUPO
zl7wjgAjq9dSFVMcDhz1QU_cHH7+@df-P`wXQ6mo$D_)$~NWv-?B1@ipK@2LvdR<s(
zp(I6MI)gQH_G}hgkp`$!t43X<9FYRBW6Ork<uaWO7z~`?u!Bk2v$k>T=Iy)a4+qGT
zD@XpLoS6#Hqf4)V<&13>axh@nu;EDw5~Z(a-`@Ru_!$Gzt6!gfhM*}rD9E2rpMsW#
zb4VbWh(JaU6mZM|0B{cJ$De-y3JBZ{3N+~8gALvwNEZ`SXyJtu=l}+Oa|D0@5Fmi?
zf(1F4KmZ&FT-M=-A&yw$i75ubz>GB3IAaikxFNxgJoYF78O{(uz#O%(k{^oM2uWl&
zkw>O@%9Brm0LPF;-Z2LOO@NSxlvFZ_rIt{Jd58fkd|*KUXr>u}1!i`T2bpH7nI@YS
IxETllJAc>>^#A|>
diff --git a/js/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif b/js/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..80871464bf733a77b2f0f151940381458681e7f1
GIT binary patch
literal 986
zc$@*+110=NNk%w1VL$*70OolB{r&yK#KhU!+rPoX$;-{(;NgOVhOV%(zrVk@xw_EN
z)5ponxVX5bsH)-O<NN#jwz#@~frF^4uD-y+#l^+u=jhbc*R!^`!NI}2yu62phs?~(
zz`(%A$H%3mrnk4Z!otFwoSch`i=m;R=;-LazP|kY{P6Jb`1ttF&d$5LyT-=G%F4?3
z_xIr7;Iy=~>gwvcySv!f*xTFN-{0Tk<Ky%5^Qfq*o}QkdqNUf@*W%*h?Ck8w$jFI_
ziS+dJb98o_oSwF}wxOb==H}+m(9o2YmyVE;<>lq}_V$N~i^<8!w6(U>)YPu8u<`Nn
z&Cbq{k&=0Nd7z@Betv$hudt$`qN}T{q@<+j>FHx+WSN<nb#--dadE7zu9K9MjEszq
zj*f<hht%8U;pp;aW@e$GqM@RqfP#b9-RI@&^|Q0HmX?;ey1L=#@s^gC_4W0+xw*r`
z!}|LA{{H^Dy1J^Ws`>f(|Ns900000000000000000000000000A^8LW004OaEC2ui
z06+i`000O7fO&$0goTEOgjpOQa*d9T7$7itZi|nXkz|8XBAsi9f@xG58eO1ybvr0`
ztgWprGj*t{uC=hTIAK<HydopNz&L^;V7zuCJ|W7=Sc7pWcy!X!(|9&<dC$?*)YjM{
z#^K^3f*RuIA%k@fbRBgJad8YUDgby%vg_^d@$>cfvcx19NU-3*H|5TWODCw#96C!%
zWT?}@1rZYV;N*K4abm@b8D%kXK(eGsl1viXVdJ5t%a&(i#HiwsP6`khILN^WAS1S#
zH*@an=`)WL0Z5Z7Md~Es7AO^>N}XCEM$HWzN+77SqQ;4$SF>*I`V|ixY&R6BUCUPO
zjf7wS3do&HS1yH`ED&VKfIyB87+@df-P`wX(IE>GD_)#<NJ29fB1@iZ!3!$EdR0(x
z@uNjxI)gQH_G}hgkO8Put41B9oDTx9W6Or!<}#fP7!Z^IQ3OfZv$k>T=Iy(v5eUeW
zD@SgmT$BmWqf4JKMUCwgaxh@nu%QVF6Q!?b-`@Ru_#+3>t6!h~h#)RGF36ux|H74q
zb4>J@$Up{<6L8D{0B{cJ$De-y3J9DM4K(QBgAFPnh!zr5XyJtt<S+()a|FPE5FdQ-
z0tGan@BkbPT-M=-A&yw$i75hMz>GB3I3o~(lo7#>JoXp?8qPfMz#O%(k{^oM2uWl&
zkw>O@%9Bri0LPF;-Z94mPkfMvlvFZ_rIt{Jc?be4bU;A>Xr>te1!i)P2bpH7nI@YQ
IxETllJKw?&WdHyG
diff --git a/js/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif b/js/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..744525eb4ccb485accbe2caef7c600cb1741a99c
GIT binary patch
literal 986
zc$@*+110=NNk%w1VL$*70OolB{r&yK#KhU!+tAU|$H~irgoe1ey12Nw-{9e;sH)-O
z<G;VZzrn-%`}?l2vbMOo$;-{CtFC{6gTBDR#l^+u=jgMxxYX6x!NI}2yu62phr+_b
zz`(%F%*?m9x22_~$H&Kui;J9`oS~ti{QUgBzP|AA@c8)n=;-Lq&d&Gu_r}J?ySuyK
z;NY~hw93lL>gwvcySv!f*yZKr)YR1C;^Lm3o~Wp*^z`)C*VoX{(3F;!?Ck8DoSvbg
zq>hl0=H}+Mwzi3hiF0&zuCK6%iHo43rQ_q{$jHd^^Yh8c$@cd4w6(U|+uQN+@!#Ly
zjEsz{tE_~Uz=D*%prWIGetwpgmb0_7la!R9p`vDHW|O7PkD<$<qN2IFx|WugqN1Yd
z>FJJ+j<2t<kdcz4q@<6b%9)v&b#--yhlhZIgJWc5adC0Y&d#i@u6cQR_4W0+xw*r`
z!}|LA{{H^Dy1J^Ws`>f(|Ns900000000000000000000000000A^8LW004OaEC2ui
z06+i`000O7fO&$0goTEOgkc;Ta*d9T7#lEoW{Z!Pkz9jsA)Qx<f>Ko)8f>6>bu}k<
ztgWpoO?9ZMuC=hTHez6QydfjMz&3&*P`q{{LL$n_WrJ}icy!X!(|Ad7dC$?*)YjM`
z#^K^2f*RuIB7=1ebRcyHad8JOEC6^*vg_^d@$>cfveFnBNU-3*FXhgOODCw#96Cx$
zWT*q81rQYW;N*K4abm@b8D%k1K(eGsl1viXvGSp%%a&bY#2Dj{PKpf}ILN^WAS1S#
zH*@an=`#-z0Z5Z7MM@;$nKl)oN}XCEM$HZ!N-U_e;)sc&SF>*I`V|ixY&Qm|UCUPO
zjf7bL5XhZNS1yH`FBW9Tus}`@7+@df-P`wXQ6B^nD_)$~N5U)@B1@ip!3`?GdRb6t
zfkQ=LI)gQH_G}hg4+f}Ht47_UoDc}GW6Or^<uaWP7#5V+pkqeav$k>T=Iy)ajt9t-
zD@VSg9GMBwqf4JaWsB_;axh@%(18XD5~Z(a-`@Ru_#Y0^t6!h~hafaYEXbcv-$Imz
zb4VbWct8dZ6L8D{0B{cJ$De-y3J6>g2{h>7gAEoT$Qlt;XyJts7%>HYa|Cce5FU8o
z0tHW;&;T3<T-M=-A&yw$i75_Iz>GB3IO7n4Xd%IlJoYGo8qPG(z#O%(k{^oM2uWl&
zkw>O@%9Bre0LPF;-Z4i5PI!=qlvFZ_rIt{JdB_4QfIvY2Xr>te1!i)P2bpH7nI@YQ
IxETllJ8K&XNdN!<
diff --git a/js/dojo/dojox/widget/FisheyeLite.js b/js/dojo/dojox/widget/FisheyeLite.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/FisheyeLite.js
@@ -0,0 +1,42 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FisheyeLite"]){
+dojo._hasResource["dojox.widget.FisheyeLite"]=true;
+dojo.provide("dojox.widget.FisheyeLite");
+dojo.experimental("dojox.widget.FisheyeLite");
+dojo.require("dijit._Widget");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.widget.FisheyeLite",dijit._Widget,{durationIn:350,easeIn:dojo.fx.easing.backOut,durationOut:1420,easeOut:dojo.fx.easing.elasticOut,properties:null,units:"px",constructor:function(_1,_2){
+this.properties=_1.properties||{fontSize:2.75};
+},postCreate:function(){
+this.inherited(arguments);
+this._target=dojo.query(".fisheyeTarget",this.domNode)[0]||this.domNode;
+this._makeAnims();
+this.connect(this.domNode,"onmouseover","show");
+this.connect(this.domNode,"onmouseout","hide");
+this.connect(this._target,"onclick","onClick");
+},show:function(){
+this._runningOut.stop();
+this._runningIn.play();
+},hide:function(){
+this._runningIn.stop();
+this._runningOut.play();
+},_makeAnims:function(){
+var _3={},_4={},cs=dojo.getComputedStyle(this._target);
+for(var p in this.properties){
+var _5=this.properties[p],_6=dojo.isObject(_5),v=parseInt(cs[p]);
+_4[p]={end:v,units:this.units};
+_3[p]=_6?_5:{end:_5*v,units:this.units};
+}
+this._runningIn=dojo.animateProperty({node:this._target,easing:this.easeIn,duration:this.durationIn,properties:_3});
+this._runningOut=dojo.animateProperty({node:this._target,duration:this.durationOut,easing:this.easeOut,properties:_4});
+this.connect(this._runningIn,"onEnd",dojo.hitch(this,"onSelected",this));
+},onClick:function(e){
+},onSelected:function(e){
+}});
+}
diff --git a/js/dojo/dojox/widget/Pager.js b/js/dojo/dojox/widget/Pager.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Pager.js
@@ -0,0 +1,387 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Pager"]){
+dojo._hasResource["dojox.widget.Pager"]=true;
+dojo.provide("dojox.widget.Pager");
+dojo.experimental("dojox.widget.Pager");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx");
+dojo.declare("dojox.widget.Pager",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.widget","Pager/Pager.html","<div dojoAttachPoint=\"pagerContainer\" tabIndex=\"0\" dojoAttachEvent=\"onkeypress: _handleKey, onfocus: _a11yStyle, onblur:_a11yStyle\" class=\"${orientation}PagerContainer\">\n <div class=\"pagerContainer\">\n\t\t<div dojoAttachPoint=\"pagerContainerStatus\" class=\"${orientation}PagerStatus\"></div>\n\t\t<div dojoAttachPoint=\"pagerContainerView\" class=\"${orientation}PagerView\">\n\t\t <div dojoAttachPoint=\"pagerItemContainer\"><ul dojoAttachPoint=\"pagerItems\" class=\"pagerItems\"></ul></div>\n\t\t</div>\n\t\t<div dojoAttachPoint=\"pagerContainerPager\" class=\"${orientation}PagerPager\">\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerNext\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerNext\"><img dojoAttachPoint=\"pagerIconNext\" src=\"${iconNext}\" alt=\"Next\" /></div>\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerPrevious\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerPrevious\"><img dojoAttachPoint=\"pagerIconPrevious\" src=\"${iconPrevious}\" alt=\"Previous\" /></div>\n\t\t</div>\n </div>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none\"></div>\n</div>\n"),iconPage:dojo.moduleUrl("dojox.widget","Pager/images/pageInactive.png"),iconPageActive:dojo.moduleUrl("dojox.widget","Pager/images/pageActive.png"),store:null,orientation:"horizontal",statusPos:"leading",pagerPos:"center",duration:500,itemSpace:2,resizeChildren:true,itemClass:"dojox.widget._PagerItem",itemsPage:3,postMixInProperties:function(){
+var h=(this.orientation=="horizontal");
+dojo.mixin(this,{_totalPages:0,_currentPage:1,dirClass:"pager"+(h?"Horizontal":"Vertical"),iconNext:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Next.png"),iconPrevious:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Previous.png")});
+},postCreate:function(){
+this.inherited(arguments);
+this.store.fetch({onComplete:dojo.hitch(this,"_init")});
+},_a11yStyle:function(e){
+dojo[(e.type=="focus"?"addClass":"removeClass")](e.target,"pagerFocus");
+},_handleKey:function(e){
+var dk=dojo.keys;
+var _1=(e.charCode==dk.SPACE?dk.SPACE:e.keyCode);
+switch(_1){
+case dk.UP_ARROW:
+case dk.RIGHT_ARROW:
+case 110:
+case 78:
+e.preventDefault();
+this._pagerNext();
+break;
+case dk.DOWN_ARROW:
+case dk.LEFT_ARROW:
+case 112:
+case 80:
+e.preventDefault();
+this._pagerPrevious();
+break;
+case dk.ENTER:
+switch(e.target){
+case this.pagerNext:
+this._pagerNext();
+break;
+case this.pagerPrevious:
+this._pagerPrevious();
+break;
+}
+break;
+}
+},_init:function(_2){
+this.items=_2;
+this._renderPages();
+this._renderStatus();
+this._renderPager();
+},_renderPages:function(){
+var _3=this.pagerContainerView;
+var _4=(this.orientation=="horizontal");
+var _5=dojo.style;
+if(_4){
+var _6=dojo.marginBox(this.pagerContainerPager).h;
+var _7=dojo.marginBox(this.pagerContainerStatus).h;
+if(this.pagerPos!="center"){
+var _8=_6+_7;
+}else{
+var _8=_7;
+var _9=this.pagerIconNext.width;
+var _a=_5(_3,"width");
+var _b=_a-(2*_9);
+_5(_3,{width:_b+"px",marginLeft:this.pagerIconNext.width+"px",marginRight:this.pagerIconNext.width+"px"});
+}
+var _c=_5(this.pagerContainer,"height")-_8;
+_5(this.pagerContainerView,"height",_c+"px");
+var _d=Math.floor(_5(_3,"width")/this.itemsPage);
+if(this.statusPos=="trailing"){
+if(this.pagerPos!="center"){
+_5(_3,"marginTop",_6+"px");
+}
+_5(_3,"marginBottom",_7+"px");
+}else{
+_5(_3,"marginTop",_7+"px");
+if(this.pagerPos!="center"){
+_5(_3,"marginTop",_6+"px");
+}
+}
+}else{
+var _e=dojo.marginBox(this.pagerContainerPager).w;
+var _f=dojo.marginBox(this.pagerContainerStatus).w;
+var _10=_5(this.pagerContainer,"width");
+if(this.pagerPos!="center"){
+var _11=_e+_f;
+}else{
+var _11=_f;
+var _12=this.pagerIconNext.height;
+var _13=_5(_3,"height");
+var _14=_13-(2*_12);
+_5(_3,{height:_14+"px",marginTop:this.pagerIconNext.height+"px",marginBottom:this.pagerIconNext.height+"px"});
+}
+var _15=_5(this.pagerContainer,"width")-_11;
+_5(_3,"width",_15+"px");
+var _d=Math.floor(_5(_3,"height")/this.itemsPage);
+if(this.statusPos=="trailing"){
+if(this.pagerPos!="center"){
+_5(_3,"marginLeft",_e+"px");
+}
+_5(_3,"marginRight",_f+"px");
+}else{
+_5(_3,"marginLeft",_f+"px");
+if(this.pagerPos!="center"){
+_5(_3,"marginRight",_e+"px");
+}
+}
+}
+var _16=dojo.getObject(this.itemClass);
+var _17="padding"+(_4?"Left":"Top");
+var _18="padding"+(_4?"Right":"Bottom");
+dojo.forEach(this.items,function(_19,cnt){
+var _1a=dojo.create("div",{innerHTML:_19.content});
+var _1b=new _16({id:this.id+"-item-"+(cnt+1)},_1a);
+this.pagerItems.appendChild(_1b.domNode);
+var _1c={};
+_1c[(_4?"width":"height")]=(_d-this.itemSpace)+"px";
+var p=(_4?"height":"width");
+_1c[p]=_5(_3,p)+"px";
+_5(_1b.containerNode,_1c);
+if(this.resizeChildren){
+_1b.resizeChildren();
+}
+_1b.parseChildren();
+_5(_1b.domNode,"position","absolute");
+if(cnt<this.itemsPage){
+var pos=(cnt)*_d;
+var _1d=(_4?"left":"top");
+var dir=(_4?"top":"left");
+_5(_1b.domNode,dir,"0px");
+_5(_1b.domNode,_1d,pos+"px");
+}else{
+_5(_1b.domNode,"top","-1000px");
+_5(_1b.domNode,"left","-1000px");
+}
+_5(_1b.domNode,_18,(this.itemSpace/2)+"px");
+_5(_1b.domNode,_17,(this.itemSpace/2)+"px");
+},this);
+},_renderPager:function(){
+var tcp=this.pagerContainerPager;
+var _1e="0px";
+var _1f=(this.orientation=="horizontal");
+if(_1f){
+if(this.statusPos=="center"){
+}else{
+if(this.statusPos=="trailing"){
+dojo.style(tcp,"top",_1e);
+}else{
+dojo.style(tcp,"bottom",_1e);
+}
+}
+dojo.style(this.pagerNext,"right",_1e);
+dojo.style(this.pagerPrevious,"left",_1e);
+}else{
+if(this.statusPos=="trailing"){
+dojo.style(tcp,"left",_1e);
+}else{
+dojo.style(tcp,"right",_1e);
+}
+dojo.style(this.pagerNext,"bottom",_1e);
+dojo.style(this.pagerPrevious,"top",_1e);
+}
+},_renderStatus:function(){
+this._totalPages=Math.ceil(this.items.length/this.itemsPage);
+this.iconWidth=0;
+this.iconHeight=0;
+this.iconsLoaded=0;
+this._iconConnects=[];
+for(var i=1;i<=this._totalPages;i++){
+var _20=new Image();
+var _21=i;
+dojo.connect(_20,"onclick",dojo.hitch(this,function(_22){
+this._pagerSkip(_22);
+},_21));
+this._iconConnects[_21]=dojo.connect(_20,"onload",dojo.hitch(this,function(_23){
+this.iconWidth+=_20.width;
+this.iconHeight+=_20.height;
+this.iconsLoaded++;
+if(this._totalPages==this.iconsLoaded){
+if(this.orientation=="horizontal"){
+if(this.statusPos=="trailing"){
+if(this.pagerPos=="center"){
+var _24=dojo.style(this.pagerContainer,"height");
+var _25=dojo.style(this.pagerContainerStatus,"height");
+dojo.style(this.pagerContainerPager,"top",((_24/2)-(_25/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"bottom","0px");
+}else{
+if(this.pagerPos=="center"){
+var _24=dojo.style(this.pagerContainer,"height");
+var _25=dojo.style(this.pagerContainerStatus,"height");
+dojo.style(this.pagerContainerPager,"bottom",((_24/2)-(_25/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"top","0px");
+}
+var _26=(dojo.style(this.pagerContainer,"width")/2)-(this.iconWidth/2);
+dojo.style(this.pagerContainerStatus,"paddingLeft",_26+"px");
+}else{
+if(this.statusPos=="trailing"){
+if(this.pagerPos=="center"){
+var _27=dojo.style(this.pagerContainer,"width");
+var _28=dojo.style(this.pagerContainerStatus,"width");
+dojo.style(this.pagerContainerPager,"left",((_27/2)-(_28/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"right","0px");
+}else{
+if(this.pagerPos=="center"){
+var _27=dojo.style(this.pagerContainer,"width");
+var _28=dojo.style(this.pagerContainerStatus,"width");
+dojo.style(this.pagerContainerPager,"right",((_27/2)-(_28/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"left","0px");
+}
+var _26=(dojo.style(this.pagerContainer,"height")/2)-(this.iconHeight/2);
+dojo.style(this.pagerContainerStatus,"paddingTop",_26+"px");
+}
+}
+dojo.disconnect(this._iconConnects[_23]);
+},_21));
+if(i==this._currentPage){
+_20.src=this.iconPageActive;
+}else{
+_20.src=this.iconPage;
+}
+var _21=i;
+dojo.addClass(_20,this.orientation+"PagerIcon");
+dojo.attr(_20,"id",this.id+"-status-"+i);
+this.pagerContainerStatus.appendChild(_20);
+if(this.orientation=="vertical"){
+dojo.style(_20,"display","block");
+}
+}
+},_pagerSkip:function(_29){
+if(this._currentPage==_29){
+return;
+}else{
+var _2a;
+var _2b;
+if(_29<this._currentPage){
+_2a=this._currentPage-_29;
+_2b=(this._totalPages+_29)-this._currentPage;
+}else{
+_2a=(this._totalPages+this._currentPage)-_29;
+_2b=_29-this._currentPage;
+}
+var b=(_2b>_2a);
+this._toScroll=(b?_2a:_2b);
+var cmd=(b?"_pagerPrevious":"_pagerNext");
+var _2c=this.connect(this,"onScrollEnd",function(){
+this._toScroll--;
+if(this._toScroll<1){
+this.disconnect(_2c);
+}else{
+this[cmd]();
+}
+});
+this[cmd]();
+}
+},_pagerNext:function(){
+if(this._anim){
+return;
+}
+var _2d=[];
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(!dojo.byId(this.id+"-item-"+i)){
+continue;
+}
+var _2e=dojo.byId(this.id+"-item-"+i);
+var _2f=dojo.marginBox(_2e);
+if(this.orientation=="horizontal"){
+var _30=_2f.l-(this.itemsPage*_2f.w);
+_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));
+}else{
+var _30=_2f.t-(this.itemsPage*_2f.h);
+_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));
+}
+}
+var _31=this._currentPage;
+if(this._currentPage==this._totalPages){
+this._currentPage=1;
+}else{
+this._currentPage++;
+}
+var cnt=this.itemsPage;
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(dojo.byId(this.id+"-item-"+i)){
+var _2e=dojo.byId(this.id+"-item-"+i);
+var _2f=dojo.marginBox(_2e);
+if(this.orientation=="horizontal"){
+var _32=(dojo.style(this.pagerContainerView,"width")+((cnt-1)*_2f.w))-1;
+dojo.style(_2e,"left",_32+"px");
+dojo.style(_2e,"top","0px");
+var _30=_32-(this.itemsPage*_2f.w);
+_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));
+}else{
+_32=(dojo.style(this.pagerContainerView,"height")+((cnt-1)*_2f.h))-1;
+dojo.style(_2e,"top",_32+"px");
+dojo.style(_2e,"left","0px");
+var _30=_32-(this.itemsPage*_2f.h);
+_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));
+}
+}
+cnt--;
+}
+this._anim=dojo.fx.combine(_2d);
+var _33=this.connect(this._anim,"onEnd",function(){
+delete this._anim;
+this.onScrollEnd();
+this.disconnect(_33);
+});
+this._anim.play();
+dojo.byId(this.id+"-status-"+_31).src=this.iconPage;
+dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;
+},_pagerPrevious:function(){
+if(this._anim){
+return;
+}
+var _34=[];
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(!dojo.byId(this.id+"-item-"+i)){
+continue;
+}
+var _35=dojo.byId(this.id+"-item-"+i);
+var _36=dojo.marginBox(_35);
+if(this.orientation=="horizontal"){
+var _37=dojo.style(_35,"left")+(this.itemsPage*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+}else{
+var _37=dojo.style(_35,"top")+(this.itemsPage*_36.h);
+_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));
+}
+}
+var _38=this._currentPage;
+if(this._currentPage==1){
+this._currentPage=this._totalPages;
+}else{
+this._currentPage--;
+}
+var cnt=this.itemsPage;
+var j=1;
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(dojo.byId(this.id+"-item-"+i)){
+var _35=dojo.byId(this.id+"-item-"+i);
+var _36=dojo.marginBox(_35);
+if(this.orientation=="horizontal"){
+var _39=-(j*_36.w)+1;
+dojo.style(_35,"left",_39+"px");
+dojo.style(_35,"top","0px");
+var _37=((cnt-1)*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+var _37=_39+(this.itemsPage*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+}else{
+_39=-((j*_36.h)+1);
+dojo.style(_35,"top",_39+"px");
+dojo.style(_35,"left","0px");
+var _37=((cnt-1)*_36.h);
+_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));
+}
+}
+cnt--;
+j++;
+}
+this._anim=dojo.fx.combine(_34);
+var _3a=dojo.connect(this._anim,"onEnd",dojo.hitch(this,function(){
+delete this._anim;
+this.onScrollEnd();
+dojo.disconnect(_3a);
+}));
+this._anim.play();
+dojo.byId(this.id+"-status-"+_38).src=this.iconPage;
+dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;
+},onScrollEnd:function(){
+}});
+dojo.declare("dojox.widget._PagerItem",[dijit._Widget,dijit._Templated],{templateString:"<li class=\"pagerItem\" dojoAttachPoint=\"containerNode\"></li>",resizeChildren:function(){
+var box=dojo.marginBox(this.containerNode);
+dojo.style(this.containerNode.firstChild,{width:box.w+"px",height:box.h+"px"});
+},parseChildren:function(){
+dojo.parser.parse(this.containerNode);
+}});
+}
diff --git a/js/dojo/dojox/widget/Pager/Pager.css b/js/dojo/dojox/widget/Pager/Pager.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Pager/Pager.css
@@ -0,0 +1,73 @@
+.pagerContainer {
+ position: relative;
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+
+ border:1px solid #ccc;
+ -moz-border-radius:6pt;
+ -webkit-border-radius:7pt;
+}
+.horizontalPagerPager {
+ position: absolute;
+ height: 12px;
+ width: 100%;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.horizontalPagerStatus {
+ position: absolute;
+ height: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ width: 100%;
+}
+.horizontalPagerView {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+}
+.horizontalPagerIcon {
+ cursor: pointer;
+}
+.verticalPagerPager {
+ position: absolute;
+ width: 12px;
+ height: 100%;
+ padding-left: 4px;
+ padding-right: 4px;
+}
+.verticalPagerStatus {
+ position: absolute;
+ width: 10px;
+ padding-left: 5px;
+ padding-right: 5px;
+ height: 100%;
+}
+.verticalPagerView {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+}
+.verticalPagerIcon {
+ cursor: pointer;
+}
+.pagerIconContainer {
+ position: absolute;
+}
+.pagerIconContainer img {
+ cursor: pointer;
+}
+.pagerItems {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.pagerItem {
+ overflow: hidden;
+ padding: 0;
+ margin: 0;
+}
diff --git a/js/dojo/dojox/widget/Pager/Pager.html b/js/dojo/dojox/widget/Pager/Pager.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Pager/Pager.html
@@ -0,0 +1,13 @@
+<div dojoAttachPoint="pagerContainer" tabIndex="0" dojoAttachEvent="onkeypress: _handleKey, onfocus: _a11yStyle, onblur:_a11yStyle" class="${orientation}PagerContainer">
+ <div class="pagerContainer">
+ <div dojoAttachPoint="pagerContainerStatus" class="${orientation}PagerStatus"></div>
+ <div dojoAttachPoint="pagerContainerView" class="${orientation}PagerView">
+ <div dojoAttachPoint="pagerItemContainer"><ul dojoAttachPoint="pagerItems" class="pagerItems"></ul></div>
+ </div>
+ <div dojoAttachPoint="pagerContainerPager" class="${orientation}PagerPager">
+ <div tabIndex="0" dojoAttachPoint="pagerNext" class="pagerIconContainer" dojoAttachEvent="onclick: _pagerNext"><img dojoAttachPoint="pagerIconNext" src="${iconNext}" alt="Next" /></div>
+ <div tabIndex="0" dojoAttachPoint="pagerPrevious" class="pagerIconContainer" dojoAttachEvent="onclick: _pagerPrevious"><img dojoAttachPoint="pagerIconPrevious" src="${iconPrevious}" alt="Previous" /></div>
+ </div>
+ </div>
+ <div dojoAttachPoint="containerNode" style="display:none"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/Pager/images/hNext.png b/js/dojo/dojox/widget/Pager/images/hNext.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..037503f2842086d362829e2b8d78607148a6f7de
GIT binary patch
literal 496
zc$@+70T2F(P)<h;3K|Lk000e1NJLTq000dD000dL1^@s6a_i)L0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzl1W5CRCwBKQax(|K@gogq9TgoX%Pqp
zwFv|c3qgN@rL~a8`XG=lO&~>@6sbZA+Y=;UBlr^n*Z9#$AXcIx*hEw?5Dn_)&Eg&L
z%)svK?9Q8yx1$Il$Ssvh<pL^<^-(I7zTEH1Ul5!hp^PxZ<MGg9v7pUnQ^Q>u;I{)1
zoX>E+OQljqE|(*(*Xslt4u{liHfgn5-2(U|FBxQ-=1aHR6)cm<MD+W8fegZy<#H*i
z)vAEsCHt$$qDLZ;YhBl!=<Rl!#^W)UChcG_NSREAj|OilRxy!CkfJCD&DQI68Vm+B
zo6V%1OeR@f*`V`4AaKMWdZ0$5A<5Y7cI5N<xK|C8g&Fj@UayZpOh!JRr%)(Fs;bg<
zyS2;xW>AgGa7&?3pm;n^u~<ynqtS>nzJkFY6<cdMotAsOo&(5cvjqA{(=?}4CWrrv
zx0Ai!bEnfW_%WSMOHyoN5Rfd(V&DT3SO*h<2084#-|xSPMxz8R0rUC1wVw#{-!a;Q
mPoelzShwK(?(X+jfB^vKd&W+-k;yRt0000<MNUMnLSTZJvfwiS
diff --git a/js/dojo/dojox/widget/Pager/images/hPrevious.png b/js/dojo/dojox/widget/Pager/images/hPrevious.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3d4768a2ba473ab90fff5ff9e057cbc568ee7f62
GIT binary patch
literal 502
zc$@+D0SW$zP)<h;3K|Lk000e1NJLTq000dD000dL1^@s6a_i)L0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzm`OxIRCwBKlDlgHK@i5jyHk8L;v;G=
z!Wjry2}0B=_Gyg7Cau+VfnXQXr8)@Y4@hGwTYIrltOC(PEDVUj$ccjZLe0#f;%i}c
zc6atS`^~VzdcDT+P*wGkT!ieGtfnZ+-+o-!hv@PHxvb0OiunD0jK^d2dOb`g6P3=N
z3DyrF0$!X>XD*pcf&m^JTdh{8R4S-etGt&9)Wi*NZL`^OsZ?qQEEWrBnuboNgJ?90
zcs$O>3QyujSvHYKz-qM`8<teB*HJ2!cGAP)Fel8?0}+uXNf3nlKp<cQyWK9@?KblH
z{7Hj?!63Uke#v36SYR@luv{)N7z|J-6fmF9PawP9&hA3wj!dW1;cPa8BuVgiJV>Y0
zpc+r0(P+f(XIs-pqtP%HUauFSPzae!<^bSMHk(aeer}=na=E<C1hd&}=#Rx>JE&Hx
zq2KSnk+LrXqQy70_>qfmwOYm{mMY6Kd_EtF#Ud!_I~~8C`w=(Xern9E+wBI`3SHNS
stb`Ijo&838u!Gzcna(PX<NpE-0J5^N6p3BUTL1t607*qoM6N<$g60X~<p2Nx
diff --git a/js/dojo/dojox/widget/Pager/images/pageActive.png b/js/dojo/dojox/widget/Pager/images/pageActive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..087d5bc6aaf4b53efb8543552f7c38bc1d29a505
GIT binary patch
literal 276
zc%17D@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5Xwt2cZhE&{2`t$$4Ju{C^#0CcrkChA`cek{(SQ`|&%}`p<
zbgcgWzpH=${+{00+1c4Rb7rMgzz((*KV-Q>9DmHWuYYxKfBkue5RPj{4j-O;^6c5a
z;wR3q&SnWIVOVkC-}UwJJSQAnTv$>TX$eo!XWzso>)<Qesu^|u+_}C*3>i$!+}t-z
z#UmCZU2e?NNJ>dbVTj}`vY2q5;Ym1?>_6F?<y{V1!X0xPez1Bd2OJEWqHutnfr*FV
Y=_GISUlTbqfIeXGboFyt=akR{03YLNc>n+a
diff --git a/js/dojo/dojox/widget/Pager/images/pageInactive.png b/js/dojo/dojox/widget/Pager/images/pageInactive.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..66ff3f41a700d5b41e47bbbdcdf5ba2840cd819f
GIT binary patch
literal 288
zc%17D@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X4tcsbhE&{2`t$$4Ju{Eb9E(6HkH!y||NQy0+@MfRg>|ou
zjg7yGii%%ThJgG!>6A+?oWfGu^X~ro|NZ^_|BehU%|8?hC)jLWut33BS^4q32M-e1
z%F4<*KKl6Z7#SJyJU=&gvwh(s7w!{Qeqv%`Y<_-zY$*p09z4h(#D4Pdn%lo$TwMJB
z#Dj;2+ZA4yH9kq?o4>F2cUhaXd7i<Zs;^u=?{92m*5Ol<NOWZQ(yKb*6ibq>!alYj
k2A;OZ8eJb48yJ`wjs;||`)^Qp2<RIIPgg&ebxsLQ07kTM-~a#s
diff --git a/js/dojo/dojox/widget/Pager/images/vNext.png b/js/dojo/dojox/widget/Pager/images/vNext.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7a373b86f35576921ba584f3df8e1e9a4f414621
GIT binary patch
literal 500
zc$@+B0So?#P)<h;3K|Lk000e1NJLTq000dD000dL1^@s6a_i)L0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzmPtfGRCwBSQaNh^Q4pRzT-{1oT}YvL
zG(qqvqOnP9X=4*eW4$3@7f2(dN+4|@tu`U4{R=j`AQlUf#)CkxP@@3_6=5?osCXm;
zkMGTU-#5pbCpeA+yH>4M&k-(h>9{^|y%&o`dzT|@L`XhGDEa+<BNB;#+wF$gYzDnv
z560v1Gu}O-_=~vmTA+!d_>oShAr_16Wlkg#VB7Xhv)Po;y{0p9eOHdh<3|E6MGzpF
zOhPmoH8A)CXTr^is;Z?_Dh2(1AO5p!HVd6j$H46!m3QXz`8eWyJ_pOPjs%%Z1{6gB
zFB<huBFe;~Kp+6i<q~SO8l%VKfkL4G!C;WZE|-hIOFdb`;c$DX>pJ9eIgXsq=Q)rh
zNqj$<ObA*)PhP21%)wybY>f8pcH0?^M%%M)x9cG9jrg0_d#Ts!+!Gnj3c}$qXqv|U
zbUFpoG?{le+<WYyOihPEAuegLSO8{#Mxz0%)#?_9`?M!o3oj519Q2he%k&uE=)Y11
q6ts@M(ZT;y5L6`o{57**0R{k0O|rX`$9r@D0000<MNUMnLSTa7bl1HA
diff --git a/js/dojo/dojox/widget/Pager/images/vPrevious.png b/js/dojo/dojox/widget/Pager/images/vPrevious.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8c497af5c30a3c495c3a638f9c3bf131815466a7
GIT binary patch
literal 512
zc$@(M0{{JqP)<h;3K|Lk000e1NJLTq000dD000dL1^@s6a_i)L0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzqDe$SRCwBSQax(|K@fc==Laf^u@MgJ
zL<yu#V<}PpL8?GnAz&3qAXOj`QhC*3dCft%!k?gGM2rTk0wRK)hk|g0-=3G*<suTz
z!0yb>%$uEgyAI2;a7-jgIwNJ|^Lg`c%&`xm#B)+PS~nh#C%9ZLL2;GNGJ!u1Km@pV
zI-PIHWD<!)0&ce(o6QFOejn9p74!N0g@8{ynSlz0!d0<Yv<$<reuV%#n*f%gC>G`2
zviuYK##}0uLLd;}htX(+Znul!aLCWpD$?mR?ACD_3Wb8yiefvlUav7244|qiL{S8_
z44=;jzu%8uuP0V26^-3=5e|nrz%)%hgQjU%tyU<NO3-zk7h)2LM3}l1Xqzk+3+|*!
zsMTtSMx#4Mo6RO%E*IkQIHuDnbLj#x@=eScL~qdR^&*qW9DTR#cFSia`4ViOTrQU%
zve_*DlSZS#XqV`cF=vmAM`BBEx7#@OLpq%fTCEl{pV=nt#a`?6x=G->SS-frpUq}`
zP9j5Q?@z@i2j9s485g9kX)!j&wB9NCb3f-tfB^uZ?b<|GJn=*T0000<MNUMnLSTY-
COWm^o
diff --git a/js/dojo/dojox/widget/PlaceholderMenuItem.js b/js/dojo/dojox/widget/PlaceholderMenuItem.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/PlaceholderMenuItem.js
@@ -0,0 +1,75 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.PlaceholderMenuItem"]){
+dojo._hasResource["dojox.widget.PlaceholderMenuItem"]=true;
+dojo.provide("dojox.widget.PlaceholderMenuItem");
+dojo.require("dijit.Menu");
+dojo.declare("dojox.widget.PlaceholderMenuItem",dijit.MenuItem,{_replaced:false,_replacedWith:null,_isPlaceholder:true,postCreate:function(){
+this.domNode.style.display="none";
+this._replacedWith=[];
+if(!this.label){
+this.label=this.containerNode.innerHTML;
+}
+this.inherited(arguments);
+},replace:function(_1){
+if(this._replaced){
+return false;
+}
+var _2=this.getIndexInParent();
+if(_2<0){
+return false;
+}
+var p=this.getParent();
+dojo.forEach(_1,function(_3){
+p.addChild(_3,_2++);
+});
+this._replacedWith=_1;
+this._replaced=true;
+return true;
+},unReplace:function(_4){
+if(!this._replaced){
+return [];
+}
+var p=this.getParent();
+if(!p){
+return [];
+}
+var r=this._replacedWith;
+dojo.forEach(this._replacedWith,function(_5){
+p.removeChild(_5);
+if(_4){
+_5.destroy();
+}
+});
+this._replacedWith=[];
+this._replaced=false;
+return r;
+}});
+dojo.extend(dijit.Menu,{getPlaceholders:function(_6){
+var r=[];
+var _7=this.getChildren();
+_7.forEach(function(_8){
+if(_8._isPlaceholder&&(!_6||_8.label==_6)){
+r.push(_8);
+}else{
+if(_8._started&&_8.popup&&_8.popup.getPlaceholders){
+r=r.concat(_8.popup.getPlaceholders(_6));
+}else{
+if(!_8._started&&_8.dropDownContainer){
+var _9=dojo.query("[widgetId]",_8.dropDownContainer)[0];
+var _a=dijit.byNode(_9);
+if(_a.getPlaceholders){
+r=r.concat(_a.getPlaceholders(_6));
+}
+}
+}
+}
+},this);
+return r;
+}});
+}
diff --git a/js/dojo/dojox/widget/Portlet.js b/js/dojo/dojox/widget/Portlet.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Portlet.js
@@ -0,0 +1,222 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Portlet"]){
+dojo._hasResource["dojox.widget.Portlet"]=true;
+dojo.experimental("dojox.widget.Portlet");
+dojo.provide("dojox.widget.Portlet");
+dojo.require("dijit.TitlePane");
+dojo.require("dojo.fx");
+dojo.declare("dojox.widget.Portlet",[dijit.TitlePane,dijit._Container],{resizeChildren:true,closable:true,_parents:null,_size:null,dragRestriction:false,buildRendering:function(){
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","hidden");
+},postCreate:function(){
+this.inherited(arguments);
+dojo.addClass(this.domNode,"dojoxPortlet");
+dojo.removeClass(this.arrowNode,"dijitArrowNode");
+dojo.addClass(this.arrowNode,"dojoxPortletIcon dojoxArrowDown");
+dojo.addClass(this.titleBarNode,"dojoxPortletTitle");
+dojo.addClass(this.hideNode,"dojoxPortletContentOuter");
+dojo.addClass(this.domNode,"dojoxPortlet-"+(!this.dragRestriction?"movable":"nonmovable"));
+var _1=this;
+if(this.resizeChildren){
+this.subscribe("/dnd/drop",function(){
+_1._updateSize();
+});
+this.subscribe("/Portlet/sizechange",function(_2){
+_1.onSizeChange(_2);
+});
+this.connect(window,"onresize",function(){
+_1._updateSize();
+});
+var _3=dojo.hitch(this,function(id,_4){
+var _5=dijit.byId(id);
+if(_5.selectChild){
+var s=this.subscribe(id+"-selectChild",function(_6){
+var n=_1.domNode.parentNode;
+while(n){
+if(n==_6.domNode){
+_1.unsubscribe(s);
+_1._updateSize();
+break;
+}
+n=n.parentNode;
+}
+});
+var _7=dijit.byId(_4);
+if(_5&&_7){
+_1._parents.push({parent:_5,child:_7});
+}
+}
+});
+var _8;
+this._parents=[];
+for(var p=this.domNode.parentNode;p!=null;p=p.parentNode){
+var id=p.getAttribute?p.getAttribute("widgetId"):null;
+if(id){
+_3(id,_8);
+_8=id;
+}
+}
+}
+this.connect(this.titleBarNode,"onmousedown",function(_9){
+if(dojo.hasClass(_9.target,"dojoxPortletIcon")){
+dojo.stopEvent(_9);
+return false;
+}
+return true;
+});
+this.connect(this._wipeOut,"onEnd",function(){
+_1._publish();
+});
+this.connect(this._wipeIn,"onEnd",function(){
+_1._publish();
+});
+if(this.closable){
+this.closeIcon=this._createIcon("dojoxCloseNode","dojoxCloseNodeHover",dojo.hitch(this,"onClose"));
+dojo.style(this.closeIcon,"display","");
+}
+},startup:function(){
+if(this._started){
+return;
+}
+var _a=this.getChildren();
+this._placeSettingsWidgets();
+dojo.forEach(_a,function(_b){
+try{
+if(!_b.started&&!_b._started){
+_b.startup();
+}
+}
+catch(e){
+}
+});
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","visible");
+},_placeSettingsWidgets:function(){
+dojo.forEach(this.getChildren(),dojo.hitch(this,function(_c){
+if(_c.portletIconClass&&_c.toggle&&!_c.attr("portlet")){
+this._createIcon(_c.portletIconClass,_c.portletIconHoverClass,dojo.hitch(_c,"toggle"));
+dojo.place(_c.domNode,this.containerNode,"before");
+_c.attr("portlet",this);
+}
+}));
+},_createIcon:function(_d,_e,fn){
+var _f=dojo.create("div",{"class":"dojoxPortletIcon "+_d,"waiRole":"presentation"});
+dojo.place(_f,this.arrowNode,"before");
+this.connect(_f,"onclick",fn);
+if(_e){
+this.connect(_f,"onmouseover",function(){
+dojo.addClass(_f,_e);
+});
+this.connect(_f,"onmouseout",function(){
+dojo.removeClass(_f,_e);
+});
+}
+return _f;
+},onClose:function(evt){
+dojo.style(this.domNode,"display","none");
+},onSizeChange:function(_10){
+if(_10==this){
+return;
+}
+this._updateSize();
+},_updateSize:function(){
+if(!this.open||!this._started||!this.resizeChildren){
+return;
+}
+if(this._timer){
+clearTimeout(this._timer);
+}
+this._timer=setTimeout(dojo.hitch(this,function(){
+var _11={w:dojo.style(this.domNode,"width"),h:dojo.style(this.domNode,"height")};
+for(var i=0;i<this._parents.length;i++){
+var p=this._parents[i];
+var sel=p.parent.selectedChildWidget;
+if(sel&&sel!=p.child){
+return;
+}
+}
+if(this._size){
+if(this._size.w==_11.w&&this._size.h==_11.h){
+return;
+}
+}
+this._size=_11;
+var fns=["resize","layout"];
+this._timer=null;
+var _12=this.getChildren();
+dojo.forEach(_12,function(_13){
+for(var i=0;i<fns.length;i++){
+if(dojo.isFunction(_13[fns[i]])){
+try{
+_13[fns[i]]();
+}
+catch(e){
+}
+break;
+}
+}
+});
+this.onUpdateSize();
+}),100);
+},onUpdateSize:function(){
+},_publish:function(){
+dojo.publish("/Portlet/sizechange",[this]);
+},_onTitleClick:function(evt){
+if(evt.target==this.arrowNode){
+this.inherited(arguments);
+}
+},addChild:function(_14){
+this._size=null;
+this.inherited(arguments);
+if(this._started){
+this._placeSettingsWidgets();
+this._updateSize();
+}
+if(this._started&&!_14.started&&!_14._started){
+_14.startup();
+}
+},_setCss:function(){
+this.inherited(arguments);
+dojo.style(this.arrowNode,"display",this.toggleable?"":"none");
+}});
+dojo.declare("dojox.widget.PortletSettings",[dijit._Container,dijit.layout.ContentPane],{portletIconClass:"dojoxPortletSettingsIcon",portletIconHoverClass:"dojoxPortletSettingsIconHover",postCreate:function(){
+dojo.style(this.domNode,"display","none");
+dojo.addClass(this.domNode,"dojoxPortletSettingsContainer");
+dojo.removeClass(this.domNode,"dijitContentPane");
+},_setPortletAttr:function(_15){
+this.portlet=_15;
+},toggle:function(){
+var n=this.domNode;
+if(dojo.style(n,"display")=="none"){
+dojo.style(n,{"display":"block","height":"1px","width":"auto"});
+dojo.fx.wipeIn({node:n}).play();
+}else{
+dojo.fx.wipeOut({node:n,onEnd:dojo.hitch(this,function(){
+dojo.style(n,{"display":"none","height":"","width":""});
+})}).play();
+}
+}});
+dojo.declare("dojox.widget.PortletDialogSettings",dojox.widget.PortletSettings,{dimensions:null,constructor:function(_16,_17){
+this.dimensions=_16.dimensions||[300,100];
+},toggle:function(){
+if(!this.dialog){
+dojo["require"]("dijit.Dialog");
+this.dialog=new dijit.Dialog({title:this.title});
+dojo.body().appendChild(this.dialog.domNode);
+this.dialog.containerNode.appendChild(this.domNode);
+dojo.style(this.dialog.domNode,{"width":this.dimensions[0]+"px","height":this.dimensions[1]+"px"});
+dojo.style(this.domNode,"display","");
+}
+if(this.dialog.open){
+this.dialog.hide();
+}else{
+this.dialog.show(this.domNode);
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/Portlet/Portlet.css b/js/dojo/dojox/widget/Portlet/Portlet.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Portlet/Portlet.css
@@ -0,0 +1,138 @@
+.dojoxPortlet {
+ margin-bottom: 5px;
+}
+.dojoxPortlet .dijitTitlePaneTitle .dojoxPortletIcon {
+ width: 15px;
+ height: 15px;
+ float: right;
+ cursor: pointer;
+ background-repeat: no-repeat;
+}
+.tundra .dojoxPortlet-movable .dijitTitlePaneTitle,
+.soria .dojoxPortlet-movable .dijitTitlePaneTitle,
+.nihilo .dojoxPortlet-movable .dijitTitlePaneTitle {
+ cursor: move;
+}
+.dojoxPortlet .dijitTitlePaneTitle {
+ font-weight: bold;
+ font-size: 0.9em;
+}
+.soria .dojoxPortlet .dijitTitlePaneTitle {
+ color: #243C5F;
+}
+.tundra .dojoxPortlet .dijitTitlePaneTitle,
+.nihilo .dojoxPortlet .dijitTitlePaneTitle {
+ color: #333;
+}
+.dojoxPortlet-nonmovable .dijitTitlePaneTitle {
+ cursor: default;
+}
+.tundra .dojoxPortlet .dojoxPortletIcon {
+ background-image: url("../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.gif");
+}
+.soria .dojoxPortlet .dojoxPortletIcon {
+ background-image: url("../../../dijit/themes/soria/images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dojoxPortlet .dojoxPortletIcon {
+ background-image: url("../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif");
+}
+.dojoxPortlet .dojoxCloseNode,
+.dojoxPortlet .dojoxCloseNode {
+ background-position: right 0px;
+}
+.dojoxPortlet .dojoxCloseNodeHover {
+ background-position: right -15px;
+}
+.tundra .dojoxPortlet .dijitOpen .dojoxArrowDown,
+.soria .dojoxPortlet .dijitOpen .dojoxArrowDown,
+.nihilo .dojoxPortlet .dijitOpen .dojoxArrowDown {
+ background-position: -15px top;
+}
+.tundra .dojoxPortlet .dijitClosed .dojoxArrowDown,
+.soria .dojoxPortlet .dijitClosed .dojoxArrowDown,
+.nihilo .dojoxPortlet .dijitClosed .dojoxArrowDown {
+ background-position: 0 top;
+}
+.tundra .dojoxPortlet .dojoxPortletSettingsIcon,
+.soria .dojoxPortlet .dojoxPortletSettingsIcon,
+.nihilo .dojoxPortlet .dojoxPortletSettingsIcon {
+ background-image: url(images/icons.png);
+ background-position: 0 1px;
+}
+.tundra .dojoxPortletSettingsContainer,
+.soria .dojoxPortletSettingsContainer,
+.nihilo .dojoxPortletSettingsContainer {
+ border-bottom: 1px solid #BFBFBF;
+ padding: 4px;
+}
+.tundra .dijitDialogPaneContent .dojoxPortletSettingsContainer,
+.soria .dijitDialogPaneContent .dojoxPortletSettingsContainer,
+.nihilo .dijitDialogPaneContent .dojoxPortletSettingsContainer {
+ border-bottom: none;
+}
+.soria .dojoDndItemOver .dojoxPortletTitle {
+ border-top: 1px solid #8D8D8D;
+ border-left: 1px solid #8D8D8D;
+ border-right: 1px solid #8D8D8D;
+}
+.soria .dojoDndItemOver .dojoxPortletContentOuter {
+ border-bottom: 1px solid #9D9D9D;
+ border-left: 1px solid #9D9D9D;
+ border-right: 1px solid #9D9D9D;
+}
+.dojoxPortlet div.dojoxPortletContentOuter {
+ background: url(../../../dijit/themes/tundra/images/validationInputBg.gif) repeat-x top left;
+}
+.dojoxFeedPortletList {
+ padding-left: 25px;
+ margin: 0px;
+}
+.dojoxFeedPortletExpandableList {
+ padding-left: 0px;
+ margin: 0px;
+}
+.dojoxFeedPortletExpandableList li {
+ margin-bottom: 5px;
+}
+.dojoxFeedPortletList li {
+ padding-top: 4px;
+}
+.dojoxFeedPortletPreview {
+ max-height: 300px;
+ max-width: 400px;
+ overflow: hidden;
+}
+.dojoxFeedPortletPreview * {
+ max-height: 295px;
+ max-width: 395px;
+}
+.dojoxPortletFeedSettings {
+ padding: 5px;
+ border-bottom: 1px solid #9D9D9D;
+}
+.dojoxFeedPortletExpandableList {
+ list-style: none;
+}
+.dojoxPortletToggleIcon {
+ margin-right: 6px;
+ cursor: pointer;
+}
+.dojoxPortletToggleIcon img {
+ width: 15px;
+ height: 14px;
+}
+.dojoxPortletItemCollapsed .dojoxPortletToggleIcon {
+ background: url(../../../dijit/themes/tundra/images/plusButton.gif) no-repeat 0 0;
+}
+.dojoxPortletItemOpen .dojoxPortletToggleIcon {
+ background: url(../../../dijit/themes/tundra/images/minusButton.gif) no-repeat 0 0;
+}
+.dojoxPortletItemSummary {
+ margin-left: 20px;
+}
+.dojoxPortletItemCollapsed .dojoxPortletItemSummary {
+ display: none;
+}
+.dojoxPortletItemOpen .dojoxPortletItemSummary {
+ display: block;
+}
diff --git a/js/dojo/dojox/widget/Portlet/images/icons.gif b/js/dojo/dojox/widget/Portlet/images/icons.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cafca8dbc4034df46a02e5b77cf2fed2b60fd4ef
GIT binary patch
literal 896
zc$~#ky=s+F5FC?>7`aN)r4dw!2-iloQ7kozy@E|ZEf&#Aw6Il>iv&S~&6Z*;BwAQ#
zFGOv&719bmfrVf-&YV1i+bw5zc7DF^%GJx~&fhwMDdyO(01_ym0lJGoB%%<FpdT}k
zi7aFz>DdZYq6*b0dbI<c=t4J|LIML!u)qdsU_%Q_%bKR|xH6(5I)Xl{E;F(sJCbIh
z$I7UR>L{9&W;>%Rx}zzMS`B8ff*qtOTZ2f8rD)L#d`Zy4(lRZ`y{a-hlh&uR>Z-Cj
zi<T=EdhE*XY)ZXIX*OBOPSR%BEN#mU>8HK1B!P*vSkhMcu&@O!EZR9gt5<auZKU++
zth(-M%2&x13q2OQNZagG(z7<2cHQ2kS8WF!f)%EbOq$NbJkr31rX%un`i_fAOh!td
z&Z=vY<7?o^n<G(<%s5iv@SVe14(~YJ;n2^akV69pOAa0!mpHIErn%q$r#kU>vIy+q
zj2r(GIJAL}OS_+MuOFYy4j!G{TwC6mKVCR+<Id9`pEg(54!?i&{Q9N&vBjn7!<Fst
zTQj`aUHyG>=gDm2+w|4e_Sbu7@1Od$xAJEF<=(YFlXnkZU))^&aC&<8?awdI78Vz9
F;UB-CYwQ33
diff --git a/js/dojo/dojox/widget/Portlet/images/icons.png b/js/dojo/dojox/widget/Portlet/images/icons.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d5cbcf5c8708197e7e0fc4a64d6405f137ffc521
GIT binary patch
literal 593
zc$@)I0<QguP)<h;3K|Lk000e1NJLTq000dD000aK1^@s7&aekh00007bV*G`2iXG&
z7A6OVTpL&b000SaNLh0L01FWS01FWTe`H^g00004XF*Lt006O%3;baP0005tNkl<Z
zc-l=;J8NP=6h8N=sPX1%p}Uw))D#vXNE($Jv=uDZCO^Q=F8KosTP^qkU5mBc)?TZK
z2quCM5Q2u)LNp>8jgPBWojo(etRKwdyyiRe%>W>h$>cY>!eX%?)bjtg5FDLyxg6PU
zw?GKFX3=~;f6q4PB@~Clf$-I8mDP+!BNn7}FXRNNRB8_&r2h4K&78GbjjUEHve|41
z`tObjU&`gOG8ha<qtPIlOeP7Zz@xrrv)TNo11rudm5OrYqLuU%HOFzYKp>#*bUJ{0
zu-olmHk+S$lgYH$@Au$vIH1{V0^R|vR;$2cH;*`AGMPXq6oTb)39VLZ&3Mx3^tRn@
zlWw<5P=@zUkv^I@*XeYB3<iVW>2#Vb77NVhbLjPY^WktfkY!nl$Ky;MHJ$JZzg;fZ
zjU-8$e!mZ;QVGW6F&K?T2nK^<BoYx{5n8Rb9gD>-RmgB92*QtWIDE$QJcyzQ9*+ln
zJ|7?})a!L{yWODI>nXF~^?H{)5<O7^>46SKQCPc)L;`F!8$_c~K>1m0I-SZG`paXV
zGV1uXP$(Q`vl&oD=(^kOSTeQomq4*te8ao_!u%q4`b1O=jYjhm+mx{ALZwo@;R8Hi
f@hv959P|DGQtl${50ezB00000NkvXXu0mjf-9Q3(
diff --git a/js/dojo/dojox/widget/Roller.js b/js/dojo/dojox/widget/Roller.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Roller.js
@@ -0,0 +1,84 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Roller"]){
+dojo._hasResource["dojox.widget.Roller"]=true;
+dojo.provide("dojox.widget.Roller");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.widget.Roller",dijit._Widget,{delay:2000,autoStart:true,itemSelector:"> li",durationIn:400,durationOut:275,_idx:-1,postCreate:function(){
+if(!this["items"]){
+this.items=[];
+}
+dojo.addClass(this.domNode,"dojoxRoller");
+dojo.query(this.itemSelector,this.domNode).forEach(function(_1,i){
+this.items.push(_1.innerHTML);
+if(i==0){
+this._roller=_1;
+this._idx=0;
+}else{
+dojo.destroy(_1);
+}
+},this);
+if(!this._roller){
+this._roller=dojo.create("li",null,this.domNode);
+}
+this.makeAnims();
+if(this.autoStart){
+this.start();
+}
+},makeAnims:function(){
+var n=this.domNode;
+dojo.mixin(this,{_anim:{"in":dojo.fadeIn({node:n,duration:this.durationIn}),"out":dojo.fadeOut({node:n,duration:this.durationOut})}});
+this._setupConnects();
+},_setupConnects:function(){
+var _2=this._anim;
+this.connect(_2["out"],"onEnd",function(){
+this._set(this._idx+1);
+_2["in"].play(15);
+});
+this.connect(_2["in"],"onEnd",function(){
+this._timeout=setTimeout(dojo.hitch(this,"_run"),this.delay);
+});
+},start:function(){
+if(!this.rolling){
+this.rolling=true;
+this._run();
+}
+},_run:function(){
+this._anim["out"].gotoPercent(0,true);
+},stop:function(){
+this.rolling=false;
+var m=this._anim,t=this._timeout;
+if(t){
+clearTimeout(t);
+}
+m["in"].stop();
+m["out"].stop();
+},_set:function(i){
+var l=this.items.length-1;
+if(i<0){
+i=l;
+}
+if(i>l){
+i=0;
+}
+this._roller.innerHTML=this.items[i]||"error!";
+this._idx=i;
+}});
+dojo.declare("dojox.widget.RollerSlide",dojox.widget.Roller,{durationOut:175,makeAnims:function(){
+var n=this.domNode,_3="position",_4={top:{end:0,start:25},opacity:1};
+dojo.style(n,_3,"relative");
+dojo.style(this._roller,_3,"absolute");
+dojo.mixin(this,{_anim:{"in":dojo.animateProperty({node:n,duration:this.durationIn,properties:_4}),"out":dojo.fadeOut({node:n,duration:this.durationOut})}});
+this._setupConnects();
+}});
+dojo.declare("dojox.widget._RollerHover",null,{postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,"onmouseenter","stop");
+this.connect(this.domNode,"onmouseleave","start");
+}});
+}
diff --git a/js/dojo/dojox/widget/RollingList.js b/js/dojo/dojox/widget/RollingList.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/RollingList.js
@@ -0,0 +1,893 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.RollingList"]){
+dojo._hasResource["dojox.widget.RollingList"]=true;
+dojo.provide("dojox.widget.RollingList");
+dojo.experimental("dojox.widget.RollingList");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dijit.Menu");
+dojo.require("dojox.html.metrics");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget._RollingListPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained],{templateString:"<div class=\"dojoxRollingListPane\"><table><tbody><tr><td dojoAttachPoint=\"containerNode\"></td></tr></tbody></div>",parentWidget:null,parentPane:null,store:null,items:null,query:null,queryOptions:null,_focusByNode:true,minWidth:0,_setContentAndScroll:function(_1,_2){
+this._setContent(_1,_2);
+this.parentWidget.scrollIntoView(this);
+},_updateNodeWidth:function(n,_3){
+n.style.width="";
+var _4=dojo.marginBox(n).w;
+if(_4<_3){
+dojo.marginBox(n,{w:_3});
+}
+},_onMinWidthChange:function(v){
+this._updateNodeWidth(this.domNode,v);
+},_setMinWidthAttr:function(v){
+if(v!==this.minWidth){
+this.minWidth=v;
+this._onMinWidthChange(v);
+}
+},startup:function(){
+if(this._started){
+return;
+}
+if(this.store&&this.store.getFeatures()["dojo.data.api.Notification"]){
+window.setTimeout(dojo.hitch(this,function(){
+this.connect(this.store,"onSet","_onSetItem");
+this.connect(this.store,"onNew","_onNewItem");
+this.connect(this.store,"onDelete","_onDeleteItem");
+}),1);
+}
+this.connect(this.focusNode||this.domNode,"onkeypress","_focusKey");
+this.parentWidget._updateClass(this.domNode,"Pane");
+this.inherited(arguments);
+this._onMinWidthChange(this.minWidth);
+},_focusKey:function(e){
+if(e.charOrCode==dojo.keys.BACKSPACE){
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.LEFT_ARROW&&this.parentPane){
+this.parentPane.focus();
+this.parentWidget.scrollIntoView(this.parentPane);
+}else{
+if(e.charOrCode==dojo.keys.ENTER){
+this.parentWidget._onExecute();
+}
+}
+}
+},focus:function(_5){
+if(this.parentWidget._focusedPane!=this){
+this.parentWidget._focusedPane=this;
+this.parentWidget.scrollIntoView(this);
+if(this._focusByNode&&(!this.parentWidget._savedFocus||_5)){
+try{
+(this.focusNode||this.domNode).focus();
+}
+catch(e){
+}
+}
+}
+},_onShow:function(){
+if((this.store||this.items)&&((this.refreshOnShow&&this.domNode)||(!this.isLoaded&&this.domNode))){
+this.refresh();
+}
+},_load:function(){
+this.isLoaded=false;
+if(this.items){
+this._setContentAndScroll(this.onLoadStart(),true);
+window.setTimeout(dojo.hitch(this,"_doQuery"),1);
+}else{
+this._doQuery();
+}
+},_doLoadItems:function(_6,_7){
+var _8=0,_9=this.store;
+dojo.forEach(_6,function(_a){
+if(!_9.isItemLoaded(_a)){
+_8++;
+}
+});
+if(_8===0){
+_7();
+}else{
+var _b=function(_c){
+_8--;
+if((_8)===0){
+_7();
+}
+};
+dojo.forEach(_6,function(_d){
+if(!_9.isItemLoaded(_d)){
+_9.loadItem({item:_d,onItem:_b});
+}
+});
+}
+},_doQuery:function(){
+if(!this.domNode){
+return;
+}
+var _e=this.parentWidget.preloadItems;
+_e=(_e===true||(this.items&&this.items.length<=Number(_e)));
+if(this.items&&_e){
+this._doLoadItems(this.items,dojo.hitch(this,"onItems"));
+}else{
+if(this.items){
+this.onItems();
+}else{
+this._setContentAndScroll(this.onFetchStart(),true);
+this.store.fetch({query:this.query,onComplete:function(_f){
+this.items=_f;
+this.onItems();
+},onError:function(e){
+this._onError("Fetch",e);
+},scope:this});
+}
+}
+},_hasItem:function(_10){
+var _11=this.items||[];
+for(var i=0,_12;(_12=_11[i]);i++){
+if(this.parentWidget._itemsMatch(_12,_10)){
+return true;
+}
+}
+return false;
+},_onSetItem:function(_13,_14,_15,_16){
+if(this._hasItem(_13)){
+this.refresh();
+}
+},_onNewItem:function(_17,_18){
+var sel;
+if((!_18&&!this.parentPane)||(_18&&this.parentPane&&this.parentPane._hasItem(_18.item)&&(sel=this.parentPane._getSelected())&&this.parentWidget._itemsMatch(sel.item,_18.item))){
+this.items.push(_17);
+this.refresh();
+}else{
+if(_18&&this.parentPane&&this._hasItem(_18.item)){
+this.refresh();
+}
+}
+},_onDeleteItem:function(_19){
+if(this._hasItem(_19)){
+this.items=dojo.filter(this.items,function(i){
+return (i!=_19);
+});
+this.refresh();
+}
+},onFetchStart:function(){
+return this.loadingMessage;
+},onFetchError:function(_1a){
+return this.errorMessage;
+},onLoadStart:function(){
+return this.loadingMessage;
+},onLoadError:function(_1b){
+return this.errorMessage;
+},onItems:function(){
+if(!this.onLoadDeferred){
+this.cancel();
+this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
+}
+this._onLoadHandler();
+}});
+dojo.declare("dojox.widget._RollingListGroupPane",[dojox.widget._RollingListPane],{templateString:"<div><div dojoAttachPoint=\"containerNode\"></div>"+"<div dojoAttachPoint=\"menuContainer\">"+"<div dojoAttachPoint=\"menuNode\"></div>"+"</div></div>",_menu:null,_setContent:function(_1c){
+if(!this._menu){
+this.inherited(arguments);
+}
+},_onMinWidthChange:function(v){
+if(!this._menu){
+return;
+}
+var _1d=dojo.marginBox(this.domNode).w;
+var _1e=dojo.marginBox(this._menu.domNode).w;
+this._updateNodeWidth(this._menu.domNode,v-(_1d-_1e));
+},onItems:function(){
+var _1f,_20=false;
+if(this._menu){
+_1f=this._getSelected();
+this._menu.destroyRecursive();
+}
+this._menu=this._getMenu();
+var _21,_22;
+if(this.items.length){
+dojo.forEach(this.items,function(_23){
+_21=this.parentWidget._getMenuItemForItem(_23,this);
+if(_21){
+if(_1f&&this.parentWidget._itemsMatch(_21.item,_1f.item)){
+_22=_21;
+}
+this._menu.addChild(_21);
+}
+},this);
+}else{
+_21=this.parentWidget._getMenuItemForItem(null,this);
+if(_21){
+this._menu.addChild(_21);
+}
+}
+if(_22){
+this._setSelected(_22);
+if((_1f&&!_1f.children&&_22.children)||(_1f&&_1f.children&&!_22.children)){
+var _24=this.parentWidget._getPaneForItem(_22.item,this,_22.children);
+if(_24){
+this.parentWidget.addChild(_24,this.getIndexInParent()+1);
+}else{
+this.parentWidget._removeAfter(this);
+this.parentWidget._onItemClick(null,this,_22.item,_22.children);
+}
+}
+}else{
+if(_1f){
+this.parentWidget._removeAfter(this);
+}
+}
+this.containerNode.innerHTML="";
+this.containerNode.appendChild(this._menu.domNode);
+this.parentWidget.scrollIntoView(this);
+this._checkScrollConnection(true);
+this.inherited(arguments);
+this._onMinWidthChange(this.minWidth);
+},_checkScrollConnection:function(_25){
+var _26=this.store;
+if(this._scrollConn){
+this.disconnect(this._scrollConn);
+}
+delete this._scrollConn;
+if(!dojo.every(this.items,function(i){
+return _26.isItemLoaded(i);
+})){
+if(_25){
+this._loadVisibleItems();
+}
+this._scrollConn=this.connect(this.domNode,"onscroll","_onScrollPane");
+}
+},startup:function(){
+this.inherited(arguments);
+this.parentWidget._updateClass(this.domNode,"GroupPane");
+},focus:function(_27){
+if(this._menu){
+if(this._pendingFocus){
+this.disconnect(this._pendingFocus);
+}
+delete this._pendingFocus;
+var _28=this._menu.focusedChild;
+if(!_28){
+var _29=dojo.query(".dojoxRollingListItemSelected",this.domNode)[0];
+if(_29){
+_28=dijit.byNode(_29);
+}
+}
+if(!_28){
+_28=this._menu.getChildren()[0]||this._menu;
+}
+this._focusByNode=false;
+if(_28.focusNode){
+if(!this.parentWidget._savedFocus||_27){
+try{
+_28.focusNode.focus();
+}
+catch(e){
+}
+}
+window.setTimeout(function(){
+try{
+dijit.scrollIntoView(_28.focusNode);
+}
+catch(e){
+}
+},1);
+}else{
+if(_28.focus){
+if(!this.parentWidget._savedFocus||_27){
+_28.focus();
+}
+}else{
+this._focusByNode=true;
+}
+}
+this.inherited(arguments);
+}else{
+if(!this._pendingFocus){
+this._pendingFocus=this.connect(this,"onItems","focus");
+}
+}
+},_getMenu:function(){
+var _2a=this;
+var _2b=new dijit.Menu({parentMenu:this.parentPane?this.parentPane._menu:null,onCancel:function(_2c){
+if(_2a.parentPane){
+_2a.parentPane.focus(true);
+}
+},_moveToPopup:function(evt){
+if(this.focusedChild&&!this.focusedChild.disabled){
+this.focusedChild._onClick(evt);
+}
+}},this.menuNode);
+this.connect(_2b,"onItemClick",function(_2d,evt){
+if(_2d.disabled){
+return;
+}
+evt.alreadySelected=dojo.hasClass(_2d.domNode,"dojoxRollingListItemSelected");
+if(evt.alreadySelected&&((evt.type=="keypress"&&evt.charOrCode!=dojo.keys.ENTER)||(evt.type=="internal"))){
+var p=this.parentWidget.getChildren()[this.getIndexInParent()+1];
+if(p){
+p.focus(true);
+this.parentWidget.scrollIntoView(p);
+}
+}else{
+this._setSelected(_2d,_2b);
+this.parentWidget._onItemClick(evt,this,_2d.item,_2d.children);
+if(evt.type=="keypress"&&evt.charOrCode==dojo.keys.ENTER){
+this.parentWidget._onExecute();
+}
+}
+});
+if(!_2b._started){
+_2b.startup();
+}
+return _2b;
+},_onScrollPane:function(){
+if(this._visibleLoadPending){
+window.clearTimeout(this._visibleLoadPending);
+}
+this._visibleLoadPending=window.setTimeout(dojo.hitch(this,"_loadVisibleItems"),500);
+},_loadVisibleItems:function(){
+delete this._visibleLoadPending;
+var _2e=this._menu;
+if(!_2e){
+return;
+}
+var _2f=_2e.getChildren();
+if(!_2f||!_2f.length){
+return;
+}
+var _30=function(n,m,pb){
+var s=dojo.getComputedStyle(n);
+var r=0;
+if(m){
+r+=dojo._getMarginExtents(n,s).t;
+}
+if(pb){
+r+=dojo._getPadBorderExtents(n,s).t;
+}
+return r;
+};
+var _31=_30(this.domNode,false,true)+_30(this.containerNode,true,true)+_30(_2e.domNode,true,true)+_30(_2f[0].domNode,true,false);
+var h=dojo.contentBox(this.domNode).h;
+var _32=this.domNode.scrollTop-_31-(h/2);
+var _33=_32+(3*h/2);
+var _34=dojo.filter(_2f,function(c){
+var cnt=c.domNode.offsetTop;
+var s=c.store;
+var i=c.item;
+return (cnt>=_32&&cnt<=_33&&!s.isItemLoaded(i));
+});
+var _35=dojo.map(_34,function(c){
+return c.item;
+});
+var _36=dojo.hitch(this,function(){
+var _37=this._getSelected();
+var _38;
+dojo.forEach(_35,function(_39,idx){
+var _3a=this.parentWidget._getMenuItemForItem(_39,this);
+var _3b=_34[idx];
+var _3c=_3b.getIndexInParent();
+_2e.removeChild(_3b);
+if(_3a){
+if(_37&&this.parentWidget._itemsMatch(_3a.item,_37.item)){
+_38=_3a;
+}
+_2e.addChild(_3a,_3c);
+if(_2e.focusedChild==_3b){
+_2e.focusChild(_3a);
+}
+}
+_3b.destroy();
+},this);
+this._checkScrollConnection(false);
+});
+this._doLoadItems(_35,_36);
+},_getSelected:function(_3d){
+if(!_3d){
+_3d=this._menu;
+}
+if(_3d){
+var _3e=this._menu.getChildren();
+for(var i=0,_3f;(_3f=_3e[i]);i++){
+if(dojo.hasClass(_3f.domNode,"dojoxRollingListItemSelected")){
+return _3f;
+}
+}
+}
+return null;
+},_setSelected:function(_40,_41){
+if(!_41){
+_41=this._menu;
+}
+if(_41){
+dojo.forEach(_41.getChildren(),function(i){
+this.parentWidget._updateClass(i.domNode,"Item",{"Selected":(_40&&(i==_40&&!i.disabled))});
+},this);
+}
+}});
+dojo.declare("dojox.widget.RollingList",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.widget","RollingList/RollingList.html","<div class=\"dojoxRollingList ${className}\"\n\t><div class=\"dojoxRollingListContainer\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onkeypress:_onKey\"\n\t></div\n\t><div class=\"dojoxRollingListButtons\" dojoAttachPoint=\"buttonsNode\"\n ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"okButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onExecute\">${okButtonLabel}</button\n ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"cancelButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onCancel\">${cancelButtonLabel}</button\n\t></div\n></div>\n"),widgetsInTemplate:true,className:"",store:null,query:null,queryOptions:null,childrenAttrs:["children"],parentAttr:"",value:null,executeOnDblClick:true,preloadItems:false,showButtons:false,okButtonLabel:"",cancelButtonLabel:"",minPaneWidth:0,postMixInProperties:function(){
+this.inherited(arguments);
+var loc=dojo.i18n.getLocalization("dijit","common");
+this.okButtonLabel=this.okButtonLabel||loc.buttonOk;
+this.cancelButtonLabel=this.cancelButtonLabel||loc.buttonCancel;
+},_setShowButtonsAttr:function(_42){
+var _43=false;
+if((this.showButtons!=_42&&this._started)||(this.showButtons==_42&&!this.started)){
+_43=true;
+}
+dojo.toggleClass(this.domNode,"dojoxRollingListButtonsHidden",!_42);
+this.showButtons=_42;
+if(_43){
+if(this._started){
+this.layout();
+}else{
+window.setTimeout(dojo.hitch(this,"layout"),0);
+}
+}
+},_itemsMatch:function(_44,_45){
+if(!_44&&!_45){
+return true;
+}else{
+if(!_44||!_45){
+return false;
+}
+}
+return (_44==_45||(this._isIdentity&&this.store.getIdentity(_44)==this.store.getIdentity(_45)));
+},_removeAfter:function(idx){
+if(typeof idx!="number"){
+idx=this.getIndexOfChild(idx);
+}
+if(idx>=0){
+dojo.forEach(this.getChildren(),function(c,i){
+if(i>idx){
+this.removeChild(c);
+c.destroyRecursive();
+}
+},this);
+}
+var _46=this.getChildren(),_47=_46[_46.length-1];
+var _48=null;
+while(_47&&!_48){
+var val=_47._getSelected?_47._getSelected():null;
+if(val){
+_48=val.item;
+}
+_47=_47.parentPane;
+}
+if(!this._setInProgress){
+this._setValue(_48);
+}
+},addChild:function(_49,_4a){
+if(_4a>0){
+this._removeAfter(_4a-1);
+}
+this.inherited(arguments);
+if(!_49._started){
+_49.startup();
+}
+_49.attr("minWidth",this.minPaneWidth);
+this.layout();
+if(!this._savedFocus){
+_49.focus();
+}
+},_setMinPaneWidthAttr:function(_4b){
+if(_4b!==this.minPaneWidth){
+this.minPaneWidth=_4b;
+dojo.forEach(this.getChildren(),function(c){
+c.attr("minWidth",_4b);
+});
+}
+},_updateClass:function(_4c,_4d,_4e){
+if(!this._declaredClasses){
+this._declaredClasses=("dojoxRollingList "+this.className).split(" ");
+}
+dojo.forEach(this._declaredClasses,function(c){
+if(c){
+dojo.addClass(_4c,c+_4d);
+for(var k in _4e||{}){
+dojo.toggleClass(_4c,c+_4d+k,_4e[k]);
+}
+dojo.toggleClass(_4c,c+_4d+"FocusSelected",(dojo.hasClass(_4c,c+_4d+"Focus")&&dojo.hasClass(_4c,c+_4d+"Selected")));
+dojo.toggleClass(_4c,c+_4d+"HoverSelected",(dojo.hasClass(_4c,c+_4d+"Hover")&&dojo.hasClass(_4c,c+_4d+"Selected")));
+}
+});
+},scrollIntoView:function(_4f){
+if(this._scrollingTimeout){
+window.clearTimeout(this._scrollingTimeout);
+}
+delete this._scrollingTimeout;
+this._scrollingTimeout=window.setTimeout(dojo.hitch(this,function(){
+if(_4f.domNode){
+dijit.scrollIntoView(_4f.domNode);
+}
+delete this._scrollingTimeout;
+return;
+}),1);
+},resize:function(_50){
+dijit.layout._LayoutWidget.prototype.resize.call(this,_50);
+},layout:function(){
+var _51=this.getChildren();
+if(this._contentBox){
+var bn=this.buttonsNode;
+var _52=this._contentBox.h-dojo.marginBox(bn).h-dojox.html.metrics.getScrollbar().h;
+dojo.forEach(_51,function(c){
+dojo.marginBox(c.domNode,{h:_52});
+});
+}
+if(this._focusedPane){
+var foc=this._focusedPane;
+delete this._focusedPane;
+if(!this._savedFocus){
+foc.focus();
+}
+}else{
+if(_51&&_51.length){
+if(!this._savedFocus){
+_51[0].focus();
+}
+}
+}
+},_onChange:function(_53){
+this.onChange(_53);
+},_setValue:function(_54){
+delete this._setInProgress;
+if(!this._itemsMatch(this.value,_54)){
+this.value=_54;
+this._onChange(_54);
+}
+},_setValueAttr:function(_55){
+if(this._itemsMatch(this.value,_55)&&!_55){
+return;
+}
+if(this._setInProgress&&this._setInProgress===_55){
+return;
+}
+this._setInProgress=_55;
+if(!_55||!this.store.isItem(_55)){
+var _56=this.getChildren()[0];
+_56._setSelected(null);
+this._onItemClick(null,_56,null,null);
+return;
+}
+var _57=dojo.hitch(this,function(_58,_59){
+var _5a=this.store,id;
+if(this.parentAttr&&_5a.getFeatures()["dojo.data.api.Identity"]&&((id=this.store.getValue(_58,this.parentAttr))||id==="")){
+var cb=function(i){
+if(_5a.getIdentity(i)==_5a.getIdentity(_58)){
+_59(null);
+}else{
+_59([i]);
+}
+};
+if(id===""){
+_59(null);
+}else{
+if(typeof id=="string"){
+_5a.fetchItemByIdentity({identity:id,onItem:cb});
+}else{
+if(_5a.isItem(id)){
+cb(id);
+}
+}
+}
+}else{
+var _5b=this.childrenAttrs.length;
+var _5c=[];
+dojo.forEach(this.childrenAttrs,function(_5d){
+var q={};
+q[_5d]=_58;
+_5a.fetch({query:q,scope:this,onComplete:function(_5e){
+if(this._setInProgress!==_55){
+return;
+}
+_5c=_5c.concat(_5e);
+_5b--;
+if(_5b===0){
+_59(_5c);
+}
+}});
+},this);
+}
+});
+var _5f=dojo.hitch(this,function(_60,idx){
+var set=_60[idx];
+var _61=this.getChildren()[idx];
+var _62;
+if(set&&_61){
+var fx=dojo.hitch(this,function(){
+if(_62){
+this.disconnect(_62);
+}
+delete _62;
+if(this._setInProgress!==_55){
+return;
+}
+var _63=dojo.filter(_61._menu.getChildren(),function(i){
+return this._itemsMatch(i.item,set);
+},this)[0];
+if(_63){
+idx++;
+_61._menu.onItemClick(_63,{type:"internal",stopPropagation:function(){
+},preventDefault:function(){
+}});
+if(_60[idx]){
+_5f(_60,idx);
+}else{
+this._setValue(set);
+this.onItemClick(set,_61,this.getChildItems(set));
+}
+}
+});
+if(!_61.isLoaded){
+_62=this.connect(_61,"onLoad",fx);
+}else{
+fx();
+}
+}else{
+if(idx===0){
+this.attr("value",null);
+}
+}
+});
+var _64=[];
+var _65=dojo.hitch(this,function(_66){
+if(_66&&_66.length){
+_64.push(_66[0]);
+_57(_66[0],_65);
+}else{
+if(!_66){
+_64.pop();
+}
+_64.reverse();
+_5f(_64,0);
+}
+});
+var ns=this.domNode.style;
+if(ns.display=="none"||ns.visibility=="hidden"){
+this._setValue(_55);
+}else{
+if(!this._itemsMatch(_55,this._visibleItem)){
+_65([_55]);
+}
+}
+},_onItemClick:function(evt,_67,_68,_69){
+if(evt){
+var _6a=this._getPaneForItem(_68,_67,_69);
+var _6b=(evt.type=="click"&&evt.alreadySelected);
+if(_6b&&_6a){
+this._removeAfter(_67.getIndexInParent()+1);
+var _6c=_67.getNextSibling();
+if(_6c&&_6c._setSelected){
+_6c._setSelected(null);
+}
+this.scrollIntoView(_6c);
+}else{
+if(_6a){
+this.addChild(_6a,_67.getIndexInParent()+1);
+if(this._savedFocus){
+_6a.focus(true);
+}
+}else{
+this._removeAfter(_67);
+this.scrollIntoView(_67);
+}
+}
+}else{
+if(_67){
+this._removeAfter(_67);
+this.scrollIntoView(_67);
+}
+}
+if(!evt||evt.type!="internal"){
+this._setValue(_68);
+this.onItemClick(_68,_67,_69);
+}
+this._visibleItem=_68;
+},_getPaneForItem:function(_6d,_6e,_6f){
+var ret=this.getPaneForItem(_6d,_6e,_6f);
+ret.store=this.store;
+ret.parentWidget=this;
+ret.parentPane=_6e||null;
+if(!_6d){
+ret.query=this.query;
+ret.queryOptions=this.queryOptions;
+}else{
+if(_6f){
+ret.items=_6f;
+}else{
+ret.items=[_6d];
+}
+}
+return ret;
+},_getMenuItemForItem:function(_70,_71){
+var _72=this.store;
+if(!_70||!_72||!_72.isItem(_70)){
+var i=new dijit.MenuItem({label:"---",disabled:true,iconClass:"dojoxEmpty",focus:function(){
+}});
+this._updateClass(i.domNode,"Item");
+return i;
+}else{
+var _73=_72.isItemLoaded(_70);
+var _74=_73?this.getChildItems(_70):undefined;
+var _75;
+if(_74){
+_75=this.getMenuItemForItem(_70,_71,_74);
+_75.children=_74;
+this._updateClass(_75.domNode,"Item",{"Expanding":true});
+if(!_75._started){
+var c=_75.connect(_75,"startup",function(){
+this.disconnect(c);
+dojo.style(this.arrowWrapper,"display","");
+});
+}else{
+dojo.style(_75.arrowWrapper,"display","");
+}
+}else{
+_75=this.getMenuItemForItem(_70,_71,null);
+if(_73){
+this._updateClass(_75.domNode,"Item",{"Single":true});
+}else{
+this._updateClass(_75.domNode,"Item",{"Unloaded":true});
+_75.attr("disabled",true);
+}
+}
+_75.store=this.store;
+_75.item=_70;
+if(!_75.label){
+_75.attr("label",this.store.getLabel(_70).replace(/</,"&lt;"));
+}
+if(_75.focusNode){
+var _76=this;
+_75.focus=function(){
+if(!this.disabled){
+try{
+this.focusNode.focus();
+}
+catch(e){
+}
+}
+};
+_75.connect(_75.focusNode,"onmouseenter",function(){
+if(!this.disabled){
+_76._updateClass(this.domNode,"Item",{"Hover":true});
+}
+});
+_75.connect(_75.focusNode,"onmouseleave",function(){
+if(!this.disabled){
+_76._updateClass(this.domNode,"Item",{"Hover":false});
+}
+});
+_75.connect(_75.focusNode,"blur",function(){
+_76._updateClass(this.domNode,"Item",{"Focus":false,"Hover":false});
+});
+_75.connect(_75.focusNode,"focus",function(){
+_76._updateClass(this.domNode,"Item",{"Focus":true});
+_76._focusedPane=_71;
+});
+if(this.executeOnDblClick){
+_75.connect(_75.focusNode,"ondblclick",function(){
+_76._onExecute();
+});
+}
+}
+return _75;
+}
+},_setStore:function(_77){
+if(_77===this.store&&this._started){
+return;
+}
+this.store=_77;
+this._isIdentity=_77.getFeatures()["dojo.data.api.Identity"];
+var _78=this._getPaneForItem();
+this.addChild(_78,0);
+},_onKey:function(e){
+if(e.charOrCode==dojo.keys.BACKSPACE){
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.ESCAPE&&this._savedFocus){
+try{
+dijit.focus(this._savedFocus);
+}
+catch(e){
+}
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.LEFT_ARROW||e.charOrCode==dojo.keys.RIGHT_ARROW){
+dojo.stopEvent(e);
+return;
+}
+}
+}
+},_resetValue:function(){
+this.attr("value",this._lastExecutedValue);
+},_onCancel:function(){
+this._resetValue();
+this.onCancel();
+},_onExecute:function(){
+this._lastExecutedValue=this.attr("value");
+this.onExecute();
+},focus:function(){
+var _79=this._savedFocus;
+this._savedFocus=dijit.getFocus(this);
+if(!this._savedFocus.node){
+delete this._savedFocus;
+}
+if(!this._focusedPane){
+var _7a=this.getChildren()[0];
+if(_7a&&!_79){
+_7a.focus(true);
+}
+}else{
+this._savedFocus=dijit.getFocus(this);
+var foc=this._focusedPane;
+delete this._focusedPane;
+if(!_79){
+foc.focus(true);
+}
+}
+},handleKey:function(e){
+if(e.charOrCode==dojo.keys.DOWN_ARROW){
+delete this._savedFocus;
+this.focus();
+return false;
+}else{
+if(e.charOrCode==dojo.keys.ESCAPE){
+this._onCancel();
+return false;
+}
+}
+return true;
+},_updateChildClasses:function(){
+var _7b=this.getChildren();
+var _7c=_7b.length;
+dojo.forEach(_7b,function(c,idx){
+dojo.toggleClass(c.domNode,"dojoxRollingListPaneCurrentChild",(idx==(_7c-1)));
+dojo.toggleClass(c.domNode,"dojoxRollingListPaneCurrentSelected",(idx==(_7c-2)));
+});
+},startup:function(){
+if(this._started){
+return;
+}
+if(!this.getParent||!this.getParent()){
+this.resize();
+this.connect(dojo.global,"onresize","resize");
+}
+this.connect(this,"addChild","_updateChildClasses");
+this.connect(this,"removeChild","_updateChildClasses");
+this._setStore(this.store);
+this.attr("showButtons",this.showButtons);
+this.inherited(arguments);
+this._lastExecutedValue=this.attr("value");
+},getChildItems:function(_7d){
+var _7e,_7f=this.store;
+dojo.forEach(this.childrenAttrs,function(_80){
+var _81=_7f.getValues(_7d,_80);
+if(_81&&_81.length){
+_7e=(_7e||[]).concat(_81);
+}
+});
+return _7e;
+},getMenuItemForItem:function(_82,_83,_84){
+return new dijit.MenuItem({});
+},getPaneForItem:function(_85,_86,_87){
+if(!_85||_87){
+return new dojox.widget._RollingListGroupPane({});
+}else{
+return null;
+}
+},onItemClick:function(_88,_89,_8a){
+},onExecute:function(){
+},onCancel:function(){
+},onChange:function(_8b){
+}});
+}
diff --git a/js/dojo/dojox/widget/RollingList/RollingList.css b/js/dojo/dojox/widget/RollingList/RollingList.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/RollingList/RollingList.css
@@ -0,0 +1,140 @@
+.dojoxRollingList {
+ border: 1px solid #000;
+ height: 20em;
+ background-color: #FFF;
+ position: relative;
+}
+.dijitPopup .dojoxRollingList {
+ position: static;
+}
+.dojoxRollingListContainer {
+ overflow: scroll;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ white-space: nowrap;
+}
+.dojoxRollingListButtons {
+ position: absolute;
+ right: 5px;
+ padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+ display: none;
+}
+.dojoxRollingListPane {
+ overflow: scroll;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ display:-moz-inline-box;
+ display:inline-block;
+ #zoom: 1;
+ #display:inline;
+ border:0;
+ padding:0;
+ vertical-align:middle;
+ #vertical-align: auto;
+}
+.dojoxRollingListPane .dijitMenuItem td {
+ width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+ width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+ position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+ padding-right: 15px;
+}
+.dojoxRollingListPane .dijitMenu {
+ border: none !important;
+}
+.dojoxRollingListItem {
+ cursor: default;
+}
+.tundra .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+ background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #fff;
+ background-color: #999;
+ font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+ font-family: inherit;
+}
+.soria .dojoxRollingList {
+ border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+ border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+ background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+ font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+ border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+ border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+ background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+ background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+ color: #243C5F;
+ background-color: #ccc;
+ font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+ background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+ background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+ font-family: inherit;
+}
diff --git a/js/dojo/dojox/widget/RollingList/RollingList.html b/js/dojo/dojox/widget/RollingList/RollingList.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/RollingList/RollingList.html
@@ -0,0 +1,10 @@
+<div class="dojoxRollingList ${className}"
+ ><div class="dojoxRollingListContainer" dojoAttachPoint="containerNode" dojoAttachEvent="onkeypress:_onKey"
+ ></div
+ ><div class="dojoxRollingListButtons" dojoAttachPoint="buttonsNode"
+ ><button dojoType="dijit.form.Button" dojoAttachPoint="okButton"
+ dojoAttachEvent="onClick:_onExecute">${okButtonLabel}</button
+ ><button dojoType="dijit.form.Button" dojoAttachPoint="cancelButton"
+ dojoAttachEvent="onClick:_onCancel">${cancelButtonLabel}</button
+ ></div
+></div>
diff --git a/js/dojo/dojox/widget/Rotator.js b/js/dojo/dojox/widget/Rotator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Rotator.js
@@ -0,0 +1,148 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Rotator"]){
+dojo._hasResource["dojox.widget.Rotator"]=true;
+dojo.provide("dojox.widget.Rotator");
+dojo.require("dojo.parser");
+(function(d){
+var _1="dojox.widget.rotator.swap",_2=500,_3="display",_4="none",_5="zIndex";
+d.declare("dojox.widget.Rotator",null,{transition:_1,transitionParams:"duration:"+_2,panes:null,constructor:function(_6,_7){
+d.mixin(this,_6);
+var _8=this,t=_8.transition,tt=_8._transitions={},_9=_8._idMap={},tp=_8.transitionParams=eval("({ "+_8.transitionParams+" })"),_7=_8._domNode=dojo.byId(_7),cb=_8._domNodeContentBox=d.contentBox(_7),p={left:0,top:0},_a=function(bt,dt){
+console.warn(_8.declaredClass," - Unable to find transition \"",bt,"\", defaulting to \"",dt,"\".");
+};
+_8.id=_7.id||(new Date()).getTime();
+if(d.style(_7,"position")=="static"){
+d.style(_7,"position","relative");
+}
+tt[t]=d.getObject(t);
+if(!tt[t]){
+_a(t,_1);
+tt[_8.transition=_1]=d.getObject(_1);
+}
+if(!tp.duration){
+tp.duration=_2;
+}
+d.forEach(_8.panes,function(p){
+d.create("div",p,_7);
+});
+var pp=_8.panes=[];
+d.query(">",_7).forEach(function(n,i){
+var q={node:n,idx:i,params:d.mixin({},tp,eval("({ "+(d.attr(n,"transitionParams")||"")+" })"))},r=q.trans=d.attr(n,"transition")||_8.transition;
+d.forEach(["id","title","duration","waitForEvent"],function(a){
+q[a]=d.attr(n,a);
+});
+if(q.id){
+_9[id]=i;
+}
+if(!tt[r]&&!(tt[r]=d.getObject(r))){
+_a(r,q.trans=_8.transition);
+}
+p.position="absolute";
+p.display=_4;
+if(_8.idx==null||d.attr(n,"selected")){
+if(_8.idx!=null){
+d.style(pp[_8.idx].node,_3,_4);
+}
+_8.idx=i;
+p.display="";
+}
+d.style(n,p);
+d.query("> script[type^='dojo/method']",n).orphan().forEach(function(s){
+var e=d.attr(s,"event");
+if(e){
+q[e]=d.parser._functionFromScript(s);
+}
+});
+pp.push(q);
+});
+_8._controlSub=d.subscribe(_8.id+"/rotator/control",_8,"control");
+},destroy:function(){
+d.forEach([this._controlSub,this.wfe],d.unsubscribe);
+d.destroy(this._domNode);
+},next:function(){
+return this.go(this.idx+1);
+},prev:function(){
+return this.go(this.idx-1);
+},go:function(p){
+var _b=this,i=_b.idx,pp=_b.panes,_c=pp.length,_d=_b._idMap[p];
+_b._resetWaitForEvent();
+p=_d!=null?_d:(p||0);
+p=p<_c?(p<0?_c-1:p):0;
+if(p==i||_b.anim){
+return null;
+}
+var _e=pp[i],_f=pp[p];
+d.style(_e.node,_5,2);
+d.style(_f.node,_5,1);
+var _10={current:_e,next:_f,rotator:_b},_11=_b.anim=_b._transitions[_f.trans](d.mixin({rotatorBox:_b._domNodeContentBox},_10,_f.params));
+if(_11){
+var def=new d.Deferred(),ev=_f.waitForEvent,h=d.connect(_11,"onEnd",function(){
+d.style(_e.node,{display:_4,left:0,opacity:1,top:0,zIndex:0});
+d.disconnect(h);
+_b.anim=null;
+_b.idx=p;
+if(_e.onAfterOut){
+_e.onAfterOut(_10);
+}
+if(_f.onAfterIn){
+_f.onAfterIn(_10);
+}
+_b.onUpdate("onAfterTransition");
+if(!ev){
+_b._resetWaitForEvent();
+def.callback();
+}
+});
+_b.wfe=ev?d.subscribe(ev,function(){
+_b._resetWaitForEvent();
+def.callback(true);
+}):null;
+_b.onUpdate("onBeforeTransition");
+if(_e.onBeforeOut){
+_e.onBeforeOut(_10);
+}
+if(_f.onBeforeIn){
+_f.onBeforeIn(_10);
+}
+_11.play();
+return def;
+}
+},onUpdate:function(_12,_13){
+d.publish(this.id+"/rotator/update",[_12,this,_13||{}]);
+},_resetWaitForEvent:function(){
+if(this.wfe){
+d.unsubscribe(this.wfe);
+this.wfe=null;
+}
+},control:function(_14){
+var _15=d._toArray(arguments),_16=this;
+_15.shift();
+_16._resetWaitForEvent();
+if(_16[_14]){
+var def=_16[_14].apply(_16,_15);
+if(def){
+def.addCallback(function(){
+_16.onUpdate(_14);
+});
+}
+_16.onManualChange(_14);
+}else{
+console.warn(_16.declaredClass," - Unsupported action \"",_14,"\".");
+}
+},onManualChange:function(){
+}});
+d.setObject(_1,function(_17){
+return new d._Animation({play:function(){
+d.style(_17.current.node,_3,_4);
+d.style(_17.next.node,_3,"");
+this._fire("onEnd");
+}});
+});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/Standby.js b/js/dojo/dojox/widget/Standby.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Standby.js
@@ -0,0 +1,328 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Standby"]){
+dojo._hasResource["dojox.widget.Standby"]=true;
+dojo.provide("dojox.widget.Standby");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx");
+dojo.experimental("dojox.widget.Standby");
+dojo.declare("dojox.widget.Standby",[dijit._Widget,dijit._Templated],{templateString:"<div>"+"<div style=\"display: none; opacity: 0; z-index: 9999; "+"position: absolute; cursor:wait;\" dojoAttachPoint=\"_underlayNode\"></div>"+"<img src=\"${image}\" style=\"opacity: 0; display: none; z-index: -10000; "+"position: absolute; top: 0px; left: 0px; cursor:wait;\" "+"dojoAttachPoint=\"_imageNode\">"+"<div style=\"opacity: 0; display: none; z-index: -10000; position: absolute; "+"top: 0px;\" dojoAttachPoint=\"_textNode\"></div>"+"</div>",_underlayNode:null,_imageNode:null,_textNode:null,_centerNode:null,image:dojo.moduleUrl("dojox","widget/Standby/images/loading.gif").toString(),imageText:"Please Wait...",text:"Please wait...",centerIndicator:"image",_displayed:false,_resizeCheck:null,target:"",color:"#C0C0C0",duration:500,_started:false,_parent:null,zIndex:"auto",startup:function(_1){
+if(!this._started){
+if(typeof this.target==="string"){
+var w=dijit.byId(this.target);
+if(w){
+this.target=w.domNode;
+}else{
+this.target=dojo.byId(this.target);
+}
+}
+if(this.text){
+this._textNode.innerHTML=this.text;
+}
+if(this.centerIndicator==="image"){
+this._centerNode=this._imageNode;
+dojo.attr(this._imageNode,"src",this.image);
+dojo.attr(this._imageNode,"alt",this.imageText);
+}else{
+this._centerNode=this._textNode;
+}
+dojo.style(this._underlayNode,{display:"none",backgroundColor:this.color});
+dojo.style(this._centerNode,"display","none");
+this.connect(this._underlayNode,"onclick","_ignore");
+if(this.domNode.parentNode&&this.domNode.parentNode!=dojo.body()){
+dojo.body().appendChild(this.domNode);
+}
+if(dojo.isIE==7){
+this._ieFixNode=dojo.doc.createElement("div");
+dojo.style(this._ieFixNode,{opacity:"0",zIndex:"-1000",position:"absolute",top:"-1000px"});
+dojo.body().appendChild(this._ieFixNode);
+}
+}
+},show:function(){
+if(!this._displayed){
+this._displayed=true;
+this._size();
+this._disableOverflow();
+this._fadeIn();
+}
+},hide:function(){
+if(this._displayed){
+this._size();
+this._fadeOut();
+this._displayed=false;
+if(this._resizeCheck!==null){
+clearInterval(this._resizeCheck);
+this._resizeCheck=null;
+}
+}
+},isVisible:function(){
+return this._displayed;
+},onShow:function(){
+},onHide:function(){
+},uninitialize:function(){
+this._displayed=false;
+if(this._resizeCheck){
+clearInterval(this._resizeCheck);
+}
+dojo.style(this._centerNode,"display","none");
+dojo.style(this._underlayNode,"display","none");
+if(dojo.isIE==7){
+dojo.body().removeChild(this._ieFixNode);
+delete this._ieFixNode;
+}
+this.target=null;
+this._imageNode=null;
+this._textNode=null;
+this._centerNode=null;
+this.inherited(arguments);
+},_size:function(){
+if(this._displayed){
+var _2=dojo.attr(dojo.body(),"dir");
+if(_2){
+_2=_2.toLowerCase();
+}
+var _3;
+var _4=this._scrollerWidths();
+var _5=this.target;
+var _6=dojo.style(this._centerNode,"display");
+dojo.style(this._centerNode,"display","block");
+var _7=dojo.position(_5,true);
+if(_5===dojo.body()||_5===dojo.doc){
+_7=dijit.getViewport();
+_7.x=_7.l;
+_7.y=_7.t;
+}
+var _8=dojo.marginBox(this._centerNode);
+dojo.style(this._centerNode,"display",_6);
+if(this._ieFixNode){
+_3=-this._ieFixNode.offsetTop/1000;
+_7.x=Math.floor((_7.x+0.9)/_3);
+_7.y=Math.floor((_7.y+0.9)/_3);
+_7.w=Math.floor((_7.w+0.9)/_3);
+_7.h=Math.floor((_7.h+0.9)/_3);
+}
+var zi=dojo.style(_5,"zIndex");
+var _9=zi;
+var _a=zi;
+if(this.zIndex==="auto"){
+if(zi!="auto"){
+_9=parseInt(_9,10)+1;
+_a=parseInt(_a,10)+2;
+}
+}else{
+_9=parseInt(this.zIndex,10)+1;
+_a=parseInt(this.zIndex,10)+2;
+}
+dojo.style(this._centerNode,"zIndex",_a);
+dojo.style(this._underlayNode,"zIndex",_9);
+var pn=_5.parentNode;
+if(pn&&pn!==dojo.body()&&_5!==dojo.body()&&_5!==dojo.doc){
+var _b=_7.h;
+var _c=_7.w;
+var _d=dojo.position(pn,true);
+if(this._ieFixNode){
+_3=-this._ieFixNode.offsetTop/1000;
+_d.x=Math.floor((_d.x+0.9)/_3);
+_d.y=Math.floor((_d.y+0.9)/_3);
+_d.w=Math.floor((_d.w+0.9)/_3);
+_d.h=Math.floor((_d.h+0.9)/_3);
+}
+_d.w-=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+_d.h-=pn.scrollWidth>pn.clientWidth&&pn.clientWidth>0?_4.h:0;
+if(_2==="rtl"){
+if(dojo.isOpera){
+_7.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+_d.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+}else{
+if(dojo.isIE){
+_d.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+}else{
+if(dojo.isWebKit){
+}
+}
+}
+}
+if(_d.w<_7.w){
+_7.w=_7.w-_d.w;
+}
+if(_d.h<_7.h){
+_7.h=_7.h-_d.h;
+}
+var _e=_d.y;
+var _f=_d.y+_d.h;
+var _10=_7.y;
+var _11=_7.y+_b;
+var _12=_d.x;
+var _13=_d.x+_d.w;
+var _14=_7.x;
+var _15=_7.x+_c;
+var _16;
+if(_11>_e&&_10<_e){
+_7.y=_d.y;
+_16=_e-_10;
+var _17=_b-_16;
+if(_17<_d.h){
+_7.h=_17;
+}else{
+_7.h-=2*(pn.scrollWidth>pn.clientWidth&&pn.clientWidth>0?_4.h:0);
+}
+}else{
+if(_10<_f&&_11>_f){
+_7.h=_f-_10;
+}else{
+if(_11<=_e||_10>=_f){
+_7.h=0;
+}
+}
+}
+if(_15>_12&&_14<_12){
+_7.x=_d.x;
+_16=_12-_14;
+var _18=_c-_16;
+if(_18<_d.w){
+_7.w=_18;
+}else{
+_7.w-=2*(pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.w:0);
+}
+}else{
+if(_14<_13&&_15>_13){
+_7.w=_13-_14;
+}else{
+if(_15<=_12||_14>=_13){
+_7.w=0;
+}
+}
+}
+}
+if(_7.h>0&&_7.w>0){
+dojo.style(this._underlayNode,{display:"block",width:_7.w+"px",height:_7.h+"px",top:_7.y+"px",left:_7.x+"px"});
+var _19=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"];
+this._cloneStyles(_19);
+if(!dojo.isIE){
+_19=["MozBorderRadius","MozBorderRadiusTopleft","MozBorderRadiusTopright","MozBorderRadiusBottomleft","MozBorderRadiusBottomright","WebkitBorderRadius","WebkitBorderTopLeftRadius","WebkitBorderTopRightRadius","WebkitBorderBottomLeftRadius","WebkitBorderBottomRightRadius"];
+this._cloneStyles(_19,this);
+}
+var _1a=(_7.h/2)-(_8.h/2);
+var _1b=(_7.w/2)-(_8.w/2);
+if(_7.h>=_8.h&&_7.w>=_8.w){
+dojo.style(this._centerNode,{top:(_1a+_7.y)+"px",left:(_1b+_7.x)+"px",display:"block"});
+}else{
+dojo.style(this._centerNode,"display","none");
+}
+}else{
+dojo.style(this._underlayNode,"display","none");
+dojo.style(this._centerNode,"display","none");
+}
+if(this._resizeCheck===null){
+var _1c=this;
+this._resizeCheck=setInterval(function(){
+_1c._size();
+},100);
+}
+}
+},_cloneStyles:function(_1d){
+dojo.forEach(_1d,function(_1e){
+dojo.style(this._underlayNode,_1e,dojo.style(this.target,_1e));
+},this);
+},_fadeIn:function(){
+var _1f=this;
+var _20=dojo.animateProperty({duration:_1f.duration,node:_1f._underlayNode,properties:{opacity:{start:0,end:0.75}}});
+var _21=dojo.animateProperty({duration:_1f.duration,node:_1f._centerNode,properties:{opacity:{start:0,end:1}},onEnd:function(){
+_1f.onShow();
+}});
+var _22=dojo.fx.combine([_20,_21]);
+_22.play();
+},_fadeOut:function(){
+var _23=this;
+var _24=dojo.animateProperty({duration:_23.duration,node:_23._underlayNode,properties:{opacity:{start:0.75,end:0}},onEnd:function(){
+dojo.style(_23._underlayNode,{"display":"none","zIndex":"-1000"});
+}});
+var _25=dojo.animateProperty({duration:_23.duration,node:_23._centerNode,properties:{opacity:{start:1,end:0}},onEnd:function(){
+dojo.style(_23._centerNode,{"display":"none","zIndex":"-1000"});
+_23.onHide();
+_23._enableOverflow();
+}});
+var _26=dojo.fx.combine([_24,_25]);
+_26.play();
+},_ignore:function(_27){
+if(_27){
+dojo.stopEvent(_27);
+}
+},_scrollerWidths:function(){
+var div=dojo.doc.createElement("div");
+dojo.style(div,{position:"absolute",opacity:0,overflow:"hidden",width:"50px",height:"50px",zIndex:"-100",top:"-200px",left:"-200px",padding:"0px",margin:"0px"});
+var _28=dojo.doc.createElement("div");
+dojo.style(_28,{width:"200px",height:"10px"});
+div.appendChild(_28);
+dojo.body().appendChild(div);
+var b=dojo.contentBox(div);
+dojo.style(div,"overflow","scroll");
+var a=dojo.contentBox(div);
+dojo.body().removeChild(div);
+return {v:b.w-a.w,h:b.h-a.h};
+},_setTextAttr:function(_29){
+this._textNode.innerHTML=_29;
+this.text=_29;
+},_setColorAttr:function(c){
+dojo.style(this._underlayNode,"backgroundColor",c);
+this.color=c;
+},_setImageTextAttr:function(_2a){
+dojo.attr(this._imageNode,"alt",_2a);
+this.imageText=_2a;
+},_setImageAttr:function(url){
+dojo.attr(this._imageNode,"src",url);
+this.image=url;
+},_setCenterIndicatorAttr:function(_2b){
+this.centerIndicator=_2b;
+if(_2b==="image"){
+this._centerNode=this._imageNode;
+dojo.style(this._textNode,"display","none");
+}else{
+this._centerNode=this._textNode;
+dojo.style(this._imageNode,"display","none");
+}
+},_disableOverflow:function(){
+if(this.target===dojo.body()||this.target===dojo.doc){
+this._overflowDisabled=true;
+var _2c=dojo.body();
+if(_2c.style&&_2c.style.overflow){
+this._oldOverflow=dojo.style(_2c,"overflow");
+}else{
+this._oldOverflow="";
+}
+if(dojo.isIE&&!dojo.isQuirks){
+if(_2c.parentNode&&_2c.parentNode.style&&_2c.parentNode.style.overflow){
+this._oldBodyParentOverflow=_2c.parentNode.style.overflow;
+}else{
+this._oldBodyParentOverflow="scroll";
+}
+dojo.style(_2c.parentNode,"overflow","hidden");
+}
+dojo.style(_2c,"overflow","hidden");
+}
+},_enableOverflow:function(){
+if(this._overflowDisabled){
+delete this._overflowDisabled;
+var _2d=dojo.body();
+if(dojo.isIE&&!dojo.isQuirks){
+_2d.parentNode.style.overflow=this._oldBodyParentOverflow;
+delete this._oldBodyParentOverflow;
+}
+dojo.style(_2d,"overflow",this._oldOverflow);
+if(dojo.isWebKit){
+var div=dojo.create("div",{style:{height:"2px"}});
+_2d.appendChild(div);
+setTimeout(function(){
+_2d.removeChild(div);
+},0);
+}
+delete this._oldOverflow;
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/Standby/images/loading.gif b/js/dojo/dojox/widget/Standby/images/loading.gif
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e4ab78302c5d6ff92def7688c291999a4fcbd70d
GIT binary patch
literal 4178
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
OA;Sx3z}J8O3I7|Mm>OpQ
diff --git a/js/dojo/dojox/widget/UpgradeBar.js b/js/dojo/dojox/widget/UpgradeBar.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/UpgradeBar.js
@@ -0,0 +1,101 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.UpgradeBar"]){
+dojo._hasResource["dojox.widget.UpgradeBar"]=true;
+dojo.provide("dojox.widget.UpgradeBar");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx");
+dojo.require("dojo.cookie");
+dojo.experimental("dojox.widget.UpgradeBar");
+dojo.declare("dojox.widget.UpgradeBar",[dijit._Widget,dijit._Templated],{notifications:[],buttonCancel:"Close for now",noRemindButton:"Don't Remind Me Again",templateString:dojo.cache("dojox.widget","UpgradeBar/UpgradeBar.html","<div class=\"dojoxUpgradeBar\">\n\t<div class=\"dojoxUpgradeBarMessage\" dojoAttachPoint=\"messageNode\">message</div>\n\t<div class=\"dojoxUpgradeBarReminderButton\" dojoAttachPoint=\"dontRemindButtonNode\" dojoAttachEvent=\"onclick:_onDontRemindClick\">${noRemindButton}</div>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dojoxUpgradeBarCloseIcon\" dojoAttachEvent=\"onclick: hide, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave\" title=\"${buttonCancel}\"></span>\n</div>\n"),constructor:function(_1,_2){
+if(!_1.notifications&&_2){
+dojo.forEach(_2.childNodes,function(n){
+if(n.nodeType==1){
+var _3=dojo.attr(n,"validate");
+this.notifications.push({message:n.innerHTML,validate:function(){
+var _4=true;
+try{
+_4=dojo.eval(_3);
+}
+catch(e){
+}
+return _4;
+}});
+}
+},this);
+}
+},checkNotifications:function(){
+if(!this.notifications.length){
+return;
+}
+for(var i=0;i<this.notifications.length;i++){
+var _5=this.notifications[i].validate();
+if(_5){
+this.notify(this.notifications[i].message);
+break;
+}
+}
+},postCreate:function(){
+this.inherited(arguments);
+if(this.domNode.parentNode){
+dojo.style(this.domNode,"display","none");
+}
+dojo.mixin(this.attributeMap,{message:{node:"messageNode",type:"innerHTML"}});
+if(!this.noRemindButton){
+dojo.destroy(this.dontRemindButtonNode);
+}
+if(dojo.isIE==6){
+var _6=this;
+var _7=function(){
+var v=dijit.getViewport();
+dojo.style(_6.domNode,"width",v.w+"px");
+};
+this.connect(window,"resize",function(){
+_7();
+});
+_7();
+}
+dojo.addOnLoad(this,"checkNotifications");
+},notify:function(_8){
+if(dojo.cookie("disableUpgradeReminders")){
+return;
+}
+if(!this.domNode.parentNode){
+document.body.appendChild(this.domNode);
+}else{
+dojo.style(this.domNode,"display","");
+}
+if(_8){
+this.attr("message",_8);
+}
+},show:function(){
+this._bodyMarginTop=dojo.style(dojo.body(),"marginTop");
+this._size=dojo.contentBox(this.domNode).h;
+dojo.style(this.domNode,{display:"block",height:0,opacity:0});
+if(!this._showAnim){
+this._showAnim=dojo.fx.combine([dojo.animateProperty({node:dojo.body(),duration:500,properties:{marginTop:this._bodyMarginTop+this._size}}),dojo.animateProperty({node:this.domNode,duration:500,properties:{height:this._size,opacity:1}})]);
+}
+this._showAnim.play();
+},hide:function(){
+if(!this._hideAnim){
+this._hideAnim=dojo.fx.combine([dojo.animateProperty({node:dojo.body(),duration:500,properties:{marginTop:this._bodyMarginTop}}),dojo.animateProperty({node:this.domNode,duration:500,properties:{height:0,opacity:0}})]);
+dojo.connect(this._hideAnim,"onEnd",this,function(){
+dojo.style(this.domNode,"display","none");
+});
+}
+this._hideAnim.play();
+},_onDontRemindClick:function(){
+dojo.cookie("disableUpgradeReminders",true,{expires:3650});
+this.hide();
+},_onCloseEnter:function(){
+dojo.addClass(this.closeButtonNode,"dojoxUpgradeBarCloseIcon-hover");
+},_onCloseLeave:function(){
+dojo.removeClass(this.closeButtonNode,"dojoxUpgradeBarCloseIcon-hover");
+}});
+}
diff --git a/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.css b/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.css
@@ -0,0 +1,61 @@
+
+.dojoxUpgradeBar {
+ position:absolute;
+ left:0;
+ top:0;
+ width:100%;
+ height:32px;
+ overflow:hidden;
+ z-index:100;
+ background:#f3f2af;
+ box-shadow:0 2px 6px #444;
+ -webkit-box-shadow:0 1px 6px #444;
+ -moz-box-shadow:0 1px 6px #444;
+ font-size:.8em;
+}
+.dj_ie .dojoxUpgradeBar {
+ border-bottom:#665F48 2px solid;
+}
+.dojoxUpgradeBarMessage {
+ position:absolute;
+ padding-left:10px;
+ top:50%;
+ margin-top:-.75em;
+ left:5px;
+ width:100%;
+}
+.dojoxUpgradeBarMessage a{
+ margin-left:10px;
+}
+.dojoxUpgradeBarReminderButton {
+ position:absolute;
+ top:25%;
+ margin-right:50px;
+ font-size:11px;
+ text-decoration:underline;
+ text-align:right;
+ cursor:pointer;
+ right:-20px;
+}
+.dj_ie6 .dojoxUpgradeBarReminderButton {
+ margin-top:2px;
+}
+.dojoxUpgradeBarCloseIcon {
+ background: url("../../../dijit/themes/tundra/images/tabClose.png") no-repeat right top;
+ position: absolute;
+ vertical-align: middle;
+ right: 5px;
+ top: 30%;
+ height: 15px;
+ width: 15px;
+ cursor: pointer;
+}
+.dj_ie6 .dojoxUpgradeBarCloseIcon {
+ background : url("../../../dijit/themes/tundra/images/tabClose.gif") no-repeat right top;
+}
+.dojoxUpgradeBarCloseIcon-hover {
+ background: url("../../../dijit/themes/tundra/images/tabCloseHover.png") no-repeat right top;
+}
+.dj_ie6 .dojoxUpgradeBarCloseIcon-hover {
+ background : url("../../../dijit/themes/tundra/images/tabCloseHover.gif") no-repeat right top;
+}
diff --git a/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.html b/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/UpgradeBar/UpgradeBar.html
@@ -0,0 +1,5 @@
+<div class="dojoxUpgradeBar">
+ <div class="dojoxUpgradeBarMessage" dojoAttachPoint="messageNode">message</div>
+ <div class="dojoxUpgradeBarReminderButton" dojoAttachPoint="dontRemindButtonNode" dojoAttachEvent="onclick:_onDontRemindClick">${noRemindButton}</div>
+ <span dojoAttachPoint="closeButtonNode" class="dojoxUpgradeBarCloseIcon" dojoAttachEvent="onclick: hide, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave" title="${buttonCancel}"></span>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/Wizard.js b/js/dojo/dojox/widget/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Wizard.js
@@ -0,0 +1,108 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Wizard"]){
+dojo._hasResource["dojox.widget.Wizard"]=true;
+dojo.provide("dojox.widget.Wizard");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.widget","Wizard",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget.Wizard",[dijit.layout.StackContainer,dijit._Templated],{widgetsInTemplate:true,templateString:dojo.cache("dojox.widget","Wizard/Wizard.html","<div class=\"dojoxWizard\" dojoAttachPoint=\"wizardNode\">\n <div class=\"dojoxWizardContainer\" dojoAttachPoint=\"containerNode\"></div>\n <div class=\"dojoxWizardButtons\" dojoAttachPoint=\"wizardNav\">\n <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"previousButton\">${previousButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"nextButton\">${nextButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"doneButton\" style=\"display:none\">${doneButtonLabel}</button>\n <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"cancelButton\">${cancelButtonLabel}</button>\n </div>\n</div>\n"),nextButtonLabel:"",previousButtonLabel:"",cancelButtonLabel:"",doneButtonLabel:"",cancelFunction:null,hideDisabled:false,postMixInProperties:function(){
+this.inherited(arguments);
+var _1=dojo.mixin({cancel:dojo.i18n.getLocalization("dijit","common",this.lang).buttonCancel},dojo.i18n.getLocalization("dojox.widget","Wizard",this.lang));
+var _2;
+for(_2 in _1){
+if(!this[_2+"ButtonLabel"]){
+this[_2+"ButtonLabel"]=_1[_2];
+}
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+this.connect(this.nextButton,"onClick","_forward");
+this.connect(this.previousButton,"onClick","back");
+if(this.cancelFunction){
+if(dojo.isString(this.cancelFunction)){
+this.cancelFunction=dojo.getObject(this.cancelFunction);
+}
+this.connect(this.cancelButton,"onClick",this.cancelFunction);
+}else{
+this.cancelButton.domNode.style.display="none";
+}
+this.connect(this.doneButton,"onClick","done");
+this._subscription=dojo.subscribe(this.id+"-selectChild",dojo.hitch(this,"_checkButtons"));
+this._checkButtons();
+this._started=true;
+},_checkButtons:function(){
+var sw=this.selectedChildWidget;
+var _3=sw.isLastChild;
+this.nextButton.attr("disabled",_3);
+this._setButtonClass(this.nextButton);
+if(sw.doneFunction){
+this.doneButton.domNode.style.display="";
+if(_3){
+this.nextButton.domNode.style.display="none";
+}
+}else{
+this.doneButton.domNode.style.display="none";
+}
+this.previousButton.attr("disabled",!this.selectedChildWidget.canGoBack);
+this._setButtonClass(this.previousButton);
+},_setButtonClass:function(_4){
+_4.domNode.style.display=(this.hideDisabled&&_4.disabled)?"none":"";
+},_forward:function(){
+if(this.selectedChildWidget._checkPass()){
+this.forward();
+}
+},done:function(){
+this.selectedChildWidget.done();
+},destroy:function(){
+dojo.unsubscribe(this._subscription);
+this.inherited(arguments);
+}});
+dojo.declare("dojox.widget.WizardPane",dijit.layout.ContentPane,{canGoBack:true,passFunction:null,doneFunction:null,startup:function(){
+this.inherited(arguments);
+if(this.isFirstChild){
+this.canGoBack=false;
+}
+if(dojo.isString(this.passFunction)){
+this.passFunction=dojo.getObject(this.passFunction);
+}
+if(dojo.isString(this.doneFunction)&&this.doneFunction){
+this.doneFunction=dojo.getObject(this.doneFunction);
+}
+},_onShow:function(){
+if(this.isFirstChild){
+this.canGoBack=false;
+}
+this.inherited(arguments);
+},_checkPass:function(){
+var r=true;
+if(this.passFunction&&dojo.isFunction(this.passFunction)){
+var _5=this.passFunction();
+switch(typeof _5){
+case "boolean":
+r=_5;
+break;
+case "string":
+alert(_5);
+r=false;
+break;
+}
+}
+return r;
+},done:function(){
+if(this.doneFunction&&dojo.isFunction(this.doneFunction)){
+this.doneFunction();
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/Wizard/Wizard.css b/js/dojo/dojox/widget/Wizard/Wizard.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Wizard/Wizard.css
@@ -0,0 +1,19 @@
+.dojoxWizard {
+ position:relative;
+}
+.dojoxWizardButtons {
+ position:absolute;
+ bottom:5px;
+ right:5px;
+}
+.tundra .dojoxWizard {
+ background: #eeeeee;
+ border: #b7b7b7 1px solid;
+ padding: 2px;
+ -moz-border-radius:3pt;
+ -webkit-border-radius:4pt;
+}
+.soria .dojoxWizard {
+ border:1px solid #b7b7b7;
+ padding:2px;
+}
diff --git a/js/dojo/dojox/widget/Wizard/Wizard.html b/js/dojo/dojox/widget/Wizard/Wizard.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/Wizard/Wizard.html
@@ -0,0 +1,9 @@
+<div class="dojoxWizard" dojoAttachPoint="wizardNode">
+ <div class="dojoxWizardContainer" dojoAttachPoint="containerNode"></div>
+ <div class="dojoxWizardButtons" dojoAttachPoint="wizardNav">
+ <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="previousButton">${previousButtonLabel}</button>
+ <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="nextButton">${nextButtonLabel}</button>
+ <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="doneButton" style="display:none">${doneButtonLabel}</button>
+ <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="cancelButton">${cancelButtonLabel}</button>
+ </div>
+</div>
diff --git a/js/dojo/dojox/widget/gauge/AnalogArcIndicator.js b/js/dojo/dojox/widget/gauge/AnalogArcIndicator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/AnalogArcIndicator.js
@@ -0,0 +1,69 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogArcIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogArcIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogArcIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogArcIndicator");
+dojo.declare("dojox.widget.gauge.AnalogArcIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_createArc:function(_1){
+if(this.shapes[0]){
+var a=this._gauge._getRadians(this._gauge._getAngle(_1));
+var _2=Math.cos(a);
+var _3=Math.sin(a);
+var sa=this._gauge._getRadians(this._gauge.startAngle);
+var _4=Math.cos(sa);
+var _5=Math.sin(sa);
+var _6=this.offset+this.width;
+var p=["M"];
+p.push(this._gauge.cx+this.offset*_5);
+p.push(this._gauge.cy-this.offset*_4);
+p.push("A",this.offset,this.offset,0,((a-sa)>Math.PI)?1:0,1);
+p.push(this._gauge.cx+this.offset*_3);
+p.push(this._gauge.cy-this.offset*_2);
+p.push("L");
+p.push(this._gauge.cx+_6*_3);
+p.push(this._gauge.cy-_6*_2);
+p.push("A",_6,_6,0,((a-sa)>Math.PI)?1:0,0);
+p.push(this._gauge.cx+_6*_5);
+p.push(this._gauge.cy-_6*_4);
+this.shapes[0].setShape(p.join(" "));
+this.currentValue=_1;
+}
+},draw:function(_7){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+if(this.shapes){
+if(_7){
+this._createArc(v);
+}else{
+var _8=new dojo.Animation({curve:[this.currentValue,v],duration:this.duration,easing:this.easing});
+dojo.connect(_8,"onAnimate",dojo.hitch(this,this._createArc));
+_8.play();
+}
+}else{
+var _9={color:this.color,width:1};
+if(this.color.type){
+_9.color=this.color.colors[0].color;
+}
+this.shapes=[this._gauge.surface.createPath().setStroke(_9).setFill(this.color)];
+this._createArc(v);
+if(this.hover){
+this.shapes[0].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[0].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[0].getEventSource().style.cursor="pointer";
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/gauge/AnalogArrowIndicator.js b/js/dojo/dojox/widget/gauge/AnalogArrowIndicator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/AnalogArrowIndicator.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogArrowIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogArrowIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogArrowIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogArrowIndicator");
+dojo.declare("dojox.widget.gauge.AnalogArrowIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var x=Math.floor(this.width/2);
+var _1=this.width*5;
+var _2=(this.width&1);
+var _3=[];
+var _4=[{x:-x,y:0},{x:-x,y:-this.length+_1},{x:-2*x,y:-this.length+_1},{x:0,y:-this.length},{x:2*x+_2,y:-this.length+_1},{x:x+_2,y:-this.length+_1},{x:x+_2,y:0},{x:-x,y:0}];
+_3[0]=this._gauge.surface.createPolyline(_4).setStroke({color:this.color}).setFill(this.color);
+_3[1]=this._gauge.surface.createLine({x1:-x,y1:0,x2:-x,y2:-this.length+_1}).setStroke({color:this.highlight});
+_3[2]=this._gauge.surface.createLine({x1:-x-3,y1:-this.length+_1,x2:0,y2:-this.length}).setStroke({color:this.highlight});
+_3[3]=this._gauge.surface.createCircle({cx:0,cy:0,r:this.width}).setStroke({color:this.color}).setFill(this.color);
+return _3;
+}});
+}
diff --git a/js/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js b/js/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js
@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogNeedleIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogNeedleIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogNeedleIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogNeedleIndicator");
+dojo.declare("dojox.widget.gauge.AnalogNeedleIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var x=Math.floor(this.width/2);
+var _1=this.width*5;
+var _2=(this.width&1);
+var _3=[];
+var _4={color:this.color,width:1};
+if(this.color.type){
+_4.color=this.color.colors[0].color;
+}
+var xy=(Math.sqrt(2)*(x));
+_3[0]=this._gauge.surface.createPath().setStroke(_4).setFill(this.color).moveTo(xy,-xy).arcTo((2*x),(2*x),0,0,0,-xy,-xy).lineTo(0,-this.length).closePath();
+_3[1]=this._gauge.surface.createCircle({cx:0,cy:0,r:this.width}).setStroke({color:this.color}).setFill(this.color);
+return _3;
+}});
+}
diff --git a/js/dojo/dojox/widget/gauge/BarIndicator.js b/js/dojo/dojox/widget/gauge/BarIndicator.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/BarIndicator.js
@@ -0,0 +1,80 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.BarIndicator"]){
+dojo._hasResource["dojox.widget.gauge.BarIndicator"]=true;
+dojo.provide("dojox.widget.gauge.BarIndicator");
+dojo.require("dojox.widget.BarGauge");
+dojo.experimental("dojox.widget.gauge.BarIndicator");
+dojo.declare("dojox.widget.gauge.BarIndicator",[dojox.widget.gauge.BarLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _1=this._gauge._getPosition(v);
+if(_1==this.dataX){
+_1=this.dataX+1;
+}
+var y=this._gauge.dataY+Math.floor((this._gauge.dataHeight-this.width)/2)+this.offset;
+var _2=[];
+_2[0]=this._gauge.surface.createRect({x:this._gauge.dataX,y:y,width:_1-this._gauge.dataX,height:this.width});
+_2[0].setStroke({color:this.color});
+_2[0].setFill(this.color);
+_2[1]=this._gauge.surface.createLine({x1:this._gauge.dataX,y1:y,x2:_1,y2:y});
+_2[1].setStroke({color:this.highlight});
+if(this.highlight2){
+y--;
+_2[2]=this._gauge.surface.createLine({x1:this._gauge.dataX,y1:y,x2:_1,y2:y});
+_2[2].setStroke({color:this.highlight2});
+}
+return _2;
+},_createShapes:function(_3){
+for(var i in this.shapes){
+i=this.shapes[i];
+var _4={};
+for(var j in i){
+_4[j]=i[j];
+}
+if(i.shape.type=="line"){
+_4.shape.x2=_3+_4.shape.x1;
+}else{
+if(i.shape.type=="rect"){
+_4.width=_3;
+}
+}
+i.setShape(_4);
+}
+},_move:function(_5){
+var _6=false;
+var c;
+var v=this.value;
+if(v<this.min){
+v=this.min;
+}
+if(v>this.max){
+v=this.max;
+}
+c=this._gauge._getPosition(this.currentValue);
+this.currentValue=v;
+v=this._gauge._getPosition(v)-this._gauge.dataX;
+if(_5){
+this._createShapes(v);
+}else{
+if(c!=v){
+var _7=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_7,"onAnimate",dojo.hitch(this,this._createShapes));
+_7.play();
+}
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/gauge/_Gauge.css b/js/dojo/dojox/widget/gauge/_Gauge.css
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/_Gauge.css
@@ -0,0 +1,51 @@
+@CHARSET "ISO-8859-1";
+.dojoxGaugeContent {
+ font-family: Verdana;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #CCCCCC;
+}
+.dojoxGaugeRange1 {
+ fill: #606060 ;
+ stroke: #606060 ;
+}
+.dojoxGaugeRange2 {
+ fill: #707070 ;
+ stroke: #707070 ;
+}
+.dojoxGaugeRange3 {
+ fill: #808080 ;
+ stroke: #808080 ;
+}
+.dojoxGaugeRange4 {
+ fill: #909090 ;
+ stroke: #909090 ;
+}
+.dojoxGaugeRange5 {
+ fill: #A0A0A0;
+ stroke: #A0A0A0;
+}
+.dojoxGaugeRange6 {
+ fill: #B0B0B0;
+ stroke: #B0B0B0;
+}
+.dojoxGaugeRange7 {
+ fill: #C0C0C0;
+ stroke: #C0C0C0;
+}
+.dojoxGaugeRange8 {
+ fill: #D0D0D0;
+ stroke: #D0D0D0;
+}
+.dojoxGaugeRange9 {
+ fill: #E0E0E0;
+ stroke: #E0E0E0;
+}
+.dojoxGaugeRange10 {
+ fill: #F0F0F0;
+ stroke: #F0F0F0;
+}
+.testing {
+ fill: blue;
+ stroke: blue;
+}
diff --git a/js/dojo/dojox/widget/gauge/_Gauge.html b/js/dojo/dojox/widget/gauge/_Gauge.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/_Gauge.html
@@ -0,0 +1,5 @@
+<div>
+ <div class="dojoxGaugeContent" dojoAttachPoint="gaugeContent"></div>
+ <div dojoAttachPoint="containerNode"></div>
+ <div dojoAttachPoint="mouseNode"></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/gauge/_Gauge.js b/js/dojo/dojox/widget/gauge/_Gauge.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/_Gauge.js
@@ -0,0 +1,304 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge._Gauge"]){
+dojo._hasResource["dojox.widget.gauge._Gauge"]=true;
+dojo.provide("dojox.widget.gauge._Gauge");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit._Contained");
+dojo.require("dijit.Tooltip");
+dojo.require("dojo.fx.easing");
+dojo.require("dojox.gfx");
+dojo.experimental("dojox.widget.gauge._Gauge");
+dojo.declare("dojox.widget.gauge._Gauge",[dijit._Widget,dijit._Templated,dijit._Container],{width:0,height:0,background:null,min:0,max:0,image:null,useRangeStyles:0,useTooltip:true,majorTicks:null,minorTicks:null,_defaultIndicator:null,defaultColors:[[0,84,170,1],[68,119,187,1],[102,153,204,1],[153,187,238,1],[153,204,255,1],[204,238,255,1],[221,238,255,1]],min:null,max:null,surface:null,hideValues:false,gaugeContent:undefined,templateString:dojo.cache("dojox.widget.gauge","_Gauge.html","<div>\n\t<div class=\"dojoxGaugeContent\" dojoAttachPoint=\"gaugeContent\"></div>\n\t<div dojoAttachPoint=\"containerNode\"></div>\n\t<div dojoAttachPoint=\"mouseNode\"></div>\n</div>\n"),_backgroundDefault:{color:"#E0E0E0"},_rangeData:null,_indicatorData:null,_drag:null,_img:null,_overOverlay:false,_lastHover:"",startup:function(){
+if(this.image===null){
+this.image={};
+}
+this.connect(this.gaugeContent,"onmousemove",this.handleMouseMove);
+this.connect(this.gaugeContent,"onmouseover",this.handleMouseOver);
+this.connect(this.gaugeContent,"onmouseout",this.handleMouseOut);
+this.connect(this.gaugeContent,"onmouseup",this.handleMouseUp);
+if(!dojo.isArray(this.ranges)){
+this.ranges=[];
+}
+if(!dojo.isArray(this.indicators)){
+this.indicators=[];
+}
+var _1=[],_2=[];
+var i;
+if(this.hasChildren()){
+var _3=this.getChildren();
+for(i=0;i<_3.length;i++){
+if(/dojox\.widget\..*Indicator/.test(_3[i].declaredClass)){
+_2.push(_3[i]);
+continue;
+}
+switch(_3[i].declaredClass){
+case "dojox.widget.gauge.Range":
+_1.push(_3[i]);
+break;
+}
+}
+this.ranges=this.ranges.concat(_1);
+this.indicators=this.indicators.concat(_2);
+}
+if(!this.background){
+this.background=this._backgroundDefault;
+}
+this.background=this.background.color||this.background;
+if(!this.surface){
+this.createSurface();
+}
+this.addRanges(this.ranges);
+if(this.minorTicks&&this.minorTicks.interval){
+this.setMinorTicks(this.minorTicks);
+}
+if(this.majorTicks&&this.majorTicks.interval){
+this.setMajorTicks(this.majorTicks);
+}
+for(i=0;i<this.indicators.length;i++){
+this.addIndicator(this.indicators[i]);
+}
+},_setTicks:function(_4,_5,_6){
+var i;
+if(_4&&dojo.isArray(_4._ticks)){
+for(i=0;i<_4._ticks.length;i++){
+this.removeIndicator(_4._ticks[i]);
+}
+}
+var t={length:_5.length,offset:_5.offset,noChange:true};
+if(_5.color){
+t.color=_5.color;
+}
+if(_5.font){
+t.font=_5.font;
+}
+_5._ticks=[];
+for(i=this.min;i<=this.max;i+=_5.interval){
+t.value=i;
+if(_6){
+t.label=""+i;
+}
+_5._ticks.push(this.addIndicator(t));
+}
+return _5;
+},setMinorTicks:function(_7){
+this.minorTicks=this._setTicks(this.minorTicks,_7,false);
+},setMajorTicks:function(_8){
+this.majorTicks=this._setTicks(this.majorTicks,_8,true);
+},postCreate:function(){
+if(this.hideValues){
+dojo.style(this.containerNode,"display","none");
+}
+dojo.style(this.mouseNode,"width","0");
+dojo.style(this.mouseNode,"height","0");
+dojo.style(this.mouseNode,"position","absolute");
+dojo.style(this.mouseNode,"z-index","100");
+if(this.useTooltip){
+dijit.showTooltip("test",this.mouseNode);
+dijit.hideTooltip(this.mouseNode);
+}
+},createSurface:function(){
+this.gaugeContent.style.width=this.width+"px";
+this.gaugeContent.style.height=this.height+"px";
+this.surface=dojox.gfx.createSurface(this.gaugeContent,this.width,this.height);
+this._background=this.surface.createRect({x:0,y:0,width:this.width,height:this.height});
+this._background.setFill(this.background);
+if(this.image.url){
+this._img=this.surface.createImage({width:this.image.width||this.width,height:this.image.height||this.height,src:this.image.url});
+if(this.image.overlay){
+this._img.getEventSource().setAttribute("overlay",true);
+}
+if(this.image.x||this.image.y){
+this._img.setTransform({dx:this.image.x||0,dy:this.image.y||0});
+}
+}
+},setBackground:function(_9){
+if(!_9){
+_9=this._backgroundDefault;
+}
+this.background=_9.color||_9;
+this._background.setFill(this.background);
+},addRange:function(_a){
+this.addRanges([_a]);
+},addRanges:function(_b){
+if(!this._rangeData){
+this._rangeData=[];
+}
+var _c;
+for(var i=0;i<_b.length;i++){
+_c=_b[i];
+if((this.min===null)||(_c.low<this.min)){
+this.min=_c.low;
+}
+if((this.max===null)||(_c.high>this.max)){
+this.max=_c.high;
+}
+if(!_c.color){
+var _d=this._rangeData.length%this.defaultColors.length;
+if(dojox.gfx.svg&&this.useRangeStyles>0){
+_d=(this._rangeData.length%this.useRangeStyles)+1;
+_c.color={style:"dojoxGaugeRange"+_d};
+}else{
+_d=this._rangeData.length%this.defaultColors.length;
+_c.color=this.defaultColors[_d];
+}
+}
+this._rangeData[this._rangeData.length]=_c;
+}
+this.draw();
+},addIndicator:function(_e){
+_e._gauge=this;
+if(!_e.declaredClass){
+_e=new this._defaultIndicator(_e);
+}
+if(!_e.hideValue){
+this.containerNode.appendChild(_e.domNode);
+}
+if(!this._indicatorData){
+this._indicatorData=[];
+}
+this._indicatorData[this._indicatorData.length]=_e;
+_e.draw();
+return _e;
+},removeIndicator:function(_f){
+for(var i=0;i<this._indicatorData.length;i++){
+if(this._indicatorData[i]===_f){
+this._indicatorData.splice(i,1);
+_f.remove();
+break;
+}
+}
+},moveIndicatorToFront:function(_10){
+if(_10.shapes){
+for(var i=0;i<_10.shapes.length;i++){
+_10.shapes[i].moveToFront();
+}
+}
+},drawText:function(txt,x,y,_11,_12,_13,_14){
+var t=this.surface.createText({x:x,y:y,text:txt,align:_11});
+t.setFill(_13);
+t.setFont(_14);
+return t;
+},removeText:function(t){
+this.surface.rawNode.removeChild(t);
+},updateTooltip:function(txt,e){
+if(this._lastHover!=txt){
+if(txt!==""){
+dijit.hideTooltip(this.mouseNode);
+dijit.showTooltip(txt,this.mouseNode);
+}else{
+dijit.hideTooltip(this.mouseNode);
+}
+this._lastHover=txt;
+}
+},handleMouseOver:function(_15){
+var _16=_15.target.getAttribute("hover");
+if(_15.target.getAttribute("overlay")){
+this._overOverlay=true;
+var r=this.getRangeUnderMouse(_15);
+if(r&&r.hover){
+_16=r.hover;
+}
+}
+if(this.useTooltip&&!this._drag){
+if(_16){
+this.updateTooltip(_16,_15);
+}else{
+this.updateTooltip("",_15);
+}
+}
+},handleMouseOut:function(_17){
+if(_17.target.getAttribute("overlay")){
+this._overOverlay=false;
+}
+if(this.useTooltip&&this.mouseNode){
+dijit.hideTooltip(this.mouseNode);
+}
+},handleMouseDown:function(_18){
+for(var i=0;i<this._indicatorData.length;i++){
+var _19=this._indicatorData[i].shapes;
+for(var s=0;s<_19.length;s++){
+if(_19[s].getEventSource()==_18.target){
+this._drag=this._indicatorData[i];
+s=_19.length;
+i=this._indicatorData.length;
+}
+}
+}
+dojo.stopEvent(_18);
+},handleMouseUp:function(_1a){
+this._drag=null;
+dojo.stopEvent(_1a);
+},handleMouseMove:function(_1b){
+if(_1b){
+dojo.style(this.mouseNode,"left",_1b.pageX+1+"px");
+dojo.style(this.mouseNode,"top",_1b.pageY+1+"px");
+}
+if(this._drag){
+this._dragIndicator(this,_1b);
+}else{
+if(this.useTooltip&&this._overOverlay){
+var r=this.getRangeUnderMouse(_1b);
+if(r&&r.hover){
+this.updateTooltip(r.hover,_1b);
+}else{
+this.updateTooltip("",_1b);
+}
+}
+}
+}});
+dojo.declare("dojox.widget.gauge.Range",[dijit._Widget,dijit._Contained],{low:0,high:0,hover:"",color:null,size:0,startup:function(){
+this.color=this.color.color||this.color;
+}});
+dojo.declare("dojox.widget.gauge._Indicator",[dijit._Widget,dijit._Contained,dijit._Templated],{value:0,type:"",color:"black",label:"",font:{family:"sans-serif",size:"12px"},length:0,width:0,offset:0,hover:"",front:false,easing:dojo._defaultEasing,duration:1000,hideValue:false,noChange:false,_gauge:null,title:"",templateString:dojo.cache("dojox.widget.gauge","_Indicator.html","<div class=\"dojoxGaugeIndicatorDiv\">\n\t<label class=\"dojoxGaugeIndicatorLabel\" for=\"${title}\">${title}:</label>\n\t<input class=\"dojoxGaugeIndicatorInput\" name=\"${title}\" size=\"5\" value=\"${value}\" dojoAttachPoint=\"valueNode\" dojoAttachEvent=\"onchange:_update\"></input>\n</div>\n"),startup:function(){
+if(this.onDragMove){
+this.onDragMove=dojo.hitch(this.onDragMove);
+}
+},postCreate:function(){
+if(this.title===""){
+dojo.style(this.domNode,"display","none");
+}
+if(dojo.isString(this.easing)){
+this.easing=dojo.getObject(this.easing);
+}
+},_update:function(_1c){
+var _1d=this.valueNode.value;
+if(_1d===""){
+this.value=null;
+}else{
+this.value=Number(_1d);
+this.hover=this.title+": "+_1d;
+}
+if(this._gauge){
+this.draw();
+this.valueNode.value=this.value;
+if((this.title=="Target"||this.front)&&this._gauge.moveIndicator){
+this._gauge.moveIndicatorToFront(this);
+}
+}
+},update:function(_1e){
+if(!this.noChange){
+this.valueNode.value=_1e;
+this._update();
+}
+},onDragMove:function(){
+this.value=Math.floor(this.value);
+this.valueNode.value=this.value;
+this.hover=this.title+": "+this.value;
+},draw:function(_1f){
+},remove:function(){
+for(var i=0;i<this.shapes.length;i++){
+this._gauge.surface.remove(this.shapes[i]);
+}
+if(this.text){
+this._gauge.surface.remove(this.text);
+}
+}});
+}
diff --git a/js/dojo/dojox/widget/gauge/_Indicator.html b/js/dojo/dojox/widget/gauge/_Indicator.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/gauge/_Indicator.html
@@ -0,0 +1,4 @@
+<div class="dojoxGaugeIndicatorDiv">
+ <label class="dojoxGaugeIndicatorLabel" for="${title}">${title}:</label>
+ <input class="dojoxGaugeIndicatorInput" name="${title}" size="5" value="${value}" dojoAttachPoint="valueNode" dojoAttachEvent="onchange:_update"></input>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ColorPicker.js b/js/dojo/dojox/widget/nls/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/FilePicker.js b/js/dojo/dojox/widget/nls/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Name","size":"Size (in bytes)","path":"Path"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/Wizard.js b/js/dojo/dojox/widget/nls/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Next","done":"Done","previous":"Previous"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ar/FilePicker.js b/js/dojo/dojox/widget/nls/ar/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ar/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"الاسم","size":"الحجم (بالبايت) ","path":"‏المسار‏"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ar/Wizard.js b/js/dojo/dojox/widget/nls/ar/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ar/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"تالي","done":"اتمام","previous":"‏سابق‏"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ca/FilePicker.js b/js/dojo/dojox/widget/nls/ca/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ca/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nom","size":"Mida (en bytes)","path":"Camí d'accés"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ca/Wizard.js b/js/dojo/dojox/widget/nls/ca/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ca/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Següent","done":"Fet","previous":"Anterior"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/cs/ColorPicker.js b/js/dojo/dojox/widget/nls/cs/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/cs/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"č","valueLabel":"j","hexLabel":"hex","hueLabel":"o","saturationLabel":"n","greenLabel":"z","blueLabel":"m","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/cs/FilePicker.js b/js/dojo/dojox/widget/nls/cs/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/cs/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Název","size":"Velikost (v bajtech)","path":"Cesta"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/cs/Wizard.js b/js/dojo/dojox/widget/nls/cs/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/cs/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Další","done":"Hotovo","previous":"Předchozí"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/da/FilePicker.js b/js/dojo/dojox/widget/nls/da/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/da/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Navn","size":"Størrelse (i byte)","path":"Sti"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/da/Wizard.js b/js/dojo/dojox/widget/nls/da/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/da/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Næste","done":"Udført","previous":"Forrige"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/de/ColorPicker.js b/js/dojo/dojox/widget/nls/de/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/de/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/de/FilePicker.js b/js/dojo/dojox/widget/nls/de/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/de/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Name","size":"Größe (in Byte)","path":"Pfad"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/de/Wizard.js b/js/dojo/dojox/widget/nls/de/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/de/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Weiter","done":"Fertig","previous":"Zurück"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/el/FilePicker.js b/js/dojo/dojox/widget/nls/el/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/el/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Όνομα","size":"Μέγεθος (σε bytes)","path":"Διαδρομή"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/el/Wizard.js b/js/dojo/dojox/widget/nls/el/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/el/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Επόμενο","done":"Ολοκλήρωση","previous":"Προηγούμενο"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/es/ColorPicker.js b/js/dojo/dojox/widget/nls/es/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/es/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/es/FilePicker.js b/js/dojo/dojox/widget/nls/es/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/es/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nombre","size":"Tamaño (en bytes)","path":"Vía de acceso"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/es/Wizard.js b/js/dojo/dojox/widget/nls/es/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/es/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Siguiente","done":"Terminado","previous":"Anterior"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/fi/FilePicker.js b/js/dojo/dojox/widget/nls/fi/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/fi/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nimi","size":"Koko (tavuina)","path":"Polku"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/fi/Wizard.js b/js/dojo/dojox/widget/nls/fi/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/fi/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Seuraava","done":"Valmis","previous":"Edellinen"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/fr/ColorPicker.js b/js/dojo/dojox/widget/nls/fr/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/fr/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"t","saturationLabel":"s","greenLabel":"v","blueLabel":"b","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/fr/FilePicker.js b/js/dojo/dojox/widget/nls/fr/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/fr/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nom","size":"Taille (en octets)","path":"Chemin"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/fr/Wizard.js b/js/dojo/dojox/widget/nls/fr/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/fr/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Suivant","done":"Terminé","previous":"Précédent"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/he/FilePicker.js b/js/dojo/dojox/widget/nls/he/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/he/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"שם","size":"גודל (בבתים)","path":"נתיב"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/he/Wizard.js b/js/dojo/dojox/widget/nls/he/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/he/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"הבא","done":"סיום","previous":"הקודם"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/hu/ColorPicker.js b/js/dojo/dojox/widget/nls/hu/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/hu/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/hu/FilePicker.js b/js/dojo/dojox/widget/nls/hu/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/hu/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Név","size":"Méret (byte)","path":"Elérési út"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/hu/Wizard.js b/js/dojo/dojox/widget/nls/hu/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/hu/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Következő","done":"Kész","previous":"Előző"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/it/ColorPicker.js b/js/dojo/dojox/widget/nls/it/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/it/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"t","saturationLabel":"s","greenLabel":"v","blueLabel":"b","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/it/FilePicker.js b/js/dojo/dojox/widget/nls/it/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/it/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nome","size":"Dimensione (in byte)","path":"Percorso"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/it/Wizard.js b/js/dojo/dojox/widget/nls/it/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/it/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Successivo","done":"Eseguito","previous":"Precedente"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ja/ColorPicker.js b/js/dojo/dojox/widget/nls/ja/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ja/ColorPicker.js
@@ -0,0 +1,1 @@
+({"hexLabel":"16 進","redLabel":"r","valueLabel":"v","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ja/FilePicker.js b/js/dojo/dojox/widget/nls/ja/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ja/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"名前","size":"サイズ (バイト単位)","path":"パス"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ja/Wizard.js b/js/dojo/dojox/widget/nls/ja/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ja/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"次へ","done":"完了","previous":"前へ"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ko/ColorPicker.js b/js/dojo/dojox/widget/nls/ko/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ko/ColorPicker.js
@@ -0,0 +1,1 @@
+({"hexLabel":"16진","redLabel":"r","valueLabel":"v","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ko/FilePicker.js b/js/dojo/dojox/widget/nls/ko/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ko/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"이름","size":"크기(바이트)","path":"경로"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ko/Wizard.js b/js/dojo/dojox/widget/nls/ko/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ko/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"다음","done":"완료","previous":"이전"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/nb/FilePicker.js b/js/dojo/dojox/widget/nls/nb/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/nb/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Navn","size":"Størrelse (i byte)","path":"Bane"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/nb/Wizard.js b/js/dojo/dojox/widget/nls/nb/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/nb/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Neste","done":"Ferdig","previous":"Forrige"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/nl/FilePicker.js b/js/dojo/dojox/widget/nls/nl/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/nl/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Naam","size":"Grootte (in bytes)","path":"Pad"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/nl/Wizard.js b/js/dojo/dojox/widget/nls/nl/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/nl/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Volgende","done":"Klaar","previous":"Vorige"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pl/ColorPicker.js b/js/dojo/dojox/widget/nls/pl/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pl/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"c","valueLabel":"jas.","hexLabel":"szesnastkowe","hueLabel":"barwa","saturationLabel":"nas.","greenLabel":"z","blueLabel":"n","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pl/FilePicker.js b/js/dojo/dojox/widget/nls/pl/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pl/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nazwa","size":"Wielkość (w bajtach)","path":"Ścieżka"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pl/Wizard.js b/js/dojo/dojox/widget/nls/pl/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pl/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Następna","done":"Gotowe","previous":"Poprzednia"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pt-pt/FilePicker.js b/js/dojo/dojox/widget/nls/pt-pt/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pt-pt/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nome","size":"Tamanho (em bytes)","path":"Caminho"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pt-pt/Wizard.js b/js/dojo/dojox/widget/nls/pt-pt/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pt-pt/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Seguinte","done":"Concluído","previous":"Anterior"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pt/ColorPicker.js b/js/dojo/dojox/widget/nls/pt/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pt/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pt/FilePicker.js b/js/dojo/dojox/widget/nls/pt/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pt/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Nome","size":"Tamanho (em bytes)","path":"Caminho"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/pt/Wizard.js b/js/dojo/dojox/widget/nls/pt/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/pt/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Próximo","done":"Concluído","previous":"Anterior"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ru/ColorPicker.js b/js/dojo/dojox/widget/nls/ru/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ru/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"к","valueLabel":"з","hexLabel":"шест","hueLabel":"о","saturationLabel":"н","greenLabel":"з","blueLabel":"с","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ru/FilePicker.js b/js/dojo/dojox/widget/nls/ru/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ru/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Имя","size":"Размер (байт)","path":"Путь"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/ru/Wizard.js b/js/dojo/dojox/widget/nls/ru/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/ru/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Далее","done":"Готово","previous":"Назад"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sk/FilePicker.js b/js/dojo/dojox/widget/nls/sk/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sk/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Názov","size":"Veľkosť (v bajtoch)","path":"Cesta"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sk/Wizard.js b/js/dojo/dojox/widget/nls/sk/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sk/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Ďalej","done":"Hotovo","previous":"Späť"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sl/FilePicker.js b/js/dojo/dojox/widget/nls/sl/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sl/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Ime","size":"Velikost (v bajtih)","path":"Pot"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sl/Wizard.js b/js/dojo/dojox/widget/nls/sl/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sl/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Naprej","done":"Opravljeno","previous":"Nazaj"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sv/FilePicker.js b/js/dojo/dojox/widget/nls/sv/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sv/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Namn","size":"Storlek (byte)","path":"Sökväg"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/sv/Wizard.js b/js/dojo/dojox/widget/nls/sv/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/sv/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"Nästa","done":"Stäng","previous":"Föregående"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/th/ColorPicker.js b/js/dojo/dojox/widget/nls/th/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/th/ColorPicker.js
@@ -0,0 +1,1 @@
+({"redLabel":"อาร์","valueLabel":"วี","hexLabel":"เลขฐานสิบหก","hueLabel":"เอช","saturationLabel":"เอส","greenLabel":"จี","blueLabel":"บี","degLabel":"°"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/th/FilePicker.js b/js/dojo/dojox/widget/nls/th/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/th/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"ชื่อ","size":"ขนาด (ไบต์)","path":"พาธ"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/th/Wizard.js b/js/dojo/dojox/widget/nls/th/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/th/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"ถัดไป","done":"เสร็จสิ้น","previous":"ก่อนหน้า"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/tr/FilePicker.js b/js/dojo/dojox/widget/nls/tr/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/tr/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"Ad","size":"Boyut (bayt cinsinden)","path":"Yol"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/tr/Wizard.js b/js/dojo/dojox/widget/nls/tr/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/tr/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"İleri","done":"Bitti","previous":"Geri"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh-tw/ColorPicker.js b/js/dojo/dojox/widget/nls/zh-tw/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh-tw/ColorPicker.js
@@ -0,0 +1,1 @@
+({"hexLabel":"十六進位","redLabel":"r","valueLabel":"v","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh-tw/FilePicker.js b/js/dojo/dojox/widget/nls/zh-tw/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh-tw/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"名稱","size":"大小 (以位元組為單位)","path":"路徑"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh-tw/Wizard.js b/js/dojo/dojox/widget/nls/zh-tw/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh-tw/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"下一步","done":"完成","previous":"上一步"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh/ColorPicker.js b/js/dojo/dojox/widget/nls/zh/ColorPicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh/ColorPicker.js
@@ -0,0 +1,1 @@
+({"hexLabel":"十六进制","redLabel":"r","valueLabel":"v","hueLabel":"h","saturationLabel":"s","degLabel":"°","greenLabel":"g","blueLabel":"b"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh/FilePicker.js b/js/dojo/dojox/widget/nls/zh/FilePicker.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh/FilePicker.js
@@ -0,0 +1,1 @@
+({"name":"名称","size":"大小(字节","path":"路径"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/nls/zh/Wizard.js b/js/dojo/dojox/widget/nls/zh/Wizard.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/nls/zh/Wizard.js
@@ -0,0 +1,1 @@
+({"next":"下一步","done":"完成","previous":"上一步"})
\ No newline at end of file
diff --git a/js/dojo/dojox/widget/rotator/Controller.js b/js/dojo/dojox/widget/rotator/Controller.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/rotator/Controller.js
@@ -0,0 +1,87 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Controller"]){
+dojo._hasResource["dojox.widget.rotator.Controller"]=true;
+dojo.provide("dojox.widget.rotator.Controller");
+(function(d){
+var _1="dojoxRotator",_2=_1+"Play",_3=_1+"Pause",_4=_1+"Number",_5=_1+"Tab",_6=_1+"Selected";
+d.declare("dojox.widget.rotator.Controller",null,{rotator:null,commands:"prev,play/pause,info,next",constructor:function(_7,_8){
+d.mixin(this,_7);
+var r=this.rotator;
+if(r){
+while(_8.firstChild){
+_8.removeChild(_8.firstChild);
+}
+var ul=this._domNode=d.create("ul",null,_8),_9=" "+_1+"Icon",cb=function(_a,_b,_c){
+d.create("li",{className:_b,innerHTML:"<a href=\"#\"><span>"+_a+"</span></a>",onclick:function(e){
+d.stopEvent(e);
+if(r){
+r.control.apply(r,_c);
+}
+}},ul);
+};
+d.forEach(this.commands.split(","),function(b,i){
+switch(b){
+case "prev":
+cb("Prev",_1+"Prev"+_9,["prev"]);
+break;
+case "play/pause":
+cb("Play",_2+_9,["play"]);
+cb("Pause",_3+_9,["pause"]);
+break;
+case "info":
+this._info=d.create("li",{className:_1+"Info",innerHTML:this._buildInfo(r)},ul);
+break;
+case "next":
+cb("Next",_1+"Next"+_9,["next"]);
+break;
+case "#":
+case "titles":
+for(var j=0;j<r.panes.length;j++){
+cb(b=="#"?j+1:r.panes[j].title||"Tab "+(j+1),(b=="#"?_4:_5)+" "+(j==r.idx?_6:"")+" "+_1+"Pane"+j,["go",j]);
+}
+break;
+}
+},this);
+d.query("li:first-child",ul).addClass(_1+"First");
+d.query("li:last-child",ul).addClass(_1+"Last");
+this._togglePlay();
+this._con=d.connect(r,"onUpdate",this,"_onUpdate");
+}
+},destroy:function(){
+d.disconnect(this._con);
+d.destroy(this._domNode);
+},_togglePlay:function(_d){
+var p=this.rotator.playing;
+d.query("."+_2,this._domNode).style("display",p?"none":"");
+d.query("."+_3,this._domNode).style("display",p?"":"none");
+},_buildInfo:function(r){
+return "<span>"+(r.idx+1)+" / "+r.panes.length+"</span>";
+},_onUpdate:function(_e){
+var r=this.rotator;
+switch(_e){
+case "play":
+case "pause":
+this._togglePlay();
+break;
+case "onAfterTransition":
+if(this._info){
+this._info.innerHTML=this._buildInfo(r);
+}
+var s=function(n){
+if(r.idx<n.length){
+d.addClass(n[r.idx],_6);
+}
+};
+s(d.query("."+_4,this._domNode).removeClass(_6));
+s(d.query("."+_5,this._domNode).removeClass(_6));
+break;
+}
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/rotator/Fade.js b/js/dojo/dojox/widget/rotator/Fade.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/rotator/Fade.js
@@ -0,0 +1,25 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Fade"]){
+dojo._hasResource["dojox.widget.rotator.Fade"]=true;
+dojo.provide("dojox.widget.rotator.Fade");
+dojo.require("dojo.fx");
+(function(d){
+function _1(_2,_3){
+var n=_2.next.node;
+d.style(n,{display:"",opacity:0});
+_2.node=_2.current.node;
+return d.fx[_3]([d.fadeOut(_2),d.fadeIn(d.mixin(_2,{node:n}))]);
+};
+d.mixin(dojox.widget.rotator,{fade:function(_4){
+return _1(_4,"chain");
+},crossFade:function(_5){
+return _1(_5,"combine");
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/rotator/Pan.js b/js/dojo/dojox/widget/rotator/Pan.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/rotator/Pan.js
@@ -0,0 +1,75 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Pan"]){
+dojo._hasResource["dojox.widget.rotator.Pan"]=true;
+dojo.provide("dojox.widget.rotator.Pan");
+dojo.require("dojo.fx");
+(function(d){
+var _1=0,_2=1,UP=2,_3=3;
+function _4(_5,_6){
+var n=_6.next.node,r=_6.rotatorBox,m=_5%2,a=m?"left":"top",s=(m?r.w:r.h)*(_5<2?-1:1),p={},q={};
+d.style(n,"display","");
+p[a]={start:0,end:-s};
+q[a]={start:s,end:0};
+return d.fx.combine([d.animateProperty({node:_6.current.node,duration:_6.duration,properties:p,easing:_6.easing}),d.animateProperty({node:n,duration:_6.duration,properties:q,easing:_6.easing})]);
+};
+function _7(n,z){
+d.style(n,"zIndex",z);
+};
+d.mixin(dojox.widget.rotator,{pan:function(_8){
+var w=_8.wrap,p=_8.rotator.panes,_9=p.length,z=_9,j=_8.current.idx,k=_8.next.idx,nw=Math.abs(k-j),ww=Math.abs((_9-Math.max(j,k))+Math.min(j,k))%_9,_a=j<k,_b=_3,_c=[],_d=[],_e=_8.duration;
+if((!w&&!_a)||(w&&(_a&&nw>ww||!_a&&nw<ww))){
+_b=_2;
+}
+if(_8.continuous){
+if(_8.quick){
+_e=Math.round(_e/(w?Math.min(ww,nw):nw));
+}
+_7(p[j].node,z--);
+var f=(_b==_3);
+while(1){
+var i=j;
+if(f){
+if(++j>=_9){
+j=0;
+}
+}else{
+if(--j<0){
+j=_9-1;
+}
+}
+var x=p[i],y=p[j];
+_7(y.node,z--);
+_c.push(_4(_b,d.mixin({easing:function(m){
+return m;
+}},_8,{current:x,next:y,duration:_e})));
+if((f&&j==k)||(!f&&j==k)){
+break;
+}
+_d.push(y.node);
+}
+var _f=d.fx.chain(_c),h=d.connect(_f,"onEnd",function(){
+d.disconnect(h);
+d.forEach(_d,function(q){
+d.style(q,{display:"none",left:0,opacity:1,top:0,zIndex:0});
+});
+});
+return _f;
+}
+return _4(_b,_8);
+},panDown:function(_10){
+return _4(_1,_10);
+},panRight:function(_11){
+return _4(_2,_11);
+},panUp:function(_12){
+return _4(UP,_12);
+},panLeft:function(_13){
+return _4(_3,_13);
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/rotator/Slide.js b/js/dojo/dojox/widget/rotator/Slide.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/rotator/Slide.js
@@ -0,0 +1,32 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Slide"]){
+dojo._hasResource["dojox.widget.rotator.Slide"]=true;
+dojo.provide("dojox.widget.rotator.Slide");
+(function(d){
+var _1=0,_2=1,UP=2,_3=3;
+function _4(_5,_6){
+var _7=_6.node=_6.next.node,r=_6.rotatorBox,m=_5%2,s=(m?r.w:r.h)*(_5<2?-1:1);
+d.style(_7,{display:"",zIndex:(d.style(_6.current.node,"zIndex")||1)+1});
+if(!_6.properties){
+_6.properties={};
+}
+_6.properties[m?"left":"top"]={start:s,end:0};
+return d.animateProperty(_6);
+};
+d.mixin(dojox.widget.rotator,{slideDown:function(_8){
+return _4(_1,_8);
+},slideRight:function(_9){
+return _4(_2,_9);
+},slideUp:function(_a){
+return _4(UP,_a);
+},slideLeft:function(_b){
+return _4(_3,_b);
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/widget/rotator/Wipe.js b/js/dojo/dojox/widget/rotator/Wipe.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/widget/rotator/Wipe.js
@@ -0,0 +1,52 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Wipe"]){
+dojo._hasResource["dojox.widget.rotator.Wipe"]=true;
+dojo.provide("dojox.widget.rotator.Wipe");
+(function(d){
+var _1=2,_2=3,UP=0,_3=1;
+function _4(_5,w,h,x){
+var a=[0,w,0,0];
+if(_5==_2){
+a=[0,w,h,w];
+}else{
+if(_5==UP){
+a=[h,w,h,0];
+}else{
+if(_5==_3){
+a=[0,0,h,0];
+}
+}
+}
+if(x!=null){
+a[_5]=_5==_1||_5==_3?x:(_5%2?w:h)-x;
+}
+return a;
+};
+function _6(n,_7,w,h,x){
+d.style(n,"clip",_7==null?"auto":"rect("+_4(_7,w,h,x).join("px,")+"px)");
+};
+function _8(_9,_a){
+var _b=_a.next.node,w=_a.rotatorBox.w,h=_a.rotatorBox.h;
+d.style(_b,{display:"",zIndex:(d.style(_a.current.node,"zIndex")||1)+1});
+_6(_b,_9,w,h);
+return new d.Animation(d.mixin({node:_b,curve:[0,_9%2?w:h],onAnimate:function(x){
+_6(_b,_9,w,h,parseInt(x));
+}},_a));
+};
+d.mixin(dojox.widget.rotator,{wipeDown:function(_c){
+return _8(_1,_c);
+},wipeRight:function(_d){
+return _8(_2,_d);
+},wipeUp:function(_e){
+return _8(UP,_e);
+},wipeLeft:function(_f){
+return _8(_3,_f);
+}});
+})(dojo);
+}
diff --git a/js/dojo/dojox/xml/Script.js b/js/dojo/dojox/xml/Script.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xml/Script.js
@@ -0,0 +1,16 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.Script"]){
+dojo._hasResource["dojox.xml.Script"]=true;
+dojo.provide("dojox.xml.Script");
+dojo.require("dojo.parser");
+dojo.require("dojox.xml.widgetParser");
+dojo.declare("dojox.xml.Script",null,{constructor:function(_1,_2){
+dojo.parser.instantiate(dojox.xml.widgetParser._processScript(_2));
+}});
+}
diff --git a/js/dojo/dojox/xml/parser.js b/js/dojo/dojox/xml/parser.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xml/parser.js
@@ -0,0 +1,137 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.parser"]){
+dojo._hasResource["dojox.xml.parser"]=true;
+dojo.provide("dojox.xml.parser");
+dojox.xml.parser.parse=function(_1,_2){
+var _3=dojo.doc;
+var _4;
+_2=_2||"text/xml";
+if(_1&&dojo.trim(_1)&&"DOMParser" in dojo.global){
+var _5=new DOMParser();
+_4=_5.parseFromString(_1,_2);
+var de=_4.documentElement;
+var _6="http://www.mozilla.org/newlayout/xml/parsererror.xml";
+if(de.nodeName=="parsererror"&&de.namespaceURI==_6){
+var _7=de.getElementsByTagNameNS(_6,"sourcetext")[0];
+if(!_7){
+_7=_7.firstChild.data;
+}
+throw new Error("Error parsing text "+nativeDoc.documentElement.firstChild.data+" \n"+_7);
+}
+return _4;
+}else{
+if("ActiveXObject" in dojo.global){
+var ms=function(n){
+return "MSXML"+n+".DOMDocument";
+};
+var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];
+dojo.some(dp,function(p){
+try{
+_4=new ActiveXObject(p);
+}
+catch(e){
+return false;
+}
+return true;
+});
+if(_1&&_4){
+_4.async=false;
+_4.loadXML(_1);
+var pe=_4.parseError;
+if(pe.errorCode!==0){
+throw new Error("Line: "+pe.line+"\n"+"Col: "+pe.linepos+"\n"+"Reason: "+pe.reason+"\n"+"Error Code: "+pe.errorCode+"\n"+"Source: "+pe.srcText);
+}
+}
+if(_4){
+return _4;
+}
+}else{
+if(_3.implementation&&_3.implementation.createDocument){
+if(_1&&dojo.trim(_1)&&_3.createElement){
+var _8=_3.createElement("xml");
+_8.innerHTML=_1;
+var _9=_3.implementation.createDocument("foo","",null);
+dojo.forEach(_8.childNodes,function(_a){
+_9.importNode(_a,true);
+});
+return _9;
+}else{
+return _3.implementation.createDocument("","",null);
+}
+}
+}
+}
+return null;
+};
+dojox.xml.parser.textContent=function(_b,_c){
+if(arguments.length>1){
+var _d=_b.ownerDocument||dojo.doc;
+dojox.xml.parser.replaceChildren(_b,_d.createTextNode(_c));
+return _c;
+}else{
+if(_b.textContent!==undefined){
+return _b.textContent;
+}
+var _e="";
+if(_b){
+dojo.forEach(_b.childNodes,function(_f){
+switch(_f.nodeType){
+case 1:
+case 5:
+_e+=dojox.xml.parser.textContent(_f);
+break;
+case 3:
+case 2:
+case 4:
+_e+=_f.nodeValue;
+}
+});
+}
+return _e;
+}
+};
+dojox.xml.parser.replaceChildren=function(_10,_11){
+var _12=[];
+if(dojo.isIE){
+dojo.forEach(_10.childNodes,function(_13){
+_12.push(_13);
+});
+}
+dojox.xml.parser.removeChildren(_10);
+dojo.forEach(_12,dojo.destroy);
+if(!dojo.isArray(_11)){
+_10.appendChild(_11);
+}else{
+dojo.forEach(_11,function(_14){
+_10.appendChild(_14);
+});
+}
+};
+dojox.xml.parser.removeChildren=function(_15){
+var _16=_15.childNodes.length;
+while(_15.hasChildNodes()){
+_15.removeChild(_15.firstChild);
+}
+return _16;
+};
+dojox.xml.parser.innerXML=function(_17){
+if(_17.innerXML){
+return _17.innerXML;
+}else{
+if(_17.xml){
+return _17.xml;
+}else{
+if(typeof XMLSerializer!="undefined"){
+return (new XMLSerializer()).serializeToString(_17);
+}
+}
+}
+return null;
+};
+}
diff --git a/js/dojo/dojox/xml/widgetParser.js b/js/dojo/dojox/xml/widgetParser.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xml/widgetParser.js
@@ -0,0 +1,69 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.widgetParser"]){
+dojo._hasResource["dojox.xml.widgetParser"]=true;
+dojo.provide("dojox.xml.widgetParser");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.parser");
+dojox.xml.widgetParser=new function(){
+var d=dojo;
+this.parseNode=function(_1){
+var _2=[];
+d.query("script[type='text/xml']",_1).forEach(function(_3){
+_2.push.apply(_2,this._processScript(_3));
+},this).orphan();
+return d.parser.instantiate(_2);
+};
+this._processScript=function(_4){
+var _5=_4.src?d._getText(_4.src):_4.innerHTML||_4.firstChild.nodeValue;
+var _6=this.toHTML(dojox.xml.parser.parse(_5).firstChild);
+var _7=d.query("[dojoType]",_6);
+dojo.query(">",_6).place(_4,"before");
+_4.parentNode.removeChild(_4);
+return _7;
+};
+this.toHTML=function(_8){
+var _9;
+var _a=_8.nodeName;
+var dd=dojo.doc;
+var _b=_8.nodeType;
+if(_b>=3){
+return dd.createTextNode((_b==3||_b==4)?_8.nodeValue:"");
+}
+var _c=_8.localName||_a.split(":").pop();
+var _d=_8.namespaceURI||(_8.getNamespaceUri?_8.getNamespaceUri():"");
+if(_d=="html"){
+_9=dd.createElement(_c);
+}else{
+var _e=_d+"."+_c;
+_9=_9||dd.createElement((_e=="dijit.form.ComboBox")?"select":"div");
+_9.setAttribute("dojoType",_e);
+}
+d.forEach(_8.attributes,function(_f){
+var _10=_f.name||_f.nodeName;
+var _11=_f.value||_f.nodeValue;
+if(_10.indexOf("xmlns")!=0){
+if(dojo.isIE&&_10=="style"){
+_9.style.setAttribute("cssText",_11);
+}else{
+_9.setAttribute(_10,_11);
+}
+}
+});
+d.forEach(_8.childNodes,function(cn){
+var _12=this.toHTML(cn);
+if(_c=="script"){
+_9.text+=_12.nodeValue;
+}else{
+_9.appendChild(_12);
+}
+},this);
+return _9;
+};
+}();
+}
diff --git a/js/dojo/dojox/xmpp/ChatService.js b/js/dojo/dojox/xmpp/ChatService.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/ChatService.js
@@ -0,0 +1,90 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.ChatService"]){
+dojo._hasResource["dojox.xmpp.ChatService"]=true;
+dojo.provide("dojox.xmpp.ChatService");
+dojox.xmpp.chat={CHAT_STATE_NS:"http://jabber.org/protocol/chatstates",ACTIVE_STATE:"active",COMPOSING_STATE:"composing",INACTIVE_STATE:"inactive",PAUSED_STATE:"paused",GONE_STATE:"gone"};
+dojo.declare("dojox.xmpp.ChatService",null,{state:"",constructor:function(){
+this.state="";
+this.chatid=Math.round(Math.random()*1000000000000000);
+},recieveMessage:function(_1,_2){
+if(_1&&!_2){
+this.onNewMessage(_1);
+}
+},setSession:function(_3){
+this.session=_3;
+},setState:function(_4){
+if(this.state!=_4){
+this.state=_4;
+}
+},invite:function(_5){
+if(this.uid){
+return;
+}
+if(!_5||_5==""){
+throw new Error("ChatService::invite() contact is NULL");
+}
+this.uid=_5;
+var _6={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_6,false));
+_7.append(dojox.xmpp.util.createElement("thread",{},false));
+_7.append(this.chatid);
+_7.append("</thread>");
+_7.append(dojox.xmpp.util.createElement("active",{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+_7.append("</message>");
+this.session.dispatchPacket(_7.toString());
+this.onInvite(_5);
+this.setState(dojox.xmpp.chat.CHAT_STATE_NS);
+},sendMessage:function(_8){
+if(!this.uid){
+return;
+}
+if((!_8.body||_8.body=="")&&!_8.xhtml){
+return;
+}
+var _9={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _a=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_9,false));
+var _b=dojox.xmpp.util.createElement("html",{"xmlns":dojox.xmpp.xmpp.XHTML_IM_NS},false);
+var _c=dojox.xmpp.util.createElement("body",{"xml:lang":this.session.lang,"xmlns":dojox.xmpp.xmpp.XHTML_BODY_NS},false)+_8.body+"</body>";
+var _d=dojox.xmpp.util.createElement("body",{},false)+dojox.xmpp.util.stripHtml(_8.body)+"</body>";
+if(_a.subject&&_a.subject!=""){
+_a.append(dojox.xmpp.util.createElement("subject",{},false));
+_a.append(_a.subject);
+_a.append("</subject>");
+}
+_a.append(_d);
+_a.append(_b);
+_a.append(_c);
+_a.append("</html>");
+_a.append(dojox.xmpp.util.createElement("thread",{},false));
+_a.append(this.chatid);
+_a.append("</thread>");
+if(this.useChatStates){
+_a.append(dojox.xmpp.util.createElement("active",{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+}
+_a.append("</message>");
+this.session.dispatchPacket(_a.toString());
+},sendChatState:function(_e){
+if(!this.useChatState||this.firstMessage){
+return;
+}
+if(_e==this._currentState){
+return;
+}
+var _f={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _10=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_f,false));
+_10.append(dojox.xmpp.util.createElement(_e,{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+this._currentState=_e;
+_10.append("<thread>");
+_10.append(this.chatid);
+_10.append("</thread></message>");
+this.session.dispatchPacket(_10.toString());
+},onNewMessage:function(msg){
+},onInvite:function(_11){
+}});
+}
diff --git a/js/dojo/dojox/xmpp/PresenceService.js b/js/dojo/dojox/xmpp/PresenceService.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/PresenceService.js
@@ -0,0 +1,163 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.PresenceService"]){
+dojo._hasResource["dojox.xmpp.PresenceService"]=true;
+dojo.provide("dojox.xmpp.PresenceService");
+dojox.xmpp.presence={UPDATE:201,SUBSCRIPTION_REQUEST:202,SUBSCRIPTION_SUBSTATUS_NONE:204,SUBSCRIPTION_NONE:"none",SUBSCRIPTION_FROM:"from",SUBSCRIPTION_TO:"to",SUBSCRIPTION_BOTH:"both",SUBSCRIPTION_REQUEST_PENDING:"pending",STATUS_ONLINE:"online",STATUS_AWAY:"away",STATUS_CHAT:"chat",STATUS_DND:"dnd",STATUS_EXTENDED_AWAY:"xa",STATUS_OFFLINE:"offline",STATUS_INVISIBLE:"invisible"};
+dojo.declare("dojox.xmpp.PresenceService",null,{constructor:function(_1){
+this.session=_1;
+this.isInvisible=false;
+this.avatarHash=null;
+this.presence=null;
+this.restrictedContactjids={};
+},publish:function(_2){
+this.presence=_2;
+this._setPresence();
+},sendAvatarHash:function(_3){
+this.avatarHash=_3;
+this._setPresence();
+},_setPresence:function(){
+var _4=this.presence;
+var p={xmlns:"jabber:client"};
+if(_4&&_4.to){
+p.to=_4.to;
+}
+if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_OFFLINE){
+p.type="unavailable";
+}
+if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_INVISIBLE){
+this._setInvisible();
+this.isInvisible=true;
+return;
+}
+if(this.isInvisible){
+this._setVisible();
+}
+var _5=new dojox.string.Builder(dojox.xmpp.util.createElement("presence",p,false));
+if(_4.show&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
+_5.append(dojox.xmpp.util.createElement("show",{},false));
+_5.append(_4.show);
+_5.append("</show>");
+}
+if(_4.status){
+_5.append(dojox.xmpp.util.createElement("status",{},false));
+_5.append(_4.status);
+_5.append("</status>");
+}
+if(this.avatarHash){
+_5.append(dojox.xmpp.util.createElement("x",{xmlns:"vcard-temp:x:update"},false));
+_5.append(dojox.xmpp.util.createElement("photo",{},false));
+_5.append(this.avatarHash);
+_5.append("</photo>");
+_5.append("</x>");
+}
+if(_4.priority&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
+if(_4.priority>127||_4.priority<-128){
+_4.priority=5;
+}
+_5.append(dojox.xmpp.util.createElement("priority",{},false));
+_5.append(_4.priority);
+_5.append("</priority>");
+}
+_5.append("</presence>");
+this.session.dispatchPacket(_5.toString());
+},toggleBlockContact:function(_6){
+if(!this.restrictedContactjids[_6]){
+this.restrictedContactjids[_6]=this._createRestrictedJid();
+}
+this.restrictedContactjids[_6].blocked=!this.restrictedContactjids[_6].blocked;
+this._updateRestricted();
+return this.restrictedContactjids;
+},toggleContactInvisiblity:function(_7){
+if(!this.restrictedContactjids[_7]){
+this.restrictedContactjids[_7]=this._createRestrictedJid();
+}
+this.restrictedContactjids[_7].invisible=!this.restrictedContactjids[_7].invisible;
+this._updateRestricted();
+return this.restrictedContactjids;
+},_createRestrictedJid:function(){
+return {invisible:false,blocked:false};
+},_updateRestricted:function(){
+var _8={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _9=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false));
+_9.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_9.append(dojox.xmpp.util.createElement("list",{name:"iwcRestrictedContacts"},false));
+var _a=1;
+for(var _b in this.restrictedContactjids){
+var _c=this.restrictedContactjids[_b];
+if(_c.blocked||_c.invisible){
+_9.append(dojox.xmpp.util.createElement("item",{value:dojox.xmpp.util.encodeJid(_b),action:"deny",order:_a++},false));
+if(_c.blocked){
+_9.append(dojox.xmpp.util.createElement("message",{},true));
+}
+if(_c.invisible){
+_9.append(dojox.xmpp.util.createElement("presence-out",{},true));
+}
+_9.append("</item>");
+}else{
+delete this.restrictedContactjids[_b];
+}
+}
+_9.append("</list>");
+_9.append("</query>");
+_9.append("</iq>");
+var _d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false));
+_d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_d.append(dojox.xmpp.util.createElement("active",{name:"iwcRestrictedContacts"},true));
+_d.append("</query>");
+_d.append("</iq>");
+this.session.dispatchPacket(_9.toString());
+this.session.dispatchPacket(_d.toString());
+},_setVisible:function(){
+var _e={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _f=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_e,false));
+_f.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_f.append(dojox.xmpp.util.createElement("active",{},true));
+_f.append("</query>");
+_f.append("</iq>");
+this.session.dispatchPacket(_f.toString());
+},_setInvisible:function(){
+var _10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false));
+req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+req.append(dojox.xmpp.util.createElement("list",{name:"invisible"},false));
+req.append(dojox.xmpp.util.createElement("item",{action:"deny",order:"1"},false));
+req.append(dojox.xmpp.util.createElement("presence-out",{},true));
+req.append("</item>");
+req.append("</list>");
+req.append("</query>");
+req.append("</iq>");
+_10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _11=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false));
+_11.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_11.append(dojox.xmpp.util.createElement("active",{name:"invisible"},true));
+_11.append("</query>");
+_11.append("</iq>");
+this.session.dispatchPacket(req.toString());
+this.session.dispatchPacket(_11.toString());
+},_manageSubscriptions:function(_12,_13){
+if(!_12){
+return;
+}
+if(_12.indexOf("@")==-1){
+_12+="@"+this.session.domain;
+}
+var req=dojox.xmpp.util.createElement("presence",{to:_12,type:_13},true);
+this.session.dispatchPacket(req);
+},subscribe:function(_14){
+this._manageSubscriptions(_14,"subscribe");
+},approveSubscription:function(_15){
+this._manageSubscriptions(_15,"subscribed");
+},unsubscribe:function(_16){
+this._manageSubscriptions(_16,"unsubscribe");
+},declineSubscription:function(_17){
+this._manageSubscriptions(_17,"unsubscribed");
+},cancelSubscription:function(_18){
+this._manageSubscriptions(_18,"unsubscribed");
+}});
+}
diff --git a/js/dojo/dojox/xmpp/README b/js/dojo/dojox/xmpp/README
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/README
@@ -0,0 +1,55 @@
+-------------------------------------------------------------------------------
+DojoX XMPP (Jabber Client)
+-------------------------------------------------------------------------------
+Version .9
+Release date: 07/05/2008
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+[ ] l18n support?
+[ ] a11y support?
+-------------------------------------------------------------------------------
+Credits
+ Dustin Machi
+ Jason Cline
+ Revin Guillen
+ Mike Wilcox - updates
+-------------------------------------------------------------------------------
+Project description
+
+XMPP Service implementation in pure javascript. Uses BOSH and works cross
+domain.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core
+-------------------------------------------------------------------------------
+Documentation
+
+FIXME
+-------------------------------------------------------------------------------
+Installation instructions
+
+To use the XMPP test, you should have the appropriate server installed on your
+machine. We reccomend Openfire, a real time collaboration server licensed under
+the Open Source GPL.:
+http://www.igniterealtime.org/projects/openfire/index.jsp
+
+It's very easy to install. Download the version for your machine and launch the installer.
+After installation is complete, server settings are made at:
+http://127.0.0.1:9090/index.jsp
+
+The settings for the most part are those that suggest the easiest for setup. The main setting
+you need to notice is HTTP Binding. This needs to be enabled at port 7070. Also enable
+Script Syntax for BOSH clients.
+
+Next go to the top tabs to Users/Groups and create a user or two. It gives you the option to make
+a user the Admin - this will overwrite the current Admin.
+
+Now you can launch test_xmppService.html. In the login, use the user ID and password from one of
+the users you just created. I used my computer name for Domain, but I'm not sure what this does.
+Finally, in HTTP-Bind URL, use the address for Openfire, with the HTTP Bind port of 7070:
+http://127.0.0.1:7070/http-bind/
+
+You can open another tab in Firefox and log in as a second user.
+
diff --git a/js/dojo/dojox/xmpp/RosterService.js b/js/dojo/dojox/xmpp/RosterService.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/RosterService.js
@@ -0,0 +1,210 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.RosterService"]){
+dojo._hasResource["dojox.xmpp.RosterService"]=true;
+dojo.provide("dojox.xmpp.RosterService");
+dojox.xmpp.roster={ADDED:101,CHANGED:102,REMOVED:103};
+dojo.declare("dojox.xmpp.RosterService",null,{constructor:function(_1){
+this.session=_1;
+},addRosterItem:function(_2,_3,_4){
+if(!_2){
+throw new Error("Roster::addRosterItem() - User ID is null");
+}
+var _5=this.session.getNextIqId();
+var _6={id:_5,from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_6,false));
+_7.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+_2=dojox.xmpp.util.encodeJid(_2);
+if(_2.indexOf("@")==-1){
+_2=_2+"@"+this.session.domain;
+}
+_7.append(dojox.xmpp.util.createElement("item",{jid:_2,name:dojox.xmpp.util.xmlEncode(_3)},false));
+if(_4){
+for(var i=0;i<_4.length;i++){
+_7.append("<group>");
+_7.append(_4[i]);
+_7.append("</group>");
+}
+}
+_7.append("</item></query></iq>");
+var _8=this.session.dispatchPacket(_7.toString(),"iq",_6.id);
+_8.addCallback(this,"verifyRoster");
+return _8;
+},updateRosterItem:function(_9,_a,_b){
+if(_9.indexOf("@")==-1){
+_9+=_9+"@"+this.session.domain;
+}
+var _c={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_c,false));
+_d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+var i=this.session.getRosterIndex(_9);
+if(i==-1){
+return;
+}
+var _e={jid:_9};
+if(_a){
+_e.name=_a;
+}else{
+if(this.session.roster[i].name){
+_e.name=this.session.roster[i].name;
+}
+}
+if(_e.name){
+_e.name=dojox.xmpp.util.xmlEncode(_e.name);
+}
+_d.append(dojox.xmpp.util.createElement("item",_e,false));
+var _f=_b?_b:this.session.roster[i].groups;
+if(_f){
+for(var x=0;x<_f.length;x++){
+_d.append("<group>");
+_d.append(_f[x]);
+_d.append("</group>");
+}
+}
+_d.append("</item></query></iq>");
+var def=this.session.dispatchPacket(_d.toString(),"iq",_c.id);
+def.addCallback(this,"verifyRoster");
+return def;
+},verifyRoster:function(res){
+if(res.getAttribute("type")=="result"){
+}else{
+var err=this.session.processXmppError(res);
+this.onAddRosterItemFailed(err);
+}
+return res;
+},addRosterItemToGroup:function(jid,_10){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_10){
+throw new Error("Roster::addRosterItemToGroup() group is null or undefined");
+}
+var _11=this.session.getRosterIndex(jid);
+if(_11==-1){
+return;
+}
+var _12=this.session.roster[_11];
+var _13=[];
+var _14=false;
+for(var i=0;((_12<_12.groups.length)&&(!_14));i++){
+if(_12.groups[i]!=_10){
+continue;
+}
+_14=true;
+}
+if(!_14){
+return this.updateRosterItem(jid,_12.name,_12.groups.concat(_10),_11);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},removeRosterGroup:function(_15){
+var _16=this.session.roster;
+for(var i=0;i<_16.length;i++){
+var _17=_16[i];
+if(_17.groups.length>0){
+for(var j=0;j<_17.groups.length;j++){
+if(_17.groups[j]==_15){
+_17.groups.splice(j,1);
+this.updateRosterItem(_17.jid,_17.name,_17.groups);
+}
+}
+}
+}
+},renameRosterGroup:function(_18,_19){
+var _1a=this.session.roster;
+for(var i=0;i<_1a.length;i++){
+var _1b=_1a[i];
+if(_1b.groups.length>0){
+for(var j=0;j<_1b.groups.length;j++){
+if(_1b.groups[j]==_18){
+_1b.groups[j]=_19;
+this.updateRosterItem(_1b.jid,_1b.name,_1b.groups);
+}
+}
+}
+}
+},removeRosterItemFromGroup:function(jid,_1c){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_1c){
+throw new Error("Roster::addRosterItemToGroup() group is null or undefined");
+}
+var _1d=this.session.getRosterIndex(jid);
+if(_1d==-1){
+return;
+}
+var _1e=this.session.roster[_1d];
+var _1f=false;
+for(var i=0;((i<_1e.groups.length)&&(!_1f));i++){
+if(_1e.groups[i]!=_1c){
+continue;
+}
+_1f=true;
+_1d=i;
+}
+if(_1f==true){
+_1e.groups.splice(_1d,1);
+return this.updateRosterItem(jid,_1e.name,_1e.groups);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},rosterItemRenameGroup:function(jid,_20,_21){
+if(!jid){
+throw new Error("Roster::rosterItemRenameGroup() JID is null or undefined");
+}
+if(!_21){
+throw new Error("Roster::rosterItemRenameGroup() group is null or undefined");
+}
+var _22=this.session.getRosterIndex(jid);
+if(_22==-1){
+return;
+}
+var _23=this.session.roster[_22];
+var _24=false;
+for(var i=0;((i<_23.groups.length)&&(!_24));i++){
+if(_23.groups[i]==_20){
+_23.groups[i]=_21;
+_24=true;
+}
+}
+if(_24==true){
+return this.updateRosterItem(jid,_23.name,_23.groups);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},renameRosterItem:function(jid,_25){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_25){
+throw new Error("Roster::addRosterItemToGroup() New Name is null or undefined");
+}
+var _26=this.session.getRosterIndex(jid);
+if(_26==-1){
+return;
+}
+return this.updateRosterItem(jid,_25,this.session.roster.groups,_26);
+},removeRosterItem:function(jid){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+var req={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _27=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",req,false));
+_27.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+if(jid.indexOf("@")==-1){
+jid+=jid+"@"+this.session.domain;
+}
+_27.append(dojox.xmpp.util.createElement("item",{jid:jid,subscription:"remove"},true));
+_27.append("</query></iq>");
+var def=this.session.dispatchPacket(_27.toString(),"iq",req.id);
+def.addCallback(this,"verifyRoster");
+return def;
+},getAvatar:function(jid){
+},publishAvatar:function(_28,_29){
+},onVerifyRoster:function(id){
+},onVerifyRosterFailed:function(err){
+}});
+}
diff --git a/js/dojo/dojox/xmpp/TransportSession.js b/js/dojo/dojox/xmpp/TransportSession.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/TransportSession.js
@@ -0,0 +1,301 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.TransportSession"]){
+dojo._hasResource["dojox.xmpp.TransportSession"]=true;
+dojo.provide("dojox.xmpp.TransportSession");
+dojo.require("dojox.xmpp.bosh");
+dojo.require("dojox.xmpp.util");
+dojo.require("dojox.data.dom");
+dojox.xmpp.TransportSession=function(_1){
+this.sendTimeout=(this.wait+20)*1000;
+if(_1&&dojo.isObject(_1)){
+dojo.mixin(this,_1);
+if(this.useScriptSrcTransport){
+this.transportIframes=[];
+}
+}
+};
+dojo.extend(dojox.xmpp.TransportSession,{rid:0,hold:1,polling:1000,secure:false,wait:60,lang:"en",submitContentType:"text/xml; charset=utf=8",serviceUrl:"/httpbind",defaultResource:"dojoIm",domain:"imserver.com",sendTimeout:0,useScriptSrcTransport:false,keepAliveTimer:null,state:"NotReady",transmitState:"Idle",protocolPacketQueue:[],outboundQueue:[],outboundRequests:{},inboundQueue:[],deferredRequests:{},matchTypeIdAttribute:{},open:function(){
+this.status="notReady";
+this.rid=Math.round(Math.random()*1000000000);
+this.protocolPacketQueue=[];
+this.outboundQueue=[];
+this.outboundRequests={};
+this.inboundQueue=[];
+this.deferredRequests={};
+this.matchTypeIdAttribute={};
+this.keepAliveTimer=setTimeout(dojo.hitch(this,"_keepAlive"),10000);
+if(this.useScriptSrcTransport){
+dojox.xmpp.bosh.initialize({iframes:this.hold+1,load:dojo.hitch(this,function(){
+this._sendLogin();
+})});
+}else{
+this._sendLogin();
+}
+},_sendLogin:function(){
+var _2=this.rid++;
+var _3={content:this.submitContentType,hold:this.hold,rid:_2,to:this.domain,secure:this.secure,wait:this.wait,"xml:lang":this.lang,"xmpp:version":"1.0",xmlns:dojox.xmpp.xmpp.BODY_NS,"xmlns:xmpp":"urn:xmpp:xbosh"};
+var _4=dojox.xmpp.util.createElement("body",_3,true);
+this.addToOutboundQueue(_4,_2);
+},_sendRestart:function(){
+var _5=this.rid++;
+var _6={rid:_5,sid:this.sid,to:this.domain,"xmpp:restart":"true","xml:lang":this.lang,xmlns:dojox.xmpp.xmpp.BODY_NS,"xmlns:xmpp":"urn:xmpp:xbosh"};
+var _7=dojox.xmpp.util.createElement("body",_6,true);
+this.addToOutboundQueue(_7,_5);
+},processScriptSrc:function(_8,_9){
+var _a=dojox.xml.parser.parse(_8,"text/xml");
+if(_a){
+this.processDocument(_a,_9);
+}else{
+}
+},_keepAlive:function(){
+if(this.state=="wait"||this.isTerminated()){
+return;
+}
+this._dispatchPacket();
+this.keepAliveTimer=setTimeout(dojo.hitch(this,"_keepAlive"),10000);
+},close:function(_b){
+var _c=this.rid++;
+var _d={sid:this.sid,rid:_c,type:"terminate"};
+var _e=null;
+if(_b){
+_e=new dojox.string.Builder(dojox.xmpp.util.createElement("body",_d,false));
+_e.append(_b);
+_e.append("</body>");
+}else{
+_e=new dojox.string.Builder(dojox.xmpp.util.createElement("body",_d,false));
+}
+this.addToOutboundQueue(_e.toString(),_c);
+this.state=="Terminate";
+},dispatchPacket:function(_f,_10,_11,_12){
+if(_f){
+this.protocolPacketQueue.push(_f);
+}
+var def=new dojo.Deferred();
+if(_10&&_11){
+def.protocolMatchType=_10;
+def.matchId=_11;
+def.matchProperty=_12||"id";
+if(def.matchProperty!="id"){
+this.matchTypeIdAttribute[_10]=def.matchProperty;
+}
+}
+this.deferredRequests[def.protocolMatchType+"-"+def.matchId]=def;
+if(!this.dispatchTimer){
+this.dispatchTimer=setTimeout(dojo.hitch(this,"_dispatchPacket"),600);
+}
+return def;
+},_dispatchPacket:function(){
+clearTimeout(this.dispatchTimer);
+delete this.dispatchTimer;
+if(!this.sid){
+return;
+}
+if(!this.authId){
+return;
+}
+if(this.transmitState!="error"&&(this.protocolPacketQueue.length==0)&&(this.outboundQueue.length>0)){
+return;
+}
+if(this.state=="wait"||this.isTerminated()){
+return;
+}
+var req={sid:this.sid,xmlns:dojox.xmpp.xmpp.BODY_NS};
+var _13;
+if(this.protocolPacketQueue.length>0){
+req.rid=this.rid++;
+_13=new dojox.string.Builder(dojox.xmpp.util.createElement("body",req,false));
+_13.append(this.processProtocolPacketQueue());
+_13.append("</body>");
+delete this.lastPollTime;
+}else{
+if(this.lastPollTime){
+var now=new Date().getTime();
+if(now-this.lastPollTime<this.polling){
+this.dispatchTimer=setTimeout(dojo.hitch(this,"_dispatchPacket"),this.polling-(now-this.lastPollTime)+10);
+return;
+}
+}
+req.rid=this.rid++;
+this.lastPollTime=new Date().getTime();
+_13=new dojox.string.Builder(dojox.xmpp.util.createElement("body",req,true));
+}
+this.addToOutboundQueue(_13.toString(),req.rid);
+},redispatchPacket:function(rid){
+var env=this.outboundRequests[rid];
+this.sendXml(env,rid);
+},addToOutboundQueue:function(msg,rid){
+this.outboundQueue.push({msg:msg,rid:rid});
+this.outboundRequests[rid]=msg;
+this.sendXml(msg,rid);
+},removeFromOutboundQueue:function(rid){
+for(var i=0;i<this.outboundQueue.length;i++){
+if(rid==this.outboundQueue[i]["rid"]){
+this.outboundQueue.splice(i,1);
+break;
+}
+}
+delete this.outboundRequests[rid];
+},processProtocolPacketQueue:function(){
+var _14=new dojox.string.Builder();
+for(var i=0;i<this.protocolPacketQueue.length;i++){
+_14.append(this.protocolPacketQueue[i]);
+}
+this.protocolPacketQueue=[];
+return _14.toString();
+},sendXml:function(_15,rid){
+if(this.isTerminated()){
+return false;
+}
+this.transmitState="transmitting";
+var def=null;
+if(this.useScriptSrcTransport){
+def=dojox.xmpp.bosh.get({rid:rid,url:this.serviceUrl+"?"+encodeURIComponent(_15),error:dojo.hitch(this,function(res,io){
+this.setState("Terminate","error");
+return false;
+}),timeout:this.sendTimeout});
+}else{
+def=dojo.rawXhrPost({contentType:"text/xml",url:this.serviceUrl,postData:_15,handleAs:"xml",error:dojo.hitch(this,function(res,io){
+return this.processError(io.xhr.responseXML,io.xhr.status,rid);
+}),timeout:this.sendTimeout});
+}
+def.addCallback(this,function(res){
+return this.processDocument(res,rid);
+});
+return def;
+},processDocument:function(doc,rid){
+if(this.isTerminated()||!doc.firstChild){
+return false;
+}
+this.transmitState="idle";
+var _16=doc.firstChild;
+if(_16.nodeName!="body"){
+}
+if(this.outboundQueue.length<1){
+return false;
+}
+var _17=this.outboundQueue[0]["rid"];
+if(rid==_17){
+this.removeFromOutboundQueue(rid);
+this.processResponse(_16,rid);
+this.processInboundQueue();
+}else{
+var gap=rid-_17;
+if(gap<this.hold+2){
+this.addToInboundQueue(doc,rid);
+}else{
+}
+}
+return doc;
+},processInboundQueue:function(){
+while(this.inboundQueue.length>0){
+var _18=this.inboundQueue.shift();
+this.processDocument(_18["doc"],_18["rid"]);
+}
+},addToInboundQueue:function(doc,rid){
+for(var i=0;i<this.inboundQueue.length;i++){
+if(rid<this.inboundQueue[i]["rid"]){
+continue;
+}
+this.inboundQueue.splice(i,0,{doc:doc,rid:rid});
+}
+},processResponse:function(_19,rid){
+if(_19.getAttribute("type")=="terminate"){
+var _1a=_19.firstChild.firstChild;
+var _1b="";
+if(_1a.nodeName=="conflict"){
+_1b="conflict";
+}
+this.setState("Terminate",_1b);
+return;
+}
+if((this.state!="Ready")&&(this.state!="Terminate")){
+var sid=_19.getAttribute("sid");
+if(sid){
+this.sid=sid;
+}else{
+throw new Error("No sid returned during xmpp session startup");
+}
+this.authId=_19.getAttribute("authid");
+if(this.authId==""){
+if(this.authRetries--<1){
+console.error("Unable to obtain Authorization ID");
+this.terminateSession();
+}
+}
+this.wait=_19.getAttribute("wait");
+if(_19.getAttribute("polling")){
+this.polling=parseInt(_19.getAttribute("polling"))*1000;
+}
+this.inactivity=_19.getAttribute("inactivity");
+this.setState("Ready");
+}
+dojo.forEach(_19.childNodes,function(_1c){
+this.processProtocolResponse(_1c,rid);
+},this);
+if(this.transmitState=="idle"){
+this.dispatchPacket();
+}
+},processProtocolResponse:function(msg,rid){
+this.onProcessProtocolResponse(msg);
+var key=msg.nodeName+"-"+msg.getAttribute("id");
+var def=this.deferredRequests[key];
+if(def){
+def.callback(msg);
+delete this.deferredRequests[key];
+}
+},setState:function(_1d,_1e){
+if(this.state!=_1d){
+if(this["on"+_1d]){
+this["on"+_1d](_1d,this.state,_1e);
+}
+this.state=_1d;
+}
+},isTerminated:function(){
+return this.state=="Terminate";
+},processError:function(err,_1f,rid){
+if(this.isTerminated()){
+return false;
+}
+if(_1f!=200){
+if(_1f>=400&&_1f<500){
+this.setState("Terminate",_20);
+return false;
+}else{
+this.removeFromOutboundQueue(rid);
+setTimeout(dojo.hitch(this,function(){
+this.dispatchPacket();
+}),200);
+return true;
+}
+return false;
+}
+if(err&&err.dojoType&&err.dojoType=="timeout"){
+}
+this.removeFromOutboundQueue(rid);
+if(err&&err.firstChild){
+if(err.firstChild.getAttribute("type")=="terminate"){
+var _21=err.firstChild.firstChild;
+var _20="";
+if(_21&&_21.nodeName=="conflict"){
+_20="conflict";
+}
+this.setState("Terminate",_20);
+return false;
+}
+}
+this.transmitState="error";
+setTimeout(dojo.hitch(this,function(){
+this.dispatchPacket();
+}),200);
+return true;
+},onTerminate:function(_22,_23,_24){
+},onProcessProtocolResponse:function(msg){
+},onReady:function(_25,_26){
+}});
+}
diff --git a/js/dojo/dojox/xmpp/UserService.js b/js/dojo/dojox/xmpp/UserService.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/UserService.js
@@ -0,0 +1,76 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.UserService"]){
+dojo._hasResource["dojox.xmpp.UserService"]=true;
+dojo.provide("dojox.xmpp.UserService");
+dojo.declare("dojox.xmpp.UserService",null,{constructor:function(_1){
+this.session=_1;
+},getPersonalProfile:function(){
+var _2={id:this.session.getNextIqId(),type:"get"};
+var _3=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_2,false));
+_3.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:private"},false));
+_3.append(dojox.xmpp.util.createElement("sunmsgr",{xmlsns:"sun:xmpp:properties"},true));
+_3.append("</query></iq>");
+var _4=this.session.dispatchPacket(_3.toString(),"iq",_2.id);
+_4.addCallback(this,"_onGetPersonalProfile");
+},setPersonalProfile:function(_5){
+var _6={id:this.session.getNextIqId(),type:"set"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_6,false));
+_7.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:private"},false));
+_7.append(dojox.xmpp.util.createElement("sunmsgr",{xmlsns:"sun:xmpp:properties"},false));
+for(var _8 in _5){
+_7.append(dojox.xmpp.util.createElement("property",{name:_8},false));
+_7.append(dojox.xmpp.util.createElement("value",{},false));
+_7.append(_5[_8]);
+_7.append("</value></props>");
+}
+_7.append("</sunmsgr></query></iq>");
+var _9=this.session.dispatchPacket(_7.toString(),"iq",_6.id);
+_9.addCallback(this,"_onSetPersonalProfile");
+},_onSetPersonalProfile:function(_a){
+if(_a.getAttribute("type")=="result"){
+this.onSetPersonalProfile(_a.getAttribute("id"));
+}else{
+if(_a.getAttribute("type")=="error"){
+var _b=this.session.processXmppError(_a);
+this.onSetPersonalProfileFailure(_b);
+}
+}
+},onSetPersonalProfile:function(id){
+},onSetPersonalProfileFailure:function(_c){
+},_onGetPersonalProfile:function(_d){
+if(_d.getAttribute("type")=="result"){
+var _e={};
+if(_d.hasChildNodes()){
+var _f=_d.firstChild;
+if((_f.nodeName=="query")&&(_f.getAttribute("xmlns")=="jabber:iq:private")){
+var _10=_f.firstChild;
+if((_10.nodeName=="query")&&(_10.getAttributes("xmlns")=="sun:xmpp:properties")){
+for(var i=0;i<_10.childNodes.length;i++){
+var n=_10.childNodes[i];
+if(n.nodeName=="property"){
+var _11=n.getAttribute("name");
+var val=n.firstChild||"";
+_e[_11]=val;
+}
+}
+}
+}
+this.onGetPersonalProfile(_e);
+}
+}else{
+if(_d.getAttribute("type")=="error"){
+var err=this.session.processXmppError(_d);
+this.onGetPersonalProfileFailure(err);
+}
+}
+return _d;
+},onGetPersonalProfile:function(_12){
+},onGetPersonalProfileFailure:function(err){
+}});
+}
diff --git a/js/dojo/dojox/xmpp/bosh.js b/js/dojo/dojox/xmpp/bosh.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/bosh.js
@@ -0,0 +1,132 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.bosh"]){
+dojo._hasResource["dojox.xmpp.bosh"]=true;
+dojo.provide("dojox.xmpp.bosh");
+dojo.require("dojo.io.script");
+dojo.require("dojo.io.iframe");
+dojo.require("dojox.xml.parser");
+dojox.xmpp.bosh={transportIframes:[],initialize:function(_1){
+this.transportIframes=[];
+var _2=dojox._scopeName+".xmpp.bosh";
+var c=dojo.connect(dojo.getObject(_2),"_iframeOnload",this,function(_3){
+if(_3==0){
+_1.load();
+dojo.disconnect(c);
+}
+});
+for(var i=0;i<_1.iframes;i++){
+var _4="xmpp-transport-"+i;
+var _5=dojo.byId("xmpp-transport-"+i);
+if(_5){
+if(window[_4]){
+window[_4]=null;
+}
+if(window.frames[_4]){
+window.frames[_4]=null;
+}
+dojo.destroy(_5);
+}
+_5=dojo.io.iframe.create("xmpp-transport-"+i,_2+"._iframeOnload("+i+");");
+this.transportIframes.push(_5);
+}
+},_iframeOnload:function(_6){
+var _7=dojo.io.iframe.doc(dojo.byId("xmpp-transport-"+_6));
+_7.write("<script>var isLoaded=true; var rid=0; var transmiting=false; function _BOSH_(msg) { transmiting=false; parent.dojox.xmpp.bosh.handle(msg, rid); } </script>");
+},findOpenIframe:function(){
+for(var i=0;i<this.transportIframes.length;i++){
+var _8=this.transportIframes[i];
+var _9=_8.contentWindow;
+if(_9.isLoaded&&!_9.transmiting){
+return _8;
+}
+}
+return false;
+},handle:function(_a,_b){
+var _c=this["rid"+_b];
+var _d=dojox.xml.parser.parse(_a,"text/xml");
+if(_d){
+_c.ioArgs.xmppMessage=_d;
+}else{
+_c.errback(new Error("Recieved bad document from server: "+_a));
+}
+},get:function(_e){
+var _f=this.findOpenIframe();
+var _10=dojo.io.iframe.doc(_f);
+_e.frameDoc=_10;
+var dfd=this._makeScriptDeferred(_e);
+var _11=dfd.ioArgs;
+_f.contentWindow.rid=_11.rid;
+_f.contentWindow.transmiting=true;
+dojo._ioAddQueryToUrl(_11);
+dojo._ioNotifyStart(dfd);
+dojo.io.script.attach(_11.id,_11.url,_10);
+dojo._ioWatch(dfd,this._validCheck,this._ioCheck,this._resHandle);
+return dfd;
+},remove:function(id,_12){
+dojo.destroy(dojo.byId(id,_12));
+if(this[id]){
+delete this[id];
+}
+},_makeScriptDeferred:function(_13){
+var dfd=dojo._ioSetArgs(_13,this._deferredCancel,this._deferredOk,this._deferredError);
+var _14=dfd.ioArgs;
+_14.id="rid"+_13.rid;
+_14.rid=_13.rid;
+_14.canDelete=true;
+_14.frameDoc=_13.frameDoc;
+this[_14.id]=dfd;
+return dfd;
+},_deferredCancel:function(dfd){
+dfd.canceled=true;
+if(dfd.ioArgs.canDelete){
+dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
+}
+},_deferredOk:function(dfd){
+var _15=dfd.ioArgs;
+if(_15.canDelete){
+dojox.xmpp.bosh._addDeadScript(_15);
+}
+return _15.xmppMessage||_15;
+},_deferredError:function(_16,dfd){
+if(dfd.ioArgs.canDelete){
+if(_16.dojoType=="timeout"){
+dojox.xmpp.bosh.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
+}else{
+dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
+}
+}
+return _16;
+},_deadScripts:[],_addDeadScript:function(_17){
+dojox.xmpp.bosh._deadScripts.push({id:_17.id,frameDoc:_17.frameDoc});
+_17.frameDoc=null;
+},_validCheck:function(dfd){
+var _18=dojox.xmpp.bosh;
+var _19=_18._deadScripts;
+if(_19&&_19.length>0){
+for(var i=0;i<_19.length;i++){
+_18.remove(_19[i].id,_19[i].frameDoc);
+_19[i].frameDoc=null;
+}
+dojox.xmpp.bosh._deadScripts=[];
+}
+return true;
+},_ioCheck:function(dfd){
+var _1a=dfd.ioArgs;
+if(_1a.xmppMessage){
+return true;
+}
+return false;
+},_resHandle:function(dfd){
+if(dojox.xmpp.bosh._ioCheck(dfd)){
+dfd.callback(dfd);
+}else{
+dfd.errback(new Error("inconceivable dojox.xmpp.bosh._resHandle error"));
+}
+}};
+}
diff --git a/js/dojo/dojox/xmpp/sasl.js b/js/dojo/dojox/xmpp/sasl.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/sasl.js
@@ -0,0 +1,119 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.sasl"]){
+dojo._hasResource["dojox.xmpp.sasl"]=true;
+dojo.provide("dojox.xmpp.sasl");
+dojo.require("dojox.xmpp.util");
+dojo.require("dojo.AdapterRegistry");
+dojo.require("dojox.encoding.digests.MD5");
+dojox.xmpp.sasl.saslNS="urn:ietf:params:xml:ns:xmpp-sasl";
+dojo.declare("dojox.xmpp.sasl._Base",null,{mechanism:null,closeAuthTag:true,constructor:function(_1){
+this.session=_1;
+this.startAuth();
+},startAuth:function(){
+var _2=new dojox.string.Builder(dojox.xmpp.util.createElement("auth",{xmlns:dojox.xmpp.sasl.saslNS,mechanism:this.mechanism},this.closeAuthTag));
+this.appendToAuth(_2);
+this.session.dispatchPacket(_2.toString());
+},appendToAuth:function(_3){
+},onChallenge:function(_4){
+if(!this.first_challenge){
+this.first_challenge=true;
+this.onFirstChallenge(_4);
+}else{
+this.onSecondChallenge(_4);
+}
+},onFirstChallenge:function(){
+},onSecondChallenge:function(){
+},onSuccess:function(){
+this.session.sendRestart();
+}});
+dojo.declare("dojox.xmpp.sasl.SunWebClientAuth",dojox.xmpp.sasl._Base,{mechanism:"SUN-COMMS-CLIENT-PROXY-AUTH"});
+dojo.declare("dojox.xmpp.sasl.Plain",dojox.xmpp.sasl._Base,{mechanism:"PLAIN",closeAuthTag:false,appendToAuth:function(_5){
+var id=this.session.jid;
+var _6=this.session.jid.indexOf("@");
+if(_6!=-1){
+id=this.session.jid.substring(0,_6);
+}
+var _7=this.session.jid+"\x00"+id+"\x00"+this.session.password;
+_7=dojox.xmpp.util.Base64.encode(_7);
+_5.append(_7);
+_5.append("</auth>");
+delete this.session.password;
+}});
+dojo.declare("dojox.xmpp.sasl.DigestMD5",dojox.xmpp.sasl._Base,{mechanism:"DIGEST-MD5",onFirstChallenge:function(_8){
+var _9=dojox.encoding.digests;
+var _a=dojox.encoding.digests.outputTypes;
+var _b=function(n){
+return _9.MD5(n,_a.Hex);
+};
+var H=function(s){
+return _9.MD5(s,_a.String);
+};
+var _c=dojox.xmpp.util.Base64.decode(_8.firstChild.nodeValue);
+var ch={realm:"",nonce:"",qop:"auth",maxbuf:65536};
+_c.replace(/([a-z]+)=([^,]+)/g,function(t,k,v){
+v=v.replace(/^"(.+)"$/,"$1");
+ch[k]=v;
+});
+var _d="";
+switch(ch.qop){
+case "auth-int":
+case "auth-conf":
+_d=":00000000000000000000000000000000";
+case "auth":
+break;
+default:
+return false;
+}
+var _e=_9.MD5(Math.random()*1234567890,_a.Hex);
+var _f="xmpp/"+this.session.domain;
+var _10=this.session.jid;
+var _11=this.session.jid.indexOf("@");
+if(_11!=-1){
+_10=this.session.jid.substring(0,_11);
+}
+_10=dojox.xmpp.util.encodeJid(_10);
+var A1=new dojox.string.Builder();
+A1.append(H(_10+":"+ch.realm+":"+this.session.password),":",ch.nonce+":"+_e);
+delete this.session.password;
+var _12=":"+_f+_d;
+var A2="AUTHENTICATE"+_12;
+var _13=new dojox.string.Builder();
+_13.append(_b(A1.toString()),":",ch.nonce,":00000001:",_e,":",ch.qop,":");
+var ret=new dojox.string.Builder();
+ret.append("username=\"",_10,"\",","realm=\"",ch.realm,"\",","nonce=",ch.nonce,",","cnonce=\"",_e,"\",","nc=\"00000001\",qop=\"",ch.qop,"\",digest-uri=\"",_f,"\",","response=\"",_b(_13.toString()+_b(A2)),"\",charset=\"utf-8\"");
+var _14=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},false));
+_14.append(dojox.xmpp.util.Base64.encode(ret.toString()));
+_14.append("</response>");
+this.rspauth=_b(_13.toString()+_b(_12));
+this.session.dispatchPacket(_14.toString());
+},onSecondChallenge:function(msg){
+var _15=dojox.xmpp.util.Base64.decode(msg.firstChild.nodeValue);
+if(this.rspauth==_15.substring(8)){
+var _16=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},true));
+this.session.dispatchPacket(_16.toString());
+}else{
+}
+}});
+dojox.xmpp.sasl.registry=new dojo.AdapterRegistry();
+dojox.xmpp.sasl.registry.register("SUN-COMMS-CLIENT-PROXY-AUTH",function(_17){
+return _17=="SUN-COMMS-CLIENT-PROXY-AUTH";
+},function(_18,_19){
+return new dojox.xmpp.sasl.SunWebClientAuth(_19);
+});
+dojox.xmpp.sasl.registry.register("DIGEST-MD5",function(_1a){
+return _1a=="DIGEST-MD5";
+},function(_1b,_1c){
+return new dojox.xmpp.sasl.DigestMD5(_1c);
+});
+dojox.xmpp.sasl.registry.register("PLAIN",function(_1d){
+return _1d=="PLAIN";
+},function(_1e,_1f){
+return new dojox.xmpp.sasl.Plain(_1f);
+});
+}
diff --git a/js/dojo/dojox/xmpp/util.js b/js/dojo/dojox/xmpp/util.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/util.js
@@ -0,0 +1,136 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.util"]){
+dojo._hasResource["dojox.xmpp.util"]=true;
+dojo.provide("dojox.xmpp.util");
+dojo.require("dojox.string.Builder");
+dojo.require("dojox.encoding.base64");
+dojox.xmpp.util.xmlEncode=function(_1){
+if(_1){
+_1=_1.replace("&","&amp;").replace(">","&gt;").replace("<","&lt;").replace("'","&apos;").replace("\"","&quot;");
+}
+return _1;
+};
+dojox.xmpp.util.encodeJid=function(_2){
+var _3=new dojox.string.Builder();
+for(var i=0;i<_2.length;i++){
+var ch=_2.charAt(i);
+var _4=ch;
+switch(ch){
+case " ":
+_4="\\20";
+break;
+case "\"":
+_4="\\22";
+break;
+case "#":
+_4="\\23";
+break;
+case "&":
+_4="\\26";
+break;
+case "'":
+_4="\\27";
+break;
+case "/":
+_4="\\2f";
+break;
+case ":":
+_4="\\3a";
+break;
+case "<":
+_4="\\3c";
+break;
+case ">":
+_4="\\3e";
+break;
+}
+_3.append(_4);
+}
+return _3.toString();
+};
+dojox.xmpp.util.decodeJid=function(_5){
+_5=_5.replace(/\\([23][02367acef])/g,function(_6){
+switch(_6){
+case "\\20":
+return " ";
+case "\\22":
+return "\"";
+case "\\23":
+return "#";
+case "\\26":
+return "&";
+case "\\27":
+return "'";
+case "\\2f":
+return "/";
+case "\\3a":
+return ":";
+case "\\3c":
+return "<";
+case "\\3e":
+return ">";
+}
+return "ARG";
+});
+return _5;
+};
+dojox.xmpp.util.createElement=function(_7,_8,_9){
+var _a=new dojox.string.Builder("<");
+_a.append(_7+" ");
+for(var _b in _8){
+_a.append(_b+"=\"");
+_a.append(_8[_b]);
+_a.append("\" ");
+}
+if(_9){
+_a.append("/>");
+}else{
+_a.append(">");
+}
+return _a.toString();
+};
+dojox.xmpp.util.stripHtml=function(_c){
+var re=/<[^>]*?>/gi;
+for(var i=0;i<arguments.length;i++){
+}
+return _c.replace(re,"");
+};
+dojox.xmpp.util.decodeHtmlEntities=function(_d){
+var ta=dojo.doc.createElement("textarea");
+ta.innerHTML=_d.replace(/</g,"&lt;").replace(/>/g,"&gt;");
+return ta.value;
+};
+dojox.xmpp.util.htmlToPlain=function(_e){
+_e=dojox.xmpp.util.decodeHtmlEntities(_e);
+_e=_e.replace(/<br\s*[i\/]{0,1}>/gi,"\n");
+_e=dojox.xmpp.util.stripHtml(_e);
+return _e;
+};
+dojox.xmpp.util.Base64={};
+dojox.xmpp.util.Base64.encode=function(_f){
+var s2b=function(s){
+var b=[];
+for(var i=0;i<s.length;++i){
+b.push(s.charCodeAt(i));
+}
+return b;
+};
+return dojox.encoding.base64.encode(s2b(_f));
+};
+dojox.xmpp.util.Base64.decode=function(_10){
+var b2s=function(b){
+var s=[];
+dojo.forEach(b,function(c){
+s.push(String.fromCharCode(c));
+});
+return s.join("");
+};
+return b2s(dojox.encoding.base64.decode(_10));
+};
+}
diff --git a/js/dojo/dojox/xmpp/widget/ChatSession.js b/js/dojo/dojox/xmpp/widget/ChatSession.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/widget/ChatSession.js
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.widget.ChatSession"]){
+dojo._hasResource["dojox.xmpp.widget.ChatSession"]=true;
+dojo.provide("dojox.xmpp.widget.ChatSession");
+dojo.declare("dojox.xmpp.widget.ChatSession",[dijit.layout.LayoutContainer,dijit._Templated],{templateString:dojo.cache("dojox.xmpp.widget","templates/ChatSession.html","<div>\n<div dojoAttachPoint=\"messages\" dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"client\" style=\"overflow:auto\">\n</div>\n<div dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"bottom\" style=\"border-top: 2px solid #333333; height: 35px;\"><input dojoAttachPoint=\"chatInput\" dojoAttachEvent=\"onkeypress: onKeyPress\" style=\"width: 100%;height: 35px;\" /></div>\n</div>\n"),enableSubWidgets:true,widgetsInTemplate:true,widgetType:"ChatSession",chatWith:null,instance:null,postCreate:function(){
+},displayMessage:function(_1,_2){
+if(_1){
+var _3=_1.from?this.chatWith:"me";
+this.messages.domNode.innerHTML+="<b>"+_3+":</b> "+_1.body+"<br/>";
+this.goToLastMessage();
+}
+},goToLastMessage:function(){
+this.messages.domNode.scrollTop=this.messages.domNode.scrollHeight;
+},onKeyPress:function(e){
+var _4=e.keyCode||e.charCode;
+if((_4==dojo.keys.ENTER)&&(this.chatInput.value!="")){
+this.instance.sendMessage({body:this.chatInput.value});
+this.displayMessage({body:this.chatInput.value},"out");
+this.chatInput.value="";
+}
+}});
+}
diff --git a/js/dojo/dojox/xmpp/widget/templates/ChatSession.html b/js/dojo/dojox/xmpp/widget/templates/ChatSession.html
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/widget/templates/ChatSession.html
@@ -0,0 +1,5 @@
+<div>
+<div dojoAttachPoint="messages" dojoType="dijit.layout.ContentPane" layoutAlign="client" style="overflow:auto">
+</div>
+<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="border-top: 2px solid #333333; height: 35px;"><input dojoAttachPoint="chatInput" dojoAttachEvent="onkeypress: onKeyPress" style="width: 100%;height: 35px;" /></div>
+</div>
\ No newline at end of file
diff --git a/js/dojo/dojox/xmpp/xmppSession.js b/js/dojo/dojox/xmpp/xmppSession.js
new file mode 100644
--- /dev/null
+++ b/js/dojo/dojox/xmpp/xmppSession.js
@@ -0,0 +1,554 @@
+/*
+ Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.xmppSession"]){
+dojo._hasResource["dojox.xmpp.xmppSession"]=true;
+dojo.provide("dojox.xmpp.xmppSession");
+dojo.require("dojox.xmpp.TransportSession");
+dojo.require("dojox.xmpp.RosterService");
+dojo.require("dojox.xmpp.PresenceService");
+dojo.require("dojox.xmpp.UserService");
+dojo.require("dojox.xmpp.ChatService");
+dojo.require("dojox.xmpp.sasl");
+dojox.xmpp.xmpp={STREAM_NS:"http://etherx.jabber.org/streams",CLIENT_NS:"jabber:client",STANZA_NS:"urn:ietf:params:xml:ns:xmpp-stanzas",SASL_NS:"urn:ietf:params:xml:ns:xmpp-sasl",BIND_NS:"urn:ietf:params:xml:ns:xmpp-bind",SESSION_NS:"urn:ietf:params:xml:ns:xmpp-session",BODY_NS:"http://jabber.org/protocol/httpbind",XHTML_BODY_NS:"http://www.w3.org/1999/xhtml",XHTML_IM_NS:"http://jabber.org/protocol/xhtml-im",INACTIVE:"Inactive",CONNECTED:"Connected",ACTIVE:"Active",TERMINATE:"Terminate",LOGIN_FAILURE:"LoginFailure",INVALID_ID:-1,NO_ID:0,error:{BAD_REQUEST:"bad-request",CONFLICT:"conflict",FEATURE_NOT_IMPLEMENTED:"feature-not-implemented",FORBIDDEN:"forbidden",GONE:"gone",INTERNAL_SERVER_ERROR:"internal-server-error",ITEM_NOT_FOUND:"item-not-found",ID_MALFORMED:"jid-malformed",NOT_ACCEPTABLE:"not-acceptable",NOT_ALLOWED:"not-allowed",NOT_AUTHORIZED:"not-authorized",SERVICE_UNAVAILABLE:"service-unavailable",SUBSCRIPTION_REQUIRED:"subscription-required",UNEXPECTED_REQUEST:"unexpected-request"}};
+dojox.xmpp.xmppSession=function(_1){
+this.roster=[];
+this.chatRegister=[];
+this._iqId=Math.round(Math.random()*1000000000);
+if(_1&&dojo.isObject(_1)){
+dojo.mixin(this,_1);
+}
+this.session=new dojox.xmpp.TransportSession(_1);
+dojo.connect(this.session,"onReady",this,"onTransportReady");
+dojo.connect(this.session,"onTerminate",this,"onTransportTerminate");
+dojo.connect(this.session,"onProcessProtocolResponse",this,"processProtocolResponse");
+};
+dojo.extend(dojox.xmpp.xmppSession,{roster:[],chatRegister:[],_iqId:0,open:function(_2,_3,_4){
+if(!_2){
+throw new Error("User id cannot be null");
+}else{
+this.jid=_2;
+if(_2.indexOf("@")==-1){
+this.jid=this.jid+"@"+this.domain;
+}
+}
+if(_3){
+this.password=_3;
+}
+if(_4){
+this.resource=_4;
+}
+this.session.open();
+},close:function(){
+this.state=dojox.xmpp.xmpp.TERMINATE;
+this.session.close(dojox.xmpp.util.createElement("presence",{type:"unavailable",xmlns:dojox.xmpp.xmpp.CLIENT_NS},true));
+},processProtocolResponse:function(_5){
+var _6=_5.nodeName;
+var _7=_6.indexOf(":");
+if(_7>0){
+_6=_6.substring(_7+1);
+}
+switch(_6){
+case "iq":
+case "presence":
+case "message":
+case "features":
+this[_6+"Handler"](_5);
+break;
+default:
+if(_5.getAttribute("xmlns")==dojox.xmpp.xmpp.SASL_NS){
+this.saslHandler(_5);
+}
+}
+},messageHandler:function(_8){
+switch(_8.getAttribute("type")){
+case "chat":
+this.chatHandler(_8);
+break;
+case "normal":
+default:
+this.simpleMessageHandler(_8);
+}
+},iqHandler:function(_9){
+if(_9.getAttribute("type")=="set"){
+this.iqSetHandler(_9);
+return;
+}else{
+if(_9.getAttribute("type")=="get"){
+return;
+}
+}
+},presenceHandler:function(_a){
+switch(_a.getAttribute("type")){
+case "subscribe":
+this.presenceSubscriptionRequest(_a.getAttribute("from"));
+break;
+case "subscribed":
+case "unsubscribed":
+break;
+case "error":
+this.processXmppError(_a);
+break;
+default:
+this.presenceUpdate(_a);
+break;
+}
+},featuresHandler:function(_b){
+var _c=[];
+var _d=false;
+var _e=false;
+if(_b.hasChildNodes()){
+for(var i=0;i<_b.childNodes.length;i++){
+var n=_b.childNodes[i];
+switch(n.nodeName){
+case "mechanisms":
+for(var x=0;x<n.childNodes.length;x++){
+_c.push(n.childNodes[x].firstChild.nodeValue);
+}
+break;
+case "bind":
+_d=true;
+break;
+case "session":
+_e=true;
+}
+}
+}
+if(this.state==dojox.xmpp.xmpp.CONNECTED){
+if(!this.auth){
+for(var i=0;i<_c.length;i++){
+try{
+this.auth=dojox.xmpp.sasl.registry.match(_c[i],this);
+break;
+}
+catch(e){
+console.warn("No suitable auth mechanism found for: ",_c[i]);
+}
+}
+}else{
+if(_d){
+this.bindResource(_e);
+}
+}
+}
+},saslHandler:function(_f){
+if(_f.nodeName=="success"){
+this.auth.onSuccess();
+return;
+}
+if(_f.nodeName=="challenge"){
+this.auth.onChallenge(_f);
+return;
+}
+if(_f.hasChildNodes()){
+this.onLoginFailure(_f.firstChild.nodeName);
+this.session.setState("Terminate",_f.firstChild.nodeName);
+}
+},sendRestart:function(){
+this.session._sendRestart();
+},chatHandler:function(msg){
+var _10={from:msg.getAttribute("from"),to:msg.getAttribute("to")};
+var _11=null;
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+if(n.hasChildNodes()){
+switch(n.nodeName){
+case "thread":
+_10.chatid=n.firstChild.nodeValue;
+break;
+case "body":
+if(!n.getAttribute("xmlns")||(n.getAttribute("xmlns")=="")){
+_10.body=n.firstChild.nodeValue;
+}
+break;
+case "subject":
+_10.subject=n.firstChild.nodeValue;
+case "html":
+if(n.getAttribute("xmlns")==dojox.xmpp.xmpp.XHTML_IM_NS){
+_10.xhtml=n.getElementsByTagName("body")[0];
+}
+break;
+case "x":
+break;
+default:
+}
+}
+}
+var _12=-1;
+if(_10.chatid){
+for(var i=0;i<this.chatRegister.length;i++){
+var ci=this.chatRegister[i];
+if(ci&&ci.chatid==_10.chatid){
+_12=i;
+break;
+}
+}
+}else{
+for(var i=0;i<this.chatRegister.length;i++){
+var ci=this.chatRegister[i];
+if(ci){
+if(ci.uid==this.getBareJid(_10.from)){
+_12=i;
+}
+}
+}
+}
+if(_12>-1&&_11){
+var _13=this.chatRegister[_12];
+_13.setState(_11);
+if(_13.firstMessage){
+if(_11==dojox.xmpp.chat.ACTIVE_STATE){
+_13.useChatState=(_11!=null)?true:false;
+_13.firstMessage=false;
+}
+}
+}
+if((!_10.body||_10.body=="")&&!_10.xhtml){
+return;
+}
+if(_12>-1){
+var _13=this.chatRegister[_12];
+_13.recieveMessage(_10);
+}else{
+var _14=new dojox.xmpp.ChatService();
+_14.uid=this.getBareJid(_10.from);
+_14.chatid=_10.chatid;
+_14.firstMessage=true;
+if(!_11||_11!=dojox.xmpp.chat.ACTIVE_STATE){
+this.useChatState=false;
+}
+this.registerChatInstance(_14,_10);
+}
+},simpleMessageHandler:function(msg){
+},registerChatInstance:function(_15,_16){
+_15.setSession(this);
+this.chatRegister.push(_15);
+this.onRegisterChatInstance(_15,_16);
+_15.recieveMessage(_16,true);
+},iqSetHandler:function(msg){
+if(msg.hasChildNodes()){
+var fn=msg.firstChild;
+switch(fn.nodeName){
+case "query":
+if(fn.getAttribute("xmlns")=="jabber:iq:roster"){
+this.rosterSetHandler(fn);
+this.sendIqResult(msg.getAttribute("id"),msg.getAttribute("from"));
+}
+break;
+default:
+break;
+}
+}
+},sendIqResult:function(_17,to){
+var req={id:_17,to:to||this.domain,type:"result",from:this.jid+"/"+this.resource};
+this.dispatchPacket(dojox.xmpp.util.createElement("iq",req,true));
+},rosterSetHandler:function(_18){
+for(var i=0;i<_18.childNodes.length;i++){
+var n=_18.childNodes[i];
+if(n.nodeName=="item"){
+var _19=false;
+var _1a=-1;
+var _1b=null;
+var _1c=null;
+for(var x=0;x<this.roster.length;x++){
+var r=this.roster[x];
+if(n.getAttribute("jid")==r.jid){
+_19=true;
+if(n.getAttribute("subscription")=="remove"){
+_1b={id:r.jid,name:r.name,groups:[]};
+for(var y=0;y<r.groups.length;y++){
+_1b.groups.push(r.groups[y]);
+}
+this.roster.splice(x,1);
+_1a=dojox.xmpp.roster.REMOVED;
+}else{
+_1c=dojo.clone(r);
+var _1d=n.getAttribute("name");
+if(_1d){
+this.roster[x].name=_1d;
+}
+r.groups=[];
+if(n.getAttribute("subscription")){
+r.status=n.getAttribute("subscription");
+}
+r.substatus=dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE;
+if(n.getAttribute("ask")=="subscribe"){
+r.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING;
+}
+for(var y=0;y<n.childNodes.length;y++){
+var _1e=n.childNodes[y];
+if((_1e.nodeName=="group")&&(_1e.hasChildNodes())){
+var _1f=_1e.firstChild.nodeValue;
+r.groups.push(_1f);
+}
+}
+_1b=r;
+_1a=dojox.xmpp.roster.CHANGED;
+}
+break;
+}
+}
+if(!_19&&(n.getAttribute("subscription")!="remove")){
+r=this.createRosterEntry(n);
+_1b=r;
+_1a=dojox.xmpp.roster.ADDED;
+}
+switch(_1a){
+case dojox.xmpp.roster.ADDED:
+this.onRosterAdded(_1b);
+break;
+case dojox.xmpp.roster.REMOVED:
+this.onRosterRemoved(_1b);
+break;
+case dojox.xmpp.roster.CHANGED:
+this.onRosterChanged(_1b,_1c);
+break;
+}
+}
+}
+},presenceUpdate:function(msg){
+if(msg.getAttribute("to")){
+var jid=this.getBareJid(msg.getAttribute("to"));
+if(jid!=this.jid){
+return;
+}
+}
+var _20=this.getResourceFromJid(msg.getAttribute("from"));
+var p={from:this.getBareJid(msg.getAttribute("from")),resource:_20,show:dojox.xmpp.presence.STATUS_ONLINE,priority:5,hasAvatar:false};
+if(msg.getAttribute("type")=="unavailable"){
+p.show=dojox.xmpp.presence.STATUS_OFFLINE;
+}
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+if(n.hasChildNodes()){
+switch(n.nodeName){
+case "status":
+case "show":
+p[n.nodeName]=n.firstChild.nodeValue;
+break;
+case "status":
+p.priority=parseInt(n.firstChild.nodeValue);
+break;
+case "x":
+if(n.firstChild&&n.firstChild.firstChild&&n.firstChild.firstChild.nodeValue!=""){
+p.avatarHash=n.firstChild.firstChild.nodeValue;
+p.hasAvatar=true;
+}
+break;
+}
+}
+}
+this.onPresenceUpdate(p);
+},retrieveRoster:function(){
+var _21={id:this.getNextIqId(),from:this.jid+"/"+this.resource,type:"get"};
+var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_21,false));
+req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},true));
+req.append("</iq>");
+var def=this.dispatchPacket(req,"iq",_21.id);
+def.addCallback(this,"onRetrieveRoster");
+},getRosterIndex:function(jid){
+if(jid.indexOf("@")==-1){
+jid+="@"+this.domain;
+}
+for(var i=0;i<this.roster.length;i++){
+if(jid==this.roster[i].jid){
+return i;
+}
+}
+return -1;
+},createRosterEntry:function(_22){
+var re={name:_22.getAttribute("name"),jid:_22.getAttribute("jid"),groups:[],status:dojox.xmpp.presence.SUBSCRIPTION_NONE,substatus:dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE};
+if(!re.name){
+re.name=re.id;
+}
+for(var i=0;i<_22.childNodes.length;i++){
+var n=_22.childNodes[i];
+if(n.nodeName=="group"&&n.hasChildNodes()){
+re.groups.push(n.firstChild.nodeValue);
+}
+}
+if(_22.getAttribute("subscription")){
+re.status=_22.getAttribute("subscription");
+}
+if(_22.getAttribute("ask")=="subscribe"){
+re.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING;
+}
+return re;
+},bindResource:function(_23){
+var _24={id:this.getNextIqId(),type:"set"};
+var _25=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_24,false));
+_25.append(dojox.xmpp.util.createElement("bind",{xmlns:dojox.xmpp.xmpp.BIND_NS},false));
+if(this.resource){
+_25.append(dojox.xmpp.util.createElement("resource"));
+_25.append(this.resource);
+_25.append("</resource>");
+}
+_25.append("</bind></iq>");
+var def=this.dispatchPacket(_25,"iq",_24.id);
+def.addCallback(this,function(msg){
+this.onBindResource(msg,_23);
+return msg;
+});
+},getNextIqId:function(){
+return "im_"+this._iqId++;
+},presenceSubscriptionRequest:function(msg){
+this.onSubscriptionRequest(msg);
+},dispatchPacket:function(msg,_26,_27){
+if(this.state!="Terminate"){
+return this.session.dispatchPacket(msg,_26,_27);
+}else{
+}
+},setState:function(_28,_29){
+if(this.state!=_28){
+if(this["on"+_28]){
+this["on"+_28](_28,this.state,_29);
+}
+this.state=_28;
+}
+},search:function(_2a,_2b,_2c){
+var req={id:this.getNextIqId(),"xml:lang":this.lang,type:"set",from:this.jid+"/"+this.resource,to:_2b};
+var _2d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",req,false));
+_2d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:search"},false));
+_2d.append(dojox.xmpp.util.createElement(_2c,{},false));
+_2d.append(_2a);
+_2d.append("</").append(_2c).append(">");
+_2d.append("</query></iq>");
+var def=this.dispatchPacket(_2d.toString,"iq",req.id);
+def.addCallback(this,"_onSearchResults");
+},_onSearchResults:function(msg){
+if((msg.getAttribute("type")=="result")&&(msg.hasChildNodes())){
+this.onSearchResults([]);
+}
+},onLogin:function(){
+this.retrieveRoster();
+},onLoginFailure:function(msg){
+},onBindResource:function(msg,_2e){
+if(msg.getAttribute("type")=="result"){
+if((msg.hasChildNodes())&&(msg.firstChild.nodeName=="bind")){
+var _2f=msg.firstChild;
+if((_2f.hasChildNodes())&&(_2f.firstChild.nodeName=="jid")){
+if(_2f.firstChild.hasChildNodes()){
+var _30=_2f.firstChild.firstChild.nodeValue;
+this.jid=this.getBareJid(_30);
+this.resource=this.getResourceFromJid(_30);
+}
+}
+if(_2e){
+var _31={id:this.getNextIqId(),type:"set"};
+var _32=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_31,false));
+_32.append(dojox.xmpp.util.createElement("session",{xmlns:dojox.xmpp.xmpp.SESSION_NS},true));
+_32.append("</iq>");
+var def=this.dispatchPacket(_32,"iq",_31.id);
+def.addCallback(this,"onBindSession");
+return;
+}
+}else{
+}
+this.onLogin();
+}else{
+if(msg.getAttribute("type")=="error"){
+var err=this.processXmppError(msg);
+this.onLoginFailure(err);
+}
+}
+},onBindSession:function(msg){
+if(msg.getAttribute("type")=="error"){
+var err=this.processXmppError(msg);
+this.onLoginFailure(err);
+}else{
+this.onLogin();
+}
+},onSearchResults:function(_33){
+},onRetrieveRoster:function(msg){
+if((msg.getAttribute("type")=="result")&&msg.hasChildNodes()){
+var _34=msg.getElementsByTagName("query")[0];
+if(_34.getAttribute("xmlns")=="jabber:iq:roster"){
+for(var i=0;i<_34.childNodes.length;i++){
+if(_34.childNodes[i].nodeName=="item"){
+this.roster[i]=this.createRosterEntry(_34.childNodes[i]);
+}
+}
+}
+}else{
+if(msg.getAttribute("type")=="error"){
+}
+}
+this.setState(dojox.xmpp.xmpp.ACTIVE);
+this.onRosterUpdated();
+return msg;
+},onRosterUpdated:function(){
+},onSubscriptionRequest:function(req){
+},onPresenceUpdate:function(p){
+},onTransportReady:function(){
+this.setState(dojox.xmpp.xmpp.CONNECTED);
+this.rosterService=new dojox.xmpp.RosterService(this);
+this.presenceService=new dojox.xmpp.PresenceService(this);
+this.userService=new dojox.xmpp.UserService(this);
+},onTransportTerminate:function(_35,_36,_37){
+this.setState(dojox.xmpp.xmpp.TERMINATE,_37);
+},onConnected:function(){
+},onTerminate:function(_38,_39,_3a){
+},onActive:function(){
+},onRegisterChatInstance:function(_3b,_3c){
+},onRosterAdded:function(ri){
+},onRosterRemoved:function(ri){
+},onRosterChanged:function(ri,_3d){
+},processXmppError:function(msg){
+var err={stanzaType:msg.nodeName,id:msg.getAttribute("id")};
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+switch(n.nodeName){
+case "error":
+err.errorType=n.getAttribute("type");
+for(var x=0;x<n.childNodes.length;x++){
+var cn=n.childNodes[x];
+if((cn.nodeName=="text")&&(cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&cn.hasChildNodes()){
+err.message=cn.firstChild.nodeValue;
+}else{
+if((cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&(!cn.hasChildNodes())){
+err.condition=cn.nodeName;
+}
+}
+}
+break;
+default:
+break;
+}
+}
+return err;
+},sendStanzaError:function(_3e,to,id,_3f,_40,_41){
+var req={type:"error"};
+if(to){
+req.to=to;
+}
+if(id){
+req.id=id;
+}
+var _42=new dojox.string.Builder(dojox.xmpp.util.createElement(_3e,req,false));
+_42.append(dojox.xmpp.util.createElement("error",{type:_3f},false));
+_42.append(dojox.xmpp.util.createElement("condition",{xmlns:dojox.xmpp.xmpp.STANZA_NS},true));
+if(_41){
+var _43={xmlns:dojox.xmpp.xmpp.STANZA_NS,"xml:lang":this.lang};
+_42.append(dojox.xmpp.util.createElement("text",_43,false));
+_42.append(_41).append("</text>");
+}
+_42.append("</error></").append(_3e).append(">");
+this.dispatchPacket(_42.toString());
+},getBareJid:function(jid){
+var i=jid.indexOf("/");
+if(i!=-1){
+return jid.substring(0,i);
+}
+return jid;
+},getResourceFromJid:function(jid){
+var i=jid.indexOf("/");
+if(i!=-1){
+return jid.substring((i+1),jid.length);
+}
+return "";
+}});
+}

File Metadata

Mime Type
application/octet-stream
Expires
Wed, Jun 25, 17:52 (5 d, 13 h ago)
Storage Engine
chunks
Storage Format
Chunks
Storage Handle
8VG6tjDtBHqO
Default Alt Text
(5 MB)

Event Timeline